From 344d05bd35ebd7af329772d31868bdfdb05665b8 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 18 五月 2026 09:23:44 +0800
Subject: [PATCH] 浪潮——生产 1.样式修改

---
 src/views/login.vue |  581 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 397 insertions(+), 184 deletions(-)

diff --git a/src/views/login.vue b/src/views/login.vue
index ecb9657..d114260 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -1,63 +1,123 @@
 <template>
-  <div class="login-page">
-    <div class="login-card">
-      <div class="card-header">
-        <div class="logo">
-          <svg-icon icon-class="user" />
+  <div class="login-wrapper">
+    <!-- 椤堕儴瑁呴グ鏉� -->
+    <div class="top-bar"></div>
+    
+    <!-- 涓诲唴瀹瑰尯 -->
+    <div class="main-content">
+      <!-- 宸︿晶锛氱敓浜у満鏅浘 + 鏂囧瓧 -->
+      <div class="left-section">
+        <div class="scene-container">
+          <div class="factory-icon">
+            <el-icon :size="80" color="var(--el-color-primary)"><FirstAidKit /></el-icon>
+          </div>
+          <div class="production-flow">
+            <div class="flow-item">
+              <div class="flow-dot"></div>
+              <span>鍘熸枡鍏ュ簱</span>
+            </div>
+            <div class="flow-line"></div>
+            <div class="flow-item">
+              <div class="flow-dot"></div>
+              <span>鐢熶骇鍔犲伐</span>
+            </div>
+            <div class="flow-line"></div>
+            <div class="flow-item">
+              <div class="flow-dot"></div>
+              <span>璐ㄩ噺妫�娴�</span>
+            </div>
+            <div class="flow-line"></div>
+            <div class="flow-item">
+              <div class="flow-dot"></div>
+              <span>鎴愬搧鍑哄簱</span>
+            </div>
+          </div>
         </div>
-        <h1>瀹㈡埛鍏崇郴绠$悊绯荤粺</h1>
-        <p>楂樻晥绠$悊瀹㈡埛璧勬簮锛岄┍鍔ㄤ笟鍔″闀�</p>
+        <div class="slogan">
+          <h1>鏅鸿兘鐢熶骇绠$悊骞冲彴</h1>
+          <p>璁╃敓浜ф洿楂樻晥 路 璁╃鐞嗘洿鏅鸿兘</p>
+        </div>
       </div>
 
-      <el-form ref="loginRef" :model="loginForm" :rules="loginRules">
-        <el-form-item prop="username">
-          <el-input
-            v-model="loginForm.username"
-            type="text"
-            size="large"
-            auto-complete="off"
-            placeholder="璇疯緭鍏ヨ处鍙�"
-          >
-            <template #prefix><el-icon><User /></el-icon></template>
-          </el-input>
-        </el-form-item>
+      <!-- 鍙充晶锛氱櫥褰曞崱鐗� -->
+      <div class="right-section">
+        <div class="login-card">
+          <div class="card-decoration">
+            <div class="deco-line"></div>
+            <div class="deco-line"></div>
+          </div>
+          
+          <div class="login-title">
+            <div class="title-icon">
+              <el-icon :size="32" color="#fff"><UserFilled /></el-icon>
+            </div>
+            <div class="title-text">
+              <h2>璐﹀彿鐧诲綍</h2>
+              <span>Production Management System</span>
+            </div>
+          </div>
 
-        <el-form-item prop="password">
-          <el-input
-            v-model="loginForm.password"
-            type="password"
-            size="large"
-            auto-complete="off"
-            placeholder="璇疯緭鍏ュ瘑鐮�"
-            show-password
-            @keyup.enter="handleLogin"
-          >
-            <template #prefix><el-icon><Lock /></el-icon></template>
-          </el-input>
-        </el-form-item>
+          <el-form ref="loginRef" :model="loginForm" :rules="loginRules">
+            <el-form-item prop="username">
+              <div class="custom-input">
+                <span class="input-label">璐﹀彿</span>
+                <el-input
+                  v-model="loginForm.username"
+                  type="text"
+                  size="large"
+                  auto-complete="off"
+                  placeholder="璇疯緭鍏ョ櫥褰曡处鍙�"
+                >
+                  <template #prefix>
+                    <el-icon><Avatar /></el-icon>
+                  </template>
+                </el-input>
+              </div>
+            </el-form-item>
 
