重构后端,改为 node 技术栈

This commit is contained in:
eafonyang
2026-06-09 16:36:23 +08:00
parent abab985769
commit e4e6529577
59 changed files with 4901 additions and 1916 deletions
+37 -3
View File
@@ -1,16 +1,50 @@
<!DOCTYPE html>
<html lang="zh-CN">
<html lang="zh-CN" class="dark" style="background:#0a0e14">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'">
<title>耳机管理平台</title>
<style>
html, body {
background: #0a0e14 !important;
margin: 0;
padding: 0;
}
#app {
background: #0a0e14 !important;
min-height: 100vh;
opacity: 0;
}
#app.app-visible {
opacity: 1;
}
html.dark {
--el-bg-color: #0a0e14;
--el-bg-color-overlay: #1e293b;
--el-bg-color-page: #0a0e14;
--el-text-color-primary: #e2e8f0;
--el-text-color-regular: #cbd5e1;
--el-fill-color-blank: #0a0e14;
--el-color-white: #1e293b;
--el-border-color: rgba(148, 163, 184, 0.12);
color-scheme: dark;
}
</style>
<script>
// 阻塞式防闪烁:在任何渲染前强制深色背景
document.documentElement.style.background = '#0a0e14';
document.documentElement.style.colorScheme = 'dark';
</script>
</head>
<body>
<body style="background:#0a0e14;margin:0">
<div id="app"></div>
<div id="app-loading" style="position:fixed;inset:0;background:#0a0e14;z-index:99999;display:flex;align-items:center;justify-content:center">
<div style="color:#94a3b8;font-family:system-ui,sans-serif;font-size:14px">加载中...</div>
</div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
+1 -1
View File
@@ -18,5 +18,5 @@
"@vitejs/plugin-vue": "^4.3.4",
"vite": "^4.4.9"
},
"packageManager": "pnpm@8.0.0"
"packageManager": "pnpm@11.5.2+sha512.71c631e382066efc25625d5cf029075de07b61b37f6e27350fbd84b1bda5864c8c1967adc280776b45c30a715c0359a3be08fef42d5bb09e2b99029979692916"
}
+913
View File
@@ -0,0 +1,913 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
'@element-plus/icons-vue':
specifier: ^2.1.0
version: 2.3.2(vue@3.5.35)
axios:
specifier: ^1.5.0
version: 1.17.0
element-plus:
specifier: ^2.3.14
version: 2.14.1(vue@3.5.35)
vue:
specifier: ^3.3.4
version: 3.5.35
vue-router:
specifier: ^4.2.4
version: 4.6.4(vue@3.5.35)
devDependencies:
'@vitejs/plugin-vue':
specifier: ^4.3.4
version: 4.3.4(vite@4.4.9)(vue@3.5.35)
vite:
specifier: ^4.4.9
version: 4.4.9
packages:
'@babel/helper-string-parser@7.29.7':
resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.29.7':
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.7':
resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/types@7.29.7':
resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
engines: {node: '>=6.9.0'}
'@ctrl/tinycolor@4.2.0':
resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
engines: {node: '>=14'}
'@element-plus/icons-vue@2.3.2':
resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==}
peerDependencies:
vue: ^3.2.0
'@esbuild/android-arm64@0.18.10':
resolution: {integrity: sha512-ynm4naLbNbK0ajf9LUWtQB+6Vfg1Z/AplArqr4tGebC00Z6m9Y91OVIcjDa461wGcZwcaHYaZAab4yJxfhisTQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.18.10':
resolution: {integrity: sha512-3KClmVNd+Fku82uZJz5C4Rx8m1PPmWUFz5Zkw8jkpZPOmsq+EG1TTOtw1OXkHuX3WczOFQigrtf60B1ijKwNsg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.18.10':
resolution: {integrity: sha512-vFfXj8P9Yfjh54yqUDEHKzqzYuEfPyAOl3z7R9hjkwt+NCvbn9VMxX+IILnAfdImRBfYVItgSUsqGKhJFnBwZw==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.18.10':
resolution: {integrity: sha512-k2OJQ7ZxE6sVc91+MQeZH9gFeDAH2uIYALPAwTjTCvcPy9Dzrf7V7gFUQPYkn09zloWhQ+nvxWHia2x2ZLR0sQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.18.10':
resolution: {integrity: sha512-tnz/mdZk1L1Z3WpGjin/L2bKTe8/AKZpI8fcCLtH+gq8WXWsCNJSxlesAObV4qbtTl6pG5vmqFXfWUQ5hV8PAQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.18.10':
resolution: {integrity: sha512-QJluV0LwBrbHnYYwSKC+K8RGz0g/EyhpQH1IxdoFT0nM7PfgjE+aS8wxq/KFEsU0JkL7U/EEKd3O8xVBxXb2aA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.18.10':
resolution: {integrity: sha512-Hi/ycUkS6KTw+U9G5PK5NoK7CZboicaKUSVs0FSiPNtuCTzK6HNM4DIgniH7hFaeuszDS9T4dhAHWiLSt/Y5Ng==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.18.10':
resolution: {integrity: sha512-Nz6XcfRBOO7jSrVpKAyEyFOPGhySPNlgumSDhWAspdQQ11ub/7/NZDMhWDFReE9QH/SsCOCLQbdj0atAk/HMOQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.18.10':
resolution: {integrity: sha512-HfFoxY172tVHPIvJy+FHxzB4l8xU7e5cxmNS11cQ2jt4JWAukn/7LXaPdZid41UyTweqa4P/1zs201gRGCTwHw==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.18.10':
resolution: {integrity: sha512-otMdmSmkMe+pmiP/bZBjfphyAsTsngyT9RCYwoFzqrveAbux9nYitDTpdgToG0Z0U55+PnH654gCH2GQ1aB6Yw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.18.10':
resolution: {integrity: sha512-t8tjFuON1koxskzQ4VFoh0T5UDUMiLYjwf9Wktd0tx8AoK6xgU+5ubKOpWpcnhEQ2tESS5u0v6QuN8PX/ftwcQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.18.10':
resolution: {integrity: sha512-+dUkcVzcfEJHz3HEnVpIJu8z8Wdn2n/nWMWdl6FVPFGJAVySO4g3+XPzNKFytVFwf8hPVDwYXzVcu8GMFqsqZw==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.18.10':
resolution: {integrity: sha512-sO3PjjxEGy+PY2qkGe2gwJbXdZN9wAYpVBZWFD0AwAoKuXRkWK0/zaMQ5ekUFJDRDCRm8x5U0Axaub7ynH/wVg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.18.10':
resolution: {integrity: sha512-JDtdbJg3yjDeXLv4lZYE1kiTnxv73/8cbPHY9T/dUKi8rYOM/k5b3W4UJLMUksuQ6nTm5c89W1nADsql6FW75A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.18.10':
resolution: {integrity: sha512-NLuSKcp8WckjD2a7z5kzLiCywFwBTMlIxDNuud1AUGVuwBBJSkuubp6cNjJ0p5c6CZaA3QqUGwjHJBiG1SoOFw==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.18.10':
resolution: {integrity: sha512-wj2KRsCsFusli+6yFgNO/zmmLslislAWryJnodteRmGej7ZzinIbMdsyp13rVGde88zxJd5vercNYK9kuvlZaQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-x64@0.18.10':
resolution: {integrity: sha512-pQ9QqxEPI3cVRZyUtCoZxhZK3If+7RzR8L2yz2+TDzdygofIPOJFaAPkEJ5rYIbUO101RaiYxfdOBahYexLk5A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-x64@0.18.10':
resolution: {integrity: sha512-k8GTIIW9I8pEEfoOUm32TpPMgSg06JhL5DO+ql66aLTkOQUs0TxCA67Wi7pv6z8iF8STCGcNbm3UWFHLuci+ag==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.18.10':
resolution: {integrity: sha512-vIGYJIdEI6d4JBucAx8py792G8J0GP40qSH+EvSt80A4zvGd6jph+5t1g+eEXcS2aRpgZw6CrssNCFZxTdEsxw==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.18.10':
resolution: {integrity: sha512-kRhNcMZFGMW+ZHCarAM1ypr8OZs0k688ViUCetVCef9p3enFxzWeBg9h/575Y0nsFu0ZItluCVF5gMR2pwOEpA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.18.10':
resolution: {integrity: sha512-AR9PX1whYaYh9p0EOaKna0h48F/A101Mt/ag72+kMkkBZXPQ7cjbz2syXI/HI3OlBdUytSdHneljfjvUoqwqiQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.18.10':
resolution: {integrity: sha512-5sTkYhAGHNRr6bVf4RM0PsscqVr6/DBYdrlMh168oph3usid3lKHcHEEHmr34iZ9GHeeg2juFOxtpl6XyC3tpw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@floating-ui/core@1.7.5':
resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
'@floating-ui/dom@1.7.6':
resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
'@floating-ui/utils@0.2.11':
resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@sxzz/popperjs-es@2.11.8':
resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==}
'@types/lodash-es@4.17.12':
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
'@types/lodash@4.17.24':
resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
'@vitejs/plugin-vue@4.3.4':
resolution: {integrity: sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.0.0
vue: ^3.2.25
'@vue/compiler-core@3.5.35':
resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==}
'@vue/compiler-dom@3.5.35':
resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==}
'@vue/compiler-sfc@3.5.35':
resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==}
'@vue/compiler-ssr@3.5.35':
resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/reactivity@3.5.35':
resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==}
'@vue/runtime-core@3.5.35':
resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==}
'@vue/runtime-dom@3.5.35':
resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==}
'@vue/server-renderer@3.5.35':
resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==}
peerDependencies:
vue: 3.5.35
'@vue/shared@3.5.35':
resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==}
'@vueuse/core@14.3.0':
resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
peerDependencies:
vue: ^3.5.0
'@vueuse/metadata@14.3.0':
resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
'@vueuse/shared@14.3.0':
resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
peerDependencies:
vue: ^3.5.0
agent-base@6.0.0:
resolution: {integrity: sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==}
engines: {node: '>= 6.0.0'}
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.17.0:
resolution: {integrity: sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
dayjs@1.11.21:
resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==}
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
element-plus@2.14.1:
resolution: {integrity: sha512-UFnm1+BckNi+azkKJ7L32q1uXs9ekr99Z9pWTQPeDR05jqEWUwQq51ro4kZMVrANbjknX3Z7ukCZwTi2T6Tr9A==}
peerDependencies:
vue: ^3.3.7
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es-object-atoms@1.1.2:
resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==}
engines: {node: '>= 0.4'}
es-set-tostringtag@2.1.0:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
esbuild@0.18.10:
resolution: {integrity: sha512-33WKo67auOXzZHBY/9DTJRo7kIvfU12S+D4sp2wIz39N88MDIaCGyCwbW01RR70pK6Iya0I74lHEpyLfFqOHPA==}
engines: {node: '>=12'}
hasBin: true
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
follow-redirects@1.16.0:
resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
hasown@2.0.4:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
lodash-es@4.18.1:
resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
lodash-unified@1.0.3:
resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
peerDependencies:
'@types/lodash-es': '*'
lodash: '*'
lodash-es: '*'
lodash@4.18.1:
resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
memoize-one@6.0.0:
resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
nanoid@3.3.12:
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
normalize-wheel-es@1.2.0:
resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
postcss@8.5.15:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
proxy-from-env@2.1.0:
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
engines: {node: '>=10'}
rollup@3.30.0:
resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
vite@4.4.9:
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
lightningcss: ^1.21.0
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
vue-component-type-helpers@3.3.3:
resolution: {integrity: sha512-x4nsFpy5Pe8fqPzp/5vkTPeTTDBpAx4WVtV47Ejt0+2FQrq4pRRsJs7JmYRqMFzTu/LW+pCWEjQ3YVCkPV7f9g==}
vue-router@4.6.4:
resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
peerDependencies:
vue: ^3.5.0
vue@3.5.35:
resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
snapshots:
'@babel/helper-string-parser@7.29.7': {}
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/parser@7.29.7':
dependencies:
'@babel/types': 7.29.7
'@babel/types@7.29.7':
dependencies:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
'@ctrl/tinycolor@4.2.0': {}
'@element-plus/icons-vue@2.3.2(vue@3.5.35)':
dependencies:
vue: 3.5.35
'@esbuild/android-arm64@0.18.10':
optional: true
'@esbuild/android-arm@0.18.10':
optional: true
'@esbuild/android-x64@0.18.10':
optional: true
'@esbuild/darwin-arm64@0.18.10':
optional: true
'@esbuild/darwin-x64@0.18.10':
optional: true
'@esbuild/freebsd-arm64@0.18.10':
optional: true
'@esbuild/freebsd-x64@0.18.10':
optional: true
'@esbuild/linux-arm64@0.18.10':
optional: true
'@esbuild/linux-arm@0.18.10':
optional: true
'@esbuild/linux-ia32@0.18.10':
optional: true
'@esbuild/linux-loong64@0.18.10':
optional: true
'@esbuild/linux-mips64el@0.18.10':
optional: true
'@esbuild/linux-ppc64@0.18.10':
optional: true
'@esbuild/linux-riscv64@0.18.10':
optional: true
'@esbuild/linux-s390x@0.18.10':
optional: true
'@esbuild/linux-x64@0.18.10':
optional: true
'@esbuild/netbsd-x64@0.18.10':
optional: true
'@esbuild/openbsd-x64@0.18.10':
optional: true
'@esbuild/sunos-x64@0.18.10':
optional: true
'@esbuild/win32-arm64@0.18.10':
optional: true
'@esbuild/win32-ia32@0.18.10':
optional: true
'@esbuild/win32-x64@0.18.10':
optional: true
'@floating-ui/core@1.7.5':
dependencies:
'@floating-ui/utils': 0.2.11
'@floating-ui/dom@1.7.6':
dependencies:
'@floating-ui/core': 1.7.5
'@floating-ui/utils': 0.2.11
'@floating-ui/utils@0.2.11': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
'@sxzz/popperjs-es@2.11.8': {}
'@types/lodash-es@4.17.12':
dependencies:
'@types/lodash': 4.17.24
'@types/lodash@4.17.24': {}
'@types/web-bluetooth@0.0.21': {}
'@vitejs/plugin-vue@4.3.4(vite@4.4.9)(vue@3.5.35)':
dependencies:
vite: 4.4.9
vue: 3.5.35
'@vue/compiler-core@3.5.35':
dependencies:
'@babel/parser': 7.29.7
'@vue/shared': 3.5.35
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.35':
dependencies:
'@vue/compiler-core': 3.5.35
'@vue/shared': 3.5.35
'@vue/compiler-sfc@3.5.35':
dependencies:
'@babel/parser': 7.29.7
'@vue/compiler-core': 3.5.35
'@vue/compiler-dom': 3.5.35
'@vue/compiler-ssr': 3.5.35
'@vue/shared': 3.5.35
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.15
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.35':
dependencies:
'@vue/compiler-dom': 3.5.35
'@vue/shared': 3.5.35
'@vue/devtools-api@6.6.4': {}
'@vue/reactivity@3.5.35':
dependencies:
'@vue/shared': 3.5.35
'@vue/runtime-core@3.5.35':
dependencies:
'@vue/reactivity': 3.5.35
'@vue/shared': 3.5.35
'@vue/runtime-dom@3.5.35':
dependencies:
'@vue/reactivity': 3.5.35
'@vue/runtime-core': 3.5.35
'@vue/shared': 3.5.35
csstype: 3.2.3
'@vue/server-renderer@3.5.35(vue@3.5.35)':
dependencies:
'@vue/compiler-ssr': 3.5.35
'@vue/shared': 3.5.35
vue: 3.5.35
'@vue/shared@3.5.35': {}
'@vueuse/core@14.3.0(vue@3.5.35)':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 14.3.0
'@vueuse/shared': 14.3.0(vue@3.5.35)
vue: 3.5.35
'@vueuse/metadata@14.3.0': {}
'@vueuse/shared@14.3.0(vue@3.5.35)':
dependencies:
vue: 3.5.35
agent-base@6.0.0:
dependencies:
debug: 4.4.3
transitivePeerDependencies:
- supports-color
async-validator@4.2.5: {}
asynckit@0.4.0: {}
axios@1.17.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.5
https-proxy-agent: 5.0.1
proxy-from-env: 2.1.0
transitivePeerDependencies:
- debug
- supports-color
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
csstype@3.2.3: {}
dayjs@1.11.21: {}
debug@4.4.3:
dependencies:
ms: 2.1.3
delayed-stream@1.0.0: {}
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
element-plus@2.14.1(vue@3.5.35):
dependencies:
'@ctrl/tinycolor': 4.2.0
'@element-plus/icons-vue': 2.3.2(vue@3.5.35)
'@floating-ui/dom': 1.7.6
'@popperjs/core': '@sxzz/popperjs-es@2.11.8'
'@types/lodash': 4.17.24
'@types/lodash-es': 4.17.12
'@vueuse/core': 14.3.0(vue@3.5.35)
async-validator: 4.2.5
dayjs: 1.11.21
lodash: 4.18.1
lodash-es: 4.18.1
lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1)
memoize-one: 6.0.0
normalize-wheel-es: 1.2.0
vue: 3.5.35
vue-component-type-helpers: 3.3.3
entities@7.0.1: {}
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
es-object-atoms@1.1.2:
dependencies:
es-errors: 1.3.0
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.4
esbuild@0.18.10:
optionalDependencies:
'@esbuild/android-arm': 0.18.10
'@esbuild/android-arm64': 0.18.10
'@esbuild/android-x64': 0.18.10
'@esbuild/darwin-arm64': 0.18.10
'@esbuild/darwin-x64': 0.18.10
'@esbuild/freebsd-arm64': 0.18.10
'@esbuild/freebsd-x64': 0.18.10
'@esbuild/linux-arm': 0.18.10
'@esbuild/linux-arm64': 0.18.10
'@esbuild/linux-ia32': 0.18.10
'@esbuild/linux-loong64': 0.18.10
'@esbuild/linux-mips64el': 0.18.10
'@esbuild/linux-ppc64': 0.18.10
'@esbuild/linux-riscv64': 0.18.10
'@esbuild/linux-s390x': 0.18.10
'@esbuild/linux-x64': 0.18.10
'@esbuild/netbsd-x64': 0.18.10
'@esbuild/openbsd-x64': 0.18.10
'@esbuild/sunos-x64': 0.18.10
'@esbuild/win32-arm64': 0.18.10
'@esbuild/win32-ia32': 0.18.10
'@esbuild/win32-x64': 0.18.10
estree-walker@2.0.2: {}
follow-redirects@1.16.0: {}
form-data@4.0.5:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
es-set-tostringtag: 2.1.0
hasown: 2.0.4
mime-types: 2.1.35
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.2
function-bind: 1.1.2
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.4
math-intrinsics: 1.1.0
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.2
gopd@1.2.0: {}
has-symbols@1.1.0: {}
has-tostringtag@1.0.2:
dependencies:
has-symbols: 1.1.0
hasown@2.0.4:
dependencies:
function-bind: 1.1.2
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.0
debug: 4.4.3
transitivePeerDependencies:
- supports-color
lodash-es@4.18.1: {}
lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1):
dependencies:
'@types/lodash-es': 4.17.12
lodash: 4.18.1
lodash-es: 4.18.1
lodash@4.18.1: {}
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
math-intrinsics@1.1.0: {}
memoize-one@6.0.0: {}
mime-db@1.52.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
ms@2.1.3: {}
nanoid@3.3.12: {}
normalize-wheel-es@1.2.0: {}
picocolors@1.1.1: {}
postcss@8.5.15:
dependencies:
nanoid: 3.3.12
picocolors: 1.1.1
source-map-js: 1.2.1
proxy-from-env@2.1.0: {}
rollup@3.30.0:
optionalDependencies:
fsevents: 2.3.3
source-map-js@1.2.1: {}
vite@4.4.9:
dependencies:
esbuild: 0.18.10
postcss: 8.5.15
rollup: 3.30.0
optionalDependencies:
fsevents: 2.3.3
vue-component-type-helpers@3.3.3: {}
vue-router@4.6.4(vue@3.5.35):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.35
vue@3.5.35:
dependencies:
'@vue/compiler-dom': 3.5.35
'@vue/compiler-sfc': 3.5.35
'@vue/runtime-dom': 3.5.35
'@vue/server-renderer': 3.5.35(vue@3.5.35)
'@vue/shared': 3.5.35
+2
View File
@@ -0,0 +1,2 @@
allowBuilds:
esbuild: true
+11
View File
@@ -1,5 +1,6 @@
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/theme-chalk/dark/css-vars.css'
import 'element-plus/dist/index.css'
import '@/styles/lux-theme.css'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
@@ -12,3 +13,13 @@ app.use(ElementPlus, { locale: zhCn })
app.use(router)
app.mount('#app')
// 等浏览器完成绘制后显示应用并移除遮罩
requestAnimationFrame(() => {
requestAnimationFrame(() => {
const appEl = document.getElementById('app')
if (appEl) appEl.classList.add('app-visible')
const loadingEl = document.getElementById('app-loading')
if (loadingEl) loadingEl.style.display = 'none'
})
})
+91 -51
View File
@@ -5,22 +5,23 @@ body {
}
/**
* 全站主题(与登录页一致):深色宇宙底、浅色内容卡片、青紫渐变主按钮
* 仅作用于 .lux-shell 内,避免影响登录页
* 全站主题:深色宇宙底、深色卡片、青紫渐变主按钮
*/
:root {
--lux-font:
'Inter', 'Segoe UI', system-ui, -apple-system, 'PingFang SC', 'Microsoft YaHei',
sans-serif;
--lux-page-bg: #0a0e14;
--lux-text-strong: #0f172a;
--lux-text-muted: #64748b;
--lux-text-strong: #e2e8f0;
--lux-text-muted: #94a3b8;
--lux-cyan: #38bdf8;
--lux-indigo: #6366f1;
--lux-violet: #7c3aed;
--lux-card-grad: linear-gradient(165deg, #fafbfc 0%, #f0f3f8 100%);
--lux-glass-sidebar: rgba(15, 23, 42, 0.52);
--lux-glass-header: rgba(250, 251, 252, 0.9);
--lux-card-bg: #1e293b;
--lux-card-border: rgba(148, 163, 184, 0.12);
--lux-glass-sidebar: rgba(15, 23, 42, 0.6);
--lux-glass-header: rgba(30, 41, 59, 0.8);
--lux-input-bg: #0f172a;
}
.lux-shell {
@@ -165,7 +166,7 @@ body {
color: inherit;
}
/* —— 顶栏(与内容卡片一致的浅色底) —— */
/* —— 顶栏(深色玻璃底) —— */
.lux-shell .lux-header {
height: 44px !important;
min-height: 44px !important;
@@ -175,13 +176,11 @@ body {
padding: 0 14px !important;
margin: 8px 16px 0 8px;
border-radius: 10px;
background: var(--lux-card-grad) !important;
background: rgba(30, 41, 59, 0.75) !important;
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
border: 1px solid rgba(148, 163, 184, 0.22) !important;
box-shadow:
0 2px 4px -1px rgba(15, 23, 42, 0.05),
0 0 0 1px rgba(255, 255, 255, 0.65) inset;
border: 1px solid rgba(148, 163, 184, 0.12) !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
.lux-shell .lux-header-power-btn {
@@ -236,28 +235,28 @@ body {
font-size: 18px;
font-weight: 700;
letter-spacing: -0.02em;
color: #0f172a;
color: #e2e8f0;
}
.lux-shell .brand-not-in-db-tip {
color: #b45309;
color: #f59e0b;
}
/* —— 卡片 / 表格 —— */
/* —— 卡片 / 表格(深色风格) —— */
.lux-shell .el-card {
border-radius: 16px !important;
background: var(--lux-card-grad) !important;
border: 1px solid rgba(148, 163, 184, 0.22) !important;
background: #1e293b !important;
border: 1px solid rgba(148, 163, 184, 0.12) !important;
box-shadow:
0 4px 6px -1px rgba(15, 23, 42, 0.06),
0 14px 32px -10px rgba(15, 23, 42, 0.14),
0 0 0 1px rgba(255, 255, 255, 0.65) inset !important;
0 4px 6px -1px rgba(0, 0, 0, 0.2),
0 14px 32px -10px rgba(0, 0, 0, 0.3) !important;
color: #e2e8f0;
}
.lux-shell .el-card__header {
border-bottom: 1px solid rgba(148, 163, 184, 0.18) !important;
border-bottom: 1px solid rgba(148, 163, 184, 0.12) !important;
font-weight: 600;
color: var(--lux-text-strong);
color: #e2e8f0;
}
/* 列表页顶部筛选栏:压低整体高度 */
@@ -275,56 +274,60 @@ body {
}
.lux-shell .el-table {
--el-table-border-color: rgba(148, 163, 184, 0.22);
--el-table-header-bg-color: #eef2f7;
--el-table-row-hover-bg-color: rgba(56, 189, 248, 0.06);
color: var(--lux-text-strong);
--el-table-border-color: rgba(148, 163, 184, 0.1);
--el-table-header-bg-color: #0f172a;
--el-table-row-hover-bg-color: rgba(56, 189, 248, 0.08);
--el-table-bg-color: #1e293b;
--el-table-tr-bg-color: #1e293b;
--el-table-header-text-color: #cbd5e1;
--el-table-text-color: #cbd5e1;
color: #e2e8f0;
border-radius: 12px;
overflow: hidden;
}
.lux-shell .el-table th.el-table__cell {
font-weight: 600;
color: #334155;
color: #94a3b8;
background: #0f172a !important;
}
.lux-shell .el-pagination {
--el-pagination-font-size: 13px;
--el-pagination-button-color: #475569;
--el-pagination-button-color: #94a3b8;
--el-pagination-hover-color: var(--lux-cyan);
--el-pagination-bg-color: transparent;
}
.lux-shell .el-pagination .el-pager li {
color: #94a3b8;
}
.lux-shell .el-pagination .el-pager li.is-active {
color: #fff !important;
background: linear-gradient(135deg, var(--lux-cyan), var(--lux-indigo)) !important;
background: #38bdf8 !important;
border-radius: 8px;
}
/* 主按钮渐变 */
/* 主按钮 */
.lux-shell .el-button--primary {
--el-button-bg-color: transparent;
--el-button-border-color: transparent;
background: linear-gradient(
92deg,
#38bdf8 0%,
#4f8ff7 38%,
#6366f1 72%,
#7c3aed 100%
) !important;
background: #38bdf8 !important;
border: none !important;
box-shadow: 0 8px 20px rgba(56, 189, 248, 0.28);
box-shadow: 0 4px 12px rgba(56, 189, 248, 0.25);
}
.lux-shell .el-button--primary:hover,
.lux-shell .el-button--primary:focus {
filter: brightness(1.06);
box-shadow: 0 10px 26px rgba(56, 189, 248, 0.35);
background: #22d3ee !important;
box-shadow: 0 6px 16px rgba(56, 189, 248, 0.3);
}
.lux-shell .el-button--primary.is-plain {
background: rgba(56, 189, 248, 0.12) !important;
color: #0369a1 !important;
border: 1px solid rgba(56, 189, 248, 0.45) !important;
background: rgba(56, 189, 248, 0.15) !important;
color: #7dd3fc !important;
border: 1px solid rgba(56, 189, 248, 0.35) !important;
box-shadow: none;
}
@@ -341,18 +344,28 @@ body {
box-shadow: 0 4px 14px rgba(239, 68, 68, 0.2);
}
/* 输入框(搜索栏等 */
/* 输入框(深色风格 */
.lux-shell .el-input__wrapper {
border-radius: 10px;
box-shadow: 0 0 0 1px rgba(148, 163, 184, 0.25) inset;
background-color: #0f172a !important;
box-shadow: 0 0 0 1px rgba(148, 163, 184, 0.15) inset !important;
}
.lux-shell .el-input__wrapper.is-focus {
box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.45) inset, 0 0 0 3px rgba(56, 189, 248, 0.15);
box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.45) inset, 0 0 0 3px rgba(56, 189, 248, 0.15) !important;
}
.lux-shell .el-input__inner {
color: #e2e8f0 !important;
}
.lux-shell .el-input__inner::placeholder {
color: #64748b !important;
}
.lux-shell .el-select .el-select__wrapper {
border-radius: 10px;
background-color: #0f172a !important;
}
/* 标签 */
@@ -360,16 +373,43 @@ body {
border-radius: 8px;
}
/* 对话框(Teleport 到 body,不用 .lux-shell 前缀) */
/* 对话框(Teleport 到 body,不用 .lux-shell 前缀,深色风格 */
.el-overlay .el-dialog {
border-radius: 18px;
overflow: hidden;
background: #1e293b !important;
box-shadow:
0 25px 50px -12px rgba(0, 0, 0, 0.35),
0 0 0 1px rgba(255, 255, 255, 0.5) inset;
0 25px 50px -12px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(148, 163, 184, 0.1) inset;
}
.el-overlay .el-dialog__header {
border-bottom: 1px solid rgba(148, 163, 184, 0.18);
border-bottom: 1px solid rgba(148, 163, 184, 0.12);
font-weight: 700;
color: #e2e8f0;
}
.el-overlay .el-dialog__title {
color: #e2e8f0;
}
.el-overlay .el-dialog__body {
color: #cbd5e1;
}
/* 表单标签深色 */
.lux-shell .el-form-item__label {
color: #94a3b8 !important;
}
/* 下拉菜单深色 */
.lux-shell .el-dropdown-menu {
background: #1e293b !important;
border-color: rgba(148, 163, 184, 0.12) !important;
}
/* 消息框深色 */
.el-message-box {
background: #1e293b !important;
border-color: rgba(148, 163, 184, 0.12) !important;
}
+25 -28
View File
@@ -217,11 +217,11 @@ const handleSubmit = async () => {
max-width: 420px;
padding: 44px 40px 36px;
border-radius: 24px;
background: linear-gradient(165deg, #fafbfc 0%, #f0f3f8 100%);
background: #1e293b;
border: 1px solid rgba(148, 163, 184, 0.12);
box-shadow:
0 4px 6px -1px rgba(15, 23, 42, 0.06),
0 25px 50px -12px rgba(0, 0, 0, 0.42),
0 0 0 1px rgba(255, 255, 255, 0.65) inset;
0 4px 6px -1px rgba(0, 0, 0, 0.2),
0 25px 50px -12px rgba(0, 0, 0, 0.5);
}
.logo-ring {
@@ -232,11 +232,11 @@ const handleSubmit = async () => {
align-items: center;
justify-content: center;
border-radius: 16px;
color: #1e3a5f;
background: linear-gradient(145deg, #e8eef6 0%, #dce5f0 100%);
color: #38bdf8;
background: linear-gradient(145deg, #0f172a 0%, #1e293b 100%);
box-shadow:
0 2px 8px rgba(30, 58, 95, 0.12),
0 0 0 1px rgba(255, 255, 255, 0.9) inset;
0 2px 8px rgba(56, 189, 248, 0.15),
0 0 0 1px rgba(56, 189, 248, 0.2) inset;
}
.title {
@@ -245,14 +245,14 @@ const handleSubmit = async () => {
font-size: 26px;
font-weight: 700;
letter-spacing: -0.02em;
color: #0f172a;
color: #e2e8f0;
}
.subtitle {
margin: 10px 0 0;
text-align: center;
font-size: 13px;
color: #64748b;
color: #94a3b8;
font-weight: 500;
}
@@ -267,7 +267,7 @@ const handleSubmit = async () => {
.field-label {
font-size: 12px;
font-weight: 600;
color: #475569;
color: #94a3b8;
letter-spacing: 0.02em;
}
@@ -283,8 +283,8 @@ const handleSubmit = async () => {
.glass-input :deep(.el-input__wrapper) {
border-radius: 14px;
background-color: #eef1f6;
box-shadow: none;
background-color: #0f172a !important;
box-shadow: 0 0 0 1px rgba(148, 163, 184, 0.15) inset !important;
border: 1px solid transparent;
transition:
box-shadow 0.2s ease,
@@ -293,25 +293,26 @@ const handleSubmit = async () => {
}
.glass-input :deep(.el-input__wrapper:hover) {
background-color: #e8ecf2;
background-color: #1e293b !important;
box-shadow: 0 0 0 1px rgba(148, 163, 184, 0.25) inset !important;
}
.glass-input :deep(.el-input__wrapper.is-focus) {
background-color: #fff;
background-color: #0f172a !important;
border-color: rgba(56, 189, 248, 0.45);
box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.22);
box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.22) !important;
}
.glass-input :deep(.el-input__inner) {
color: #0f172a;
color: #e2e8f0 !important;
}
.glass-input :deep(.el-input__inner::placeholder) {
color: #94a3b8;
color: #64748b !important;
}
.glass-input :deep(.el-input__prefix) {
color: #64748b;
color: #94a3b8 !important;
}
.btn-wrap {
@@ -333,21 +334,17 @@ const handleSubmit = async () => {
font-weight: 700;
letter-spacing: 0.12em;
color: #fff !important;
background: linear-gradient(92deg, #38bdf8 0%, #4f8ff7 38%, #6366f1 72%, #7c3aed 100%) !important;
box-shadow:
0 10px 28px rgba(56, 189, 248, 0.38),
0 4px 12px rgba(99, 102, 241, 0.25);
background: #38bdf8 !important;
box-shadow: 0 4px 16px rgba(56, 189, 248, 0.3);
transition:
transform 0.15s ease,
box-shadow 0.2s ease,
filter 0.2s ease;
background 0.2s ease;
}
.login-btn:hover {
filter: brightness(1.05);
box-shadow:
0 14px 36px rgba(56, 189, 248, 0.45),
0 6px 16px rgba(99, 102, 241, 0.3);
background: #22d3ee !important;
box-shadow: 0 6px 20px rgba(56, 189, 248, 0.4);
}
.login-btn:active {
+2 -2
View File
@@ -842,7 +842,7 @@ onMounted(() => {
.title {
font-size: 18px;
font-weight: 600;
color: #333;
color: #e2e8f0;
}
.pagination {
@@ -913,7 +913,7 @@ onMounted(() => {
.step-label {
font-size: 15px;
font-weight: 600;
color: #0f172a;
color: #e2e8f0;
}
.step-status {