From 533353dbeb19b3fa45817e9f65874db4e2ce6f9e Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 15 九月 2026 13:15:40 +0800
Subject: [PATCH] feat(login): 移除企业微信登录选项并调整样式

---
 .gitignore                                |    1 
 src/views/login.vue                       |   65 ---------------
 src/assets/styles/tokens.scss             |   79 +++++++++++++++++++
 src/views/home/useCountUp.js              |   45 +++++++++++
 src/views/login/components/LoginBrand.vue |   12 +-
 5 files changed, 133 insertions(+), 69 deletions(-)

diff --git a/.gitignore b/.gitignore
index 78a752d..20a972d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,7 @@
 # Editor directories and files
 .idea
 .vscode
+.claude
 *.suo
 *.ntvs*
 *.njsproj
diff --git a/src/assets/styles/tokens.scss b/src/assets/styles/tokens.scss
new file mode 100644
index 0000000..2830da2
--- /dev/null
+++ b/src/assets/styles/tokens.scss
@@ -0,0 +1,79 @@
+// 鍏ㄥ眬璁捐浠ょ墝锛氶鑹层�佸渾瑙掋�侀槾褰便�侀棿璺濈粺涓�鏉ユ簮
+// 鐢ㄦ硶锛歷ar(--app-primary) 绛夛紱鏆楄壊妯″紡鎸� html.dark 鑷姩鐢熸晥
+:root {
+  // 鍝佺墝涓庤涔夎壊锛堝厠鍒朵娇鐢紝浠呯敤浜庡己璋冦�佺姸鎬侊級
+  --app-primary: #2c51d9;
+  --app-primary-hover: #4a6cf0;
+  --app-primary-soft: rgba(44, 81, 217, 0.08);
+  --app-success: #0f9960;
+  --app-success-soft: rgba(15, 153, 96, 0.1);
+  --app-warning: #d97706;
+  --app-warning-soft: rgba(217, 119, 6, 0.1);
+  --app-danger: #d54941;
+  --app-danger-soft: rgba(213, 73, 65, 0.1);
+  --app-info: #1377ef;
+  --app-info-soft: rgba(19, 119, 239, 0.1);
+
+  // 琛ㄩ潰涓庣嚎鏉�
+  --app-bg: #f4f6f9;
+  --app-surface: #ffffff;
+  --app-surface-hover: #f8fafc;
+  --app-border: #e8ecf1;
+  --app-divider: #f0f2f5;
+
+  // 鏂囧瓧
+  --app-text: #1d2129;
+  --app-text-secondary: #4e5969;
+  --app-text-tertiary: #86909c;
+  --app-text-inverse: #ffffff;
+
+  // 鍦嗚
+  --app-radius-sm: 6px;
+  --app-radius: 10px;
+  --app-radius-lg: 14px;
+
+  // 闃村奖锛堜綆楗卞拰銆佹祬锛�
+  --app-shadow: 0 1px 2px rgba(29, 33, 41, 0.04);
+  --app-shadow-md: 0 4px 16px rgba(29, 33, 41, 0.06);
+
+  // 甯冨眬
+  --app-gap: 16px;
+  --app-gap-lg: 20px;
+  --app-transition: 0.2s ease;
+}
+
+// 鏆楄壊妯″紡锛氫笌 element-plus dark 鍙橀噺鍗忓悓
+html.dark {
+  --app-primary-soft: rgba(74, 108, 240, 0.16);
+  --app-success-soft: rgba(15, 153, 96, 0.18);
+  --app-warning-soft: rgba(217, 119, 6, 0.18);
+  --app-danger-soft: rgba(213, 73, 65, 0.18);
+  --app-info-soft: rgba(19, 119, 239, 0.18);
+
+  --app-bg: #131720;
+  --app-surface: #1c212b;
+  --app-surface-hover: #232935;
+  --app-border: #2a3140;
+  --app-divider: #232935;
+
+  --app-text: #e8eaee;
+  --app-text-secondary: #a6adba;
+  --app-text-tertiary: #7b8494;
+
+  --app-shadow: none;
+  --app-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.35);
+}
+
+// 缁熶竴闈㈡澘鍗$墖
+.app-panel {
+  background: var(--app-surface);
+  border: 1px solid var(--app-border);
+  border-radius: var(--app-radius);
+  box-shadow: var(--app-shadow);
+}
+
+// 绛夊鏁板瓧锛岄伩鍏嶆暟鎹烦鍔�
+.app-num {
+  font-variant-numeric: tabular-nums;
+  font-feature-settings: 'tnum';
+}
diff --git a/src/views/home/useCountUp.js b/src/views/home/useCountUp.js
new file mode 100644
index 0000000..7be4aa7
--- /dev/null
+++ b/src/views/home/useCountUp.js
@@ -0,0 +1,45 @@
+import { ref, watch, onScopeDispose } from 'vue'
+
+const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
+
+// 鏁板瓧婊氬姩锛氬彧鍦ㄥ�煎彉鍖栨椂鍋氫竴娆� 500ms 缂撳姩锛屽皧閲嶇郴缁熷噺寮卞姩鏁堣缃�
+export function useCountUp(source, duration = 500) {
+  const display = ref(0)
+  let raf = 0
+
+  const run = (to) => {
+    const target = Number(to)
+    if (!isFinite(target)) {
+      display.value = 0
+      return
+    }
+    if (reduceMotion || target === display.value) {
+      display.value = target
+      return
+    }
+    cancelAnimationFrame(raf)
+    const from = Number(display.value) || 0
+    const start = performance.now()
+    const step = (now) => {
+      const p = Math.min((now - start) / duration, 1)
+      const eased = 1 - Math.pow(1 - p, 3)
+      display.value = from + (target - from) * eased
+      if (p < 1) raf = requestAnimationFrame(step)
+    }
+    raf = requestAnimationFrame(step)
+  }
+
+  watch(source, (v) => run(v), { immediate: true })
+  onScopeDispose(() => cancelAnimationFrame(raf))
+
+  return display
+}
+
+// 鍗冨垎浣嶆牸寮忓寲锛堜繚鐣欐暣鏁版垨灏忔暟锛�
+export function formatNum(n, digits) {
+  const num = Number(n || 0)
+  if (digits !== undefined) {
+    return num.toLocaleString('zh-CN', { minimumFractionDigits: digits, maximumFractionDigits: digits })
+  }
+  return num.toLocaleString('zh-CN')
+}
diff --git a/src/views/login.vue b/src/views/login.vue
index d6c9ef3..ac7bca5 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -57,21 +57,7 @@
           </el-button>
         </el-form>
 
