修改完成

This commit is contained in:
2026-07-21 07:53:03 +08:00
parent 01d246c47b
commit ff60119277
172 changed files with 7982 additions and 2999 deletions
@@ -0,0 +1,50 @@
# 全活动页面业务所有权与成熟度收敛设计
## 目标
在不接业务接口、不改变现有浅色国风视觉体系的前提下,把 52 个活动路由从“视觉覆盖稿”收敛为可独立理解、可本地操作、可扩容的 H5 产品候选。共享组件只负责背景、页头、按钮、弹窗、提示和加载等视觉原语;每个业务页面必须自己拥有字段、内容结构、状态语义、入口与下一步。
## 已确认根因
`components/ModulePage.vue``data/page-catalog.js` 当前同时拥有 F/R/N/M 23 个路由的业务结构和交互。不同任务只替换标题、字段数组或模板类型,造成动态详情、谱文、相册、贺礼、礼仪、成长日志、消息详情、个人资料、安全、帮助、反馈、推广、订单和关于页共享同一套“查看详情/提交后成功”行为。历史规划已经把它定义为第一版覆盖工具而非最终视觉答案,因此用户对同质化的怀疑成立。
## 五方案比较
1. **继续沿用单一 `ModulePage`**:改动最少,但业务含义继续由模板猜测,不能成为成熟产品,淘汰。
2. **扩大 `pageCatalog` 配置协议**:可补字段类型和动作,但会把页面逻辑继续集中到一个巨型解释器,配置与运行时容易分叉,淘汰。
3. **按 form/list/detail/timeline/settings 拆五个业务组件**:比单一母版清晰,但“同样是表单”不代表个人资料、密码、礼仪和反馈拥有相同验证与状态,仅作为视觉结构参考。
4. **每页复制完整视觉与业务代码**:业务独立但重复背景、页头、按钮和状态样式,后续全局调整风险过高,淘汰。
5. **共享视觉原语、页面拥有业务(最优)**:活动路由不再委托 `ModulePage``pageCatalog`;每页直接声明真实本地数据、字段类型、状态和动作,只复用 `ModulePageBackground``PageHeader``AppButton``AppDialog``AppToast``AppLoading` 等稳定视觉原语与公共样式。
## 所有权边界
- 页面拥有:业务文案、字段与输入类型、列表项目结构、空/加载/失败/权限/失效/成功状态、校验、确认动作、入口和返回目标。
- 公共组件拥有:模块长背景、顶部/底部导航、按钮表面、卷轴弹窗、Toast、Loading、稳定卡片皮肤映射。
- `ModulePage.vue``page-catalog.js` 不再是活动路由入口;为遵守现有文件保留要求,文件保留为封存历史实现,并由合同禁止活动页面引用。
- 不接 `utils/api.js`;页面使用真实语义的本地 mock 数据与查询参数状态,接口阶段替换数据源而不重写视觉结构。
## 分模块业务内容
- F:动态详情/评论、谱文列表与详情、相册列表必须各自拥有内容和动作;编辑、上传与待开放页沿用现有独立实现。
- R:贺礼、礼仪、成长日志、人生事、备忘、功德分别拥有对应金额/关系/时间/地点/人物/提醒/贡献字段,不再是通用卡片换标题。
- N:消息详情拥有消息类型、时间、正文、已读与业务去向。
- M:资料、安全、改密、改手机、帮助、反馈、推广、订单、关于分别拥有正确控件、校验、确认与状态。
- A/G/T:保留现有独立页面,重点复核共享组件边界、长数据、长文本、状态与导航,不为了统一而退回母版。
## 数据驱动与视觉规则
- 普通内容由文档流自然撑高;列表使用数组渲染,不写死项目数。
- 文字允许换行;只有真实媒体缩略图、图标和结构画布可精确裁切。
- 表单使用与语义匹配的 `input` 类型和 `textarea auto-height`;长列表末项必须可达。
- 四档 H5320×568、360×640、360×800、412×915;压力覆盖 1/10/50 条、三倍长文案和 1.3 倍字号模拟。
- 视觉继续使用仓库现有真实位图资产,不新增 CSS 伪装饰、占位资产或手绘 SVG。
## 验收
1. 52 个活动路由均能被 Vite 转换并通过静态资产、定位、数据容量合同。
2. 活动页面对 `ModulePage` 的引用为 0;页面目录不再是活动业务合同。
3. 每个替换页至少有一个页面专属合同,验证核心字段、状态、动作、路由和禁止项。
4. 四档运行 smoke 无横向溢出,长内容不裁切,主动作和末项可达。
5. 代表页面与同模块长期参考图同尺寸比较;视觉自审不能替用户的最终 `[x]`,但代码与候选状态必须完整记录。
6. 不宣称接口、Android/HBuilderX、系统字体缩放或真实系统权限完成。
@@ -0,0 +1,72 @@
# 全项目数据驱动布局审核设计
> 日期:2026-07-20
> 阶段:H5 视觉与布局韧性,不接接口,不宣称 Android 完成
> 约束:不使用多代理或 worktree,不执行 Git 写操作,不删除源码、测试、文档、长期截图或实际资产
## 目标
在全项目文档流迁移完成后,再以真实数据增长为前提审核 `pages/``components/`、52 条活动路由及封存 A06。当前 Mock 数量或短文案能显示正常,不再视为数据驱动布局通过。
审核必须证明:列表、卡片、表单、弹层、相册、世系树和共享组件能够由数据数量、文案长度和字号自然驱动;固定尺寸只用于图标、媒体比例、明确的装饰槽位和视口级导航等稳定视觉边界。
## 压力基线
- 列表:1、10、50 条。
- 弹层列表:2、6、12、50 条;内容先自然增长,达到视口上限后仅列表区滚动。
- 相册/上传网格:1、9、30 张。
- 世系树:1、5、10 个世代;单代 1、6、12 个成员;节点和关系线边界由数据计算。
- 文案:正常、2 倍、3 倍长度,覆盖长谱名、长姓名、堂号、地区、支系、身份、状态、说明和按钮文案。
- 字号:默认与约 1.3 倍。
- 视口:320×568、360×640、360×800、412×915。
## 审核分类
1. 普通页面和共享卡片:检查固定 `height`、固定 grid 行、`overflow: hidden`、单行截断、不可换行和固定项目数量假设。
2. 列表和目录:检查数据增加后页面自然增长、末项可达、底部导航避让和滚动所有权。
3. 弹层和底部层:检查少量内容自然增长、大量内容达到 `max-height` 后内部滚动、标题和操作区不被挤出。
4. 表单和状态页:检查错误文案、长标签、长输入值、键盘前后及成功/失败信息自然撑高。
5. 媒体网格:检查项目数量改变、长说明、失败状态和当前项标识;媒体缩略图可保留稳定 `aspect-ratio`
6. 世系树:检查画布宽高、世代轨道、节点坐标和关系线是否由数据边界推导;不允许固定 `900rpx` 或固定 180×180 网格成为容量上限。
## 每项问题的五方案决策
每个确认问题都必须记录下列五种候选方案,并按该问题的内容类型选择最优方案,不机械套用同一种 CSS:
1. **扩大固定尺寸**:改动最小,但只是推迟溢出,默认淘汰。
2. **增加尺寸断点**:适合设备差异,不解决未知数据量,通常只作补充。
3. **容器限高并滚动**:适合弹层、独立列表和全屏画布;普通卡片不使用。
4. **正常文档流自然撑高**:适合正文、表单、状态卡、普通列表卡和长文案;为普通内容首选。
5. **由数据计算布局边界**:适合世系树、媒体网格、可变列数和结构化关系;由数据推导行列、画布和连接关系。
选择顺序:普通内容优先方案 4;独立滚动容器优先方案 3;结构化画布优先方案 5。方案 1 不作为最终修复,方案 2 只处理确实由视口造成的差异。
## 实施规则
- 先建立全局静态容量合同,列出风险选择器,但对白名单视觉边界做精确说明,不能简单禁止所有固定尺寸。
- 每个确认问题先添加最小失败测试并看到预期 RED,再修改源码。
- 卡片默认使用 `min-height` 和自然撑高;文本默认允许换行。只有同时存在完整值查看路径、非关键摘要语义和明确空间边界时才允许省略号。
- 页面主列表使用正常文档流;弹层列表、固定导航下的独立区域和世系画布可以拥有明确滚动容器。
- 背景图使用 `background`、九宫格或稳定比例承载装饰,不让装饰图高度决定正文容量。
- 不改变接口、路由、业务状态含义、当前视觉资产和用户已确认的色彩/字体/装饰语言。
## 验证与证据
1. 静态容量合同为零未解释风险。
2. 每类页面运行压力数据 smoke,检查横向溢出、内容裁切、末项可达、滚动所有权和操作区可达。
3. 使用唯一 51739222 Chrome 项目页,在四档尺寸获取当前审核运行的新截图。
4. 修改后再次获取同状态、同尺寸截图;将修改前后放入同一比较图检查可见变化。
5. 自动化与截图只能证明候选稳定,不能代替用户视觉确认或新增 `[x]`
## 已知首轮风险
- T01 使用固定 `900rpx` 画布、固定 180×180 网格及固定世代轨道行高,属于高风险。
- G05 使用百分比固定行轨道和局部固定行高,长文案可能挤压。
- G06 结果卡在可增长内容上保留 `overflow: hidden`,存在裁切风险。
- T07 成员卡固定高度,姓名和成员信息强制单行省略,存在长数据风险。
- 共享 `GenealogyCard` 的谱名、元信息、角色与更新时间多处不换行,存在真实数据截断风险。
- G01 切换家谱弹层已验证 2/6/12 条可增长与滚动,是可复用的弹层容量参考。
## 完成边界
本轮完成只表示 H5 数据容量候选通过源码合同、压力运行和同尺寸视觉回归。A06 封存路由只做静态检查;Android/HBuilderX、系统键盘、真实接口数据和设备级字体缩放仍需后续单独验证。既有 `foundation-asset-audit``repository-handoff-size-contract` 失败不得通过放宽阈值或删除长期资料处理。
@@ -6,7 +6,11 @@
## 当前证据
只读审计发现 37 个 Vue 文件包含 `position: absolute|fixed|sticky`。用法混合了正常内容、装饰图层、页面背景、Tabbar、世系关系线和真实弹层,不能机械删除。R02 已证明普通文字、字段标签和输入框也被定位到装饰图之上,系统字体、长文案、键盘或尺寸变化时存在重叠风险。
只读审计发现 37 个 Vue 文件包含 `position: absolute|fixed|sticky`,漏掉了普通容器上的 `relative`,因此旧“剩余 112 条”无效。2026-07-20 扩展合同后,新口径发现 35 个文件存在 390 条未白名单 `position` 声明,其中 278 条为 `relative`F10 一页即有 6 条无意义 `relative`。用法混合了正常内容、装饰图层、页面背景、Tabbar、世系关系线和真实弹层,不能机械删除。R02 已证明普通文字、字段标签和输入框也被定位到装饰图之上,系统字体、长文案、键盘或尺寸变化时存在重叠风险。
## 执行状态
2026-07-20 已按本设计完成全项目源码迁移。合同从上述 390 条未白名单声明收敛为零,并增加失效白名单检查,保证白名单与源码实际定位逐项对应。迁移覆盖共享组件、R/N/M/F/G/T/A 页面及封存 A06;普通内容改用正常文档流、flex、grid 或 grid 同单元叠放,只有本设计列出的明确职责保留定位。H5 同尺寸回归未发现语义性可见变化,但这不替代用户确认;本次不新增视觉 `[x]`,不宣称 Android 或接口完成。
## 单一合同
@@ -20,12 +24,13 @@
## 迁移顺序
1. 建立合同精确白名单 37 文件初始清单,测试先失败并输出全部违规位置。
2. R02 作为第一张页面样板:人物题签、档案卡、表单、状态卡全部改为背景 + flex/grid 文档流
3. 迁移共享控件:AppButton、PageHeader、AppTabbar、ModulePageBackground、GenealogyPageBackground、GenealogyCardPageHeader 与 AppTabbar 保留用户指定的 fixed 白名单,清除其内部普通内容和装饰定位;弹层组件保留白名单定位
4. 迁移 `ModulePage`,让普通 F/R/N/M 页面共享文档流结构
5. 按 R → N → M → F → G → T → A 迁移专属页面;A06 源码也纳入静态合同
6. 每批执行聚焦合同、现有交互 smoke、四档响应式、真实截图和 `git diff --check`
1. 建立扫描全部 `position`合同精确白名单,以 35 文件/390 条未白名单声明作为新初始基线;测试先失败并输出全部违规位置。
2. F10 先移除页面根容器、Header/Content、正文和卡片的 6 条无意义 `relative`,作为新口径最小返工样板
3. T01 随后迁移世代栏与成员节点;节点正文使用 grid/flex,关系线只保留经审计的局部绘制职责
4. 复核 R02 样板并迁移共享控件:AppButton、PageHeader、AppTabbar、ModulePageBackground、GenealogyPageBackground、GenealogyCardPageHeader 与 AppTabbar 保留用户指定的 fixed 白名单,清除其内部普通内容定位;弹层组件保留白名单定位
5. 迁移 `ModulePage`,让普通 F/R/N/M 页面共享文档流结构
6. 按 R → N → M → F → G → T → A 迁移其余专属页面;A06 源码也纳入静态合同
7. 每批执行聚焦合同、现有交互 smoke、四档响应式、真实截图和 `git diff --check`
## 冻结页
@@ -33,7 +38,7 @@
## 验收门槛
- 全项目合同最终为零违规白名单只含固定顶部/底部导航和真实弹层
- 全项目合同最终为零未白名单违规白名单只含固定顶部/底部导航、独立视口背景、真实弹层/Toast/遮罩/底部弹层/全屏预览,以及经审计确有必要的局部装饰、角标和关系线
- 52 条活动路由和封存 A06 源码均被扫描。
- 四档固定为 320×568、360×640、360×800、412×915。
- 长文案、约 1.3 倍字号、输入校验和键盘场景不重叠,操作区可滚动到达。