ui 优化

This commit is contained in:
eafonyang
2026-07-14 18:56:13 +08:00
parent 4f10cc1648
commit 003b44e2bd
32 changed files with 1082 additions and 375 deletions
+94 -81
View File
@@ -33,8 +33,8 @@ body {
--lux-coral-glow: rgba(251, 113, 133, 0.25);
/* 玻璃表面 */
--lux-glass-bg-card: rgba(30, 41, 59, 0.55);
--lux-glass-bg-table: rgba(30, 41, 59, 0.45);
--lux-glass-bg-card: rgba(30, 41, 59, 0.42);
--lux-glass-bg-table: rgba(30, 41, 59, 0.20);
--lux-glass-bg-input: rgba(15, 23, 42, 0.45);
--lux-glass-bg-dialog: rgba(30, 41, 59, 0.72);
--lux-glass-bg-sidebar: rgba(15, 23, 42, 0.60);
@@ -52,9 +52,14 @@ body {
--lux-blur-sm: blur(8px);
--lux-blur-md: blur(14px);
--lux-blur-lg: blur(20px);
--lux-blur-lg-saturate: blur(20px) saturate(1.4);
--lux-blur-xl: blur(24px);
/* Elevation shadows */
--lux-shadow-card:
0 4px 24px rgba(0, 0, 0, 0.22),
0 0 0 1px rgba(255, 255, 255, 0.05) inset,
0 1px 0 rgba(255, 255, 255, 0.08) inset;
--lux-shadow-1: 0 2px 8px rgba(0, 0, 0, 0.18);
--lux-shadow-2: 0 4px 16px rgba(0, 0, 0, 0.25);
--lux-shadow-3: 0 8px 32px rgba(0, 0, 0, 0.35);
@@ -356,16 +361,16 @@ body {
.lux-shell .el-card {
border-radius: var(--lux-radius-lg) !important;
background: var(--lux-glass-bg-card) !important;
backdrop-filter: var(--lux-blur-lg);
-webkit-backdrop-filter: var(--lux-blur-lg);
border: 1px solid var(--lux-glass-border) !important;
box-shadow: var(--lux-shadow-1);
backdrop-filter: var(--lux-blur-lg-saturate);
-webkit-backdrop-filter: var(--lux-blur-lg-saturate);
border: 1px solid rgba(255, 255, 255, 0.12) !important;
box-shadow: var(--lux-shadow-card);
color: var(--lux-text-strong);
transition: box-shadow 0.2s ease, transform 0.15s ease, border-color 0.2s ease;
}
.lux-shell .el-card:hover {
box-shadow: var(--lux-shadow-2);
box-shadow: var(--lux-shadow-2), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
border-color: var(--lux-glass-border-hover) !important;
}
@@ -397,7 +402,7 @@ body {
.lux-shell .el-table {
--el-table-border-color: rgba(255, 255, 255, 0.06);
--el-table-header-bg-color: rgba(15, 23, 42, 0.65);
--el-table-row-hover-bg-color: rgba(251, 113, 133, 0.06);
--el-table-row-hover-bg-color: rgba(56, 189, 248, 0.06);
--el-table-bg-color: transparent;
--el-table-tr-bg-color: transparent;
--el-table-header-text-color: var(--lux-text-muted);
@@ -409,17 +414,48 @@ body {
background: transparent !important;
}
.lux-shell .el-table::before,
.lux-shell .el-table--border::after,
.lux-shell .el-table--border::before,
.lux-shell .el-table__inner-wrapper::before {
background-color: rgba(255, 255, 255, 0.06) !important;
}
.lux-shell .el-table th.el-table__cell {
font-weight: 600;
letter-spacing: 0.02em;
color: var(--lux-text-muted);
background: rgba(15, 23, 42, 0.65) !important;
backdrop-filter: var(--lux-blur-md);
-webkit-backdrop-filter: var(--lux-blur-md);
border-bottom: 1px solid rgba(255, 255, 255, 0.10) !important;
}
/* 表格条纹行 */
.lux-shell .el-table td.el-table__cell {
background: transparent !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.04) !important;
}
/* 斑马纹 */
.lux-shell .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell {
background: rgba(255, 255, 255, 0.02) !important;
background: rgba(255, 255, 255, 0.025) !important;
}
/* hover:品牌青 */
.lux-shell .el-table__body tr:hover > td.el-table__cell {
background: rgba(56, 189, 248, 0.06) !important;
}
/* 固定列透出卡片玻璃 */
.lux-shell .el-table .el-table__fixed,
.lux-shell .el-table .el-table__fixed-right,
.lux-shell .el-table .el-table__fixed-right-patch {
background: transparent !important;
}
.lux-shell .el-table .el-table__fixed::before,
.lux-shell .el-table .el-table__fixed-right::before {
background-color: rgba(255, 255, 255, 0.04);
}
/* ── 分页玻璃 ── */
@@ -737,24 +773,68 @@ body {
color: var(--lux-text-dim) !important;
}
/* ── Tabs (el-tabs type=card) ── */
/* ── Tabs (el-tabs type=card) ──
* Element Plus card tabs 在 closable 项 hover 时会改 padding 并展开关闭按钮,
* tab 宽度随之变化,鼠标停在交界处会在相邻 tab 间来回抢 hover。
* 固定 padding + 始终预留关闭按钮占位,hover/active 只改颜色与 inset 阴影。
*/
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item {
position: relative;
z-index: 1;
margin-left: 0 !important;
margin-top: 0 !important;
padding-left: 16px !important;
padding-right: 16px !important;
background: var(--lux-glass-bg-tab) !important;
border: 1px solid var(--lux-glass-border) !important;
border-radius: var(--lux-radius-md) var(--lux-radius-md) 0 0;
color: var(--lux-text-muted);
transition: background 0.2s ease, color 0.2s ease;
transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease !important;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item + .el-tabs__item {
margin-left: 6px !important;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable,
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover,
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable.is-active,
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable.is-active:hover {
padding-left: 16px !important;
padding-right: 16px !important;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item .is-icon-close {
width: 14px !important;
height: 14px !important;
margin-left: 6px !important;
overflow: visible !important;
opacity: 0.45;
transition: opacity 0.2s ease, background-color 0.2s ease, color 0.2s ease !important;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item:hover .is-icon-close,
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-active .is-icon-close {
opacity: 1;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
z-index: 2;
background: var(--lux-glass-bg-tab-active) !important;
color: var(--lux-text-strong);
border-color: var(--lux-glass-border) !important;
border-bottom-color: transparent !important;
box-shadow: inset 0 2px 0 var(--lux-cyan);
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item:hover {
z-index: 2;
color: var(--lux-text-strong);
border-color: var(--lux-glass-border-hover) !important;
}
.lux-shell .el-tabs--card > .el-tabs__header .el-tabs__item.is-active:hover {
border-bottom-color: transparent !important;
}
.lux-shell .el-tabs--card > .el-tabs__header {
@@ -799,8 +879,8 @@ body {
--lux-coral: #fb7185;
--lux-indigo: #6366f1;
--lux-violet: #7c3aed;
--lux-card-bg: #1e293b;
--lux-card-border: rgba(148, 163, 184, 0.12);
--lux-card-bg: var(--lux-glass-bg-card);
--lux-card-border: rgba(255, 255, 255, 0.12);
--lux-glass-sidebar: rgba(15, 23, 42, 0.6);
--lux-glass-header: rgba(30, 41, 59, 0.8);
--lux-input-bg: #0f172a;
@@ -1065,73 +1145,6 @@ body {
color: #f59e0b;
}
/* —— 卡片 / 表格(深色风格) —— */
.lux-shell .el-card {
border-radius: 16px !important;
background: #1e293b !important;
border: 1px solid rgba(148, 163, 184, 0.12) !important;
box-shadow:
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.12) !important;
font-weight: 600;
color: #e2e8f0;
}
/* 列表页顶部筛选栏:压低整体高度 */
.lux-shell .el-card.search-card {
margin-bottom: 14px !important;
}
.lux-shell .el-card.search-card .el-card__body {
padding: 8px 14px 10px !important;
}
.lux-shell .search-form.el-form--inline .el-form-item {
margin-bottom: 4px;
margin-top: 0;
}
.lux-shell .el-table {
--el-table-border-color: rgba(148, 163, 184, 0.1);
--el-table-header-bg-color: #0f172a;
--el-table-row-hover-bg-color: rgba(251, 113, 133, 0.06);
--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: #94a3b8;
background: #0f172a !important;
}
.lux-shell .el-pagination {
--el-pagination-font-size: 13px;
--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: #38bdf8 !important;
border-radius: 8px;
}
/* 主按钮 */
.lux-shell .el-button--primary {
--el-button-bg-color: transparent;
+3 -12
View File
@@ -38,14 +38,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -53,10 +47,7 @@
<el-card class="table-card">
<div class="card-header">
<span class="title">黑名单列表</span>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新增黑名单
</el-button>
<el-button type="primary" circle :icon="Plus" title="新增黑名单" @click="handleAdd" />
</div>
<div class="table-loading-host" v-loading="loading">
+3 -12
View File
@@ -11,14 +11,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -26,10 +20,7 @@
<el-card class="table-card">
<div class="card-header">
<span class="title">品牌列表</span>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新增品牌
</el-button>
<el-button type="primary" circle :icon="Plus" title="新增品牌" @click="handleAdd" />
</div>
<div class="table-loading-host" v-loading="loading">
+3 -12
View File
@@ -27,14 +27,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -51,10 +45,7 @@
<el-icon><Upload /></el-icon>
推送搜索 {{ selectedIds.length }}
</el-button>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新型号
</el-button>
<el-button type="primary" circle :icon="Plus" title="新型号" @click="handleAdd" />
<el-button
type="success"
:disabled="selectedIds.length === 0"
+3 -12
View File
@@ -38,14 +38,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -53,10 +47,7 @@
<el-card class="table-card">
<div class="card-header">
<span class="title">定向升级列表</span>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新增定向设备
</el-button>
<el-button type="primary" circle :icon="Plus" title="新增定向设备" @click="handleAdd" />
</div>
<div class="table-loading-host" v-loading="loading">
+3 -12
View File
@@ -54,14 +54,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -69,10 +63,7 @@
<el-card class="table-card">
<div class="card-header">
<span class="title">OTA 版本列表</span>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新增 OTA
</el-button>
<el-button type="primary" circle :icon="Plus" title="新增 OTA" @click="handleAdd" />
</div>
<div class="table-loading-host" v-loading="loading">
+2 -8
View File
@@ -51,14 +51,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
+3 -12
View File
@@ -11,14 +11,8 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>
搜索
</el-button>
<el-button @click="handleReset">
<el-icon><Refresh /></el-icon>
重置
</el-button>
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
</el-form-item>
</el-form>
</el-card>
@@ -26,10 +20,7 @@
<el-card class="table-card">
<div class="card-header">
<span class="title">账号列表</span>
<el-button type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>
新建账号
</el-button>
<el-button type="primary" circle :icon="Plus" title="新建账号" @click="handleAdd" />
</div>
<div class="table-loading-host" v-loading="loading">