-        <div class="login-card__others">
-          <div class="login-card__divider">
-            <span>鍏朵粬鐧诲綍鏂瑰紡</span>
-          </div>
-          <div class="login-card__wecom" @click="handleWecom">
-            <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
-              <path fill="#2C51D9" d="M12 3C7.6 3 4 5.9 4 9.5c0 2 1.1 3.8 2.9 5l-.7 2.1 2.4-1.2c1 .3 2.1.5 3.4.5 4.4 0 8-2.9 8-6.4S16.4 3 12 3z"/>
-              <circle cx="9" cy="9.5" r="1" fill="#fff"/>
-              <circle cx="15" cy="9.5" r="1" fill="#fff"/>
-            </svg>
-            <span>浼佷笟寰俊鐧诲綍</span>
-          </div>
-        </div>
-
-        <p class="login-card__foot">鍋ラ娇绉戞妧 路 鏈嶅姟鍏ㄧ悆</p>
+        <p class="login-card__foot">鍋ラ娇绉戞妧 路 鏈嶅姟鍏ㄥ浗</p>
       </div>
     </main>
   </div>
@@ -133,10 +119,6 @@
 
 function handleForgot() {
   proxy.$modal.msg("璇疯仈绯荤郴缁熺鐞嗗憳閲嶇疆瀵嗙爜")
-}
-
-function handleWecom() {
-  proxy.$modal.msg("浼佷笟寰俊鐧诲綍鏆傛湭寮�鏀�")
 }
 
 function getCookie() {
@@ -251,51 +233,8 @@
   }
 }
 
-.login-card__others {
-  margin-top: 26px;
-}
-
-.login-card__divider {
-  position: relative;
-  text-align: center;
-  font-size: 12px;
-  color: var(--app-text-tertiary, #86909c);
-
-  &::before {
-    content: '';
-    position: absolute;
-    left: 0;
-    right: 0;
-    top: 50%;
-    height: 1px;
-    background: var(--app-border, #e8ecf1);
-  }
-
-  span {
-    position: relative;
-    padding: 0 12px;
-    background: #fff;
-  }
-}
-
-.login-card__wecom {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-  margin-top: 18px;
-  font-size: 14px;
-  color: var(--app-text-secondary, #4e5969);
-  cursor: pointer;
-  transition: color var(--app-transition, 0.2s);
-
-  &:hover {
-    color: var(--app-primary, #2c51d9);
-  }
-}
-
 .login-card__foot {
-  margin: 26px 0 0;
+  margin: 34px 0 0;
   text-align: center;
   font-size: 12px;
   letter-spacing: 4px;
diff --git a/src/views/login/components/LoginBrand.vue b/src/views/login/components/LoginBrand.vue
index 3c7c097..57bb125 100644
--- a/src/views/login/components/LoginBrand.vue
+++ b/src/views/login/components/LoginBrand.vue
@@ -44,7 +44,7 @@
 const features = [
   { icon: 'CircleCheck', label: '鍝佽川淇濋殰', sub: '涓ユ帶璐ㄩ噺鏍囧噯' },
   { icon: 'Setting', label: '鏅鸿兘鍒堕��', sub: '鏁板瓧鍖栫敓浜х鐞�' },
-  { icon: 'Connection', label: '鏈嶅姟鍏ㄧ悆', sub: '鍔╁姏鍙h厰鍋ュ悍浜嬩笟' }
+  { icon: 'Connection', label: '鏈嶅姟鍏ㄥ浗', sub: '鍔╁姏鍙h厰鍋ュ悍浜嬩笟' }
 ]
 </script>
 
@@ -72,13 +72,13 @@
 .brand__logo {
   position: relative;
   z-index: 2;
+  // 鍘熷浘鑷甫鐧藉簳锛屾鐗囧彔搴曡鐧借壊閮ㄥ垎閫忓嚭鑳屾櫙锛岀瓑鏁堝幓搴�
+  mix-blend-mode: multiply;
 
   img {
-    height: 46px;
-    padding: 6px 12px;
-    background: #fff;
-    border-radius: 8px;
-    box-shadow: 0 4px 16px rgba(16, 42, 96, 0.08);
+    display: block;
+    height: 76px;
+    width: auto;
     object-fit: contain;
   }
 }

--
Gitblit v1.9.3