Review changes batch 6 of 6

This commit is contained in:
2026-07-20 06:52:33 +08:00
parent db97d3da27
commit 5a31a75da0
160 changed files with 9206 additions and 572 deletions
@@ -0,0 +1,102 @@
# G01 固定信息区与独立列表滚动设计
## 决定
G01“已有家谱”的正常列表态改为两段式布局:上方信息区固定,下方列表区独立纵向滚动。该决定只作用于 G01,不改变其他 G 页面,也不改变 G01 的业务数据、入口、卡片样式、背景或弹窗。
用户已通过可操作对比稿确认该方向。
## 固定范围
由上到下固定显示:
1. 红色“我的家谱”标题栏;
2. 当前家谱大卡片;
3. 世系图、成员、字辈诗、申请审核四个快捷入口;
4. 快捷入口下方金色分隔线;
5. 底部三项导航栏。
固定区不随列表滚动,不做折叠、缩放、吸顶动画或滚动渐变。
## 独立滚动范围
金色分隔线下方到固定底部导航上方为唯一列表滚动区,包含:
- “我创建的”标题及卡片;
- “我加入的”标题及卡片;
- “加入申请”标题及卡片;
- “添加家谱”入口;
- 列表底部安全留白。
三个分组标题随列表一起滚动,不二次吸顶。现有“加入申请”连续卡片继续保持 `12rpx` 间距。
## 页面状态规则
`hasGenealogies` 正常列表态使用两段式布局。
- `loading`:保持当前页面级加载布局,不创建空的固定区或内部列表滚动区;
- `error`:保持完整错误面板自然纵向布局;
- `empty`:保持完整空状态面板自然纵向布局;
- 添加家谱弹层、当前家谱切换层:继续使用全屏固定遮罩,滚动区不得穿透;
- 背景:继续由 `GenealogyPageBackground.vue` 固定覆盖整页,不进入任何滚动容器。
## 尺寸与布局
正常列表态使用视口高度和弹性布局分配空间,不按某一台手机写死滚动区像素高度:
- 页面壳占满当前可用视口;
- 标题栏按现有真实状态栏高度占位;
- 底部导航按现有 `112rpx + safe-area-inset-bottom` 占位;
- 当前家谱、快捷入口和分隔线按现有视觉尺寸占位;
- 剩余空间全部分配给列表滚动区,滚动容器必须得到可计算高度;
- 320×568 不压缩字号、卡片或快捷入口,列表保留约一张半卡片的可视高度并允许自然滚动;
- 360×640、360×800、412×915 以及 412×1000 均不得出现横向溢出、底栏遮挡或列表无法滚动。
## 滚动反馈与位置规则
- 不把“绝对没有滚动条”写成合同;Android 滑动时允许出现短暂的系统滚动指示条;
- 不专门美化或强制隐藏系统滚动指示条,只验证其不挤压卡片、不造成横向错位;
- 不新增下拉刷新、回弹动画、滚动阴影或底部分页行为;
- 从 G01 打开详情/申请页后返回,保留离开前的列表滚动位置;
- 打开并关闭添加家谱弹层或当前家谱切换层,不改变列表滚动位置;
- 用户切换当前家谱后,列表明确回到顶部,避免继续停留在旧家谱的浏览位置;
- loading、error、empty 与正常态切换时,不错误复用正常列表态的旧滚动位置。
## 实现边界
- 正常列表态使用单一纵向区域滚动容器;禁止嵌套同方向滚动容器;
- 当前家谱卡、快捷入口和分隔线必须位于区域滚动容器之外;
- 只调整 G01 模板结构、G01 局部样式和直接对应的测试;
- 不修改 `PageHeader.vue``AppTabbar.vue``GenealogyPageBackground.vue` 或其他 G 页面;
- 不对接接口,不新增全局状态,不改变路由;
- 不使用原生 `uni.showToast``uni.showModal``uni.showLoading``uni.showActionSheet`
## 验证合同
### 静态合同
- 正常列表态存在且只存在一个纵向滚动容器;
- 当前家谱、快捷入口和分隔线位于滚动容器外;
- 三组列表和“添加家谱”入口位于滚动容器内;
- loading、error、empty 不被包进正常态固定结构;
- 未修改其他 G 页面共享组件引用。
### H5 运行验证
在 320×568、360×640、360×800、412×915 和 412×1000 下:
1. 滚动列表前后,标题栏、当前家谱卡、快捷入口、分隔线和底部导航的视口位置保持不变;
2. “我创建的”及其后内容发生纵向位移;
3. 可以滚动到最后一个申请卡和“添加家谱”入口;
4. 页面没有横向溢出、滚动穿透或底栏遮挡;
5. 卡片点击、添加家谱弹层、当前家谱切换层、快捷入口保持可操作;
6. 返回 G01 保留列表位置,切换当前家谱后列表回到顶部;
7. 浏览器无异常、资源 404 或 `console.error`
### 仍缺验证
H5 证据不能替代 Android/HBuilderX 真机或模拟器。最终仍需复核 Android 区域滚动手感、短暂系统滚动指示条、惯性、返回现场、状态栏、安全区和 4GB 设备性能。
## 验收状态边界
本次实现完成后仍只是 G01 新滚动结构的内部 H5 候选。背景方向已由用户确认,但 G01 整页未获得正式验收,不得因此改为 `[x]` 或冻结。
@@ -0,0 +1,63 @@
# G01 次要文字可读性优化设计
## 状态
- 日期:2026-07-16
- 来源:用户在 412×915 实际 H5 页面中指出申请说明与状态文字可能看不清。
- 用户决定:采用“字号、颜色和中等字重同时增强”的 B 方案;首轮 `26rpx / 25rpx` 实际生效但肉眼变化不够明显,第二轮确定为说明 `28rpx / 500`、状态 `27rpx / 600`
- 当前阶段:第二轮 B 方案已在正式样式中形成 H5 内部候选并完成五档截图检查;Android 仍未验收,G01 整页也尚未正式验收。
## 初始证据与首轮结果
初始实际渲染结果:
- `.application-record__copy``23rpx`,在 412px 宽视口约为 `12.63px`,颜色为 `$ink-muted``#776b5c`)。
- `.application-record__status``23rpx`,约为 `12.63px`;“审核中”为 `#9a641f`,“被拒绝”为 `#a7160c`,“已退出”为 `$ink-muted`
- muted 文字在纯宣纸 `#f6f0e5` 上的估算对比度约为 `4.58:1`,叠到较深的背景承接色 `#e7ded1` 时约为 `3.90:1`
- “审核中”在上述两种底色上的估算对比度约为 `4.39:1``3.74:1`
- “被拒绝”约为 `6.70:1``5.71:1`,无需更换颜色。
首轮实施后,说明约为 `14.28px`、状态约为 `13.73px`,颜色和对比度已改善,但用户查看实际页面后认为字号变化仍不明显,因此目标继续提高一档。
这些数值只用于定位 H5 风险,不等于 Android 真机无障碍合规结论。
## 方案比较
1. A 克制:说明 `400`、状态 `500`;层级最轻,但变化主要来自字号。
2. B 中等加粗:说明 `500`、状态 `600`;用户选择该方案,在清晰度和次要层级之间取平衡。
3. C 明显加粗:说明与状态均为 `700`;最醒目,但会让次要信息过度接近谱名和分组标题,不采用。
## 实施范围
仅修改 `pages/genealogy/g01-my-genealogies.vue` 中“加入申请”卡片的次要说明和状态样式:
- `.application-record__copy`
- `.application-record__status`
- `.application-record__status--rejected`
- `.application-record__status--muted`
不修改共享 `GenealogyCard.vue`,因为用户箭头所指的是 G01 申请卡片;“更新于”虽然同样偏小,但本轮不擅自扩大范围,后续可单独审核。
## 确定样式
- 申请说明:`font-size: 28rpx``font-weight: 500``color: #62584c``line-height: 1.4`
- 通用状态:`font-size: 27rpx``font-weight: 600`、默认“审核中”颜色为 `#7f4f16`
- “被拒绝”:保留 `#a7160c`,继承新的字号与字重。
- “已退出”:使用 `#62584c`,继承新的字号与字重。
- 卡片高度、内边距、12rpx 连续间距、箭头、文案和点击行为保持不变。
- 首轮 `26rpx / 25rpx` 只作为比较历史,不再是当前目标值,也不得保留兼容分支。
## 响应式与验证
- 覆盖 320×568、360×640、360×800、412×915,并保留 412×1000 压力档。
- 检查长说明不与状态或箭头重叠;320×568 允许自然纵向滚动。
- G01 运行 smoke 继续验证固定区、独立滚动、弹层位置保持、切换家谱回顶和底部入口可达。
- 生成修改前后 412×915 同状态截图进行视觉比较。
- H5 只作为内部候选;Android/HBuilderX 真机或模拟器仍需检查系统字体缩放、屏幕亮度和不同面板下的实际可读性。
## 非目标
- 不继续调整 28% 公共背景透明度。
- 不修改谱名、分组标题、当前家谱元信息或共享卡片更新时间。
- 不修改其他 G 页面,不对接接口。
- 不把本轮优化写成 G01 整页已验收或 Android 已通过。
@@ -0,0 +1,46 @@
# G 类型页面分层自适应背景设计
## 目标
解决 G 类型页面在高屏下半区只剩纯色宣纸、画面重心中断的问题,同时继续满足:左右不裁剪、背景不拉伸、不同屏幕比例可用、9 个活动 G 页面共用。
## 用户决定
采用现有 C 图贴底的自适应背景,不生成新图,也不重做一张依赖固定长宽比的超长整图。
## 视觉结构
公共背景由两个固定视口图层组成,统一归 `components/GenealogyPageBackground.vue` 管理:
1. 宣纸底层:覆盖完整视口,沿用与 C 母版底部匹配的暖灰宣纸色。
2. 底部山水层:继续使用用户选定的 C“云竹亭台连续宣纸景”,宽度 `100%``widthFix` 等比显示并贴底,完整保留左右画面,不裁剪、不拉伸。
不新增顶部竹枝资产,不重复渲染或裁切 C 图。高屏多出的宣纸区留在上方,主要由标题栏、当前家谱卡片和快捷入口覆盖;C 图的亭台、山水与竹影集中承托下方列表和加入申请区。
## 响应式规则
- 320×568:C 层贴底后接近页头,完整画面覆盖大部分视口。
- 360×640:C 层贴底,顶部只保留较小宣纸区,中央内容区保持可读。
- 360×800、412×915:高屏多出的宣纸区位于上方,C 层稳定承托“我创建的”“我加入的”“加入申请”等下半区。
- 所有尺寸都禁止 `aspectFill``scaleToFill`C 图片层按原比例显示。
- 背景固定于视口,页面内容继续自然滚动;本轮不改变 G01 固定区/独立滚动结构。
## 资产与可恢复性
- C 母版和现有确定性构建流程保持不变。
- 不新增任何背景候选或运行资产;继续使用 `static/assets/modules/genealogy/opaque/genealogy-page-background.png`
- manifest、构建脚本和测试继续以现有 C 母版为唯一可重建输入。
## 验证
- 更新公共组件前先写贴底定位失败契约并执行红绿循环。
- G01 在 320×568、360×640、360×800、412×915 下生成真实 H5 截图。
- 同一比较输入中查看 C 母版和实现截图,检查上方宣纸区、贴底位置、裁剪、拉伸、文字对比度和横向溢出。
- 其他 8 个 G 页面至少通过公共背景契约与现有运行 smoke;仍不得据此宣称逐页视觉验收。
- Android/HBuilderX 真机或模拟器复核继续保留为最终验证缺口。
## 非目标
- 不修改 G 页面内容、卡片、标题栏、路由、接口或状态逻辑。
- 不实施 G01 标题/当前家谱/快捷入口固定和列表独立滚动。
- 不删除 A/B/C 历史母版、未跟踪资产、截图或缓存。
@@ -0,0 +1,39 @@
# G 模块公共背景 28% 透明度设计
## 状态
- 日期:2026-07-16
- 用户决定:公共长背景画层使用 `28%` 不透明度。
- 当前阶段:设计已确认,尚未修改正式组件,尚未形成新的 H5 或 Android 验收结论。
## 目标
降低连续长背景中竹枝、山水和亭台的视觉重量,让标题、卡片、列表文字和状态信息成为明确主体,同时保留浅色国风宣纸氛围。
## 作用范围
唯一修改所有者为 `components/GenealogyPageBackground.vue`
该共享组件当前由 9 个活动 G 页面使用,因此透明度决定统一覆盖:G01、G03、G05、G06、G08、G09、G10、G11、G12。不得在各页面重复定义透明度,也不得只为 G01 添加局部覆盖。
## 视觉规则
- 仅对 `.genealogy-page-background__art` 图片画层设置 `opacity: 0.28`
- 组件底部的宣纸承接色 `#e7ded1` 保持不变,避免整页透出宿主页面颜色。
- 标题栏、当前家谱卡、快捷入口、列表卡、弹窗、文字、状态色和底部导航保持原有不透明度。
- 背景继续使用 `widthFix`、固定贴底、左右完整显示的现有规则;不得改变图片尺寸、裁切方式或滚动行为。
- 该透明度是 28%,不是把图片文件重新烘焙成半透明 PNG;运行资产和可恢复母版不重制。
## 验证
- 静态合同确认透明度由共享组件唯一持有,值为 `0.28`,各 G 页面没有重复覆盖。
- 运行验证覆盖 320×568、360×640、360×800、412×915,并保留 G01 的 412×1000 压力档。
- 视觉截图核对文字、卡框和按钮未被同步变淡,背景仍连续、左右不裁剪,底栏未被遮挡。
- H5 截图只作为内部候选证据;Android/HBuilderX 真机或模拟器仍需另行复核,特别关注 4GB Android 的长图解码、切页和回收。
## 非目标
- 不修改 G01 固定区/独立列表滚动结构。
- 不重做背景图,不新增主题或深色模式。
- 不修改其他模块页面,不对接接口。
- 不把本次透明度选择写成 G01 整页已验收或 Android 已通过。
@@ -0,0 +1,34 @@
# G 模块旗舰级连续长背景设计
## 决定
本方案替代此前“纯色宣纸 + 现有 C 图贴底”的方向。用户已确认生成稿并授权作为 9 个活动 G 页面的公共背景,用一张连续长图消除两层之间的明显横向分界线。
## 输出规格
- 生产母版目标:1536×3840,纵横比 2.5:1。
- APP 运行图目标:1440×3600,纵横比 2.5:1。
- 色彩:暖灰宣纸、淡金竹影、灰褐水墨山水,与现有 C 方向一致。
- 画面:顶部疏竹和淡云,中段低对比安全区,下半部亭台、湖面、远山及岸边竹影。
- 禁止文字、Logo、UI、卡片、按钮、红色元素、明显横向接缝、重复图案和突兀色带。
## 响应式规则
- 页面按宽度等比显示并固定贴底。
- 1024×25601536×3840 的 2.5:1 构图比 412×1000 的 2.427:1 更高,因此 412×915、412×1000 不产生上方纯色拼接。
- 320×568、360×640 等短屏只裁掉顶部安全留白,左右画面始终完整,不横向裁剪、不拉伸。
- 顶部 25% 不放唯一性强的关键主体,允许短屏裁切;核心山水和亭台放在中下部。
## 性能边界
- 1440×3600 RGBA 解码内存约 19.8MiB,只允许页面同时存在一个公共背景实例。
- H5 阶段检查 PNG 体积和五档截图;Android 4GB 内存设备上的解码、切页和回收仍是正式验收前置项。
- 母版用于可恢复生产,运行图通过确定性流水线缩放和写入 sRGB,不直接让页面加载 1536×3840 母版。
## 本轮范围
- 原始 ImageGen 输出原样保留,并确定性归一化为 1536×3840 稳定母版。
- 流水线生成 1440×3600 运行图,使用新版本化文件名接入 `GenealogyPageBackground.vue`;旧 C 文件不覆盖、不删除。
- 9 个 G 页面继续只消费一个共享背景组件,不跨页改变业务结构。
- 覆盖 320×568、360×640、360×800、412×915 和 412×1000 H5;不因用户确认背景方向而标记 G01 整页已验收。
- Android/HBuilderX 与 4GB Android 图片性能不在本轮 H5 证据内。
@@ -0,0 +1,37 @@
# G 类型页面共用 C 背景设计
## 目标
将已选定的 C“云竹亭台连续宣纸景”设为所有活动 G 类型页面的公共背景。背景必须完整显示左右画面、不裁剪、不变形;高屏和长页面超出图片高度的部分使用同色宣纸底色自然延展。
## 范围
- 覆盖 `pages.json` 中 9 个活动 G 路由:G01、G03、G05、G06、G08、G09、G10、G11、G12。
- 只替换页面最底层的旧纸纹和页脚山水,不改标题栏、内容卡片、交互、状态数据或路由。
- G01 的固定区/独立滚动结构不在本次范围内。
- 当前只形成 H5 内部候选证据;Android/HBuilderX 真机或模拟器复核仍然缺失。
## 单一所有者
新增 `components/GenealogyPageBackground.vue`,由它唯一持有:
- C 背景运行资产路径;
- 同色宣纸延展底色;
- 顶部对齐、按宽度等比显示、固定在页面底层且不接收指针事件的布局规则。
9 个页面只渲染该组件,不再分别引用 `page-paper.jpg``footer-mountain-bamboo.png` 或直接引用 C 背景资产。
## 显示规则
- 外层背景固定覆盖视口,使用宣纸底色填满未被图片覆盖的区域。
- C 背景图片宽度为 `100%`,使用 `mode="widthFix"` 等比计算高度并顶部对齐。
- 图片不使用 `aspectFill``scaleToFill`,因此左右不裁剪且画面不变形。
- 页面内容继续使用各页现有层级;公共背景位于 `z-index: 0`,不改变弹窗和操作层层级。
## 验证
- 契约测试必须解析 `pages.json` 得到实际 G 路由,并断言每个页面只使用公共背景组件。
- 契约测试必须禁止 G 页面继续引用旧纸纹、旧页脚山水或直接重复引用 C 背景。
- G01 原有视觉、空状态和运行冒烟测试继续通过。
- H5 在 320×568、360×640、360×800、412×915 下截图检查:左右完整、无拉伸、无横向溢出,底部宣纸延展连续。
@@ -0,0 +1,98 @@
# 全模块国风视觉系统设计
## 状态与授权
- 日期:2026-07-16。
- 用户明确确认:A 系列现有按钮、弹窗、轻提示和对话框样式已经定稿,必须作为全局标准。
- 用户明确要求:本轮连续完成 G、T、F、R、N、M 的视觉统一,不在中途等待逐页确认;后续逐页审核时允许局部调整。
- 本轮不对接接口、不生成运行截图、不把 H5 实现写成 Android 或整页验收完成。
## 现状问题
1. A 系列使用透明卷轴按钮、卷轴对话框和卷轴 Toast;其他模块仍大量引用旧的 `opaque/a01-primary-button.png``opaque/a01-secondary-button.png` 或页面自制矩形对话框。
2. 普通 `PageHeader` 左侧显示“返回”文字,与 A04/A05 已采用的箭头返回不一致。
3. G01 当前家谱与列表卡片的地区、人数、角色和更新时间仍偏浅偏细。
4. G 系列虽已共用 G01 长背景,但按钮和对话框没有全部收拢到 A 系列标准。
5. T、F、R、N、M 的页面壳、背景和操作控件仍由页面或 `ModulePage` 各自维护,视觉来源不唯一。
6. `ModulePage`、F02、N01 仍存在原生 `uni.showToast`,违反项目自定义反馈规则。
## 方案比较与决定
### 方案 A:只替换图片路径
改动最快,但按钮尺寸、文字、交互状态和弹窗结构仍分散在几十个页面,后续会再次出现样式漂移,不采用。
### 方案 B:建立全局视觉组件并迁移现有页面(采用)
由公共组件单一持有 A 系列资产,页面只传入文案、类型与事件。G 系列继续使用 G01 公共背景;T、F、R、N、M 使用统一页面壳和各自的长背景资产。改动范围较大,但能满足“全局统一、后续逐页再调”的目标。
### 方案 C:逐页完全重做
自由度最高,但会破坏现有页面状态、测试和业务入口,且难以在同一轮稳定完成,不采用。
## 单一视觉所有者
- `AppButton.vue`:唯一持有 A 系列主按钮与次按钮卷轴资产。
- `AppDialog.vue`:唯一持有 A 系列卷轴对话框资产和遮罩、标题、正文、单双按钮布局。
- `AppToast.vue`:唯一持有 A 系列卷轴轻提示边框资产。
- `AppLoading.vue`:统一加载文案与水墨印记动效,不调用原生 Loading。
- `PageHeader.vue`:唯一持有普通页面的返回箭头和根页面头部。
- `ModulePageBackground.vue`:统一承载 T、F、R、N、M 的页面背景;G 系列继续由 `GenealogyPageBackground.vue` 持有。
- `ModulePage.vue`F03F10、R01R11、N02、M02–M10 的统一内容母版,只消费上述公共组件。
旧的 `opaque/a01-primary-button.png``opaque/a01-secondary-button.png` 不再允许被活动页面或公共组件引用;文件本身保留,不删除历史资产。
## 已确认控件规范
### 按钮
- 主按钮使用 `/static/assets/foundation/transparent/a01-scroll-primary-v3.png`
- 次按钮使用 `/static/assets/foundation/transparent/a01-scroll-secondary-v3.png`
- 图片使用 `aspectFit`,文字保持独立节点;默认高度 `96rpx`,紧凑按钮最低 `76rpx`
- 主按钮文字 `#fffaf0`,次按钮文字 `#5c4330`;禁用态只降低整体不透明度,不替换另一套资产。
### 对话框与提示
- 对话框使用 `/static/assets/modules/auth/transparent/a01-scroll-dialog-v3.png`,不得再用普通卡片背景假装对话框。
- Toast 使用 `/static/assets/foundation/transparent/a01-scroll-toast-v3.png`
- 加载使用自定义水墨印记与文字,不调用 `uni.showLoading`
- 项目内不得保留活动代码中的 `uni.showToast``uni.showModal``uni.showLoading``uni.showActionSheet`
### 导航
- 非根页面左侧使用 `/static/assets/foundation/transparent/chevron-right.png` 水平翻转形成返回箭头。
- 点击区域至少 `88rpx × 88rpx`,不再显示“返回”文字。
- 根页面 G01 继续保留品牌印章与通知铃铛。
## 页面与背景体系
### G 系列
- G01 是 G 系列确定的风格母体;G03、G05、G06、G08、G09、G10、G11、G12 必须沿用 G01 的长背景、宣纸底、朱砂、古金、卡框语言与信息层级,保持当前 `GenealogyPageBackground.vue` 和 28% 长背景画层。
- 全部旧按钮和页面自制对话框迁移至 A 系列公共组件。
- G01 被标出的地区、人数、角色、更新时间统一加深并使用中等字重;不改变卡片结构和滚动范围。
### T、F、R、N、M
- 五个模块各自建立可辨认的页面风格,不直接复制 G01 的页面编排;它们仍共享浅色国风、楷体、宣纸材质、朱砂主操作、古金线框和 A 系列全局控件,确保主题统一。
- 每个模块使用一张 `1440×3600`、无文字、无 UI、浅色国风的长背景资产。
- T:淡墨古树谱系、远山与竹影;F:暖宣纸、庭院梅枝与生活气息;R:册页、书卷、墨梅与档案感;N:云纹、飞笺与淡金消息纹样;M:竹影、印章留白与安静个人空间。
- 图片固定贴底、按宽度等比显示、左右不裁剪;短屏允许裁掉顶部安全留白。
- 主要内容仍使用现有真实卡框和表单纸面资产,不把文字或按钮烘焙进背景图。
## 响应式与范围
- 覆盖 320×568、360×640、360×800、412×915;短屏允许自然纵向滚动。
- 本轮只调整视觉壳、公共控件、背景和 G01 指定文字,不改变路由、字段契约、数据结构和业务跳转。
- 不删除现有修改、未跟踪文件、历史资产、测试、文档或证据。
- 不执行 Git add、commit、push、reset、checkout,也不使用 worktree 或多代理。
## 验证标准
1. 活动代码不存在原生 UniApp 提示调用。
2. 活动页面和公共组件不存在旧不透明 A01 按钮引用。
3. 普通 PageHeader 只显示返回箭头,不显示“返回”文字。
4. 9 个 G 页面继续消费共享 G 背景。
5. T、F、R、N、M 的全部活动页面消费对应模块背景或统一 `ModulePage` 页面壳。
6. 现有模块契约与运行 smoke 不因视觉迁移失效。
7. 只生成资产与代码验证,不生成新的运行截图。
@@ -0,0 +1,43 @@
# 公共加载组件红金印牌重设计
## 目标
`components/AppLoading.vue` 当前的细红方框“谱”字替换为与浅色国风主题一致的红金家谱印牌,同时保持组件可在 G01 及其他已接入页面复用。
## 范围
- 只修改公共 `AppLoading` 的视觉表现及对应测试。
- G01 继续使用页面级加载形态,不改变状态判断、文案、页面背景、头部和底部导航。
- 已接入 `AppLoading` 的其他页面自动获得同一视觉体系,不改各页面业务逻辑。
- 不新增接口,不使用原生 Toast、Modal、Loading 或 ActionSheet。
## 视觉方案
- 加载主体使用已有真实资产 `/static/assets/foundation/transparent/brand-seal.png`
- 页面级印牌宽高约 `132rpx × 136rpx`;区域级约 `88rpx × 90rpx`
- 印牌下方使用已有真实资产 `/static/assets/foundation/transparent/auth-divider-knot.png`,作为轻量视觉连接,不新增 CSS 绘制图形。
- 主文案使用现有深墨色,保持约 `30rpx`,字重略加强。
- 说明文字保持约 `24rpx` 和现有克制色阶。
- 组件背景继续透明,不增加卡片、白底、边框或阴影。
## 动效
- 印牌使用约 `1.6s` 的轻呼吸动画。
- 缩放范围约为 `0.96``1`,透明度约为 `0.82``1`
- 不旋转、不快速闪烁、不移动页面布局。
- 如意结只做轻微透明度呼吸,避免与印牌争抢注意力。
- 尊重 `prefers-reduced-motion: reduce`:关闭动画并保持最终清晰状态。
## 组件契约
- 保留 `variant="page"``variant="section"`
- 保留 `text``description` 属性,不改变调用方式。
- 页面级与区域级仅在尺寸、间距和字号上区分,共用同一真实资产和动效语义。
## 验证
- 更新公共加载组件契约,确保使用 `brand-seal.png``auth-divider-knot.png`,并禁止旧的 CSS 方框标记回归。
- 运行公共加载组件、G01 加载状态、G 系列和其他模块加载契约。
- 运行编译审计和相关运行检查。
- 在同一个可控 Chrome 标签页检查 G01 `412×900`,并补查 `320×568``360×640``360×800``412×915`
- H5 结果只作为内部候选证据;Android/HBuilderX 真机或模拟器复核仍然缺失。
@@ -0,0 +1,22 @@
# F 系列全状态视觉优化
## 范围
- F01:列表、加载、空态、错误态。
- F02:表单、空内容提示、成功、错误。
- F03–F10:默认、空态、成功、错误;列表与设置页另核对点击提示。
## 设计决定
- 保留已经确认的浅色国风背景、金色内容框和 A 系列按钮/提示组件,不重新生成同类资产。
- F01 保持家族动态的信息流结构,仅提高标签、摘要、作者、状态说明的字号和对比度。
- F02 保持卷轴表单结构,提高说明、输入和结果说明的可读性;空内容继续使用全局 `AppToast`
- F03F10 由 `ModulePage.vue` 统一拥有共用壳的文字规格。标题、表单、列表、详情、时间线、设置和状态说明均采用适合 412×915 审核的可读字号。
- 不改变路由、业务数据和交互语义;所有状态通过真实运行页面呈现。
## 验证
- 为 F01/F02 与公共 ModulePage 增加视觉契约。
- 在同一个 Chrome 标签页逐状态生成 412×915 内部 H5 截图。
- 运行根页面、ModulePage、运行时 smoke、编译审计及 `git diff --check`
@@ -0,0 +1,23 @@
# G01 空状态透明框设计
## 目标
空状态只保留金色框线与操作内容,完整透出 G01 长背景,不再叠加第二张宣纸底或下沿山水。
## 已确认方案
- 移除空状态对不透明 `g01-empty-panel.png` 的引用;该资产继续保留给错误状态使用。
- 从已确认的 `g01-empty-panel.png` 确定性提取原双金线和四角纹样,生成透明 `g01-empty-panel-frame.png`;不重新设计线型。
- 提取脚本归属 `design-pipeline/scripts/build-g01-empty-frame.mjs`,可在换机后重建。
- 空状态框内不设置背景、阴影或额外底图。
- “确认没有现有家谱后再创建,避免重复建谱”调整为 `26rpx`,行高 `38rpx`
- 空状态框高调整为 `1120rpx`,内容整体垂直居中,并使用 `50rpx 28rpx 46rpx` 兼顾窄屏的内边距。
- 谱印为 `120×184rpx`,主标题 `48rpx`,说明文字 `28rpx`
- 两个主操作为 `560×124rpx`,按钮文字 `34rpx`,创建家谱文字 `31rpx`
- 保留“搜索已有家谱优先、邀请码其次、创建家谱为弱操作”的层级与原有交互。
## 验证
- 静态契约锁定透明框资源、九宫格参数、提示字号,并禁止空状态继续引用不透明面板。
- 运行空状态契约、G01 视觉契约、编译审计和运行冒烟。
- 在 412×900、320×568 截图检查框内外背景连续且无白色矩形底。
@@ -0,0 +1,23 @@
# G01 读取失败状态重设计
## 结论
当前失败态仍使用旧的 `g01-empty-panel.png` 不透明白底,视觉密度和空状态、加载状态不一致。本轮采用“透明金框 + 红金家谱印牌 + 单一重试主按钮”,复用已经确认的真实资产,不新增重复图片。
## 视觉结构
- 外层使用 `/static/assets/modules/genealogy/transparent/g01-empty-panel-frame.png`,与已通过的空状态共用 `1120rpx` 高度。
- 内容在透明金框内纵向居中,页面背景保持连续可见。
- 顶部使用 `/static/assets/foundation/transparent/brand-seal.png`,页面级宽高 `132rpx × 136rpx`
- 标题“暂时无法读取家谱”使用深墨色、`42rpx`、半粗字重。
- 说明“网络或服务暂不可用,请稍后重新查看。”使用 `27rpx`、舒展行距。
- 标题与按钮之间放置已有 `/static/assets/modules/genealogy/transparent/section-divider.png`
- “重新加载”继续使用 `/static/assets/foundation/transparent/a01-scroll-primary-v3.png`,尺寸与空状态主按钮一致为 `560rpx × 124rpx`
- 不增加第二操作,不增加白底、卡片、阴影或 CSS 绘制图形。
## 行为与验证
- 保留 `retryLoad` 行为和 `state=error` 展示入口。
- 新增 G01 失败态契约,禁止旧不透明面板回归。
- 在同一个 Chrome 标签页检查 `320×568``360×640``360×800``412×915`
- H5 只作为内部候选;Android/HBuilderX 仍需验证。
@@ -0,0 +1,25 @@
# G01 加载状态设计
## 目标
把 G01 当前空心金圈加载态收拢到项目已确定的全局 Loading 标准,同时保持 G 系列长背景和页面导航稳定,避免短暂加载状态显得空洞或过度装饰。
## 已确认方案
- 采用方案 AG01 加载态复用 `AppLoading.vue` 的朱砂“谱”印章呼吸动效。
- 主文案使用“正在整理家谱”,不增加新的业务含义。
- 加载内容位于页面视觉中心略偏上区域;保留 G01 公共长背景、标题栏和底部导航。
- 不使用空状态的大型透明金线框,不生成新资产,不制作骨架卡片。
- 不改变 `state=loading` 的状态入口、默认列表、空状态或失败状态。
## 组件边界
- `AppLoading.vue` 是全局加载视觉的唯一维护入口。
- `g01-my-genealogies.vue` 只负责放置组件和提供页面文案,不复制加载动效样式。
## 验证
- 静态契约锁定 G01 使用 `AppLoading`,并禁止保留旧 `loading-seal`
- 运行 G01 空状态契约、视觉契约、编译审计和运行态冒烟。
- 在 412×900 与 320×568 检查无横向溢出、底栏不遮挡且加载标识清晰。
- H5 结果仅作为内部候选,Android/HBuilderX 仍需后续复核。
@@ -0,0 +1,32 @@
# G01 元信息文字与图标可读性设计
## 目标
只放大 G01 当前家谱卡的“切换”文字,以及当前卡和列表卡中的地区/成员/管理员图标;其余元信息文字保持原字号。
## 已确认方案
- “切换”文字:`23rpx` 调整为 `28rpx`
- 当前家谱元信息文字保持 `27rpx`
- 当前家谱元信息图标:`32rpx` 调整为 `36rpx``opacity: 1`
- 列表卡地区与成员文字保持 `26rpx`
- 列表卡地区与成员小图标采用平衡尺寸 `46rpx``flex: 0 0 auto``opacity: 1`
-`saturate(1.35) brightness(0.82) contrast(1.15)` 加深现有赭金 PNG,而不是继续放大。
- 两组元信息之间保持 `18rpx`
- 更新时间位于独立第二行并右对齐;地区与成员信息位于第三行;常规卡高为 `178rpx`
- 320px 继续隐藏更新时间,卡高保持 `148rpx`
- 列表卡左侧“家谱”谱印保持原尺寸和状态透明度。
- 列表卡角色文字保持 `26rpx`,更新时间保持 `24rpx`
## 适配边界
- 不改变卡框、卡片高度、谱印、标题、快捷入口和背景。
- 320px 小屏继续隐藏更新时间;当前家谱图标的小屏覆盖值由 `28rpx` 同步提高到 `32rpx`
- 元信息保持单行,图标与文字垂直居中,不能造成横向溢出或遮挡右侧角色与箭头。
## 验证
- 更新 G01 静态视觉合同,锁定“切换”字号、图标尺寸与可见度,并锁定其余文字仍为原字号。
- 运行 G01 静态合同和编译审计。
- 在当前 H5 Chrome 中重新捕获 412×915,并检查 320×568,确认文字清晰且无横向溢出。
- 本轮只形成 H5 候选,不表示 Android/HBuilderX 或 G01 整页正式验收。
@@ -0,0 +1,20 @@
# G03 全状态视觉设计
## 状态范围
G03 实际包含创建默认、创建校验、重复建谱提醒、创建提交中、创建失败、首代默认、首代校验、首代提交中、首代失败和创建成功弹窗,共 10 类状态。
## 设计结论
- 保留现有宣纸表单面板、红金主卷轴按钮、重复提醒和成功弹窗;这些状态与 G 系列主题一致,不重新生成资产。
- 自定义标题栏移除“返回”文字,只保留向左真实箭头,继续保持左右等宽以确保标题居中。
- 表单说明由 `23rpx` 提升至 `25rpx`,访问规则选项由 `21rpx` 提升至 `23rpx`
- 字段校验由 `20rpx` 提升至 `24rpx`,保持右对齐;提交失败说明由 `21rpx` 提升至 `25rpx` 并增加行高。
- 提交中继续使用主按钮内文案变化,不叠加页面级 Loading,避免一个短暂操作出现两个加载焦点。
- 弹窗继续使用已确认的 A 系列 `a01-scroll-dialog-v3.png` 与主、次卷轴按钮,不生成重复资产。
## 验证
- 10 类状态均以真实交互触发并截图。
- 默认、校验、失败、弹窗至少检查 `412×915`;整页运行 smoke 覆盖基础四档。
- 重点核对标题居中、错误文字可读性、按钮可达性、弹窗遮罩和短屏自然滚动。
@@ -0,0 +1,5 @@
# G05 全状态视觉设计
G05 包含管理员总览、成员总览、公开预览、加载、空、失败和无权限七类状态。管理员总览保留;成员总览补齐两个“仅管理员可用”的非交互说明,公开预览将第五条资料改为整行并下移公开说明。四类系统状态隐藏旧总览功能格底图,统一使用透明金框、红金印牌、公共加载组件和 A 系列卷轴按钮。所有图片均复用现有资产。
系统状态区域占据标题栏以下可视高度;`320×568` 允许自然滚动。状态文案不叠加在功能格上,不新增原生系统弹层。H5 为内部候选,Android/HBuilderX 仍待复核。
@@ -0,0 +1,17 @@
# G09 全状态视觉优化
## 范围
覆盖列表、加载、空、失败、撤回确认和撤回完成六种实际状态。保留已确认的 G 系列长背景、申请状态卡、公共 Loading、A 系列按钮和自定义弹窗资产。
## 视觉决定
- 不改变卡片结构和状态语义,只提升列表说明、时间、关系、状态提示与操作文字的可读性。
- 空/失败状态继续使用既有状态卡与主卷轴按钮,不新增图片资产。
- 撤回确认继续使用全局 `AppDialog`;撤回后在原卡片位置显示“已撤回”,避免额外 Toast。
## 验证
- 六态均以同一 Chrome 标签页、`412×915` 截图检查。
- 运行 G08–G10 流程 smoke、页面视觉合同和编译审计。
- 仅作为 H5 内部候选,Android/HBuilderX 仍需后续复核。
@@ -0,0 +1,18 @@
# G10 全状态视觉优化
## 范围
覆盖列表、加载、空、失败、无权限、审核说明、通过确认、通过完成、拒绝确认、拒绝完成十种实际状态。
## 视觉决定
- 保留 G 系列背景、申请记录卡、公共 Loading、状态卡和全局 A 系列弹窗。
- 待审核卡的拒绝/通过操作扩大到可读、可点的双按钮,不再让底图槽位压住文字。
- 审核完成后使用一条完整卷轴覆盖底图的两个按钮槽,明确显示“已通过”或“已拒绝”,不保留空槽。
- 提升手机号、时间、关系、状态说明和空/失败说明的字号;不改变审核状态逻辑。
## 验证
- 十态均在同一 Chrome 标签页以 `412×915` 截图;通过/拒绝结果必须与对应确认弹窗成对复核。
- 运行 G08–G10 流程 smoke、视觉合同、编译审计和差异检查。
- 当前仅为 H5 内部候选,Android/HBuilderX 仍待验证。
@@ -0,0 +1,18 @@
# G11G12 全状态视觉优化
## 范围
- G11:表单、加载、成功、失败、无权限、校验、保存反馈,共 7 态。
- G12:列表、加载、空、编辑、失败、无权限、编辑校验、保存失败、保存反馈,共 9 态。
## 视觉决定
- 两页继续复用 G03 宣纸面板、G 系列背景、公共 Loading、A 系列按钮和现有输入框资产。
- 保留当前构图与业务语义,仅提升说明、字段、提示、校验、字辈行辅助信息的字号与行高。
- 保存成功使用页面内结果或自定义卷轴反馈,不引入系统 Toast/Loading。
## 验证
- 16 个状态均在同一 Chrome 标签页以 `412×915` 截图。
- 运行 G11/G12 合同、运行 smoke、编译审计和差异检查。
- 当前仅为 H5 内部候选,Android/HBuilderX、软键盘和系统字体仍待复核。
@@ -0,0 +1,77 @@
# 全局加载视觉系统设计
## 目标
建立一个全项目共用、职责明确的加载视觉系统:整页首次加载和页面局部加载统一使用 `AppLoading.vue`,按钮提交继续由 `AppButton.vue` 负责,下拉刷新、触底加载和文件上传保留各自符合场景的反馈方式。
## 已确认方案
采用分层方案,不使用一个整页 Loading 覆盖所有异步场景。
### 1. `AppLoading` 的职责
- `variant="page"`:页面首次进入且主体数据尚不可展示时使用。
- `variant="section"`:搜索结果或页面局部区域等待数据时使用,保留周围已有内容。
- `text`:当前正在执行的动作。
- `description`:可选辅助说明。
- 组件自身不创建全屏遮罩、不接管标题栏或底部导航、不控制业务状态。
- 朱砂谱印、呼吸动效、文字层级和间距由组件单一维护,页面不得复制或重写印章动画。
### 2. 两档视觉尺寸
页面级:
- 谱印 `96×96rpx`,印内文字 `40rpx`
- 主文案 `30rpx`,辅助说明 `24rpx`
- 内容区最小高度 `320rpx`
局部级:
- 谱印 `64×64rpx`,印内文字 `28rpx`
- 主文案 `24rpx`,辅助说明 `22rpx`
- 内容区最小高度 `180rpx`
两档均保持透明背景和现有 `1.35s` 呼吸节奏。
## 首批接入范围
### 页面级 Loading
| 页面 | 文案方向 |
|---|---|
| G01 我的家谱 | 正在整理家谱 |
| G05 家谱总览 | 正在展开家谱 |
| G09 我的申请 | 正在整理申请记录 |
| G10 入谱审核 | 正在整理审核申请 |
| G11 家谱设置 | 正在读取家谱设置 |
| G12 字辈诗 | 正在整理字辈诗 |
| T01 世系树 | 正在整理世系 |
| T03 成员档案 | 正在读取成员档案 |
| T07 成员目录 | 正在整理成员目录 |
| F01 家族动态 | 正在整理家族动态 |
| N01 消息中心 | 正在整理消息 |
### 局部 Loading
- G06 搜索家谱:只替换搜索结果区域,搜索框、模式切换和筛选条件保持可见。
## 明确排除
- A01、A04、A05、G03、G08、G11 保存、T04、T05、F02、M02、M07 的提交/保存过程使用 `AppButton` 的加载态,不使用 `AppLoading`
- 下拉刷新和触底加载必须保留已有列表及滚动位置,不显示整页 Loading。
- 头像、相册和动态图片上传显示上传进度,不显示整页 Loading。
- 错误、空数据和无权限状态不得伪装成 Loading。
## 状态与兼容
- 页面仍拥有自己的 `loading/list/empty/error/no-permission` 等业务状态;`AppLoading` 只消费状态结果。
- 现有用于 H5 样式审核的 `?state=loading` 入口继续保留。
- 页面从加载切换到成功、空、错误时必须移除 Loading,不与目标状态叠加。
- 320×568 允许自然纵向滚动,不允许横向溢出或遮挡固定底栏。
## 验证
- 组件契约锁定 `page/section` 两种变体、`text/description` 属性和唯一动画入口。
- 每个首批页面的静态契约必须证明使用 `AppLoading`,并禁止保留旧页面自制加载标识。
- 运行现有编译审计、各模块运行 smoke 和 `git diff --check`
- 代表性页面检查 320×568、360×640、360×800、412×915H5 证据不代表 Android/HBuilderX 正式验收。
@@ -0,0 +1,15 @@
# M 系列全状态视觉优化
## 范围
- M01:正常、错误。
- M02–M10:默认、空态、成功、错误。
- M03、M06、M10:设置项点击提示。
## 设计决定
- M01 原头像位为无内容的红色框,改为复用已确认的 `brand-seal.png` 真实“谱”印资产。
- 提高手机号/身份、待办说明、菜单标题、菜单说明、查看操作及错误说明的字号和对比度。
- M02M10 继续使用公共 `ModulePage`,保留个人中心园林背景和 A 系列按钮/提示组件。
- 不改变路由、菜单去向和状态语义。
@@ -0,0 +1,14 @@
# N 系列全状态视觉优化
## 范围
- N01:列表、加载、空态、错误态、单条已读、全部已读提示。
- N02:默认、空态、成功、错误。
## 设计决定
- 保留通知模块的云纹山水背景和公共金框。
- N01 提高消息标签、摘要、空/错态说明的可读性;底部操作改为公共 `AppButton` 的整行规格,避免左侧悬空。
- 单条已读和全部已读继续使用真实交互;全部已读提示复用 A 系列 `AppToast`
- N02 继续由公共 `ModulePage` 详情母版承载。
@@ -0,0 +1,18 @@
# R 系列全状态视觉候选
## 范围
- R01–R11:默认、空态、成功、错误,共 44 个页面状态。
- R01、R03、R05、R10、R11:列表点击提示,共 5 个交互状态。
## 设计决定
- R 系列采用档案、书卷、笔墨意象的独立浅色背景,内容区继续复用公共金框和 A 系列按钮/提示组件。
- 列表、详情、表单、时间线和全局状态均由 `ModulePage.vue` 的统一文字规格承载,避免同类记录页产生字号漂移。
- 不新造已有资产,不改变路由和数据语义。
## 验证
- 412×915 下在同一个 Chrome 标签页生成并逐张检查 49 张内部 H5 截图。
- 检查长标题、四字段表单、时间线、列表提示和错误态次按钮。
@@ -0,0 +1,17 @@
# T01 全状态视觉优化
## 范围
覆盖世系树、加载、横向阅读提示、空、失败五种页面状态,以及选中成员后的底部操作卡。
## 视觉决定
- 保留 T 系列宣纸山水背景、横向世系画布、成员节点和现有状态面板。
- 底部成员卡的两项操作改用无中心结遮挡的 A 系列 v2 主/次按钮资产,按钮字使用清晰无衬线体。
- 提升工具栏辅助信息、节点关系/年份、状态说明和底部成员元数据字号,不改变横向滚动结构。
## 验证
- 五种页面状态均以 `412×915` 截图;树态额外检查底部操作卡。
- 运行 T01 合同、运行 smoke、编译审计和差异检查。
- H5 只作为内部候选,Android 横向拖动、系统返回手势和触摸目标仍待复核。
@@ -0,0 +1,19 @@
# T03T06 全状态视觉优化
## 范围
- T03:成员详情、加载、失败。
- T04/T05/T06:各自表单、成功、冲突、失败;T06 另含冲突说明弹窗。
## 视觉决定
- 保留 T 系列背景、G03 宣纸面板、成员资料行、共享表单和全局 A 系列弹窗。
- T03 提升成员元数据、资料行、亲属关系和失败说明字号。
- T04–T06 共享表单提升说明、字段、输入和底部提示字号;页面仍分别使用各自任务文案。
- 不改业务状态转换,也不为共用页面重复生成资产。
## 验证
- T03 三态、T04/T05 各四态、T06 五态均以 `412×915` 截图。
- 运行 T03–T08 合同、运行 smoke、编译审计和差异检查。
- 当前仅为 H5 内部候选,Android/HBuilderX 软键盘、焦点滚动和触摸目标仍待验证。
@@ -0,0 +1,18 @@
# T07T08 全状态视觉优化
## 范围
- T07:成员列表、加载、空、失败。
- T08:隐私、纪念、无权限。
## 视觉决定
- 保留 T 系列背景、成员状态卡、输入框、标签按钮和说明面板。
- 提升 T07 搜索、人数摘要、成员元数据、身份状态与空/失败说明字号。
- 提升 T08 标签、状态摘要和三条说明文字字号,保持三种状态同一结构切换。
## 验证
- 七态均在同一 Chrome 标签页以 `412×915` 截图。
- 运行 T03–T08 合同、运行 smoke、编译审计和差异检查。
- 当前为 H5 内部候选,Android/HBuilderX 输入法、权限接口和字体缩放仍待复核。
@@ -0,0 +1,57 @@
# AppLoading 必要加载动效设计
## 背景与问题
G01 加载态当前使用公共 `components/AppLoading.vue`。组件原本包含印牌与如意结呼吸动画,但在 `prefers-reduced-motion: reduce` 下将两者统一设为 `animation: none`。当前 Chrome 正处于该模式,运行检查确认动画数量为 0,因此页面虽然显示“正在整理家谱”,视觉上却完全静止,用户无法快速判断加载是否仍在进行。
## 用户决定
- 采用“印牌明暗呼吸”方案。
- 即使系统开启“减少动态效果”,加载态仍须保留低幅度但明确可见的必要反馈。
- 减少动态效果模式只取消缩放、旋转和位移,不再把加载动画全部关闭。
- 当前只返工 G01 加载态及其直接依赖的公共加载组件、测试和证据;不切换到其他 G01 状态,不修改接口或业务逻辑。
## 视觉与动效
### 正常动态模式
- 保留现有红金家谱印牌与如意结真实资产,不新增图片、CSS 图形或文字图标。
- 印牌使用透明度与轻微缩放组合的循环呼吸,节奏清晰但不跳动,不改变布局。
- 如意结使用错峰透明度呼吸,作为辅助节奏,不抢夺印牌主视觉。
- 不旋转、不上下漂移、不闪烁,不改变加载文案。
### 减少动态效果模式
- 印牌与如意结保持固定尺寸和固定位置,`transform` 始终为 `none`
- 两者继续使用透明度循环;印牌为主节奏,如意结错峰变化。
- 明暗范围必须足以让用户在约 1 秒内感知页面仍在工作,但不得出现完全消失或高频闪烁。
- 加载文案和说明保持静态,避免文字跳动影响阅读。
## 实现边界
- 动效规则仍由 `components/AppLoading.vue` 单一维护,G01 不复制动画样式。
- 不改变 `variant``text``description` 组件契约。
- 不改变 G01 的 `isLoading`、路由状态、页面布局、背景、标题栏和底部导航。
- 公共组件的修正只涉及加载反馈语义;不得顺手调整其他页面布局或视觉。
- 不使用 JavaScript 定时器驱动动画,继续使用低成本的 `opacity``transform`
## 测试与验收
1. 先更新公共加载组件契约,使旧的 `prefers-reduced-motion``animation: none` 行为触发失败,并确认 RED。
2. 最小修改 `AppLoading.vue` 后确认聚焦契约 GREEN。
3. 在当前 412×915 Chrome G01 加载态检查:
- `prefers-reduced-motion: reduce` 为真;
- 印牌和如意结仍存在运行中的动画;
- 不同时间点透明度确实变化;
- `transform` 保持 `none`
- 页面仍是 G01 加载态,无错误态或列表内容串入。
4. 捕获并人工检查当前加载态截图;截图只能证明布局和静态帧,动画是否运行必须以运行时多时点证据为准。
5. 运行 G01 加载态、公共 AppLoading 及直接受影响的加载组件契约,再执行 `git diff --check`
6. H5 证据仅为内部候选;Android/HBuilderX 动画与性能仍未验证,不得宣称最终完成。
## 通过标准
- 用户能在当前系统的减少动态效果模式下明确感知加载仍在继续。
- 动画没有缩放、旋转或位移,且不会造成明显闪烁。
- 当前页面结构、文案和其他状态不发生无关变化。
- 用户重新审核 G01 加载态并明确说“通过”后,才继续展示失败态;G01 整页在全部状态通过前仍保持 `[!]`
@@ -0,0 +1,86 @@
# F01 家族动态基准页返工设计
## 目标
将 F01“家族动态”正常列表态重做为 F 模块视觉基准:消除动态卡框外白底和申请状态语义,强化内容阅读层级,并提升快捷入口的触控可用性。
## 修改范围
仅修改 F01 及其直接测试、候选资产和视觉证据:
- 四个内容快捷入口。
- 动态列表卡片。
- 空态与失败态共用的内容面板外观。
- 与以上结构直接相关的 F01 合同和运行时检查。
保持不变:
- 页头、“发布”入口、家族圈上下文、长背景和底部 Tab。
- 加载、列表、空、失败四种状态及现有路由行为。
- 发布按钮的项目现有真实资产。
- 其他 F 页面及公共组件。
## 视觉方案
### 家书动态卡
- 新增 F01 专属透明 PNG 内容卡资产,作为动态卡和空/失败内容面板的统一基底。
- 资产使用浅宣纸内面和克制的细金边,外框之外必须透明;不得出现白色矩形底、申请状态红竖线或右上状态短横。
- 设计语言偏“家书/家族记事”,与 T07 成员题签卡明显区分。
- 卡片宽度跟随内容区;412px 视口下单卡高度约 116–132px,内容在卡内垂直居中。
### 信息层级
- 标题为第一层级,使用楷体并保持最高字号与字重。
- 分类与时间位于标题上方,作为低权重辅助信息;只用文字强调,不增加装饰竖线。
- 正文位于标题下方,最多两行,颜色和字号低于标题。
- 发布人位于卡片底部,保持可读但不抢标题。
- 两张卡的宽度、高度和内边距完全一致。
### 快捷入口
- 保留“谱文、相册、礼仪、备忘”及现有真实卷轴按钮资产。
- 每个入口触控高度固定不低于 44 CSS px;320px 宽度下仍不得低于该值。
- 四个入口在一张全宽次级卷轴框内使用四列等宽布局,只保留一套卷轴端头和外框。
- 入口之间保持清楚间隔,不裁切文字,不出现横向页面溢出。
### 状态与操作
- 加载态继续使用 `AppLoading`
- 空态和失败态使用同一张 F01 专属透明内容卡,不复用申请状态卡。
- 失败态“重新查看”和正常/空态“发布家族动态”继续使用现有项目按钮资产。
## 响应式与可用性
- 自动检查 320×568、360×640、360×800、412×915。
- 四档均不得产生横向溢出、文字裁切、卡片错位或 Tab 遮挡。
- 快捷入口和主要操作触控高度均不低于 44 CSS px。
- 页面保持现有内容滚动和底部安全区域处理。
## 验收条件
- 动态卡和状态面板没有框外白底。
- F01 不再引用 `application-status-card.png`
- 动态卡不含申请状态式红竖线或右上短横。
- 标题是第一视觉焦点,分类/时间、正文、发布人层级清楚。
- 快捷入口四档尺寸均达到 44px 触控高度且没有页面横向溢出。
- 加载、列表、空、失败、发布和内容入口行为保持可用。
- F01 聚焦合同、既有 F 系列合同和 H5 运行时检查通过。
## 证据边界
- H5 截图只作为内部候选证据。
- Android/HBuilderX 真机或模拟器仍未验证,不据此宣称完成。
## 非目标
- 不修改其他 F 页面。
- 不抽取新的公共组件。
- 不连接真实接口。
- 不改动底部 Tab、页头或发布流程。
## 自检
- 无 TBD、TODO 或未决资产选择。
- 资产、布局、状态和验收条件没有冲突。
- 范围严格限定为 F01 及其直接测试和候选证据。
@@ -0,0 +1,78 @@
# G01 添加家谱底部弹层设计
## 视觉目标
唯一视觉目标为 `docs/design/mockups/2026-07-19/g01-add-dialog-paper-sheet-target.png`。采用用户选择的第 3 版结构、第 1 版卷轴按钮,并将右上“关闭”文字替换为关闭图标。
## 范围
只返工 G01“我的家谱”的“添加家谱”弹层。正常列表态、空态、加载态、失败态、切换家谱弹层、独立滚动及其他页面均不修改;三个入口继续调用现有跳转逻辑,不对接接口。
## 删除当前无用元素
- 弹层不再引用 `a01-scroll-dialog-v3.png` 完整卷轴背景。
- 删除完整封闭金框、四角祥云、底部山水和为这些装饰预留的空白区域。
- 删除标题与关闭入口为躲避祥云而增加的偏移样式。
- 删除文字“关闭”,不保留旧“取消”入口。
- 删除本轮被否决实现产生且不再被模板使用的 G01 添加弹层专用样式;不删除任何现有资产文件、候选截图、测试或文档。
## 背景资产与伸缩规则
- 用户确认采用“单张完整 PNG + 九宫格伸缩”方案。唯一底板资产为 `static/assets/modules/genealogy/transparent/g01-add-sheet-background-v3.png`,源尺寸 `1536×1024`
- 顶部透明轮廓、左右圆肩、古金收边、中央如意结和连续宣纸纹理全部属于同一张资产;弹层不得再把矩形宣纸、顶部过渡图或独立结饰拼接成底板。
- 资产按九宫格中的纵向三段规则渲染:顶部装饰安全区固定、底部收口固定,只允许中间无关键装饰的宣纸区域纵向伸缩。弹层变高时,顶部曲线、如意结、金线粗细和圆肩比例不得发生纵向变形。
- 当前三按钮状态的弹层最小高度为 `780rpx`;在 412px 宽审批视口中约为 `429px`,完整底板的可见弧形上沿应到达用户截图箭头所指的列表中部位置。
- 标题、说明和按钮组组成一个内容整体。三按钮状态中,该整体必须在弹层可用区域内垂直居中,新增高度不得只堆积为顶部或底部的大块空白。
- 居中使用内容容器的上下自动边距实现,不使用可导致超高内容顶部被裁掉的 `justify-content: center`,也不使用只适配三按钮数量的固定坐标。
- 未来出现更多按钮、表单或说明时,上下自动边距归零,同一底板随内容自然增高,中间纸面扩展;达到 `calc(100vh - 80rpx)` 后由内容区纵向滚动,并保证首项可滚动到可视区域顶部。
- 本轮只在 G01 落地该伸缩结构,不提前迁移其他页面,也不为尚未出现的第二个消费者抽取全局组件;后续真实页面需要同类底部弹层时,再以该资产和伸缩规则为单一视觉合同抽取复用。
## 新弹层结构
- 弹层是贴紧视口底部的全宽宣纸面板,处理底部安全区。
- 面板底面只使用完整底板资产 `static/assets/modules/genealogy/transparent/g01-add-sheet-background-v3.png`;不再引用 `page-paper.jpg``a01-paper-transition-v1.png` 拼接当前弹层。
- 左上依次显示标题“添加家谱”和说明“建议先搜索已有家谱,避免重复创建”。
- 标题、说明和三个操作统一放入 `add-dialog__body` 内容容器;该容器以 `margin-block: auto`(落地时使用兼容现有构建链的上下 `auto` 边距写法)完成三按钮状态的垂直居中。
- 右上使用独立关闭图标,实际可见朱砂叉号约 `34rpx`,触控区域不小于 `80rpx × 80rpx`。新增真实透明 PNG `static/assets/modules/genealogy/transparent/g01-dialog-close.png`,以选定目标中的朱砂细线关闭图标为视觉参考生成;由于源图透明画布约占六成,图片元素使用 `80rpx × 80rpx` 才能达到目标视觉尺寸。不从截图裁切,也不使用文字字符、CSS 线条或手绘 SVG 冒充。
- 关闭控件放入标题容器并相对标题定位,不能再使用相对整个弹层的固定顶部坐标;因此三按钮居中、六按钮增高或超高滚动时,关闭图标始终跟随标题。
- 三个操作直接复用项目现有 `AppButton`,不得根据效果图重新绘制、生成或近似实现按钮皮肤:
1. `AppButton` 主按钮继续使用 `static/assets/foundation/transparent/a01-scroll-primary-v3.png`,文案“搜索家谱”;
2. `AppButton` 次按钮继续使用 `static/assets/foundation/transparent/a01-scroll-secondary-v3.png`,文案“邀请码加入”;
3. `AppButton` 次按钮继续使用 `static/assets/foundation/transparent/a01-scroll-secondary-v3.png`,文案“继续创建家谱”。
- 三个按钮之间统一使用 `24rpx` 间距;在 412px 审批视口中约为 `13.2px`。间距只施加在相邻 `AppButton` 之间,不改变按钮图片或按钮内部文案。
- 三个按钮以当前红色主按钮的可见宽度为统一基准。仅在 G01“添加家谱”弹层内,将三个按钮容器设为响应式 `595rpx × 96rpx` 基准并水平居中;412px 审批视口中约为 `327px × 53px`,两张按钮皮肤均继续使用 `aspectFit`,使左右卷轴端点对齐且不做横向拉伸。
- 等宽规则不得修改公共 `AppButton` 的默认尺寸,不得影响其他页面,不得生成或改写按钮图片资产。按钮宽度受弹层可用宽度约束,在 320px 档位按 rpx 等比缩放并保持 `max-width: 100%`
- 按钮组增高后仍作为 `add-dialog__body` 的一部分整体居中;`780rpx` 最小高度和可见上沿位置不变,由上下自动边距等量缩小吸收新增高度,不得把按钮组单独推向顶部或底部。
- 遮罩使用当前已验证的深度,使后方列表退居背景但仍能辨认所在页面。
## 交互
- 点击关闭图标关闭弹层。
- 点击遮罩关闭弹层。
- Android 返回键优先关闭弹层,不离开 G01。
- 点击弹层内部不触发遮罩关闭。
- 三个入口继续复用现有 `applyToJoin``joinByInvite``createGenealogy`,不改变路由契约。
## 响应式与可访问性
- 320px 宽度下 `780rpx``24rpx` 按钮间距等比缩放,页面不得横向溢出,标题、说明、关闭图标和三个按钮不得互相遮挡。
- 568px 高度下三个操作必须同时可达;内容超过安全高度时弹层内容区纵向滚动,且滚动起点不得裁掉标题或关闭入口。
- 三按钮基准高度与长内容压力高度必须使用同一张底板;压力高度只扩展中间纸面,顶部曲线、圆肩和如意结尺寸保持一致。
- 关闭图标必须有可访问名称“关闭”,不能只依赖图形表达。
- 弹层打开时阻止后方独立列表滚动穿透,关闭前后保持列表位置。
## 验证
- 先修改 G01 视觉契约,使其因仍引用完整卷轴背景、仍使用文字关闭、仍拼接矩形宣纸与顶部过渡图,或缺少完整可伸缩底板而失败。
- 最小实现后运行 G01 视觉、空态、加载态和失败态契约,且不得放宽既有阈值。
- 运行时只检查当前“添加家谱”状态,在 320×568 和 412×915 验证 `780rpx` 最小高度、`24rpx` 按钮间距、三个按钮左右端点对齐、内容整体居中、关闭、遮罩与滚动位置;以六按钮验证自然增高,并以超过最大高度的长内容验证可从顶部开始滚动。最后恢复 412×915 三按钮状态并保持弹层打开。
- 在唯一 9222 Chrome 项目标签页中展示;不新开浏览器或第二个项目标签页。
- H5 截图只作为内部候选证据;Android/HBuilderX 仍单独保留为未验证项。
## 非目标
- 当前仅建立可伸缩视觉合同,不在只有一个消费者时抽取新的通用弹层组件。
- 不修改切换家谱弹层。
- 不删除任何现有静态资产文件或历史候选证据。
- 不更改接口、数据结构或业务跳转。
- 不冻结 G01,不更新为 `[x]`
@@ -0,0 +1,65 @@
# G01 切换家谱弹层设计规格
## 目标
只返工 G01“我的家谱”的“切换当前家谱”弹层。弹层在两条数据时紧凑、居中、易读;家谱数量增加时,完整背景随内容自然增高,达到视口安全上限后仅列表内部滚动。
## 范围
- 保留现有家谱数据、当前项判断、选择逻辑和遮罩关闭逻辑,不对接接口。
- 不修改 G01 其他状态,不修改公共 `AppDialog``AppButton` 或其他页面。
- 不生成、不覆盖、不删除任何图片资产。
- 当前状态未经用户明确通过,不标记 G01 为 `[x]`,不冻结页面。
## 完整背景与伸缩合同
- 唯一背景资产继续使用 `static/assets/modules/auth/transparent/a01-scroll-dialog-v3.png`,源尺寸为 `1860×1560`
- 不再用绝对定位的 `<image mode="aspectFit">` 把整张背景限制在固定高度内;容器改为单张完整 PNG 的九宫格 `border-image` 渲染。
- 九宫格源切片使用 `300 260 360 260 fill`:顶部金框与祥云、左右边框和底部山水与如意结属于固定区;只有中间无关键装饰的宣纸区域允许纵向伸缩。
- 九宫格显示边宽使用 `110rpx 48rpx 132rpx 48rpx`,分别保留顶部装饰、左右边框和底部山水安全区。
- 顶部祥云、四角纹样、边框粗细、底部山水和中央如意结不得随弹层高度纵向拉长,也不得拆成多张图片拼接。
- 弹层宽度保持 `670rpx``max-width: 100%`;两项状态的最小高度为 `600rpx`,最大高度为 `calc(100vh - 120rpx)`
- 内容少时背景保持 `600rpx` 的紧凑基准;内容增加时背景和容器同步自然增高;达到最大高度后容器不再增高,家谱列表独立纵向滚动。
## 布局
- 弹层继续位于视口中央,遮罩深度沿用当前值。
- 内容安全区使用 `120rpx 58rpx 140rpx` 内边距,标题完整落在顶部金框和祥云下方,不得与任何装饰重叠。
- 标题“切换当前家谱”居中显示,沿用朱砂色和楷体层级。
- 标题下方使用独立列表容器;两条数据时列表不产生滚动条,也不在末项下方留下超过 `72rpx` 的纯内容空白。
- 每行最小高度 `112rpx`,整行均可点击;名称、元信息和右侧状态保持稳定左右对齐。
- 名称字号 `32rpx`;元信息字号从 `21rpx` 提升为 `24rpx`;右侧“当前/选择”字号从 `23rpx` 提升为 `25rpx`
- 当前项使用轻量朱砂底色和边线反馈,不只依赖名称变红;可切换项保持宣纸底色。
## 关闭与交互
- 移除底部不可见的文字“关闭”入口。
- 右上复用 `static/assets/modules/genealogy/transparent/g01-dialog-close.png`,图片画布 `80rpx × 80rpx`,点击热区不小于 `80rpx × 80rpx`,可访问名称为“关闭”。
- 关闭热区相对弹层定位为 `top: 78rpx; right: 34rpx`,可见朱砂叉号与标题处于同一视觉行,并避开顶部金框。
- 点击关闭图标或遮罩关闭弹层;点击弹层内部不关闭。
- Android 返回键在切换弹层打开时优先关闭切换弹层;若添加家谱弹层打开,则优先关闭添加家谱弹层;两者均未打开时交还页面导航。
- 点击非当前家谱后继续执行现有 `selectGenealogy(item)`:更新当前家谱并关闭弹层,不增加 Toast、Loading 或接口请求。
## 响应式和长内容
-`320×568``360×640``360×800``412×915` 下,弹层不得横向溢出,标题、关闭图标、列表和底部固定装饰不得互相遮挡。
- 两项状态在四档尺寸下均应保持紧凑且完整可见。
- 六项压力状态下背景自然增高;若仍低于最大高度,不显示列表滚动条。
- 十二项压力状态下弹层封顶,标题、关闭图标和背景顶部固定不动,只有列表可从第一项滚动到最后一项。
- 列表滚动不得穿透到后方 G01 独立列表;关闭前后保持后方列表位置。
## 验证
- 先在 `tests/g01-visual-contract.ps1` 增加失败合同,覆盖:移除固定 `720rpx`、使用完整背景九宫格、`600rpx` 最小高度、最大高度、标题安全区、列表滚动容器、关闭图标及 Android 返回键。
- 最小实现后运行 G01 视觉、空态、加载态和失败态合同,不放宽任何既有阈值。
- 只复用 9222 上唯一的 Chrome 项目标签页,依次验证四档两项状态、六项自然增高和十二项封顶滚动。
- 捕获同尺寸修改前/修改后组合证据,检查标题压线、无效空白、背景装饰变形、文本可读性和关闭入口。
- 最终恢复 `412×915`、两条真实数据、切换弹层打开的状态,等待用户审批。
- H5 截图仅为内部候选证据;Android/HBuilderX 真机或模拟器仍为未验证项。
## 非目标
- 不抽取新的全局弹层组件。
- 不改造“添加家谱”底部弹层。
- 不修改家谱切换业务数据或路由。
- 不执行 Git 提交、推送、重置或检出操作。
@@ -0,0 +1,94 @@
# 模块基准页加速视觉审核设计
## 目标
今晚完成剩余活动页面的 H5 浅色国风视觉统一与用户审核,不再逐页逐状态实时展示。Android/HBuilderX、真实接口、真机性能和业务功能继续明确保留为未完成项。
## 已确认基准
- A:现有 A 系列成果保持不变,本轮不返工。
- G:G01“我的家谱”已经完成全部适用状态与五档尺寸审核,作为 G 模块基准。
- T:T07“成员目录”作为常规页面基准。
- F:F01“家族动态”作为模块基准。
- RR01“人物录”作为模块基准。
- N:N01“消息中心”作为模块基准。
- MM01“我的”作为模块基准。
候选选择依据记录在:
`docs/design/screens/runtime/2026-07-19/module-baseline-audit/audit.md`
## 执行顺序
1. 完整审核并完善 T07,确定 T 模块的标题、背景、搜索、列表、卡片、字体、间距和状态标准。
2. 完整审核并完善 F01,确定 F 模块基准。
3. 完整审核并完善 R01,确定 R 模块基准。
4. 完整审核并完善 N01,确定 N 模块基准。
5. 完整审核并完善 M01,确定 M 模块基准。
6. 五个新增基准页全部通过后,再完善 T01 世系树。T01 是特殊结构页,保留树画布、世代关系和成员操作结构,只继承 T07 的视觉令牌与公共状态组件。
7. T01 通过后,批量处理剩余页面。
8. 普通页面按以下顺序推进:
- 按 G01 统一 G03、G05、G06、G08、G09、G10、G11、G12。
- 按 T07 统一 T03、T04、T05、T06、T08。
- 按 F01 统一 F02F10。
- 按 R01 统一 R02R11。
- 按 N01 统一 N02。
- 按 M01 统一 M02M10。
## 基准页负责的内容
每个模块基准页拥有该模块的:
- 长背景与内容层透明度关系。
- 页面标题栏、返回入口和右侧操作。
- 主标题、说明文字、状态文字和正文的字号、字重与颜色。
- 页面水平边距、模块间距、卡片间距和底部安全区。
- 常规卡片、列表行、筛选/搜索区和主要操作的视觉语言。
基准页不拥有其他页面的业务结构。列表、表单、详情、设置、时间轴、树画布和编辑器继续保留各自适合任务的内容组织方式。
## 全局组件规则
以下内容不随模块重新设计,统一使用已经建立的项目自定义组件和 A/G01 已确认标准:
- `AppButton`
- `AppDialog`
- `AppToast`
- `AppLoading`
- 空态、失败态、无权限态的标题层级和恢复动作
禁止重新引入原生 Toast、Modal、Loading 或 ActionSheet。弹层允许根据内容伸缩,但必须沿用项目已经确认的宣纸、朱砂、古金与关闭图标体系。
## 批量审核方式
- 基准页与 T01:仍由用户逐个查看关键状态和代表尺寸,明确通过后才能成为推广标准。
- 普通推广页:自动运行已有静态合同和 Chrome 运行检查,覆盖默认状态、适用关键状态、四档尺寸、横向溢出和基础交互。
- 每个模块生成一张联系表,包含全部页面的默认态和有视觉差异的关键状态。
- 用户按模块审核联系表;没有问题则整批通过,只有异常页才单独打开返工。
- 不使用单张默认态代替状态检查;联系表背后必须有真实渲染和自动验证证据。
## 特殊页面与例外
- T01:树画布特殊页,不能机械套用 T07 列表 DOM。
- T03:必须从带成员上下文的入口或受控参数进入,不能把直达失败态当作默认态。
-`⚠` 的无真实入口页面:可以按模块基准完成视觉候选,但必须继续标注流程入口缺口,不能宣称真实流程通过。
- 公共 `ModulePage` 当前存在页面介绍与面板标题重复的问题;推广时应消除重复层级,不把重复标题固化为基准。
## 通过条件
页面或模块批次只有同时满足以下条件才能记为 H5 视觉通过:
- 与所属模块基准一致,且保留自身任务结构。
- 适用状态完整,没有加载、空、失败、无权限或业务状态的明显断层。
- 320×568、360×640、360×800、412×915 无横向溢出、裁切、遮挡或不可达操作。
- 自定义弹层和反馈组件使用正确。
- 聚焦合同、运行检查和 `git diff --check` 通过;不放宽阈值换取绿灯。
- 用户通过基准页或模块联系表给出明确结论。
## 明确不在本轮完成范围
- 真实接口与数据持久化。
- Android/HBuilderX 真机或模拟器验证。
- 4GB Android 长背景解码、切页与内存回收。
- 系统字体放大、读屏和真实软键盘。
- 无入口页面的产品入口补全,除非用户另行授权进入功能流程设计。
@@ -0,0 +1,50 @@
# N01 消息中心基准页设计
## 目标
将 N01 作为 N 系列视觉基准页。只处理 H5 审批所需的本地演示状态,不对接接口,不修改其他页面。
当前审计证据:`docs/design/screens/runtime/2026-07-19/n01-audit/01-list-412x915.png`。现状的主要问题是消息卡带有边框外白底、错误复用入谱申请卡片素材、未读与已读层级不清。
## 页面结构
- 顶部继续使用项目 `PageHeader`,标题“消息中心”,右侧操作“全部已读”。
- 内容区只包含消息列表、页面状态卡和必要操作,不增加编号介绍块。
- 每条消息使用 N01 独立拥有的透明金色线框位图;线框内不带底色,不复用其他模块的业务卡片。
- 卡片信息顺序为:状态与时间、标题、摘要。未读状态使用克制的朱红色,已读状态降为灰褐色。
- 整张消息卡均可点击;点击未读消息后切换为已读,不增加额外图标或角标。
- “前往入谱审核”继续使用现有项目卷轴按钮,放在列表之后并与消息卡保持明显间距。
## 审批状态
N01 依次审批以下状态,每次只显示一个:
1. 正常列表(同时展示未读与已读层级)。
2. 单条消息切换为已读。
3. 全部已读及项目自定义 Toast。
4. 加载态,使用项目 `AppLoading` 动画。
5. 空态,使用同一透明线框和简短说明。
6. 失败态,使用同一透明线框及“重新查看”卷轴按钮。
7. 审核跳转操作的可用性验证。
## 响应式与交互
- 在 320×568、360×640、360×800、412×915 四档尺寸检查,不把响应式逐档交给用户审批;仅在发现问题时返工 N01。
- 卡片宽度随内容区拉伸,高度由内容和最小触控尺寸共同约束,不固定为某一截图高度。
- 所有可点击区域满足至少 44px 的触控高度。
- Toast、Loading 和按钮全部使用项目自定义组件。
## 数据与范围
- N01 页面文件是本轮状态与交互的唯一所有者:`pages/notification/n01-message-center.vue`
- 使用本地模拟消息,不连接 API。
- 保留现有入谱审核路由参数传递方式,不扩展审核业务。
- 不修改 N02 或其他 N/G/R/F/T/M 页面。
## 验收标准
- 列表、单条已读、全部已读、加载、空、失败和审核跳转均可独立复现。
- 页面中不存在消息卡边框外白底,也不引用 `application-status-card.png`
- 未读与已读无需依赖颜色也能通过文字识别。
- 聚焦契约、根页面视觉契约、运行时冒烟和响应式冒烟均通过。
- 只有用户对所有 N01 状态明确说“通过”后,才把 N01 标记为 `[x]`
@@ -0,0 +1,67 @@
# R01 人物录基准页返工设计
## 目标
将 R01“人物录”重做为 R 模块视觉基准:移除通用申请状态卡及框外白底,建立适合人物档案的透明名帖卡,并补齐本地搜索、空态和失败态的视觉审核入口。
## 已选方案
采用 R01 专用透明“人物名帖”线框卡+独立搜索区。
未选方案:
- 复用 T07 成员卡:开发较快,但会混淆人物目录与世系成员目录的模块语义。
- 仅给通用卡去白底:改动最少,但仍保留申请状态式红竖线和右上短横,不能成为 R 模块基准。
## 修改范围
-`pages/records/r01-people-list.vue` 从通用 `ModulePage` 改为 R01 独立页面。
- 新增 R01 自有透明人物名帖卡资产。
- 复用项目现有真实搜索框、按钮、Loading、Toast、页头和 R 模块背景。
- 新增 R01 聚焦契约和运行证据。
不修改 `ModulePage.vue`、其他 R 页面、接口、公共组件或底层路由合同。
## 正常列表态
- 页头只显示“人物录”;删除标题栏下方重复的印章、R-01 页码和说明文字。
- 搜索区直接承接标题栏,可按姓名、身份或世代本地筛选三条候选数据。
- 每张人物卡只显示姓名、身份、世代和低权重“查看人物档案”提示。
- 卡框外和卡内均透明,让 R 模块长背景连续显示;不出现白色矩形底、申请状态红竖线或右上状态短横。
- 三张卡等宽、等高、间距一致;姓名是第一视觉焦点。
- “新建人物”继续使用现有主卷轴按钮;当前视觉阶段点击后使用项目 `AppToast` 说明后续功能阶段开放。
## 状态
- 正常列表:三条人物记录。
- 搜索无结果:搜索框保留,同页显示明确无结果说明,清空关键词可恢复三条记录。
- 空态:说明尚未建立人物记录,保留“新建人物”入口。
- 失败态:说明人物录暂不可用,提供“重新查看”恢复入口。
- 不新增接口调用,不使用原生 Toast、Modal、Loading 或 ActionSheet。
## 响应式与可用性
- 自查 320×568、360×640、360×800、412×915。
- 搜索操作、新建人物和恢复操作触控高度不低于 44 CSS px。
- 四档均不得出现页面横向溢出、文字裁切、卡片错位或主要操作不可达。
## 验收条件
- R01 不再引用 `ModulePage``application-status-card.png`
- R01 不显示标题栏下方的印章、页面编号或重复说明块;后续页面审核遇到同类块时在各自页面范围内删除。
- R01 使用自有透明人物名帖卡,卡片区域没有白色矩形底。
- 搜索三条、无结果和清空恢复可在本地真实触发。
- 列表、空、失败和新建提示均使用项目组件与真实资产。
- 相关契约、R 系列视觉契约和 H5 运行检查通过。
## 证据边界
- H5 截图只作为内部候选证据。
- Android/HBuilderX 真机或模拟器仍未验证。
- 用户逐状态通过前不得把 R01 标记为 `[x]`
## 自检
- 无 TBD、TODO 或未决设计选择。
- 页面、资产、状态、交互和验收条件没有冲突。
- 修改范围严格限定为 R01 及其直接测试、资产、文档和截图。
@@ -0,0 +1,67 @@
# T07 搜索框与成员卡返工设计
## 目标
将 T07“成员目录”正常列表态修正为可作为 T 模块基准的页面,消除搜索框和成员卡框外白底,修正成员卡的视觉语义与信息密度。
## 范围
仅修改 T07
- 搜索框视觉与文字可读性。
- 成员卡底框、布局、层级和间距。
- 与上述视觉结构直接相关的 T07 合同测试与运行时验证。
保持不变:
- 页头、当前家谱上下文、整页背景。
- 搜索、空态、加载态、失败态及成员跳转行为。
- 其他任何页面与公共组件。
## 视觉方案
### 搜索框
- 停止使用带不透明框外白色像素的 `g06-search-input-wide.png`
- 改用 T07 独立的透明专用搜索框 `t07-search-input-frame.png`,避免与成员卡共用同一外形。
- 搜索框保留浅宣纸输入面,金色外框之外为透明,不额外叠加白色容器。
- 保留单行搜索结构和右侧“查找”操作;增强占位文字字号与对比度。
- 搜索框触控高度不低于 44 CSS px。
### 成员卡
- 停止使用 `application-status-card.png`,去除申请卡式红色竖线、右上短横和框外白底。
- 使用透明 `list-slip-frame.png` 作为成员卡边框。
- 不使用左侧世代印章;世代已经在第二行成员信息中呈现,避免重复信息和高饱和装饰抢夺姓名焦点。
- 单卡由约 133 CSS px 压缩到约 96108 CSS px;内容在卡内垂直居中。
- 信息层级:姓名为一级;“第 N 世 · 字辈 · 支系”为二级;身份或资料情况为三级小标签。
- 三张卡保持完全一致的宽度、高度与内边距。
## 响应式约束
- 320×568、360×640、360×800、412×915 均不得产生横向溢出。
- 320 宽度下允许缩小字号与横向间距,但不能截断姓名或主要世系信息。
- 页面保持纵向独立滚动。
## 验收条件
- 搜索框边框外没有白带或白色矩形底。
- 成员卡四周没有白色断层,页面背景纹理连续可见。
- 不再出现申请状态卡的红竖线和右上短横装饰。
- 姓名是每张卡的第一视觉焦点;三层信息可清楚区分。
- 搜索与成员点击行为保持可用。
- T07 聚焦合同测试、相关既有回归测试和四档 H5 运行时检查通过。
- 仅形成 H5 候选证据;Android/HBuilderX 验证仍不宣称完成。
## 非目标
- 不改造其他 T 页面。
- 不抽取新的公共组件。
- 不对接真实接口。
- 不生成新图片资产。
## 自检
- 无 TBD、TODO 或未决选择。
- 资产、布局、交互与验收条件无冲突。
- 修改范围严格限定为 T07 及其直接测试证据。
@@ -0,0 +1,23 @@
# M01 我的首页基准页设计
## 目标与范围
将 M01 做成 M 系列视觉基准。本轮只整理现有“资料、提醒、菜单、失败状态”的视觉与交互,不新增个人中心功能,不对接接口,不修改其他页面。
当前审计证据:`docs/design/screens/runtime/2026-07-20/m01-audit/01-ready-412x915.png`。现状的整页白色画框和待处理白底卡与页面背景割裂,内容层级不足。
## 页面结构
- 保留顶部“我的”和右侧“资料”入口,以及底部“我的”Tab。
- 删除覆盖大半屏的内层白色画框。
- 正常态采用一张连续的“个人谱牒册页”,不再把每个区域做成相同卡片。
- 册页上部突出印章头像、姓名、脱敏手机号与家谱身份,并以真实装饰分隔素材建立个人中心辨识度。
- 待处理提醒使用一条独立的紧凑提醒栏,以朱红标题强调,整栏跳转 N01。
- 下部设置“服务与设置”分组;账号与安全、帮助与反馈、关于家谱采用透明列表行、细分隔线和真实箭头图标,可自然向下增加后续功能。
- 失败态使用独立透明线框和项目自定义“重新查看”按钮。
## 状态与验收
依次审批正常首页和失败态;同时验证资料、提醒和三个菜单入口的目标路由。四档响应式尺寸由 Codex 内部检查,仅在发现问题时返工 M01。
只有全部状态和入口明确通过后,才将 M01 标记为 `[x]`。Android/HBuilderX 仍未验证,H5 截图只作为内部候选证据。
@@ -0,0 +1,38 @@
# T01 纵向世系轴基准设计
## 目标
将 T01 从“横向大画布上的独立成员卡”调整为可直接读懂亲缘关系的纵向世系轴,并作为后续世系树页面的视觉基准。本轮仅使用页面内模拟数据,不接接口。
## 已确认方向
- 始祖置于顶部中央,后代按世代向下分层。
- 同一世代横向排列;只有分支超过当前宽度时才横向拖动。
- 首屏必须完整看到始祖和主要下一代,不能以裁切节点暗示结构。
- 祖先到子代之间显示连续、清晰的关系线;选中成员以红色节点框和文字强调。
- 世代标题采用横向分层标签,不再使用分散的竖排小字。
- 选中成员信息放在底部透明信息栏中,保留“查看资料”“添加亲属”。
- 加载、阅读提示、空、失败继续由 T01 同页状态承载。
## 视觉资产
- 页面背景继续使用 T 系列 `ModulePageBackground`
- 成员节点复用现有透明卷框资产,树状态面板与底部信息栏复用现有透明金线框资产,并复制到 tree 模块命名空间。
- 移除 T01 对 `g03-create-flow-panel.png``g06-search-input-wide.png``application-status-card.png` 三个不透明表面资产的引用。
- 关系线属于数据关系可视化,可由布局元素绘制;不使用 CSS 仿造装饰图案、SVG 或表情符号。
## 状态与交互
- `loading`:保留 `AppLoading` 动画。
- `tree`:展示纵向三代世系,默认选中始祖;点击节点更新底部信息栏。
- `landscape`:说明“上下看世代、左右看同代分支”,操作后回到树态。
- `empty`:引导录入首代成员并跳转 T04。
- `error`:说明读取失败,重试后回到树态。
- 保留 T03、T04、T06、T07 路由入口。
## 响应式与验收
- 内部检查 `320×568``360×640``360×800``412×915`,不把响应式尺寸逐档交给用户确认。
- `412×915` 作为当前正常树态的首个视觉审批证据。
- H5 截图仅作内部候选;Android/HBuilderX 真机或模拟器验证仍未完成。