Files
danyang-match/docs/superpowers/plans/2026-09-13-admin-shell-dashboard-redesign.md

12 KiB
Raw Permalink Blame History

管理端框架与工作台参考图重设计实施计划

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;人工验收后才可进入小程序计划。