Files
crawler-plugin/docs/specs/13-admin-html-visual-alignment.md
T

91 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 13 AdminHtml 观感与交互对齐(蓝白浅色)Spec
> **状态(task-283)**:对齐工作已全部完成,本 spec 所引用的基线文件(`backend/web_source/admin.html`、`backend/static/admin.js`、`admin-interactions.js` 及 Java 侧 static 副本)已按 spec 11 阶段 5 删除;历史内容保留于 git 中(`git log -- backend/web_source/admin.html` 可查),本 spec 作为过程记录不再可逐行对照。
## 模块职责
`admin-frontend-vue`Vue3 + Element Plus 后台 SPA)的**壳层与 15 个业务页面**在观感与交互上对齐旧 Flask 后台 `backend/web_source/admin.html` 的**现行「蓝白浅色」皮肤**与 `backend/static/admin.js` / `admin-interactions.js` 的交互文案,实现从旧后台切换到新后台时用户无感。**DuplicateCheckPage(店铺撞款监控,menuKey `admin_shop_data_duplicate_check`)为例外页:保留其自身设计,本次不比对、不修改。**
## 依赖关系
- **上游(冻结参照,禁止改动)**:
- `backend/web_source/admin.html` —— 面板 markup + CSS(4 代主题纵向堆叠,**最终生效 = 末层 L4477-4830「蓝白色调」亮色皮肤**)
- `backend/static/admin.js`(7206 行)—— 各面板交互与用户可见文案
- `backend/static/admin-interactions.js`(333 行)—— 全局确认框/Toast/按钮 title 语义
- Java 侧镜像副本 `backend-java/src/main/resources/static/admin.html` + `static/static/admin.*`
- **下游**`admin-frontend-vue`src/layout、src/styles、src/pages/*、src/components/*、src/api 适配、tests/task-NNN.test.ts、e2e/)。
- **例外页**`src/pages/tasks/DuplicateCheckPage.vue` 不改。
## 基线:admin.html 蓝白浅色皮肤(对齐目标值)
最终生效 tokenadmin.html L4478 :root):
- 主色 `#4f78a5`,主色强 `#2f5d8b`,主色浅 `#e7f0f8`,按钮渐变 `#5f85ad→#4f78a5`
- 内容底 `#f4f7fb`body 叠加两团淡蓝 radial 晕染),卡片白、卡片抬升 `#f9fbfd`
- **浅色侧栏** `#f8fbfe→#edf3f9`(渐变),侧栏文字 `#536a81`
- 边框 `#d8e3ee`(强 `#b7c9db`)、文字 `#24384d` / 次 `#5b6f83` / 弱 `#8293a5`
- danger `#b35f6a`(渐变 `#c06d77→#b35f6a`)、success `#4e806d`、warning `#a8793e`
- radius 14px(卡片/按钮),9px(控件);卡片阴影 `0 1px 2px rgba(39,67,94,.04),0 14px 30px -24px rgba(39,67,94,.28)`
壳层密度:侧栏 252px(折叠 64px)、顶栏 76pxsticky 半透明白 blur8)、菜单项 min-height 42px、品牌 mark 36px、内容 padding `30px 32px 56px`、kicker 10px/700 + 面包屑 + 页题 18px/650、角色胶囊(#2f5d8b/#e6f0f8/#bfd1e2)。
组件观感基线(详见 plan/任务 241-248 展开):
- 按钮 `.btn`(渐变蓝、min-height42、shadow)、`.btn-secondary``.btn-danger``.btn-sm`(行内 36px
- 表单 `.form-group label` 上置、控件 min-height42、focus 蓝 ring `0 0 0 3px rgba(95,133,173,.16)`
- 表格 `.table-scroll`:外框 1px `#dbe5ee` radius10、th `#edf4fa` 12.5px/600、td 13.5px、hover `#f1f7fb`、无斑马
- 分页:非数字页码「共 N 条 · 上一页 · 第 x / y 页 · 下一页 · 跳至[ ] 跳转」
- 弹窗 `.modal`radius14、width min(920px,…))、右侧 `.drawer`min(460px,…))三段式;撞款锚点抽屉除外
- Toast 右上角(成功绿/错误红/信息蓝前徽);二次确认(遮罩 blur + 橙底感叹图标 + [取消][确认删除]);顶部 3px 进度条 + 右上「请求处理中...」
- 空态 `.empty-tip`、行内 `暂无 X`;面板头统一「h3 与操作按钮同行」
## 面板 ↔ Vue 页面映射(权威,以 Vue menuKey 为准)
| admin.html panel | admin 菜单名 | Vue menuKey | Vue 页面文件 | 业务命名差异/备注 |
|---|---|---|---|---|
| panel-users | 用户管理 | admin_users | account/UsersPage.vue | — |
| panel-columns | 菜单权限配置 | admin_columns | account/MenusPage.vue | 列/交互以 admin 为准 |
| panel-group-manage | 分组管理 | admin_group_manage | account/GroupsPage.vue | 需补编辑器+选人 |
| panel-dedupe-total-data | 去重数据汇总 | admin_dedupe_total_data | asin/DedupeRegistryPage.vue | 需补导入/导出/筛选 |
| panel-invalid-asin-data | 品牌数据库 | admin_invalid_asin_data | asin/AsinInvalidPage.vue | 同一 API /invalid-asin-dataVue 用业务名「不符合ASIN数据」,保留 |
| panel-query-asin | 查询ASIN | admin_query_asin | asin/QueryAsinPage.vue | 需补配置抽屉/导入 |
| panel-product-categories | 商品类目 | admin_product_categories | asin/ProductCategoryPage.vue | 需补懒加载/导出/删除 |
| panel-skip-price-asin | 最低价ASIN设置 | admin_skip_price_asin | asin/SkipPricePage.vue | 需补配置抽屉/导入 |
| panel-shop-keys | 店铺密钥管理 | admin_shop_keys | shop/ShopKeysPage.vue | 白名单药丸/令牌语义 |
| panel-shop-manage | 店铺管理 | admin_shop_manage | shop/ShopManagePage.vue | 凭证明文/眼睛实时读 |
| panel-image-video-tasks | 视频任务记录 | admin_image_video_tasks | tasks/ImageVideoTasksPage.vue | 需改卡片网格+播放 |
| panel-shop-data-crawl-tasks | 店铺数据记录 | admin_shop_data_crawl_tasks | tasks/ShopDataTasksPage.vue | 需改每店卡片网格 |
| panel-shop-data-duplicate-check | 店铺数据重复检查 | admin_shop_data_duplicate_check | tasks/DuplicateCheckPage.vue | **例外页,不动** |
| panel-history | 生成记录 | admin_history | records/RecordsHistoryPage.vue | 缩略图预览布局 |
| panel-version | 软件版本管理 | admin_version | records/RecordsSoftwareVersionPage.vue | — |
| panel-digital-human-version | 数字人版本管理 | digital_human_version | records/RecordsDigitalHumanVersionPage.vue | 状态色/操作矩阵 |
## 对齐契约类别(每个任务按此过一遍)
1. **观感**:色板/尺寸/圆角/阴影 = 上节基线;页面结构 = 「面板头(h3+按钮同行) + 筛选条 + 表格/卡片 + 分页脚」。
2. **交互逻辑**:筛选字段与提交方式、行内操作按钮集、弹窗/抽屉表单字段与校验、导入/导出/轮询/等待态、空/错/loading 态 —— 与 admin.js 对应段一致。
3. **用户可见文案**:页头描述、按钮名、确认框文案(删除“X”…)、成功/错误提示 —— 对齐 admin。
4. **复用优先**:优先接线已存在但未进 UI 的孤儿 TS 模块(如 user-create/user-edit/user-menu-auth、dedupe-total-export/import、query-asin-*/skip-price-*、product-category-export、history-*/version-*/digitalhuman-*、shop-*、image-video-*/shop-data-*),再补缺口,避免重复造。
5. **已知容忍项**:业务命名差异(品牌数据库→不符合ASIN数据)、admin 分页无页码为历史不一致(Vue 保留跳页但观感统一)、登录页独立设计不纳入。
## 实现顺序
1. A 换皮与共享基线(241-249)——先做,供后续页面直接受益。
2. B account250-253)→ C asin254-258)→ D records259-261)→ E shop262-263)→ F tasks264-267)。
3. G 收尾(268-272)。
## 迁移边界
- **改**admin-frontend-vue 内样式/布局/页面/共享组件/测试/e2e;主题单测随 token 翻转更新。
- **不改**`backend/web_source/admin.html``backend/static/admin.js``admin-interactions.js`、Java 侧 static 副本;DuplicateCheckPageJava 后端 API 契约(如遇后端缺口另开 Java 任务,不夹带)。
- 每任务仅 stage 本任务改动文件;不覆盖工作树他人未提交改动。
## 风险与验收标准
| 级别 | 验收点 | 证据 |
|---|---|---|
| P0 | 壳层与 15 页为蓝白浅色;颜色/尺寸对齐基线 | 截图对照 admin.htmltests 断言 token 与 CSS 变量 |
| P0 | 页面交互与文案对齐(含补齐缺失交互);无误导/死按钮 | 每页测试 + 真实交互 |
| P1 | 换皮不引入对比度/无障碍回归(WCAG AA) | theme 不变量测试 |
| P1 | 响应式/折叠/空错态/loading 语义一致 | e2e + 清单 |
| P2 | DuplicateCheckPage 与其余回归不受影响;全部旧提交不破坏 | git diff 校验例外页不变;全量 test+build |
| P2 | check_progress 闭合、总任务数 272 | check_progress.py 退出 0 |