feat: establish admin reference design foundation

This commit is contained in:
Codex
2026-09-13 21:34:43 +08:00
parent 3a634b4ef2
commit ad9d32f544
3 changed files with 74 additions and 6 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

+12 -6
View File
@@ -1,14 +1,20 @@
:root { :root {
--admin-sidebar-bg: #172733; --admin-coral: #f45f68;
--admin-sidebar-surface: #213542; --admin-coral-hover: #df505a;
--admin-coral-soft: #fff0f1;
--admin-shell-bg: rgba(255, 255, 255, 0.96);
--admin-sidebar-bg: #202d38;
--admin-sidebar-surface: #2b3a46;
--admin-sidebar-text: #D9E1E6; --admin-sidebar-text: #D9E1E6;
--admin-sidebar-muted: #8FA1AC; --admin-sidebar-muted: #8FA1AC;
--admin-page-bg: #FAFAF8; --admin-page-bg: #f7f9fb;
--admin-primary: #EE666B; --admin-primary: var(--admin-coral);
--admin-primary-hover: #D9545A; --admin-primary-hover: var(--admin-coral-hover);
--admin-card-radius: 14px; --admin-card-radius: 14px;
--admin-shell-radius: 22px;
--admin-shadow: 0 18px 48px rgba(57, 40, 45, 0.14);
--admin-header-bg: #FFFFFF; --admin-header-bg: #FFFFFF;
--admin-soft-pink: #FFF0F1; --admin-soft-pink: var(--admin-coral-soft);
--admin-soft-blue: #EEF5FF; --admin-soft-blue: #EEF5FF;
--admin-soft-green: #EDF8F1; --admin-soft-green: #EDF8F1;
--admin-soft-purple: #F4EFFF; --admin-soft-purple: #F4EFFF;
+62
View File
@@ -0,0 +1,62 @@
import assert from 'node:assert/strict'
import { existsSync, readFileSync } from 'node:fs'
import { resolve } from 'node:path'
const root = resolve(import.meta.dirname, '..')
const read = (path) => readFileSync(resolve(root, path), 'utf8')
const theme = read('admin-web/src/theme/index.css')
const layout = read('admin-web/src/layouts/MainLayout.vue')
const dashboard = read('admin-web/src/views/DashboardView.vue')
for (const token of [
'--admin-coral',
'--admin-shell-bg',
'--admin-sidebar-bg',
'--admin-card-radius',
'--admin-shell-radius',
'--admin-shadow',
]) {
assert.ok(theme.includes(token), `缺少管理端参考图令牌 ${token}`)
}
assert.ok(
existsSync(resolve(root, 'admin-web/public/brand/admin-danyang-backdrop.jpg')),
'缺少丹阳公益主题背景资产',
)
for (const className of ['admin-scene', 'admin-shell', 'admin-sidebar', 'admin-topbar', 'admin-content']) {
assert.ok(layout.includes(className), `缺少框架结构 ${className}`)
}
assert.match(layout, /admin-danyang-backdrop\.jpg/, '管理端外层未使用正式背景资产')
assert.match(layout, /permissions/, '侧栏未保留权限控制')
for (const item of [
'工作台', '用户管理', '资料审核', '匹配管理', '公益红娘', '公益咨询', '活动管理',
'内容管理', '善缘服务站', '举报风控', '数据统计', '组织人员', '系统设置',
]) {
assert.ok(layout.includes(item), `侧栏缺少 ${item}`)
}
for (const className of [
'dashboard-metrics',
'metric-card',
'todo-panel',
'activity-panel',
'service-overview-panel',
'effectiveness-panel',
'dashboard-loading',
'dashboard-empty',
'dashboard-error',
'dashboard-forbidden',
]) {
assert.ok(dashboard.includes(className), `工作台缺少状态或区块 ${className}`)
}
for (const title of ['今日待办事项', '近期公益活动', '服务数据概览', '项目服务成效']) {
assert.ok(dashboard.includes(title), `工作台缺少 ${title}`)
}
assert.match(dashboard, /metrics/, '工作台缺少指标数据绑定')
assert.match(dashboard, /Asia\/Shanghai/, '工作台日期未固定为中国时区')
console.log('Admin reference contracts passed')