Files
jiapuapp/docs/superpowers/plans/2026-07-20-project-document-flow-migration.md
T
2026-07-20 17:23:13 +08:00

74 lines
4.5 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.
# 全项目文档流迁移实施计划
> **执行要求:** 使用 `superpowers:executing-plans` 当前会话内联执行。用户禁止多代理、worktree 及全部 Git 写操作;不执行提交步骤。
**目标:** 除用户指定 fixed 的顶部/底部导航与真实弹层外,清除全项目页面内容的脱离文档流定位,并保持现有业务状态与视觉语言。
**架构:** 以一个静态合同和精确 JSON 白名单为单一规则所有者;先完成 R02 样板,再迁移共享组件和模块页面。每批通过现有 CDP smoke、四档响应式及同尺寸截图后进入下一批。
**技术栈:** uni-app Vue 3、SCSS、PowerShell、Node.js、Chrome CDP。
## 全局约束
- 禁止普通内容使用 `absolute/fixed/sticky`、负外边距或以位移 transform 承担布局;按钮按压等不改变排版的交互微动效可以保留。
- 允许定位的职责为固定顶部/底部导航、独立视口背景、真实弹层,以及受明确父容器约束的纯装饰、角标、红点和关系线,必须精确白名单。
- 不删除或重绘现有资产;装饰图优先改作 background/border-image,只有确需局部叠放时保留 absolute。
- 四档为 320×568、360×640、360×800、412×915。
- 每次只修改当前批次,验证失败立即停止扩散。
---
### 任务 1:建立全项目失败合同
**文件:**
- 新建:`tests/document-flow-position-allowlist.json`
- 新建:`tests/document-flow-position-contract.ps1`
- [ ] 白名单先登记 `PageHeader.vue` 的固定顶部栏、`AppTabbar.vue` 的固定底部栏、`AppDialog.vue` 的弹窗层/皮肤和 `AppToast.vue` 的 Toast;其他页面本地弹层在迁移到对应批次时逐项审计后登记。
- [ ] 合同扫描 `pages/**/*.vue``components/**/*.vue` 的 style 块,报告不在精确文件+选择器白名单内的 `absolute/fixed/sticky`
- [ ] 合同同时禁止普通选择器出现负 margin 和 `transform: translate(...)` 布局。
- [ ] 运行合同并保存初始 37 文件违规清单;预期 FAIL,不放宽规则。
### 任务 2R02 文档流样板
**文件:**
- 修改:`pages/records/r02-person-detail.vue`
- 修改:`tests/r02-person-detail-contract.ps1`
- 修改:`tests/r02-person-detail-runtime-smoke.js`
- [ ] 先扩展 R02 合同,禁止文件内 `absolute/fixed/sticky` 并要求题签、卡片、短字段、长字段和状态卡使用 background + flex/grid。
- [ ] 运行确认 RED。
- [ ] 删除装饰 `<image>` 叠层;对应容器使用 records 资产作为背景。
- [ ] 题签 copy、字段 label/input、textarea、状态文案全部使用文档流;容器高度由内容和 min-height 控制。
- [ ] 运行 R02 合同、入口交互 smoke、四档 smoke,捕获 412×915 详情和编辑态供复核。
### 任务 3:共享基础组件
**文件:** `components/AppButton.vue``PageHeader.vue``AppTabbar.vue``ModulePageBackground.vue``GenealogyPageBackground.vue``GenealogyCard.vue`
- [ ] 每个组件先新增聚焦合同并确认 RED。
- [ ] PageHeader 与 AppTabbar 保留 fixed,并分别提供正常流顶部占位和页面底部避让;按钮/Header 的局部装饰、角标与红点逐项判断,能用背景则转背景,必须叠放则精确白名单;独立视口背景层可保留 fixed。
- [ ] GenealogyCard 内容改 flex/grid,皮肤转背景。
- [ ] 对 G01、T07、F01、R01、N01、M01 六基准做四档和同尺寸回归。
### 任务 4:通用 ModulePage
**文件:** `components/ModulePage.vue` 及其聚焦测试
- [ ] 合同禁止普通表单、列表、详情、时间轴、设置和状态卡定位。
- [ ] 装饰图转背景;字段用 grid;卡片内容自然撑高。
- [ ] 执行全部消费 ModulePage 的路由 smoke 和四档回归。
### 任务 5:模块分批迁移
- [ ] R → N → M → F:每页先合同 RED,再改文档流,再跑模块四档。
- [ ] G:保留真实弹层白名单,页面卡片、表单、Header、背景全部文档流。
- [ ] T:目录和表单使用 grid/flex;T01 世系节点和关系线用 grid/border 重做。
- [ ] A:登录、注册、重置和封存 A06 的普通内容文档流;验证弹窗/Toast 保留精确白名单。
### 任务 6:最终收敛
- [ ] `tests/document-flow-position-contract.ps1` 最终 PASS,输出零普通内容违规。
- [ ] 运行活动路由转换、关键交互 smoke、四档响应式和 `git diff --check`
- [ ] 更新验收规划与交接记录,逐一说明冻结页是否保留 `[x]`;没有截图或用户确认不得宣称视觉冻结完成。