Files
hfb_sys/frontend/src/features/admin/views/AdminDashboardView.css
T

883 lines
14 KiB
CSS

.finance-page-container {
display: flex;
flex-direction: column;
gap: 20px;
padding: 0 4px 32px;
}
/* ================= 头部卡片 ================= */
.page-header-card {
background: #ffffff;
border-radius: 16px;
padding: 24px 28px;
box-shadow:
0 1px 3px rgba(15, 23, 42, 0.04),
0 4px 12px rgba(15, 23, 42, 0.02);
border: 1px solid rgba(226, 232, 240, 0.8);
}
.header-main {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
}
.title-group {
display: flex;
flex-direction: column;
gap: 6px;
}
.eyebrow-tag {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.8px;
color: #3b82f6;
background: #eff6ff;
padding: 3px 10px;
border-radius: 20px;
width: fit-content;
}
.page-title {
margin: 0;
font-size: 26px;
font-weight: 800;
color: #0f172a;
letter-spacing: -0.5px;
}
.page-subtitle {
margin: 0;
font-size: 13.5px;
color: #64748b;
line-height: 1.5;
}
.toolbar-actions {
display: flex;
align-items: center;
gap: 10px;
}
/* ================= 状态卡片 ================= */
.state-card {
background: #ffffff;
border-radius: 16px;
padding: 48px 24px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 16px;
border: 1px solid rgba(226, 232, 240, 0.8);
}
.loading-state {
color: #64748b;
}
.loading-state .el-icon {
font-size: 36px;
color: #3b82f6;
}
.error-state {
color: #e11d48;
}
.error-state .el-icon {
font-size: 36px;
}
/* ================= 核心指标卡片 ================= */
.summary-metric-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
gap: 16px;
}
.metric-card {
background: #ffffff;
border-radius: 16px;
padding: 20px 22px;
border: 1px solid rgba(226, 232, 240, 0.8);
box-shadow:
0 1px 3px rgba(15, 23, 42, 0.04),
0 4px 12px rgba(15, 23, 42, 0.02);
display: flex;
align-items: center;
gap: 16px;
position: relative;
overflow: hidden;
transition:
transform 0.2s ease,
box-shadow 0.2s ease;
}
.metric-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
}
.metric-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
}
.metric-card--users::before {
background: linear-gradient(90deg, #6366f1, #818cf8);
}
.metric-card--listings::before {
background: linear-gradient(90deg, #10b981, #34d399);
}
.metric-card--orders::before {
background: linear-gradient(90deg, #f59e0b, #fbbf24);
}
.metric-card--flow::before {
background: linear-gradient(90deg, #f43f5e, #fb7185);
}
.metric-icon-wrap {
width: 48px;
height: 48px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
flex-shrink: 0;
}
.metric-icon-wrap.indigo {
background: #eef2ff;
color: #6366f1;
}
.metric-icon-wrap.emerald {
background: #ecfdf5;
color: #10b981;
}
.metric-icon-wrap.amber {
background: #fffbeb;
color: #f59e0b;
}
.metric-icon-wrap.rose {
background: #fff1f2;
color: #f43f5e;
}
.metric-icon-wrap.blue {
background: #eff6ff;
color: #3b82f6;
}
.metric-icon-wrap.teal {
background: #f0fdfa;
color: #0d9488;
}
.metric-icon-wrap.slate {
background: #f1f5f9;
color: #64748b;
}
.metric-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.metric-label {
font-size: 13px;
font-weight: 500;
color: #64748b;
}
.metric-val {
font-size: 26px;
font-weight: 800;
color: #0f172a;
letter-spacing: -0.5px;
line-height: 1.2;
}
.indigo-val {
color: #4f46e5;
}
.emerald-val {
color: #059669;
}
.amber-val {
color: #d97706;
}
.rose-val {
color: #e11d48;
}
.metric-sub-pill {
display: inline-flex;
align-items: center;
font-size: 11.5px;
font-weight: 600;
padding: 2px 8px;
border-radius: 4px;
width: fit-content;
}
.metric-sub-pill.info {
background: #eef2ff;
color: #4f46e5;
}
.metric-sub-pill.success {
background: #f0fdf4;
color: #16a34a;
}
.metric-sub-pill.warning {
background: #fffbeb;
color: #d97706;
}
.metric-sub-pill.danger {
background: #fff1f2;
color: #e11d48;
}
/* ================= 通用 Section 卡片 ================= */
.section-card {
background: #ffffff;
border-radius: 16px;
padding: 22px 24px;
border: 1px solid rgba(226, 232, 240, 0.8);
box-shadow:
0 1px 3px rgba(15, 23, 42, 0.04),
0 4px 12px rgba(15, 23, 42, 0.02);
}
.section-header-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.section-header-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 17px;
font-weight: 700;
color: #1e293b;
}
.header-icon {
color: #3b82f6;
font-size: 20px;
}
.header-icon.rose-icon {
color: #f43f5e;
}
.header-badge {
font-size: 12px;
font-weight: 500;
color: #64748b;
background: #f1f5f9;
padding: 3px 10px;
border-radius: 12px;
}
/* ================= 上下架 3 组 Mini-Bars ================= */
.listing-daily-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px;
margin-bottom: 20px;
}
.listing-stat-card {
padding: 20px;
border-radius: 14px;
background: #f8fafc;
border: 1px solid #e2e8f0;
transition: all 0.2s ease;
}
.listing-stat-card:hover {
background: #ffffff;
box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
border-color: #cbd5e1;
}
.listing-stat-head {
display: flex;
align-items: center;
gap: 12px;
}
.listing-stat-icon {
width: 40px;
height: 40px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
flex-shrink: 0;
}
.tone-publish .listing-stat-icon {
background: #ecfdf5;
color: #10b981;
}
.tone-offline .listing-stat-icon {
background: #fffbeb;
color: #f59e0b;
}
.tone-trade .listing-stat-icon {
background: #eff6ff;
color: #3b82f6;
}
.listing-stat-meta span {
display: block;
font-size: 12.5px;
font-weight: 500;
color: #64748b;
}
.listing-stat-meta strong {
display: block;
font-size: 24px;
font-weight: 800;
color: #0f172a;
line-height: 1.1;
margin-top: 2px;
}
.listing-stat-hint {
margin: 10px 0 16px;
font-size: 11.5px;
color: #94a3b8;
line-height: 1.4;
}
.mini-bars {
display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
gap: 8px;
align-items: end;
min-height: 90px;
padding-top: 8px;
border-top: 1px dashed #e2e8f0;
}
.mini-bar-col {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
min-width: 0;
}
.mini-bar {
width: 100%;
max-width: 20px;
border-radius: 4px 4px 1px 1px;
min-height: 6px;
transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.mini-bar.publish {
background: linear-gradient(180deg, #34d399, #10b981);
}
.mini-bar.offline {
background: linear-gradient(180deg, #fbbf24, #f59e0b);
}
.mini-bar.trade {
background: linear-gradient(180deg, #60a5fa, #3b82f6);
}
.mini-bar-col em {
font-style: normal;
font-size: 10px;
color: #94a3b8;
}
.mini-bar-col b {
font-size: 11px;
color: #1e293b;
font-weight: 700;
}
/* ================= 渠道总览 ================= */
.channel-summary-title {
font-size: 14px;
font-weight: 700;
color: #334155;
margin: 16px 0 10px;
}
.listing-channel-summary {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
margin-bottom: 20px;
}
.listing-channel-item {
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 12px;
padding: 14px;
transition: all 0.2s ease;
}
.listing-channel-item:hover {
background: #ffffff;
border-color: #cbd5e1;
box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05);
}
.listing-channel-item-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 8px;
}
.channel-name {
font-size: 13.5px;
font-weight: 700;
color: #1e293b;
}
.channel-total {
font-size: 18px;
font-weight: 800;
color: #3b82f6;
}
.listing-channel-counts {
display: flex;
flex-direction: column;
gap: 4px;
}
.count-tag {
font-size: 11.5px;
font-weight: 600;
}
.count-tag.publish {
color: #059669;
}
.count-tag.offline {
color: #d97706;
}
.count-tag.trade {
color: #2563eb;
}
.trend-table-wrap {
margin-bottom: 20px;
}
.listing-channel-block {
margin-top: 20px;
}
.listing-uploader-block {
margin-top: 20px;
}
.listing-uploader-summary {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 12px;
margin-bottom: 20px;
}
.listing-uploader-item {
display: flex;
align-items: baseline;
gap: 8px;
border: 1px solid #dbeafe;
border-radius: 10px;
background: #eff6ff;
padding: 14px;
}
.uploader-name {
overflow: hidden;
color: #1e3a8a;
font-size: 13.5px;
font-weight: 700;
text-overflow: ellipsis;
white-space: nowrap;
}
.uploader-total {
margin-left: auto;
color: #2563eb;
font-size: 20px;
font-weight: 800;
}
.uploader-unit {
color: #64748b;
font-size: 11.5px;
white-space: nowrap;
}
.channel-badge {
font-weight: 600;
}
.trend-val {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-weight: 700;
font-size: 12.5px;
}
.text-emerald {
color: #059669;
}
.text-amber {
color: #d97706;
}
.text-blue {
color: #2563eb;
}
.text-slate {
color: #475569;
}
/* ================= 待处理事项 & 快捷入口 ================= */
.dashboard-panels-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 20px;
}
.panel-card {
display: flex;
flex-direction: column;
}
.panel-header-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.panel-header-title {
display: flex;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
color: #1e293b;
}
.panel-icon {
font-size: 18px;
}
.amber-icon {
color: #f59e0b;
}
.blue-icon {
color: #3b82f6;
}
.pending-total-badge {
font-size: 12px;
font-weight: 600;
color: #64748b;
background: #f1f5f9;
padding: 3px 10px;
border-radius: 20px;
}
.pending-total-badge.has-pending {
color: #e11d48;
background: #fff1f2;
}
.pending-list-group {
display: flex;
flex-direction: column;
gap: 8px;
}
.pending-item-card {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 12px;
text-decoration: none;
transition: all 0.2s ease;
}
.pending-item-card:hover:not(.static-card) {
background: #ffffff;
border-color: #cbd5e1;
box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05);
transform: translateX(2px);
}
.pending-info {
display: flex;
flex-direction: column;
gap: 2px;
}
.pending-label {
font-size: 13.5px;
font-weight: 700;
color: #1e293b;
}
.pending-desc {
font-size: 11.5px;
color: #94a3b8;
}
.pending-badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
height: 28px;
padding: 0 8px;
border-radius: 14px;
font-size: 13px;
font-weight: 800;
}
.badge-urgent {
background: #fff1f2;
color: #e11d48;
border: 1px solid #fecdd3;
}
.badge-zero {
background: #f1f5f9;
color: #94a3b8;
}
/* ================= 快捷入口 ================= */
.quick-nav-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
}
.quick-tile {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 10px;
padding: 18px 12px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 14px;
text-decoration: none;
transition: all 0.2s ease;
}
.quick-tile:hover {
background: #ffffff;
border-color: #cbd5e1;
box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
transform: translateY(-2px);
}
.quick-icon-wrap {
width: 44px;
height: 44px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
}
.quick-icon-wrap.indigo {
background: #eef2ff;
color: #6366f1;
}
.quick-icon-wrap.blue {
background: #eff6ff;
color: #3b82f6;
}
.quick-icon-wrap.rose {
background: #fff1f2;
color: #f43f5e;
}
.quick-icon-wrap.emerald {
background: #ecfdf5;
color: #10b981;
}
.quick-icon-wrap.teal {
background: #f0fdfa;
color: #0d9488;
}
.quick-icon-wrap.slate {
background: #f1f5f9;
color: #64748b;
}
.quick-title {
font-size: 12.5px;
font-weight: 700;
color: #334155;
}
/* ================= 表格容器与通用组件 ================= */
.table-section-card {
padding-bottom: 16px;
}
.table-card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.table-header-title {
display: flex;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
color: #1e293b;
}
.view-all-link {
font-size: 12.5px;
font-weight: 600;
color: #3b82f6;
text-decoration: none;
}
.view-all-link:hover {
text-decoration: underline;
}
.table-container {
border-radius: 12px;
overflow: hidden;
border: 1px solid #e2e8f0;
}
.custom-enterprise-table :deep(.el-table__header-wrapper th) {
background-color: #f8fafc !important;
color: #475569;
font-size: 13px;
font-weight: 600;
padding: 12px 0;
border-bottom: 1px solid #e2e8f0;
}
.custom-enterprise-table :deep(.el-table__body-wrapper td) {
padding: 12px 0;
font-size: 13px;
color: #334155;
}
.order-link {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 12.5px;
font-weight: 600;
color: #3b82f6;
text-decoration: none;
}
.order-link:hover {
text-decoration: underline;
}
.mono-code {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 12px;
color: #64748b;
}
.status-tag {
font-weight: 600;
}
.amount-val {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 13.5px;
font-weight: 700;
color: #0f172a;
}
.time-cell {
font-size: 12px;
color: #64748b;
}
.dispute-type {
font-size: 12.5px;
color: #475569;
}
@media (max-width: 1100px) {
.listing-daily-grid {
grid-template-columns: 1fr;
}
.dashboard-panels-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.quick-nav-grid {
grid-template-columns: repeat(2, 1fr);
}
}