-        <div class="form-options">
-          <el-checkbox v-model="loginForm.rememberMe">璁颁綇瀵嗙爜</el-checkbox>
-          <router-link v-if="register" :to="'/register'">绔嬪嵆娉ㄥ唽</router-link>
+            <el-form-item prop="password">
+              <div class="custom-input">
+                <span class="input-label">瀵嗙爜</span>
+                <el-input
+                  v-model="loginForm.password"
+                  type="password"
+                  size="large"
+                  auto-complete="off"
+                  placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�"
+                  show-password
+                  @keyup.enter="handleLogin"
+                >
+                  <template #prefix>
+                    <el-icon><Key /></el-icon>
+                  </template>
+                </el-input>
+              </div>
+            </el-form-item>
+
+            <div class="login-options">
+              <el-checkbox v-model="loginForm.rememberMe">
+                <span class="remember-text">璁颁綇鐧诲綍鐘舵��</span>
+              </el-checkbox>
+            </div>
+
+            <el-button
+              :loading="loading"
+              size="large"
+              type="primary"
+              class="submit-btn"
+              @click.prevent="handleLogin"
+            >
+              <el-icon v-if="!loading" class="btn-icon"><Right /></el-icon>
+              <span>{{ loading ? '鐧诲綍涓�...' : '绔嬪嵆鐧诲綍' }}</span>
+            </el-button>
+          </el-form>
         </div>
-
-        <el-button
-          :loading="loading"
-          size="large"
-          type="primary"
-          class="login-btn"
-          @click.prevent="handleLogin"
-        >
-          <span v-if="!loading">鐧� 褰�</span>
-          <span v-else>鐧诲綍涓�...</span>
-        </el-button>
-      </el-form>
+      </div>
     </div>
 
-    <div class="bg-pattern">
-      <div class="pattern-item"></div>
-      <div class="pattern-item"></div>
-      <div class="pattern-item"></div>
+    <!-- 搴曢儴瑁呴グ -->
+    <div class="bottom-decoration">
+      <div class="wave"></div>
     </div>
   </div>
 </template>
@@ -86,7 +146,6 @@
 
 const loading = ref(false)
 const captchaEnabled = ref(true)
-const register = ref(false)
 const redirect = ref(undefined)
 
 watch(
@@ -151,193 +210,347 @@
 </script>
 
 <style lang="scss" scoped>
-.login-page {
+.login-wrapper {
   min-height: 100vh;
+  background: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 100%);
+  position: relative;
+  overflow: hidden;
+  display: flex;
+  flex-direction: column;
+}
+
+// 椤堕儴瑁呴グ鏉�
+.top-bar {
+  height: 4px;
+  background: linear-gradient(90deg, var(--el-color-primary-dark-2) 0%, var(--el-color-primary) 50%, var(--el-color-primary-light-3) 100%);
+}
+
+// 涓诲唴瀹瑰尯
+.main-content {
+  flex: 1;
+  display: flex;
+  padding: 60px 80px;
+  gap: 80px;
+  align-items: center;
+  max-width: 1400px;
+  margin: 0 auto;
+  width: 100%;
+}
+
+// 宸︿晶鍖哄煙
+.left-section {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 50px;
+}
+
+.scene-container {
+  background: #fff;
+  border-radius: 24px;
+  padding: 50px;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
+}
+
+.factory-icon {
+  width: 140px;
+  height: 140px;
+  background: linear-gradient(135deg, var(--el-color-primary-light-9) 0%, var(--el-color-primary-light-8) 100%);
+  border-radius: 50%;
   display: flex;
   align-items: center;
   justify-content: center;
-  background: linear-gradient(135deg, var(--el-color-primary-light-9) 0%, var(--el-color-primary-light-8) 50%, var(--el-color-primary-light-9) 100%);
+  margin: 0 auto 40px;
+  border: 4px solid var(--el-color-primary-light-7);
+}
+
+.production-flow {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 8px;
+}
+
+.flow-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 8px;
+
+  .flow-dot {
+    width: 12px;
+    height: 12px;
+    background: var(--el-color-primary);
+    border-radius: 50%;
+    box-shadow: 0 0 0 4px var(--el-color-primary-light-8);
+  }
+
+  span {
+    font-size: 13px;
+    color: #64748b;
+    font-weight: 500;
+  }
+}
+
+.flow-line {
+  width: 40px;
+  height: 2px;
+  background: linear-gradient(90deg, var(--el-color-primary-light-5), var(--el-color-primary));
+}
+
+.slogan {
+  text-align: center;
+
+  h1 {
+    font-size: 36px;
+    font-weight: 700;
+    color: #1e293b;
+    margin: 0 0 12px;
+    letter-spacing: 2px;
+  }
+
+  p {
+    font-size: 16px;
+    color: #64748b;
+    margin: 0;
+    letter-spacing: 1px;
+  }
+}
+
+// 鍙充晶鍖哄煙
+.right-section {
+  width: 440px;
+}
+
+.login-card {
+  background: #fff;
+  border-radius: 20px;
+  padding: 40px;
+  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08);
   position: relative;
   overflow: hidden;
 }
 
