12 KiB
管理端框架与工作台参考图重设计实施计划
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 严格按照管理端参考图重构全局框架与工作台,同时保持现有路由、权限和业务页面可用。
Architecture: 由全局 Token 和背景资产提供视觉基础,MainLayout.vue 负责外框、侧栏和顶部栏,独立 dashboard service/adapter 负责聚合现有统计与活动 API,DashboardView.vue 只负责呈现六指标和四个业务区块。
Tech Stack: Vue 3、TypeScript、Vite、Pinia、Element Plus、Node.js contracts、浏览器截图
Spec: docs/superpowers/specs/2026-09-13-reference-driven-dual-client-ui-redesign-design.md
Global Constraints
- 只重构全局框架与工作台,不逐页重写业务模块。
- 菜单继续由服务端权限映射控制。
- 统计数字和活动数据来自现有 API,不硬编码参考图演示值。
- 背景和品牌素材本地化,不增加境外运行时依赖。
- 支持
1366×768与1920×1080,不使用整体缩放。
Task 1: 锁定管理端参考图契约与资产
Files:
- Create:
ui-tests/admin-reference-contracts.mjs - Create:
admin-web/public/brand/admin-danyang-backdrop.jpg - Keep:
admin-web/public/brand/logo-mark.png - Modify:
admin-web/src/theme/index.css - Test:
ui-tests/admin-reference-contracts.mjs
Interfaces:
-
Consumes: 管理端参考图和现有
logo-mark.png。 -
Produces:
--admin-*视觉 Token、正式背景资产和失败优先契约。 -
Step 1: 编写失败的视觉契约
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 = (p) => readFileSync(resolve(root, p), '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']) {
assert.ok(theme.includes(token), `缺少管理端参考图令牌 ${token}`)
}
assert.ok(existsSync(resolve(root, 'admin-web/public/brand/admin-danyang-backdrop.jpg')))
for (const item of ['工作台','用户管理','资料审核','匹配管理','公益红娘','公益咨询','活动管理','内容管理','善缘服务站','举报风控','数据统计','组织人员','系统设置']) {
assert.ok(layout.includes(item), `侧栏缺少 ${item}`)
}
assert.match(dashboard, /class="metric-card/, '工作台缺少指标卡结构')
assert.match(dashboard, /metrics/, '工作台缺少指标数据绑定')
for (const title of ['今日待办事项','近期公益活动','服务数据概览','项目服务成效']) assert.ok(dashboard.includes(title))
console.log('Admin reference contracts passed')
- Step 2: 运行契约确认失败
Run: node ui-tests/admin-reference-contracts.mjs
Expected: FAIL,至少缺少新 Token、背景资产或六项指标。
- Step 3: 生成并检查背景资产
使用参考图风格生成不含 UI 文字的浅粉丹阳城市背景,包含塔、桥、远山、爱心和低对比人物剪影;输出 1920×1080 JPG。生成后检查无乱码文字、无第三方 Logo、主要装饰不遮挡中央系统容器。
- Step 4: 建立主题 Token
:root {
--admin-coral: #f45f68;
--admin-coral-soft: #fff0f1;
--admin-shell-bg: rgba(255, 255, 255, 0.96);
--admin-sidebar-bg: #202d38;
--admin-page-bg: #f7f9fb;
--admin-card-radius: 14px;
--admin-shell-radius: 22px;
--admin-shadow: 0 18px 48px rgba(57, 40, 45, 0.14);
}
- Step 5: 运行契约并提交基础
node ui-tests/admin-reference-contracts.mjs
git add -- ui-tests/admin-reference-contracts.mjs admin-web/public/brand admin-web/src/theme/index.css
git commit -m "feat: establish admin reference design foundation"
Expected: 契约可能继续因布局未完成而失败,但 Token 和资产断言通过。
Task 2: 重构全局框架、侧栏与顶部栏
Files:
- Modify:
admin-web/src/layouts/MainLayout.vue - Modify:
admin-web/src/router/index.ts(仅在需要给现有路由补充菜单元数据时) - Test:
ui-tests/admin-reference-contracts.mjs
Interfaces:
-
Consumes:
useAuthStore().permissions、现有路由、主题 Token 和品牌资产。 -
Produces:
.admin-scene、.admin-shell、.admin-sidebar、.admin-topbar四层框架。 -
Step 1: 为框架结构补充失败断言
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/)
- Step 2: 运行断言确认失败
Run: node ui-tests/admin-reference-contracts.mjs
Expected: FAIL,报告缺少新框架结构。
- Step 3: 实现参考图布局
将外层背景、中央圆角壳、约 208px 深色侧栏、64px 顶栏和滚动内容区分层实现。侧栏按参考图名称组织现有路由;多个现有路由归入同一一级入口时使用模块内二级菜单,不删除路由。
- Step 4: 保持权限与操作反馈
搜索框必须有可操作状态;通知入口提供抽屉或明确提示;管理员菜单保留退出登录。无权限入口不渲染,路由守卫继续后端权限同名校验。
- Step 5: 验证框架
node ui-tests/admin-reference-contracts.mjs
npm --prefix admin-web run type-check
npm --prefix admin-web run build
Expected: 类型检查和构建 PASS;契约只可能因工作台尚未完成而失败。
- Step 6: 提交框架
git add -- admin-web/src/layouts/MainLayout.vue admin-web/src/router/index.ts ui-tests/admin-reference-contracts.mjs
git commit -m "feat: rebuild admin shell from reference"
Task 3: 建立工作台数据适配层
Files:
- Create:
admin-web/src/services/dashboard.ts - Create:
admin-web/src/types/dashboard.ts - Create:
ui-tests/admin-dashboard-data-contracts.mjs - Modify:
admin-web/src/views/DashboardView.vue - Test:
ui-tests/admin-dashboard-data-contracts.mjs
Interfaces:
-
Consumes:
GET /operator/analytics/dashboard、GET /operator/analytics/v11-dashboard和现有活动列表接口。 -
Produces:
DashboardModel,包含metrics[6]、todos、activities、serviceOverview、effectiveness。 -
Step 1: 定义工作台模型
export interface DashboardMetric { key: string; label: string; value: number; trendText: string; tone: 'rose'|'amber'|'blue'|'green'|'purple' }
export interface DashboardTodo { key: string; title: string; description: string; count: number; actionText: string; route: string }
export interface DashboardActivity { id: string; title: string; coverUrl: string; startAt: string; locationName: string; registered: number; capacity: number; statusText: string }
export interface DashboardModel {
metrics: DashboardMetric[]
todos: DashboardTodo[]
activities: DashboardActivity[]
serviceOverview: Array<{ key: string; label: string; value: number; compareText: string }>
effectiveness: Array<{ key: string; label: string; value: number; max: number; unit: string }>
}
- Step 2: 编写失败的数据契约
契约读取 dashboard.ts,断言导出 loadDashboard、设置请求超时、失败时返回显式错误而不是演示数字,并断言类型文件包含上述五个字段。
- Step 3: 实现并发加载与适配
使用现有 api/client.ts 并发读取授权接口。缺少某一接口权限时,仅将对应模块标记为不可用;不得用 || 3、|| 12 等演示值替代真实的 0。
- Step 4: 验证数据层
node ui-tests/admin-dashboard-data-contracts.mjs
npm --prefix admin-web run type-check
Expected: PASS;无硬编码非零业务统计。
- Step 5: 提交数据适配层
git add -- admin-web/src/services/dashboard.ts admin-web/src/types/dashboard.ts admin-web/src/views/DashboardView.vue ui-tests/admin-dashboard-data-contracts.mjs
git commit -m "feat: add admin dashboard data adapter"
Task 4: 实现六指标与四个工作台区块
Files:
- Modify:
admin-web/src/views/DashboardView.vue - Modify:
admin-web/src/theme/index.css - Test:
ui-tests/admin-reference-contracts.mjs
Interfaces:
-
Consumes:
loadDashboard(): Promise<DashboardModel>。 -
Produces:
.dashboard-metrics、.todo-panel、.activity-panel、.service-overview-panel、.effectiveness-panel。 -
Step 1: 将完整工作台结构加入契约
断言六个 metric-card、四个标题、Loading、Empty、Error/Retry 和无权限状态类名全部存在。
- Step 2: 运行契约确认失败
Run: node ui-tests/admin-reference-contracts.mjs
Expected: FAIL,报告缺少新工作台结构或状态。
- Step 3: 实现欢迎区与六项指标
六项指标使用一行卡片;在 1366px 可缩小间距与字号但不隐藏指标。日期使用 zh-CN 与 Asia/Shanghai,不接入外部天气服务。
- Step 4: 实现四个内容区块
桌面宽度使用两列布局:今日待办/近期活动、服务数据/项目成效。活动封面失败时使用本地默认图;进度条的 max 为 0 时显示 0%,避免除零。
- Step 5: 实现状态与操作
加载显示骨架;接口失败显示重试;数组为空显示紧凑空状态;待办操作按现有路由跳转;无权限区块不显示敏感数字。
- Step 6: 验证并提交工作台
node ui-tests/admin-reference-contracts.mjs
node ui-tests/admin-dashboard-data-contracts.mjs
npm --prefix admin-web run type-check
npm --prefix admin-web run build
git add -- admin-web/src/views/DashboardView.vue admin-web/src/theme/index.css
git commit -m "feat: recreate admin dashboard from reference"
Expected: 所有自动化门禁 PASS。
Task 5: 浏览器视觉 QA 与人工验收
Files:
- Create:
artifacts/ui-redesign/admin/dashboard-1366x768.png - Create:
artifacts/ui-redesign/admin/dashboard-1920x1080.png - Create:
artifacts/ui-redesign/admin/dashboard-comparison.png - Create:
docs/ADMIN_REFERENCE_UI_QA_2026-09-13.md
Interfaces:
-
Consumes: 运行中的 Docker 后端与管理端开发服务器、管理端参考图。
-
Produces: 两种尺寸截图、并排对比和差异结论。
-
Step 1: 启动并打开真实管理端
docker compose -f infrastructure/docker-compose.yml ps
npm --prefix admin-web run dev -- --host 0.0.0.0
Expected: 后端可访问,管理端页面能登录并进入 /dashboard。
- Step 2: 检查主要交互和控制台
验证菜单跳转、权限隐藏、搜索反馈、通知反馈、管理员菜单、退出登录、待办跳转和重试;浏览器控制台无未处理错误。
- Step 3: 分别截图并制作对比图
在 1366×768 和 1920×1080 真实 viewport 截图。对比背景氛围、侧栏宽度、顶栏高度、六卡一行、两列面板、圆角、阴影、颜色和信息密度。
- Step 4: 修复差异并重新截图
所有 P0/P1/P2 差异修复后覆盖最终截图;报告记录仍存在但经确认可接受的差异。
- Step 5: 最终验证与提交
node ui-tests/admin-reference-contracts.mjs
npm --prefix admin-web run type-check
npm --prefix admin-web run build
git add -- artifacts/ui-redesign/admin docs/ADMIN_REFERENCE_UI_QA_2026-09-13.md admin-web
git commit -m "test: verify admin reference UI fidelity"
Expected: 自动化 PASS;人工验收后才可进入小程序计划。