This commit is contained in:
2026-03-07 00:41:05 +08:00
parent a727453e95
commit 843e0d8665
3 changed files with 1066 additions and 1553 deletions
+5 -6
View File
@@ -5,15 +5,14 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gemold - 模具制造管理系统</title> <title>Gemold - 模具制造管理系统</title>
<link rel="stylesheet" href="/static/style.css"> <link rel="stylesheet" href="/static/style.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
</head> </head>
<body> <body>
<div id="app"> <div id="app">
<div class="loading-state" style="height: 100vh;"> <div class="loading-overlay">
<div class="spinner"></div> <div class="loading-content">
<span>加载中...</span> <div class="loading-spinner"></div>
<p style="margin-top: 16px; color: var(--text-secondary);">加载中...</p>
</div>
</div> </div>
</div> </div>
+1042 -1521
View File
File diff suppressed because it is too large Load Diff
+19 -26
View File
@@ -225,7 +225,7 @@ const App = {
<header class="app-header"> <header class="app-header">
<div class="header-content"> <div class="header-content">
<div class="logo" @click="router.push('/')"> <div class="logo" @click="router.push('/')">
<div class="logo-icon">◆</div> <div class="logo-icon">G</div>
<div> <div>
<div class="logo-text">Gemold</div> <div class="logo-text">Gemold</div>
<div class="logo-subtitle">模具制造管理系统</div> <div class="logo-subtitle">模具制造管理系统</div>
@@ -239,7 +239,6 @@ const App = {
:to="item.path" :to="item.path"
:class="['nav-item', { active: isActive(item.path) }]" :class="['nav-item', { active: isActive(item.path) }]"
> >
<span class="nav-icon">{{ item.icon }}</span>
{{ item.label }} {{ item.label }}
</router-link> </router-link>
</nav> </nav>
@@ -247,13 +246,13 @@ const App = {
<div class="user-section"> <div class="user-section">
<template v-if="appState.user"> <template v-if="appState.user">
<div class="user-info"> <div class="user-info">
<div class="user-avatar">{{ (appState.user.full_name || appState.user.username).charAt(0).toUpperCase() }}</div>
<span class="user-name">{{ appState.user.full_name || appState.user.username }}</span> <span class="user-name">{{ appState.user.full_name || appState.user.username }}</span>
<span v-if="appState.user.is_superuser" class="admin-badge">管理员</span>
</div> </div>
<button class="btn-logout" @click="handleLogout">退出</button> <button class="btn btn-secondary btn-sm" @click="handleLogout">退出</button>
</template> </template>
<template v-else> <template v-else>
<router-link to="/login" class="btn-login">登录</router-link> <router-link to="/login" class="btn btn-primary btn-sm">登录</router-link>
</template> </template>
</div> </div>
</div> </div>
@@ -266,14 +265,6 @@ const App = {
</transition> </transition>
</router-view> </router-view>
</main> </main>
<footer class="app-footer">
<div class="footer-content">
<span class="footer-item">Gemold v4.0.0</span>
<span class="footer-divider"></span>
<span class="footer-item">模具制造管理系统</span>
</div>
</footer>
</div> </div>
`, `,
}; };
@@ -333,44 +324,46 @@ const LoginView = {
return { state, handleSubmit }; return { state, handleSubmit };
}, },
template: ` template: `
<div class="auth-page"> <div class="login-container">
<div class="auth-card"> <div class="login-card">
<div class="auth-header"> <div class="login-header">
<div class="auth-logo">◆</div> <div class="login-logo">G</div>
<h1>登录</h1> <h1 class="login-title">欢迎回来</h1>
<p>登录到 Gemold 系统</p> <p class="login-subtitle">登录到 Gemold 系统</p>
</div> </div>
<form @submit.prevent="handleSubmit" class="auth-form"> <form @submit.prevent="handleSubmit" class="login-form">
<div class="form-group"> <div class="form-group">
<label>用户名</label> <label class="form-label">用户名</label>
<input <input
v-model="state.username" v-model="state.username"
type="text" type="text"
class="form-input"
placeholder="请输入用户名" placeholder="请输入用户名"
autocomplete="username" autocomplete="username"
/> />
</div> </div>
<div class="form-group"> <div class="form-group">
<label>密码</label> <label class="form-label">密码</label>
<input <input
v-model="state.password" v-model="state.password"
type="password" type="password"
class="form-input"
placeholder="请输入密码" placeholder="请输入密码"
autocomplete="current-password" autocomplete="current-password"
/> />
</div> </div>
<div v-if="state.error" class="error-message">{{ state.error }}</div> <div v-if="state.error" class="form-error">{{ state.error }}</div>
<button type="submit" class="btn-primary btn-full" :disabled="state.loading"> <button type="submit" class="btn btn-primary btn-lg w-full" :disabled="state.loading">
{{ state.loading ? '登录中...' : '登录' }} {{ state.loading ? '登录中...' : '登录' }}
</button> </button>
</form> </form>
<div class="auth-footer"> <div class="login-footer" style="margin-top: var(--space-6); text-align: center;">
<p class="auth-tip">如需开通账号,请联系管理员</p> <p style="font-size: var(--text-sm); color: var(--text-tertiary);">如需开通账号,请联系管理员</p>
</div> </div>
</div> </div>
</div> </div>