-.bg-pattern {
+.card-decoration {
   position: absolute;
   top: 0;
-  left: 0;
   right: 0;
-  bottom: 0;
-  pointer-events: none;
+  width: 120px;
+  height: 120px;
 
-  .pattern-item {
+  .deco-line {
     position: absolute;
-    border-radius: 50%;
-    background: linear-gradient(135deg, var(--el-color-primary-light-7), var(--el-color-primary-light-9));
-  }
+    background: var(--el-color-primary-light-7);
+    border-radius: 2px;
 
-  .pattern-item:nth-child(1) {
-    width: 500px;
-    height: 500px;
-    top: -150px;
-    right: -100px;
-  }
+    &:nth-child(1) {
+      width: 80px;
+      height: 4px;
+      top: 30px;
+      right: -20px;
+      transform: rotate(-45deg);
+    }
 
-  .pattern-item:nth-child(2) {
-    width: 350px;
-    height: 350px;
-    bottom: -100px;
-    left: -80px;
-  }
-
-  .pattern-item:nth-child(3) {
-    width: 200px;
-    height: 200px;
-    top: 40%;
-    left: 15%;
-    background: linear-gradient(135deg, var(--el-color-primary-light-8), var(--el-color-primary-light-9));
+    &:nth-child(2) {
+      width: 50px;
+      height: 4px;
+      top: 50px;
+      right: -10px;
+      transform: rotate(-45deg);
+    }
   }
 }
 
-.login-card {
-  width: 420px;
-  padding: 48px 40px;
-  background: rgba(255, 255, 255, 0.95);
-  border-radius: 20px;
-  box-shadow: 
-    0 4px 6px -1px rgba(0, 0, 0, 0.05),
-    0 10px 15px -3px rgba(0, 0, 0, 0.08),
-    0 20px 25px -5px rgba(0, 0, 0, 0.05);
-  backdrop-filter: blur(10px);
-  position: relative;
-  z-index: 1;
-}
+.login-title {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  margin-bottom: 40px;
 
-.card-header {
-  text-align: center;
-  margin-bottom: 36px;
-
-  .logo {
-    width: 72px;
-    height: 72px;
-    margin: 0 auto 20px;
+  .title-icon {
+    width: 56px;
+    height: 56px;
     background: linear-gradient(135deg, var(--el-color-primary) 0%, var(--el-color-primary-light-3) 100%);
-    border-radius: 18px;
+    border-radius: 14px;
     display: flex;
     align-items: center;
     justify-content: center;
-    box-shadow: 0 8px 20px var(--el-color-primary-light-5);
+    box-shadow: 0 4px 12px var(--el-color-primary-light-5);
+  }
 
-    :deep(svg) {
-      width: 36px;
-      height: 36px;
-      color: #fff;
+  .title-text {
+    h2 {
+      font-size: 24px;
+      font-weight: 600;
+      color: #1e293b;
+      margin: 0 0 4px;
+    }
+
+    span {
+      font-size: 12px;
+      color: #94a3b8;
+      text-transform: uppercase;
+      letter-spacing: 1px;
+    }
+  }
+}
+
+.custom-input {
+  .input-label {
+    display: block;
+    font-size: 14px;
+    color: #475569;
+    margin-bottom: 8px;
+    font-weight: 500;
+  }
+
+  :deep(.el-input__wrapper) {
+    border-radius: 10px;
+    box-shadow: 0 0 0 1px #e2e8f0;
+    padding: 0 16px;
+    height: 50px;
+    transition: all 0.3s;
+
+    &:hover {
+      box-shadow: 0 0 0 1px var(--el-color-primary-light-5);
+    }
+
+    &:focus-within {
+      box-shadow: 0 0 0 2px var(--el-color-primary);
     }
   }
 
-  h1 {
-    font-size: 24px;
-    font-weight: 600;
-    color: #1f2937;
-    margin: 0 0 8px;
+  :deep(.el-input__inner) {
+    height: 50px;
+    font-size: 15px;
+    color: #334155;
+
+    &::placeholder {
+      color: #cbd5e1;
+    }
   }
 
-  p {
-    font-size: 14px;
-    color: #6b7280;
-    margin: 0;
+  :deep(.el-input__prefix) {
+    color: var(--el-color-primary);
+    font-size: 18px;
+    margin-right: 10px;
   }
 }
 
 :deep(.el-form-item) {
-  margin-bottom: 20px;
+  margin-bottom: 24px;
 }
 
-:deep(.el-input__wrapper) {
-  border-radius: 12px;
-  box-shadow: 0 0 0 1px #e5e7eb;
-  padding: 0 16px;
-  height: 48px;
-  transition: all 0.2s;
+.login-options {
+  margin: 8px 0 32px;
 
-  &:hover {
-    box-shadow: 0 0 0 1px var(--el-color-primary-light-5);
-  }
-
-  &:focus-within {
-    box-shadow: 0 0 0 2px var(--el-color-primary);
-  }
-}
-
-:deep(.el-input__inner) {
-  height: 48px;
-  font-size: 15px;
-  color: #374151;
-
-  &::placeholder {
-    color: #9ca3af;
-  }
-}
-
-:deep(.el-input__prefix) {
-  color: #9ca3af;
-  font-size: 18px;
-}
-
-.form-options {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  margin: 8px 0 24px;
-
-  :deep(.el-checkbox__label) {
-    color: #6b7280;
+  .remember-text {
     font-size: 14px;
+    color: #64748b;
   }
 
   :deep(.el-checkbox__input.is-checked .el-checkbox__inner) {
     background-color: var(--el-color-primary);
     border-color: var(--el-color-primary);
   }
+}
 
-  a {
-    color: var(--el-color-primary);
-    font-size: 14px;
-    font-weight: 500;
-    text-decoration: none;
-    transition: color 0.2s;
+.submit-btn {
+  width: 100%;
+  height: 52px;
+  border-radius: 10px;
+  font-size: 16px;
+  font-weight: 600;
+  background: linear-gradient(135deg, var(--el-color-primary) 0%, var(--el-color-primary-light-2) 100%);
+  border: none;
+  box-shadow: 0 4px 16px var(--el-color-primary-light-5);
+  transition: all 0.3s;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 8px;
 
-    &:hover {
-      color: var(--el-color-primary-light-3);
-    }
+  &:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 6px 20px var(--el-color-primary-light-4);
+  }
+
+  .btn-icon {
+    font-size: 18px;
   }
 }
 
-.login-btn {
-  width: 100%;
-  height: 48px;
-  border-radius: 12px;
-  font-size: 16px;
-  font-weight: 500;
-  background: linear-gradient(135deg, var(--el-color-primary) 0%, var(--el-color-primary-light-3) 100%);
-  border: none;
-  box-shadow: 0 4px 14px var(--el-color-primary-light-5);
-  transition: all 0.2s;
+.card-footer {
+  margin-top: 32px;
+  padding-top: 24px;
+  border-top: 1px solid #f1f5f9;
+  text-align: center;
 
-  &:hover {
-    transform: translateY(-1px);
-    box-shadow: 0 6px 20px var(--el-color-primary-light-4);
+  p {
+    color: #94a3b8;
+    font-size: 13px;
+    margin: 0;
+  }
+}
+
+// 搴曢儴瑁呴グ
+.bottom-decoration {
+  height: 80px;
+  position: relative;
+
+  .wave {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 60px;
+    background: linear-gradient(90deg, var(--el-color-primary-light-9) 0%, var(--el-color-primary-light-8) 100%);
+    clip-path: polygon(0 100%, 100% 100%, 100% 30%, 75% 60%, 50% 40%, 25% 70%, 0 50%);
+  }
+}
+
+// 鍝嶅簲寮�
+@media (max-width: 1100px) {
+  .main-content {
+    flex-direction: column;
+    padding: 40px;
+    gap: 40px;
+  }
+
+  .left-section {
+    order: 2;
+  }
+
+  .right-section {
+    width: 100%;
+    max-width: 440px;
+    order: 1;
+  }
+
+  .slogan {
+    display: none;
   }
 }
 
 @media (max-width: 480px) {
-  .login-card {
-    width: 90%;
-    padding: 36px 24px;
+  .main-content {
+    padding: 20px;
   }
 
-  .card-header {
-    h1 {
-      font-size: 20px;
+  .login-card {
+    padding: 30px 24px;
+  }
+
+  .scene-container {
+    padding: 30px 20px;
+  }
+
+  .production-flow {
+    flex-wrap: wrap;
+    gap: 16px;
+
+    .flow-line {
+      display: none;
     }
   }
 }

--
Gitblit v1.9.3