接口开始5%

This commit is contained in:
rain
2026-07-22 17:31:33 +08:00
parent eced3d1e6e
commit 9b0ad62df4
426 changed files with 20111 additions and 28472 deletions
@@ -1,56 +0,0 @@
# A01、G01 与 A02 视觉审视
> 日期:2026-07-13
> 方法:通过用户授权的 Chrome 调试端口捕获真实 360 × 800 页面画面,并逐张检查。
> 范围:只审视 A01、G01 两张已验收基准页与 A02 当前登录页;本记录不是用户最终验收。
## 1. 截图证据
| 页面 | 状态 | 截图 |
| --- | --- | --- |
| A01 启动/登录引导 | 用户已验收的认证基准 | `screens/runtime/2026-07-13/A01-360x800.png` |
| G01 我的家谱 | 用户已验收的家谱基准 | `screens/runtime/2026-07-13/G01-360x800.png` |
| A02 账号登录 | 当前实现,未验收 | `screens/runtime/2026-07-13/A02-before-360x800.png` |
## 2. A01、G01 共同的可继承规则
1. **完整资产承担外观。** 朱砂页头、纸纹、主/次按钮、题签框、谱印框、云纹和分区线都有明确的图片资产;文字与交互位于图片之上。
2. **一屏只有一个视觉主角。** A01 是“家谱”标题与两枚操作按钮;G01 是当前家谱题签。其余山水、竹影和金线只托住主角。
3. **信息层级有节奏。** 大号楷体标题、常规正文、弱化元信息分明;每一段间保留足够纸面,不把内容挤成普通管理表单。
4. **朱砂只表达关键动作或当前状态。** A01 的登录、G01 的当前谱印与选中 Tab 使用朱砂;古金负责边框、图标和分隔。
5. **同一类元素使用同一套成品。** A01 两枚按钮保持一致比例;G01 的当前题签、列表题签、谱印、快捷图标和底部导航形成连续的组件语言。
6. **背景不抢任务。** 纸纹先提供可读底色,淡墨山水只落在空白和底部,不能穿过输入区或元信息。
## 3. A02 当前状态
### 可保留项
- 已有 A01 同源的纸纹、祠堂页头、谱印、淡墨背景和朱砂按钮皮肤。
- 账号密码/手机验证码双 Tab、真实 input、忘记密码入口、协议判断与 A05 跳转仍应保留。
- 360 × 800 下页面没有横向裁切,主按钮可见。
### 必须解决的可见问题
1. **登录面板是普通的细金线矩形。** 它没有完整纸面、双线、角纹或题签结构,和 A01 的完整按钮、G01 的完整谱签不属于同一视觉系统。
2. **卡片内容过小且过密。** 标题、双 Tab、标签、占位文本、忘记密码与协议提示都落在一张矮卡内,用户进入后感受到的是“填写控件”,不是“进入家谱”。
3. **按钮比例被压扁。** 当前主按钮使用约 4.49:1 的 A01 皮肤,却放入更扁的容器,边角和纹样失去端正的卷轴比例。
4. **标题装饰没有成为层级。** 单侧云纹和细小返回符号像零散点缀,无法支撑“登录家谱”作为当前任务标题。
5. **底部留白失衡。** 表单卡结束后到山水背景之间有大块无任务留白,而面板内部反而拥挤;需要把留白放在卡片外、把可读空间还给表单。
## 4. A02 设计决策
- 继续使用“家祠卷轴 · 庄重留白”,不另起现代渐变、玻璃卡片或圆角后台表单画风。
- 认证头部与 A01 使用同一祠堂高度和谱印位置;头部以下先给清楚的“登录家谱”题签标题,再给完整不透明的认证面板资产。
- 认证面板只承载 Tab、输入、忘记密码与协议说明;面板自身纸纹、金边和角纹由一张完整不透明 PNG 提供。
- 主按钮只能按完整皮肤原比例显示;空间不足时缩小宽度或增加高度,不能纵向压缩图片。
- 淡墨山水放到卡片结束后的留白与底部,作为收束,不穿过输入行。
## 5. 可见性与无障碍风险
- A02 的弱提示和协议文字在 360 × 800 下偏小,后续实现要保证正文至少 24rpx,主要点击区至少约 44dp。
- 截图不能证明键盘焦点、读屏标签、错误提示朗读和真实 Android 字体回退;实施后仍需在 HBuilderX/Android 复核。
- 本次只验证了正常态,没有验证输入错误、验证码倒计时或网络失败态;这些状态保持现有功能边界,不在本轮扩展接口。
## 6. 下一步
先为 A02 建立完整认证面板和正确比例按钮的资产合同,再做 A02 四尺寸前后对比;用户确认 A02 后,才将它作为 A03–A05 的认证样板。
@@ -1,73 +0,0 @@
# 页面与状态合并审计
> 审计日期:2026-07-14
> 结论状态:G02→G01、G04→G03 已获用户授权并完成实施;其余四项仍是待实施建议。
## 1. 审计范围与证据
- 审计时 `pages.json` 实际登记 58 条路由;用户确认后已依序删除 G02、G04、G07 独立路由,当前由 `tests/full-page-visual-contract.ps1` 约束为 **55 条路由**
- G02 原先替换的是 `pages/genealogy/g02-empty-genealogies` 通用壳;该路由与 G01 的空态重复,现已收敛为 G01 的 `?state=empty`,不再进入独立页面验收。
- 已在本轮重新捕获并审视 A01、A02、A04、A05、A06、G01 的 360×800 真实运行图:`screens/runtime/2026-07-14/route-audit/accepted-route-audit-360x800.png`
- G01 源码在 `hasGenealogies``v-else` 分支拥有“新建家谱/搜索并申请加入”两条动作;现已由 `forceEmptyState` 统一所有权。默认态前后对比为 `screens/runtime/2026-07-14/G01-default-before-after-360x800.png`,空状态为 `G01-empty-after-360x800.png``G01-empty-after-412x915.png`,均已获用户审美确认。
- 其余 40 个仍渲染 `ModulePage` 的路由尚无独立视觉实现;其合并判断依据目前是规划中的任务语义、页面中文用途注释与目录状态,不将通用壳截图误当成最终交互。
## 2. 判断标准
保留独立路由,当用户进入的是不同的主任务、需要独立返回历史、可被深链/通知直接打开,或需要承载未保存的完整表单。
合并为同页状态,当差异仅是加载/空/失败/权限、查询前后、同一表单的步骤,或同一详情内的媒体预览与上传结果。状态由页面数据或查询参数驱动,不另建占位路由。
## 3. 已验收页面复核
| 已验收路由 | 结论 | 理由 |
| --- | --- | --- |
| A01 启动/登录引导 | 保留独立页 | 品牌入口、微信登录、注册入口与协议确认,和登录表单不是同一步。 |
| A02 账号登录 | 保留独立页;现有双 Tab 正确 | 账号密码/短信验证码已经在同页状态切换,无需拆为 A03。 |
| A04 注册账号 | 保留独立页 | 需要完整新用户表单、协议确认与返回链。 |
| A05 重置密码 | 保留独立页 | 手机验证、验证码与两次密码确认是独立安全任务。 |
| A06 登录状态 | 保留一个路由;现有六状态正确 | `normal/failed/restricted/register-pending/wechat-*` 已在同页状态配置中,未为每种错误新增页面。 |
| G01 我的家谱 | 保留根页;合并 G02 | 已具备列表、加载和空态分支,G02 不应是第十二个家谱路由。 |
结论:已验收页面中没有需要为了减少页面而合并的认证页;A02 与 A06 已经是正确的“同页多状态”实现。唯一明确重复的是 G02→G01。
## 4. 全量路由建议
| 模块 | 现有路由/单元 | 保留为独立任务 | 合并为同页状态 | 路由数变化 |
| --- | ---: | --- | --- | ---: |
| 认证 | 5 | A01、A02、A04、A05、A06 | A02 TabA06 六状态均保留在各自页面内部 | 5 → 5 |
| 家谱 | 9 | G01、G03、G05、G06、G08、G09、G10、G11、G12 | 已完成 G07→G06 搜索结果/无结果收敛 | 9 → 9 |
| 世系树 | 8 | T01、T03、T04、T05、T06、T07 | T02→T01 的横屏/空/加载失败状态;T08→T03 的已故/隐私/无权状态 | 8 → 6 |
| 家族内容 | 10 | F01、F02、F03、F04、F05、F06、F07、F08、F10 | F09→F08 的图片预览/上传/失败状态;F03 评论/删除确认和 F10 服务未开放也只作本页状态 | 10 → 9 |
| 人物与礼仪 | 11 | R01--R11 | R02 编辑、R04 新增/详情/删除确认、R07 新建/编辑均已应作为各自路由内部状态 | 11 → 11 |
| 消息 | 2 | N01、N02 | N01 空态、N02 已读均为内部状态 | 2 → 2 |
| 个人中心 | 10 | M01--M10 | M01 登录态、M03 安全态、M09 空订单均为内部状态;M04/M05 保持独立,尤其 M05 符合用户已确认的“安全设置按钮跳转绑定手机号页面” | 10 → 10 |
| **总计** | **55** | | **尚余 3 个重复路由合并** | **55 → 52** |
## 5. 建议的 52 条路由主表
### 合并清单(高置信)
1. 已删除 `G07` 路由;G06 同页管理初始搜索、结果列表与无结果,点选后进入 G08。G06 截图与自动验证已完成,等待用户审美确认。
2. 删除 `T02` 路由;T01 同页管理树正常态、小屏横屏提示、无成员、加载与失败。
3. 删除 `T08` 路由;T03 同页管理正常成员、已故、隐私隐藏、无权限。T07 仅保留目录和搜索结果。
4. 删除 `F09` 路由;F08 同页管理照片墙、预览、选择上传、上传中、失败重试。
### 暂不合并的边界
- 不把 A01/A02、A04/A05、M04/M05 合成万能认证/安全页:这些是不同主任务,且 M05 的独立跳转是用户已确认的产品要求。
- 不把 G08/G09 合并:一次申请表单与“我的全部申请记录”是不同任务和信息密度。
- 不把 T04/T06、F02/F06、R03/R05/R08--R11 合并:对象、数据结构与返回历史不同;可复用表单组件,但不应强行共享一个路由。
- F10 是否并入 F01 的媒体 Tab 不足以从当前规划判断,暂保留 F10 路由;待家族首页信息架构定稿后再评估,不计入 52 的高置信精简。
## 6. 已完成的 G02、G04、G07 收敛
G02 不进入独立视觉验收。用户已授权实施后,独立页面、G02 契约/冒烟测试、专属截图与“等待验收”文档已删除;最终 ImageGen 面板已改名为 `g01-empty-panel.png`,归属 G01 `state=empty`,现已获用户确认。G04 也已删除;其字段、校验与真实保存行为归属 G03 `step=ancestor`,并已获用户继续授权通过。G07 也已删除;公开检索的初始、结果和无结果均归属 G06,结果点选只进入 G08。`tests/g01-empty-state-contract.ps1``tests/g03-create-flow-contract.ps1``tests/g06-search-flow-contract.ps1` 与对应 Chrome 冒烟测试保护三条收敛链路;G01 默认态前后对比和 G06 前后对比证明已验收状态没有可见回退,G06 本身仍待用户审美确认。
## 7. 推荐执行顺序(G06 三态等待审美确认)
1. G02→G01、G04→G03、G07→G06 已完成,路由总数已从 58 变为 55;G01 两种状态与 G03 双步骤已获用户确认,G06 三态等待审美确认。
2. 用户已授权连续推进;下一项实施 T02→T01,路由数变为 54。
3. 在世系树完成 T01、T03 的独立设计时同步吸收 T02、T08,不先为状态壳单独生成资产。
4. 在相册 F08 设计时同步吸收 F09;其余模块按“先任务页、后状态”推进。
除已获用户确认的 G02→G01 外,未经用户确认,本审计不改动其余路由、已验收页面或现有未提交内容。
@@ -1,81 +0,0 @@
# A-01 启动 / 登录引导设计记录
> 状态:A-01 文字注册入口方案、四尺寸静态验收、本地 UI 与 412 × 915 运行时视觉基准已完成并获用户验收;A-02 双标签本地 UI 已完成并获用户验收。A-03 已删除;协议页去向、A-04 至 A-06 的设计、认证接口与 Android 全尺寸回归验收仍未完成,D2 继续进行中。
>
> 本页设计事实的唯一归档位置为本文件。旧的 `2026-07-13-a01-login-guide-design.md` 与 `2026-07-13-a01-login-guide.md` 仅保留为失效历史,不可作为实现或推进下一页的依据。
## 1. 已归档的美术锚点
- v1–v3 早期整页效果稿已于 2026-07-17 上传前清理;历史入口结构保留在本记录与项目外完整归档中,不再作为当前方案依据。
- 当前可恢复美术源:[`assets/a01-vnext/source/A01-layered-source-v1.psd`](assets/a01-vnext/source/A01-layered-source-v1.psd) 与 [`a01-psd-manifest.json`](assets/a01-vnext/source/a01-psd-manifest.json)。
- 当前运行时视觉基准:[`screens/A01-启动登录引导-栅格验收-412x915.png`](screens/A01-启动登录引导-栅格验收-412x915.png),用于 A-01 协议未勾选状态的同尺寸像素比对;`pages/auth/entry.vue` 必须使用真实页面结构还原,不得将整张效果图作为页面内容。
- 用途:保留本轮已确认的“家祠卷轴”欢迎页美术方向,不作为可直接还原的代码布局图,也不作为功能图标资产。
- 画面方向:朱砂家祠红头、暖宣纸主体、古金细线与云纹、墨褐标题、两侧淡墨建筑/竹影与底部山水。登录欢迎页后续必须使用独立的红头/宣纸背景组合,不复用 G01 的列表页大山水底图。
## 2. 已确认的页面结构与交互
- 标题区保留“家谱 / 为家族留存可传承的记忆”,使用美术锚点中的朱砂家祠红头、暖宣纸、古金云纹、墨褐文字与淡墨建筑/竹影层次。
- 操作区只保留两个大按钮和一个文字入口:朱砂主按钮“登录”、古金描边按钮“微信登录”,以及其下方的“还没有账号?注册账号”。“注册账号”仅为朱砂红可点击文字,不再作为独立大按钮。
- 入口顺序:登录为主入口;微信登录为次入口;注册账号为辅助文字入口。
- 已勾选协议后,“登录”前往 `A-02`,且 `A-02` 内固定使用“账号密码登录 / 手机验证码登录”双标签切换,默认显示账号密码登录。微信授权取消、失败与受限状态以后归 `A-06`;当前入口继续提示“微信登录功能准备中”,不新增真实授权跳转。
- 注册账号入口仍归 `A-04`;忘记密码仍归 `A-05`。这两页完成设计前,当前入口只提示页面准备中,不伪造跳转。
- 协议必须为用户主动勾选:初始未勾选,可分别打开《家谱用户协议》和《隐私政策》。不得使用“登录即表示同意”或任何默认同意文案;未勾选时登录操作应明确提示用户先确认协议。
## 3. 固定布局与状态边界
- 页面采用纵向滚动;`320 × 568` 下两个按钮、注册文字和协议行可以滚动,但任一按钮文字、注册文字、协议行和底部内容不得被系统导航区遮挡。
- A-01 的登录与微信功能图标均需采用独立本地透明 PNG;微信标志只使用官方或许可来源的原色透明 PNG,不自行重绘或改色。账号密码与手机号验证码的表单图标归 A-02 设计时确定。
- A-01 只设计欢迎、入口与协议未勾选提示。账号密码与手机号验证码表单均归 `A-02`,微信授权取消、失败与受限结果归 `A-06`,注册归 `A-04`,忘记密码归 `A-05`。绑定手机号以后归个人中心安全设置。
- A-01 正常态必须展示两个按钮、注册文字入口和未勾选协议;点击任一需要授权的入口但未勾选协议时,仅提示“请先阅读并同意相关协议”,不视为用户已同意。
- 页面根容器宽度必须为 100%,不可写死为 `750rpx` 或使用整张效果图。固定设计画布仍以 `750rpx` 为测量基准,运行时由真实 DOM 按当前屏宽响应式还原。
#### 412 × 915 运行时校准表
| 元素 | 412 × 915 像素基准 | 750rpx 实现基准 |
| --- | --- | --- |
| 朱砂家祠头图 | 高 139px | 高 253rpx |
| 红头谱印 | 比头图顶边低约 38px | `top: 70rpx` |
| 标题区起点 | 红头后约 82px | `padding-top: 150rpx` |
| 标题两侧云纹 | 紧贴标题两侧,不扩张标题组宽度 | 独立透明素材 `auth-title-cloud-v1.png``64rpx × 40rpx`,标题左右各 12rpx |
| 标题分隔饰线 | 宽约 234px,中心为对称小结 | 宽 426rpx;中结使用独立透明素材 `auth-divider-knot-v1.png`,上、下间距独立 |
| 两个按钮 | x=60px,宽约 291px,高约 65px | `margin: 95rpx 110rpx 0`,高 118rpx |
| 两按钮间距 | 约 28px | `margin-top: 51rpx` |
| 按钮内框与内容组 | 内框距外边约 3px,四角有卷草角花;图标与文字整体偏左 | `inset: 6rpx`;四角使用同一张 `auth-button-corner-v1.png` 镜像;内容组 `translateX(-20rpx)` |
| 注册入口 | 微信按钮后约 56px;无左右短线 | `margin-top: 98rpx` |
| 协议行 | 注册入口后约 77px;复选框与全部文案同一水平线 | `margin-top: 141rpx`,字号与行高均为 20rpx / 30rpx,复选框 30rpx`align-items: center``white-space: nowrap`,加安全区 |
- 上表是 A-01 运行时布局数值的唯一所有者。320 × 568 时页面允许纵向滚动,根容器不得以 `overflow: hidden` 截断协议行或系统安全区;底部内边距包含 `env(safe-area-inset-bottom)`
- 仅作静态设计验证,不代表 uni-app 运行时验收;页面实现后仍须在 Android 320 × 568、360 × 640、360 × 800、412 × 915 上重新验收。
| 状态 | 触发 | A-01 可见结果 | 去向 |
| --- | --- | --- | --- |
| 初始未勾选 | 首次进入 | 两个按钮、注册文字与空复选框 | 留在 A-01 |
| 未同意协议 | 点击登录、微信登录或注册账号 | 提示“请先阅读并同意相关协议”,不跳转、不改变勾选状态 | 留在 A-01 |
| 登录已确认协议 | 点击“登录” | 结束 A-01 引导 | A-02,默认账号密码登录标签 |
| 微信已确认协议 | 点击“微信登录” | 提示“微信登录功能准备中” | 留在 A-01;真实授权取消、失败与受限状态以后归 A-06 |
| 注册已确认协议 | 点击“注册账号”文字 | 提示“注册页面准备中” | 留在 A-01,等待 A-04 设计完成 |
### A-01 资产清单
| 资产 | 用途 | 来源或生成提示 | 尺寸与验收 |
| --- | --- | --- | --- |
| `docs/design/assets/a01-vnext/source/A01-layered-source-v1.psd` | A-01 可恢复视觉源 | 当前分层 PSD 与清单 | 页面以真实 DOM 和导出位图还原,不把整页设计图作为页面内容 |
| `static/assets/backgrounds/auth-ancestral-header-v1.png``auth-rice-paper-v1.jpg``auth-ink-scenery-v1.png` | A-01 分层页面背景 | 2026-07-13 内置图像生成 | 当前 A-01 使用;不得复用 G-01 背景 |
| `static/assets/icons/auth/login-outline-v1.png``static/assets/icons/auth/wechat-licensed-v1.png` | A-01 两个按钮图标 | 登录图标复用项目既有资产;微信图标来源与许可见旧记录 | 当前 A-01 使用;微信图标免费使用须在应用“关于/设置”及应用商店描述中保留 Icons8 署名链接 |
| `static/assets/foundation/opaque/a01-primary-button.png``a01-secondary-button.png` | A01 登录与微信登录的完整按钮皮肤 | 2026-07-13 以运行时视觉基准的比例与画风生成;不裁切设计图 | `1877 × 418px``1881 × 419px` 不透明 PNG;分别承担底色、双线边框和四角纹样,DOM 仅叠放图标与文案 |
| `static/assets/icons/auth/auth-divider-knot-v1.png` | 标题上下金线的中心对称中结 | 2026-07-13 根据 412 × 915 视觉基准生成,去绿幕后保存 | `160 × 96px` 透明 PNG;不得改用长祥云 |
| `static/assets/icons/auth/auth-title-cloud-v1.png` | “家谱”标题左右祥云 | 2026-07-13 根据 412 × 915 视觉基准生成,去绿幕后保存 | `200 × 120px` 透明 PNG;右侧只允许镜像该素材 |
## 4. 静态设计验收与剩余缺口
- 静态设计验收已覆盖 320 × 568、360 × 640、360 × 800、412 × 915;四个尺寸均保持两个大按钮与单行文字注册入口。`412 × 915` 图是 A-01 协议未勾选状态的运行时像素基准;A-01 本地页以真实 DOM 还原其层级和比例,运行时仍须截图对比,不得以整图页面替代。
- 归档文件:[320 × 568](screens/A01-启动登录引导-栅格验收-320x568.png)、[360 × 640](screens/A01-启动登录引导-栅格验收-360x640.png)、[360 × 800](screens/A01-启动登录引导-栅格验收-360x800.png)、[412 × 915](screens/A01-启动登录引导-栅格验收-412x915.png)。
- 此结论只验证设计稿与固定栅格,不替代 uni-app 页面实现后的 Android 运行时验收。
- 2026-07-13 用户已验收当前连续背景、完整按钮边框与单行协议区的 `412 × 915` 运行截图,A-01 当前视觉基准标记为完成;本轮不再授权继续微调视觉细节。
- 页面实现阶段仍须按本记录在 Android 实机或同等运行环境复核四个尺寸的安全区、滚动与文字折行。
- A-01 的协议最终页面去向及 A-04 至 A-06 的设计仍未完成;A-03 已删除。这些后续范围不影响当前 A-01 视觉基准的验收结论。
## 5. 推进约束
- `A-01``A-02` 的本地 UI 已按本记录及实现合同落地并获用户视觉验收;A-03 已删除,后续仅在 A04--A06 获得明确授权后推进。
- 当前 A-01 视觉基准已完成;后续只在协议页面、认证接口或新页面范围获得明确授权后继续推进。
- 用户已于 2026-07-13 授权落地 A-01 欢迎入口与 A-02 双标签登录页的本地 UI;仍不接接口、不执行真实登录、不改 Android 打包配置。实现细节的唯一所有者见 `docs/superpowers/specs/2026-07-13-a01-a02-static-ui-implementation-design.md`
@@ -1,73 +0,0 @@
# A02 账号登录设计记录
> 状态:已于 2026-07-14 获用户视觉验收,A02 可见效果冻结。
> 路由:`pages/auth/a02-login`A01 已确认协议进入时附带 `?agreed=1`。
> 视觉来源:已验收的 A01 启动/登录引导与 G01 我的家谱。
## 1. 页面任务
让用户在“账号密码登录”与“手机验证码登录”之间切换并进入家谱。A02 自己提供协议确认:直接进入默认未同意,A01 已确认协议进入时默认已同意;没有账号的新用户可从协议行下方进入既有 A04 注册路由。页面只保留本地字段校验、A04 注册跳转、A05 忘记密码跳转与待接入 toast;不新增真实账号、短信、微信或后端逻辑。
手机号验证码登录只由 A02 的“手机验证码登录”Tab 承接;重复的 A03 页面已于 2026-07-14 删除。绑定手机号以后属于个人中心安全设置,微信授权取消、失败与受限状态以后属于 A06。
## 2. 视觉结构
1. 使用与 A01 同高度的朱砂祠堂头和居中谱印,保证认证入口属于同一品牌场景。
2. 头部下方放置一张完整不透明的卷轴认证面板,而不是普通 CSS 矩形卡;标题、双 Tab、输入、辅助链接和按钮文字都是可编辑的 Vue 内容层。
3. 面板上部承载任务标题和双 Tab,中部承载两行输入与辅助操作,下部留给原比例朱砂按钮、可点击协议确认行、轻量文字注册入口与淡墨山水收束。
4. 主按钮继续复用 A01 的 `a01-primary-button.png`,显示槽高度为 128rpx;不把约 4.49:1 的皮肤压进旧的 100rpx 矮按钮。
5. 背景山水只出现在认证面板之外和面板底部,保证输入、标签与占位文本的对比度。
## 3. 资产合同
| 路径 | 属性/原图尺寸 | 页面显示与职责 |
| --- | --- | --- |
| `static/assets/foundation/opaque/auth-header.png` | opaque / 750×196 | 认证祠堂头,A01 与 A02 共用。 |
| `static/assets/foundation/transparent/brand-seal.png` | transparent / 240×288 | 头部谱印。 |
| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | 完整卷轴登录面板,承载纸纹、双金线、角纹、云纹与底部山水;A02 容器 666rpx × 1184rpx。 |
| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A02 唯一主操作按钮皮肤,显示槽 128rpx 高。 |
| `static/assets/foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回图标,水平翻转后使用,不再用文字符号或 CSS 圆框。 |
| `static/assets/modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | A02 本页未同意协议图标;四角透明,不以 CSS 圆环代替。 |
| `static/assets/modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | A02 本页已同意协议图标;四角透明,不以文字勾号或 CSS 底色代替。 |
认证面板由内置 ImageGen 根据 A01、G01 的已验收截图生成;提示词约束为“完整不透明暖宣纸、双古金线、角纹、边缘淡云竹、中央留给真实控件、无文字无按钮无图标”。生成源保留在 Codex 生成目录,项目运行时只引用上表中的最终资产。
## 4. 交互与可读性
- 两个 Tab 仍由 `activeTab` 切换;已验证手机验证码 Tab 的真实页面状态。
- 账号、密码、手机号、验证码继续使用原生 `input`,不烘焙到图片。
- A02 不绘制面板或主按钮的 CSS `border``background`;对应完整外观由图片资产承担。
- A02 的 `agreed` 是本页登录提交的唯一协议状态;H5 从当前 `location.hash` 读取 `agreed=1`Android 从当前 uni 页面选项读取,直接进入默认未同意。
- 协议行点击可切换两枚透明图标;未同意提交时在本页提示“请先阅读并同意相关协议”,不再要求返回 A01。协议名称仍沿用“协议页面准备中”提示,不新增协议正文路由。
- 协议行下方显示“还没有账号? 注册账号”;只有朱砂色“注册账号”具有 88rpx 高的文字触点,点击进入既有 `/pages/auth/a04-register`。该入口不依赖协议状态,也不在本轮重做 A04。
- 320 × 568 下可纵向滚动,主按钮位于首屏可达区域;360 × 640、360 × 800、412 × 915 均无横向裁切。
## 5. 运行时证据
| 状态 | 截图 |
| --- | --- |
| 改造前,账号密码 Tab360×800 | `screens/runtime/2026-07-13/A02-before-360x800.png` |
| 改造后,账号密码 Tab320×568 | `screens/runtime/2026-07-13/A02-after-320x568.png` |
| 改造后,账号密码 Tab360×640 | `screens/runtime/2026-07-13/A02-after-360x640.png` |
| 改造后,账号密码 Tab360×800 | `screens/runtime/2026-07-13/A02-after-360x800.png` |
| 改造后,账号密码 Tab412×915 | `screens/runtime/2026-07-13/A02-after-412x915.png` |
| 改造后,手机验证码 Tab,360×800 | `screens/runtime/2026-07-13/A02-sms-360x800.png` |
| 本页协议未同意,320×568 | `screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png` |
| 本页协议未同意,360×640 | `screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png` |
| 本页协议未同意,360×800 | `screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png` |
| 本页协议未同意,412×915 | `screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png` |
| A01 已确认协议进入,360×800 | `screens/runtime/2026-07-14/A02-agreement-checked-360x800.png` |
| 含注册入口、本页协议未同意,360×800 | `screens/runtime/2026-07-14/A02-register-entry-360x800.png` |
| 含注册入口、本页协议未同意,412×915 | `screens/runtime/2026-07-14/A02-register-entry-412x915.png` |
| A03 删除后,手机验证码 Tab360×800 | `screens/runtime/2026-07-14/A02-sms-tab-after-a03-removal-360x800.png` |
## 6. 自动检查
- `tests/a02-asset-alpha-audit.ps1`:A02 卷轴面板稳定;两枚协议图标均为 96×96、带 Alpha、四角透明且包含不透明图形。
- `tests/a01-a02-ui-contract.ps1`:A02 使用完整卷轴面板与完整主按钮;协议行、双状态图标、H5/Android 路由初始化和本页提交门禁可审计;保留 Tab、原生输入、A05 跳转;拒绝 CSS 面板、主按钮和协议图标外观。
- `tests/a02-register-entry-contract.ps1`:A02 注册入口的文案、阅读顺序、88rpx 触点、A04 跳转与目标路由均可审计。
- `tests/a03-route-removal-contract.ps1`:A03 页面、路由和临时目录条目均不存在;G02/G04 合并后,56 条最终路由与 A02 的唯一短信入口职责同步收敛。
- `tests/compile-audit.ps1`Vue 结构可编译。
- `tests/capture-chrome-page-contract.ps1`:Chrome 截图在目标 URL、新文档、页面选择器和全部图片资源就绪后再采集,防止复用状态、黑块或半渲染证据。
用户已确认本页视觉结果。后续认证页可参考其已验收的品牌层级与完整位图面板规则,但不得直接复制其登录表单或改变 A02 的可见效果。
@@ -1,60 +0,0 @@
# A04 注册账号设计记录
> 状态:用户已于 2026-07-14 视觉验收通过;A04 可见效果冻结。
> 路由:`pages/auth/a04-register`A02 的注册入口与本页“登录”入口构成新用户与已有用户的双向路径。
> 视觉来源:已验收的 A01 启动/登录引导、A02 账号登录与 G01 我的家谱。
## 1. 页面任务
让新用户填写手机号、设置密码、确认密码并在本页主动确认协议。A02 是唯一的账号密码/手机验证码登录页;A04 只处理注册,不重复验证码登录。真实注册、短信、微信、协议正文和后端接口均不在本页实现。
## 2. 视觉结构
1. 复用 A02 的朱砂祠堂头与居中谱印,让注册仍属于同一认证场景。
2. 使用完整不透明 `a02-login-panel.png` 承担卷轴纸纹、双金线、角纹、云纹和底部山水;A04 不绘制 CSS 卡片、边框或按钮表面。
3. 面板标题下使用既有结饰位图建立分隔,随后是三行真实输入、完整朱砂“注册账号”按钮、协议确认行和“已有账号?登录”回流入口;不保留挤压表单的独立引导文案。
4. 360 × 800 与 412 × 915 均完整呈现;较小屏幕保留纵向滚动,不允许横向裁切。
## 3. 资产合同
| 路径 | 属性/原图尺寸 | A04 职责 |
| --- | --- | --- |
| `static/assets/foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色。 |
| `static/assets/foundation/opaque/auth-header.png` | opaque / 750×196 | 朱砂祠堂头。 |
| `static/assets/foundation/transparent/brand-seal.png` | transparent / 240×288 | 头部谱印。 |
| `static/assets/foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 标题与表单之间的位图结饰分隔。 |
| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | A04 完整卷轴注册面板。 |
| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A04 注册主按钮皮肤。 |
| `static/assets/modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | 本页未同意协议图标。 |
| `static/assets/modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | 本页已同意协议图标。 |
现有认证资产已完整覆盖本页,未使用 ImageGen,也未新增视觉资产。
## 4. 交互合同
- `phone``password``confirmPassword``agreed` 都是 A04 本页状态;协议初始未同意。
- 点击协议行切换两枚透明图标;点击协议名称仅提示“协议页面准备中”。
- 注册前依次校验协议、11 位手机号、密码非空和两次密码一致;通过后仅提示“注册服务待接入”。
- “已有账号?登录”真实跳转 `/pages/auth/a02-login`Chrome 已验证该 URL。
- A04 已从 `data/page-catalog.js` 移出,不再使用 `ModulePage` 临时母版。
## 5. 运行时证据
| 状态 | 截图 |
| --- | --- |
| 改造前,通用表单壳,360×800 | `screens/runtime/2026-07-14/A04-before-360x800.png` |
| 改造前,通用表单壳,412×915 | `screens/runtime/2026-07-14/A04-before-412x915.png` |
| 改造后,注册初始态,360×800 | `screens/runtime/2026-07-14/A04-after-360x800.png` |
| 改造后,注册初始态,412×915 | `screens/runtime/2026-07-14/A04-after-412x915.png` |
| 平衡修订审视前,360×800 | `screens/runtime/2026-07-14/A04-audit-before-360x800.png` |
| 平衡修订审视前,412×915 | `screens/runtime/2026-07-14/A04-audit-before-412x915.png` |
| 平衡修订后,注册初始态,360×800 | `screens/runtime/2026-07-14/A04-after-balance-360x800.png` |
| 平衡修订后,注册初始态,412×915 | `screens/runtime/2026-07-14/A04-after-balance-412x915.png` |
## 6. 自动检查
- `tests/a04-registration-contract.ps1`:独立页面、完整位图面板/按钮、结饰分隔、长标签留白、三项字段、协议状态、校验、A02 回流和禁止 CSS 伪造均可审计。
- `tests/compile-audit.ps1`:A04 不使用失效目录条目,Vue 文件与现有本地导入可编译。
- `tests/full-page-visual-contract.ps1`:A04 保持最终编号路由;G02/G04 合并后全项目共 56 条路由。
用户已于 2026-07-14 确认本页通过视觉验收;后续可审视 A05,但不得改变 A04 可见效果。
@@ -1,57 +0,0 @@
# A05 重置密码设计记录
> 状态:用户已于 2026-07-14 视觉验收通过;A05 可见效果冻结。
> 路由:`pages/auth/a05-reset-password`A02 的“忘记密码”入口进入本页,本页“返回登录”回到 A02。
## 1. 页面任务与边界
让用户通过已绑定手机号和验证码重设登录密码。A05 使用手机号、验证码、新密码、确认新密码四项本页状态,避免在没有两次确认的情况下覆盖密码。
真实短信、验证码下发、账号校验、密码重设接口和后端数据均不在本页实现。“获取验证码”仅提示“验证码功能待接入”;所有字段有效后仅提示“密码重设服务待接入”。
## 2. 视觉结构
1. 复用 A02/A04 已验收的朱砂祠堂头、谱印、宣纸、淡墨山水和完整卷轴认证面板,使重置密码仍属于同一认证场景。
2. 标题为“重设密码”,副标题说明“验证手机号后重新设置登录密码”,不暴露 A-05 内部编号。
3. 标题和表单之间使用既有结饰位图;正文依次为手机号、验证码(含文字型获取动作)、新密码、确认新密码、完整朱砂主按钮、完成提示与返回登录入口。
4. 面板、按钮、页头和结饰均由既有位图提供;CSS 只处理布局、文字、输入与交互状态,不绘制 CSS 卡片或按钮表面。
## 3. 资产合同
| 路径 | 属性/原图尺寸 | A05 职责 |
| --- | --- | --- |
| `static/assets/foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色。 |
| `static/assets/foundation/transparent/auth-ink-scenery.png` | transparent / 750×1334 | 认证页淡墨叠层。 |
| `static/assets/foundation/opaque/auth-header.png` | opaque / 750×196 | 朱砂祠堂头。 |
| `static/assets/foundation/transparent/brand-seal.png` | transparent / 240×288 | 头部谱印。 |
| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | A05 完整卷轴重设面板。 |
| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | “确认重设”完整主按钮皮肤。 |
| `static/assets/foundation/transparent/auth-title-cloud.png` | transparent / 200×120 | 标题右侧祥云。 |
| `static/assets/foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 标题与表单之间的结饰。 |
| `static/assets/foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回动作图标。 |
现有认证资产已完整覆盖本页,未使用 ImageGen,也未新增视觉资产。
## 4. 交互合同
- 空提交先提示“请输入正确手机号”;手机号必须为 11 位,验证码必须为 6 位,密码非空且两次一致。
- 点击“获取验证码”显示“验证码功能待接入”。
- 点击“返回登录”真实跳转 `/pages/auth/a02-login`Chrome 已验证 URL。
- A05 已从 `data/page-catalog.js` 移出,不再使用 `ModulePage` 临时母版。
## 5. 运行时证据
| 状态 | 截图 |
| --- | --- |
| 改造前,通用白卡壳,360×800 | `screens/runtime/2026-07-14/A05-before-360x800.png` |
| 改造前,通用白卡壳,412×915 | `screens/runtime/2026-07-14/A05-before-412x915.png` |
| 改造后,重设密码初始态,360×800 | `screens/runtime/2026-07-14/A05-after-360x800.png` |
| 改造后,重设密码初始态,412×915 | `screens/runtime/2026-07-14/A05-after-412x915.png` |
## 6. 自动检查
- `tests/a05-reset-password-contract.ps1`:独立页面、完整位图面板/按钮、四项字段、验证码动作、校验、A02 回流、目录项移除和禁止 CSS 伪造可审计。
- `tests/compile-audit.ps1`:A05 不使用失效目录条目,Vue 文件与现有本地导入可编译。
- `tests/full-page-visual-contract.ps1`:A05 保持最终编号路由;G02/G04 合并后全项目共 56 条路由。
用户已于 2026-07-14 确认本页通过视觉验收;后续可审视 A06,但不得改变 A05 可见效果。
@@ -1,50 +0,0 @@
# A06 登录状态设计记录
> 状态:用户已于 2026-07-14 视觉验收通过;A06 可见效果冻结。
> 唯一路由:`pages/auth/a06-auth-status`;以 `?status=` 表示当前认证状态,不新建状态页面。
## 1. 页面任务与边界
A06 承接认证流程中不能继续进入家谱的结果:登录未完成、登录失败、账号暂时受限、注册尚未完成、微信授权取消和微信授权失败。
没有接入真实账号状态、客服、申诉、微信授权或后端接口。账号受限的“查看帮助”只显示“账号申诉功能待接入”;注册未完成真实跳转 A04;其余主操作与次操作真实跳转 A02。绑定手机号仍属于后续个人中心安全设置页面,本页不承担该功能。
## 2. 状态合同
| `status` 值 | 标题 | 主操作 | 次操作 |
| --- | --- | --- | --- |
| `normal`(含未知值回退) | 登录未完成 | 返回登录 → A02 | 无 |
| `failed` | 登录失败 | 返回登录 → A02 | 无 |
| `restricted` | 账号暂时受限 | 查看帮助 → 本地提示 | 返回登录 → A02 |
| `register-pending` | 注册尚未完成 | 继续注册 → A04 | 返回登录 → A02 |
| `wechat-cancelled` | 微信授权已取消 | 返回登录 → A02 | 无 |
| `wechat-failed` | 微信授权失败 | 返回登录 → A02 | 无 |
H5 由 `location.hash` 的查询参数读取状态;uni-app 原生端读取当前页 `options`。两端对未知值统一回退 `normal`,避免状态壳无文案或失去下一步。
## 3. 视觉结构与资产
1. 删除通用白卡、CSS 红方徽章和压缩按钮,改为 A02/A04/A05 已验证的“朱砂祠堂头 → 卷轴面板 → 状态说明 → 朱砂操作”的认证节奏。
2. 状态图形只使用已有透明 `auth-login-outline.png`,避免为每种异常绘制夸张警示符号;文案承担状态区别,朱砂只强调标签与主操作。
3. 主操作保持完整 `a01-primary-button.png` 位图比例;受限与注册未完成的次操作为低权重朱砂文字,不与主按钮竞争。
4. 页面壳、面板、按钮、边框、云纹和结饰均由既有位图提供;CSS 只处理布局、文字与点击态。现有资产已完整覆盖需求,因此未调用 ImageGen、未新增资产。
## 4. 运行时审视与证据
| 状态 | 截图 |
| --- | --- |
| 改造前通用壳,360×800 | `screens/runtime/2026-07-14/A06-before-360x800.png` |
| 改造前通用壳,412×915 | `screens/runtime/2026-07-14/A06-before-412x915.png` |
| `normal` 默认态,360×800 | `screens/runtime/2026-07-14/A06-after-360x800.png` |
| `normal` 默认态,412×915 | `screens/runtime/2026-07-14/A06-after-412x915.png` |
| `restricted` 受限态,360×800 | `screens/runtime/2026-07-14/A06-restricted-360x800.png` |
截图审视结论:两个尺寸中,朱砂头图、卷轴框、状态图形、标题/说明、完整主按钮与底部淡墨山水均未被裁切;360×800 的面板底部在首屏内结束,412×915 保留呼吸留白;`restricted` 的次操作保持在主按钮下方且不抢主路径。当前未发现黑块、图片未加载、横向溢出或 CSS 伪造完整表面。
## 5. 自动与交互检查
- `tests/a06-auth-status-contract.ps1`:约束唯一路由、独立页面、六个状态键、状态动作、A02/A04 目标、既有位图资产与禁止 CSS 伪造。
- `tests/a06-auth-status-runtime-smoke.js`:通过 Chrome DevTools 9222 真实验证默认主操作进入 A02、受限主操作展示本地帮助提示、注册未完成主操作进入 A04。脚本在每次 hash 跳转后刷新文档,以规避 H5 Vue 实例保留上一次状态。
- `tests/compile-audit.ps1`:确认 A06 不再依赖已移除的目录临时项。
用户已于 2026-07-14 确认本页通过视觉验收;后续可开始 G02,但不得改变 A01、A02、A04、A05、A06、G01 的可见效果。若用户后续指定调整 A06,仍须重新截图、运行上述检查和相关回归。
@@ -1,69 +0,0 @@
# D1 安卓视觉地基规范
> 状态:P-00 实施中。
> 本文件是 Android 页面视觉、资产与公共组件的唯一施工规范;与历史设计记录冲突时,以本文件和用户最新确认优先。
## 1. 冻结视觉锚点
- A01 启动/登录引导:`screens/A01-启动登录引导-栅格验收-412x915.png`
- G01 我的家谱:`screens/G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png`
两页已获用户验收。P-00 可以重整文件、组件和资产路径,但在 412 × 915 下不得改变两页可见布局、色彩、纹样、按钮或背景组合。
## 2. 视觉语言
| 元素 | 规则 |
| --- | --- |
| 页面基调 | 暖宣纸、朱砂、古金、墨褐、淡墨山水/竹影;禁止绿色页面背景。 |
| 文字 | 标题与重要文字用楷体语气;正文首先保证 Android 小屏可读性。 |
| 主操作 | 朱砂完整按钮图片,含自身纹理、边框与四角;不可由 CSS 色块和零散图片拼装。 |
| 次操作 | 纸白完整按钮图片,含自身金边、四角与纹理;不可借用主按钮角标。 |
| 页面背景 | 使用完整不透明纸纹/页头/面板图片,必要时可叠加透明山水或竹影 PNG;不能使用截图拼接。 |
| 装饰 | 云纹、谱印、分隔纹、图标、边框均为透明 PNG;不使用 CSS/SVG 临时绘制。 |
## 3. 资产分类与目录
所有最终资产放在 `static/assets/`,路径必须表达所属范围、背景属性和语义:
```text
static/assets/
foundation/
opaque/ # 自带底色/纹理:纸纹、页头、完整按钮、卡片、导航
transparent/ # 透明 PNG:Logo、图标、云纹、边框、分隔纹
modules/
genealogy/
opaque/
transparent/
tree/
opaque/
transparent/
family/
opaque/
transparent/
```
- `opaque` 资产不能依赖页面 CSS 背景色才显示完整外观。
- `transparent` 资产必须是 RGBA PNG;其使用位置要在资产清单中写明宿主不透明底图。
- 每项资产都在 P00 清单中登记用途、显示尺寸、引用组件、引用页面和保留/删除状态。
- 不再创建长期使用的 `-v1``-v2``-source``-copy` 文件;同一语义只保留一个已验收版本。
## 4. 页面与组件
- 页面文件:`<页面编号>-<语义名>.vue`;没有确认页面编号的临时骨架要标明 `skeleton`,不能伪装成完成页面。
- 公共组件只收纳已被两个或以上确认页面使用的稳定结构:页面纸纹壳、顶部栏、底部导航、完整图片按钮、完整图片卡片、状态容器。
- 页面与组件开头写中文用途注释;模板按背景、页头、主体、操作、状态分段;资产图层和复杂交互写中文约束说明。
- CSS 只负责布局、尺寸、文字、可见/隐藏与交互状态;不能再用 CSS 绘制边角、金线、云纹、分隔结、纸纹、按钮或卡片外观。
## 5. Android 约束
- 核验尺寸:320 × 568、360 × 640、360 × 800、412 × 915。
- 正文不小于 24rpx;主操作最小高度 88rpx;可点击区不小于约 44dp。
- 使用 Flex、边距和基础布局;不依赖 CSS Grid、`flex gap`、复杂滤镜、大面积动画或全屏截图背景。
- 顶部和底部预留状态栏、三键/手势导航安全区;固定底栏不得遮挡页面操作。
## 6. 验收和代码纪律
- 资产先验收,页面后验收;资产不通过不进入页面。
- 所有页面只实现明确设计与交互;不增加推测性的 JS、接口、依赖、变量、方法和分支。
- 每次结构迁移必须同时更新页面路径、`pages.json`、跳转、测试和文档;旧路径确认无引用后立即删除。
- 每次完成后执行受影响审计、编译检查与 `git diff --check`A01、G01 还需做截图回归。
@@ -1,60 +0,0 @@
# FRNM 全量候选设计记录
> 日期:2026-07-14
> 状态:F01F10、R01R11、N01N02、M01M10 共 33 个页面候选已形成,统一标记 `[~]`,等待用户逐页视觉审核。
## 1. Product Design 处理方式
- 先捕获旧通用壳的 `detail|list|form|timeline|settings|status` 六类真实运行基线,再升级共享母版。
- 共享母版只统一视觉表面和状态机制;每条路由仍拥有独立页面编号、标题、字段、列表内容和业务任务,没有合并不同功能页面。
- F01、F02、N01、M01 四个根页独立重做,保留家族/我的底部导航与关键跳转。
- 接口文档只用于功能位置和字段语义;页面候选全部使用本地模拟数据,不调用 `appApi`,不修改 API 边界。
## 2. 位图与母版
- `g03-create-flow-panel.png`:表单、详情、设置、服务说明和统一状态的完整宣纸表面。
- `g06-search-input-wide.png`:真实输入、详情段落和设置行的完整位图底层。
- `application-status-card.png`:列表、时间轴、通知、动态与状态卡。
- `a01-primary-button.png``a01-secondary-button.png`:所有主次操作。
- CSS 不绘制卡片、按钮、边框、圆角或伪元素装饰,只负责布局、文字、控件和状态。
## 3. 截图证据
### 六类母版
目录:`screens/runtime/2026-07-14/module-page-audit/`
- 基线与候选:`00-*-before-360x800.png``01-f03-detail-360x800.png``10-f04-list-412x915.png`
- 同画布对比:`11-template-before-after-comparison.png`
- 共享空/成功/失败:`12-shared-states-comparison.png`
### 29 个共享母版页面
目录:`screens/runtime/2026-07-14/all-page-candidates/`
- 每条路由均有独立 `*-360x800.png`
- 模块联系表:`00-family-contact-sheet.png``00-records-contact-sheet.png``00-profile-notification-contact-sheet.png`
### F01F02N01M01
目录:`screens/runtime/2026-07-14/root-pages-audit/`
- 基线:`00-f01-before-360x800.png``00-f02-before-360x800.png``00-n01-before-360x800.png``00-m01-before-360x800.png`
- 候选与状态:`01-f01-list-360x800.png``10-m01-ready-412x915.png`
- 同画布对比:`11-root-before-after-states.png`
## 4. 审视结果
- 六类母版在 360 下没有卡片、按钮或文字裁切;列表较长时自然纵向滚动,完整面板保持一致的视觉终点。
- 共享状态统一使用同一宣纸面板,但标题、动作和业务名称来自当前页面,避免“万能空态”丢失上下文。
- F01、M01 的根页保留底部导航;F02 的发布编辑区和 N01 的消息卡均使用真实控件与本地可操作结果。
- Product Design 对比中未发现 P1/P2 级裁切、假按钮槽或风格漂移;最终 Android 真机字体放大、读屏和触摸目标仍需后续设备复核。
## 5. 验证入口
- `tests/module-page-visual-contract.ps1`
- `tests/module-page-runtime-smoke.js`
- `tests/root-pages-visual-contract.ps1`
- `tests/root-pages-runtime-smoke.js`
- `tests/capture-chrome-page-contract.ps1`
@@ -1,75 +0,0 @@
# G01 列表背景候选与换机重建
> 日期:2026-07-16
> 状态:A/B/C 历史母版与旗舰长屏母版均已保存并通过本机确定性构建;用户已确认旗舰长屏方向作为 9 个活动 G 页面的公共背景,并确认共享图片画层使用 28% 不透明度。当前仅有 H5 运行证据,不得写成任一页面整页已验收或 Android 已通过。
## 1. 为什么重做
现有 `footer-mountain-bamboo.png``750×360`,视觉主体集中在底部,上半部留白较大;页面又把它定位到整个内容末尾并使用 `scaleToFill` 拉伸,因此列表变长时山水被推到“添加家谱”下方。用户提出背景应更早出现,并进一步提出 G01 可能只滚动下方列表、上方当前家谱与快捷入口固定。
连续长背景只替换各 G 页面最底层视觉。G01 固定区/独立滚动边界已在后续同日按用户确认方案单独实施,不影响其他 G 页面;具体合同见 `docs/superpowers/specs/2026-07-16-g01-fixed-header-independent-list-scroll-design.md`
## 2. 稳定输入
稳定输入位于:
- `docs/design/assets/g01-background/masters/g01-list-background-direction-a-chroma-master.png`
- `docs/design/assets/g01-background/masters/g01-list-background-direction-b-chroma-master.png`
- `docs/design/assets/g01-background/masters/g01-list-background-direction-c-paper-master.png`
- `docs/design/assets/g01-background/masters/genealogy-page-background-long-flagship-imagegen-source.png`(原始 ImageGen 输出,793×1983
- `docs/design/assets/g01-background/masters/genealogy-page-background-long-flagship-master.png`(确定性归一化母版,1536×3840)
准确提示词、标题、处理模式、源尺寸、目标尺寸、选择状态和运行输出路径由 `design-pipeline/manifests/g01-background-candidates.json` 单一维护。A/B 使用纯 `#00ff00` 绿幕并提取透明叠加层;C 与旗舰长屏图保留完整暖宣纸底。当前公共运行输出是 `static/assets/modules/genealogy/opaque/genealogy-page-background-long.png`,由 `components/GenealogyPageBackground.vue` 唯一持有路径、贴底规则和 `opacity: 0.28` 显示规则;各 G 页面不得重复覆盖。旧 `genealogy-page-background.png` 不覆盖、不删除,仅作为上一轮 C 输出保留。
## 3. 跨电脑重建
要求:Windows、Node.js 22+、npm、Python 3.12+。本机验证环境为 Node `24.15.0`、npm `11.12.1`、Python `3.14.6`、Pillow `12.3.0`
在项目根目录执行:
```powershell
python --version
node --version
npm.cmd --version
python -m venv design-pipeline/.venv
design-pipeline/.venv/Scripts/python.exe -m pip install --upgrade pip
design-pipeline/.venv/Scripts/python.exe -m pip install -r design-pipeline/requirements.txt
npm.cmd --prefix design-pipeline run build:g01-background-candidates
design-pipeline/.venv/Scripts/python.exe -m unittest design-pipeline/tests/test_build_g01_backgrounds.py -v
node --test design-pipeline/tests/g01-background-candidates.test.mjs
```
构建输出进入已忽略目录 `design-pipeline/generated/g01-background/`
- `g01-list-background-direction-a.png`
- `g01-list-background-direction-b.png`
- `g01-list-background-direction-c.png`
- `genealogy-page-background-long-flagship.png`
- `build-report.json`
Node 入口只使用内置模块做路径与清单编排;图片解码、尺寸检查和像素处理由锁定版本的 Pillow 统一负责,因此 G01 候选构建不依赖已删除的 `node_modules`。项目其他使用 Sharp 的旧流水线仍需执行 `npm.cmd ci --prefix design-pipeline`
## 4. 当前质量基线
本机输出:
| 候选 | 模式 | 像素 | 字节 | SHA-256 |
| --- | --- | ---: | ---: | --- |
| A | chroma-key | 1024×1536 | 2,280,297 | `7b8a8abecc651b1bc4c589607780c8ff00ea0f13de018ca4b27a479b2a870fe4` |
| B | chroma-key | 1024×1536 | 1,890,556 | `3a0420eaaac9a2821da0f9a2ddbbbd6fb29b463fa6f41be7fa5c23948f782e2a` |
| C | opaque-paper | 1024×1536 | 2,407,477 | `f14aeed81046d2d5e7ae78b1e62f572689c38261a2cc043142bef9f70200dc5b` |
| 旗舰长屏 | opaque-paper-resize | 1440×3600 | 6,538,134 | `9aa9ebdd231eddbc151e238ba340a00f8603f23143117ad8c93009947dcca2e2` |
四张输出均通过清单尺寸、处理模式和 sRGB 构建检查;A/B/C 继续保持原质量基线。旗舰长屏原始 ImageGen 输出为 2,333,286 字节、SHA-256 `3d5ada7a23edd8db98b3511d308d2d240d80fdd4ff9280a8c434b50fb68cac3a`1536×3840 归一化母版为 6,822,092 字节、SHA-256 `2fb3aa9be7772beb6f620c49f096ed6d9c045a56cfe7ae342664ee05ca58862b`。若另一台电脑因 Python、Pillow 或压缩实现差异产生不同文件哈希,应先核对锁定依赖,再比较解码后的 RGBA 像素和质量报告,不能只凭压缩字节差异判定视觉失败。
## 5. 可复现边界
- 精确可复现:从仓库内保存的母版执行清单、Python 和 Node 流程,得到相同 RGBA 像素处理结果。
- 方向可复现但非逐像素:在另一台电脑上使用清单中的提示词重新调用图像模型。
- 不可依赖:Codex 本机生成目录、`tmp/``node_modules/``.venv/``generated/` 或未进入仓库的聊天图片。
## 6. 下一步
1. 用户查看 G01 固定信息区/独立列表滚动的实际 H5 页面;当前五档 runtime 截图仍是内部候选证据。
2. 用户确认 G01 整页后,再保存一张长期代表证据并更新视觉证据索引。
3. 完成 Android/HBuilderX 真机或模拟器复核,并专项检查区域滚动手感及 4GB Android 上约 19.8MiB 解码内存、切页与回收。
@@ -1,134 +0,0 @@
# G-01:我的家谱设计记录
> 状态:设计验收完成(2026-07-13,用户确认)
> 美术锚点:[G01 我的家谱美术锚点](references/G01-我的家谱-美术锚点.png)
> 布局锚点:[D1 安卓视觉规范与页面壳](D1_安卓视觉规范与页面壳.md#62-g-01-固定设计栅格360--800dp)
## 页面目标
让已登录用户一眼查看当前家谱、进入四个高频入口、切换已创建 / 已加入家谱。无家谱的创建或搜索加入状态归属 `G-02`
## 背景组合
- 红头:`static/assets/backgrounds/header-hall-lineart.png` 叠加朱砂底色。
- 内容纸面:`static/assets/backgrounds/paper-rice-texture.jpg`
- 页面底部:`static/assets/backgrounds/footer-mountain-bamboo.png`,只用于列表尾部与新建按钮附近。
## 图标资产清单
所有项目完成后均为独立、紧凑的 RGBA 透明 PNG;不能从大图裁切后直接使用。
| 区域 | 语义 | 目标文件 | 风格 | 状态 |
| --- | --- | --- | --- | --- |
| 顶部左侧 | 项目 Logo | `brand/jiapu-seal-logo.png` | 用户确认的家祠 Logo 原图 | 已确认使用;待页面小尺寸摆放验收 |
| 顶部右侧 | 通知 | `common/notice-v3.png` | 古金双线 + 轻云纹 | 已生成;`70 × 94px` 主体通过紧凑尺寸检查 |
| 列表入口 | 右箭头 | `common/chevron-right-v2.png` | 古金简洁单线 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 快捷入口 | 世系图 | `genealogy/tree-v2.png` | 古金双线简化版 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 快捷入口 | 家族成员 | `genealogy/members-v2.png` | 古金双线简化版 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 快捷入口 | 字辈诗 | `genealogy/generation-poem-v2.png` | 古金双线简化版 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 快捷入口 | 申请审核 | `genealogy/application-v2.png` | 古金双线简化版 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 主操作 | 新建家谱 | `action/add-v2.png` | 古金双线 + 轻云纹 | 已生成;`96 × 96px`、RGBA 四角透明、48px 检查通过 |
| 底部 Tab | 家谱 | `tab/genealogy-v4.png``genealogy-active-v4.png` | 简洁谱册 / 世系语义 | 已生成;同轮廓墨褐 / 朱砂成对导出,`96 × 96px`、48px 检查通过 |
| 底部 Tab | 家族 | `tab/family-v4.png``family-active-v4.png` | 简洁双人群组语义 | 已生成;同轮廓墨褐 / 朱砂成对导出,`96 × 96px`、48px 检查通过 |
| 底部 Tab | 我的 | `tab/profile-v4.png``profile-active-v4.png` | 简洁人物档案语义 | 已生成;同轮廓墨褐 / 朱砂成对导出,`96 × 96px`、48px 检查通过 |
## 页面完成条件
- [ ] 图标资产清单全部生成并在 `46rpx` / `24dp` 下逐个检查。
- [ ] 背景组合在 `320 × 568` 下不遮挡标题、按钮和列表。
- [ ] 按固定栅格完成正常态、无家谱态与加载态设计。
- [ ] 不存在横线占位、重复家谱层级或无业务含义的颜色差异。
## Tabbar 重设计规则
- 当前 `static/assets/icons/tab/``static/icons/tab-*.png` 的图标不通过验收,不得使用。
- 三个 Tab 重新采用等视觉重量的简洁符号:家谱为“世系关系 / 谱册”语义,家族为“双人群组”语义,我的为“人物档案”语义。
- 三个图标同为 `24dp` 标准视口、无文字嵌入、无枝叶和云纹等细碎装饰;默认态为墨褐 / 古金描边,选中态为朱砂色的同一图形加粗或填充。
- Logo 是品牌标识,不能拿来代替家谱 Tab 图标;Tab 图标只服务于快速识别目的地。
## 2026-07-11 当日确认记录
- 当前交接视觉稿:[G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png](screens/G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png)。它是明日施工时的美术与布局锚点,不替代真实页面和资产验收。
- 顶部品牌使用项目原有 `static/assets/icons/brand/jiapu-seal-logo.png`;缩小后固定在左上安全区,避免与居中标题及殿宇线稿争夺视觉焦点。
- 底部 Tabbar 仍然贴合屏幕底部;三个图标和文字整体上移至 Android 手势/三键导航安全区内,标签“家谱 / 家族 / 我的”加大,任何屏幕尺寸下不得被底边裁切。
- 上述确认只锁定 G-01 的方向和版式。真实透明 PNG 图标、背景组合、320 × 568 小屏校验、空状态与加载状态尚未完成,因此 **G-01 仍不勾选为设计完成**
- 明日从 G-01 的可施工项开始:先按 D1 规范落实真实图标与背景资产、再还原页面布局;全量页面设计完成前,不恢复接口联调或 Android 打包工作。
## 2026-07-12 施工记录
- 已完成 G-01 独立图标资产:四个快捷入口、主操作、列表右箭头,以及三组 Tab 默认 / 选中态;全部为 `96 × 96px` RGBA PNG,四角透明,并按实际 `48px` 显示尺寸检查。
- 已完成 G-01 首轮页面还原:朱砂祠堂红头、左上原 Logo、条件式消息圆点、宣纸与山水背景、当前家谱题签、快捷入口、已创建 / 已加入列表、空状态、加载状态和 Android 安全区 Tabbar。
- 本页暂时使用 `data/mock.js` 的展示数据;已移除 G-01 的远程接口调用,接口联调仍按总规划暂停。
- 已通过:`g01-visual-contract.ps1``compile-audit.ps1``uni-scss-injection.ps1``vue3-entry.ps1`
- 待完成:在已打开的 HBuilderX 中按 `360 × 800``320 × 568` 预览并记录无重叠、无底部裁切的证据。完成前不勾选本页“设计完成”条件。
## 2026-07-12 视觉校正记录
- 用户预览反馈首轮还原与确认稿差异过大。已定位为:祠堂线稿直接铺在红头导致视觉过满,且题签 / 列表使用普通圆角边框而不是确认稿的纸签资产。
- 红头已改为纯朱砂底 + 独立 `header-hall-lineart.png` 低对比背景层(不透明度 `0.22`);Logo 放大并上移,标题与通知保持独立层级。
- 已新增并接入 `backgrounds/genealogy-current-slip-frame.png``backgrounds/genealogy-list-slip-frame.png`;两者为透明 PNG 双金线纸签框,透明角检查通过。
- 此次只修正可见还原偏差,不改变 G-01 的数据、路由和状态范围;仍待用户重新运行后的两组小屏预览确认。
## 2026-07-12 尺寸校正记录
- 原始品牌 Logo 的透明留白导致顶部显示偏小,已从同一原图无损裁切为 `brand/jiapu-seal-logo-header.png` 后接入;不改变 Logo 的图形、配色或品牌含义。
- 快捷入口图标由 `52rpx` 调整为 `68rpx`Tab 图标由 `48rpx` 调整为 `56rpx`,标签由 `24rpx` 调整为 `28rpx`,使实际显示尺寸靠近确认稿。
- 校正后已重新通过 G-01 资产/页面契约、编译审计和 SCSS 注入审计;仍需 HBuilderX 截图作最终视觉依据。
## 2026-07-12 第三轮背景与栅格校正
- 红头高度由 `216rpx` 收至 `184rpx`,改用 `backgrounds/header-cinnabar-texture-v2.jpg`;祠堂线稿仅作为 `0.16` 不透明度的独立底纹层。
- 内容左右边距由 `32rpx` 调整为 `48rpx`,当前家谱题签高度收至 `250rpx`,并在快捷入口和列表之间恢复 `backgrounds/genealogy-section-divider-v2.png` 金线云纹分隔。
- 页面底色改用浅宣纸 `backgrounds/paper-rice-texture-v2.jpg`;山水竹影改用透明 `backgrounds/footer-mountain-bamboo-v2.png` 作为整页底部淡层,不再出现矩形背景块;已检查不含绿色像素。
- 标题、分区标题与家谱名称增加宋/楷书本机回退链;题签框统一压为古金 `#B58A4B`
- 已通过:G-01 页面/资产契约、编译审计、SCSS 注入审计及页脚透明区域检查。仍待新截图比对,页面不标记为完成。
## 2026-07-12 第四轮底图与题签边角校正
- 根因核验:`genealogy-current-slip-frame.png``genealogy-list-slip-frame.png` 的四个角均为 Alpha 0;白色直角边并非 PNG 资产本身,而是题签容器在透明镂空角下铺了接近白色的矩形底色。
- 已移除当前家谱题签和两条列表题签的矩形底色,让透明镂空角直接透出宣纸底纹;文字、边框和点击区域不变。
- 已撤回错误的 `footer-mountain-bamboo-v2.png`(该图是连续实心灰山,无法还原设计稿的淡墨层次),恢复使用带亭、远山和竹影的 `footer-mountain-bamboo.png`,以 `0.48` 透明度贴在 Tabbar 上沿,不形成独立灰色矩形带。
- `tests/g01-visual-contract.ps1` 先新增回归断言并确认旧实现失败,再完成最小改动后通过;仍需在 HBuilderX 的同一设备尺寸下由新截图确认最终观感,G-01 不标记为完成。
## 2026-07-12 第五轮信息层级与谱印施工
- 施工依据固定为 `screens/G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png`,对应用户箭头指出的谱印、元信息、快捷入口、两条列表和新建按钮;未改接口、路由、页头、背景或 Tabbar。
- 新增并接入透明 PNG`common/location-v1.png``common/member-meta-v1.png``common/admin-v1.png``genealogy/seal-current-frame-v1.png``genealogy/seal-row-frame-v1.png``action/create-cloud-v1.png`。谱印框只承载朱砂和金白边框,谱印固定显示“家谱”,家谱名称和数值仍为动态文本。
- 当前家谱改为地点、成员数、管理员三组图标化元信息;快捷入口显示框提升至 `82rpx`;新建按钮加入两侧云纹 PNG。
- 家谱列表改为谱印框、标题、地点/成员元信息和“更新于”日期的两层结构;`320px` 小屏隐藏更新时间,优先保证标题、元信息、角色和箭头不重叠。
- 已新增资产透明角/有效图形审计。验证通过:`g01-visual-contract.ps1``g01-asset-alpha-audit.ps1``compile-audit.ps1``uni-scss-injection.ps1`。待 HBuilderX 新截图与参考稿并排确认后,G-01 才能标记设计完成。
## 2026-07-12 第六轮参考稿字段与右侧基线校正
- 预览字段已切换为参考稿:当前家谱“汤氏家谱 / 河南·洛阳 / 158 位成员 / 管理员”,已加入家谱“汤氏宗谱 / 山东·济宁 / 286 位成员 / 成员”;不再使用四川、达州、刘氏等旧演示字段。
- 当前题签恢复标题与元信息之间的细金线;短字段确保 430px 验收宽度内三组元信息同一行显示。
- 列表谱印固定为竖排“家谱”;右侧角色与箭头改为同一水平基线;“更新于”保留为文本,移除参考稿中不存在的日历图标和对应闲置资产。
- 新增字段/基线契约先失败后通过。完整验证再次通过:G-01 视觉契约、PNG 透明角审计、编译审计、SCSS 注入审计、Vue 3 入口审计。仍待用户提供 HBuilderX 新截图完成视觉验收。
## 2026-07-13 第七轮结构、屋檐与祥云校正
- 当前家谱题签由“谱印 + 右侧文案列”改为两层结构:上层为谱印和名称,下层为金线分隔后的地点、成员数、管理员三组元信息;三组元信息不再受谱印列宽挤压。
- 家谱列表由独立的左侧内容列与右侧操作列改为单一主内容区:第一行是标题、角色与箭头,第二行是地点、成员数与“更新于”日期;`320px` 宽度仅隐藏日期,保留其余信息。
- 根页头收窄至 `164rpx`;放大并提高现有祠堂屋檐线稿的可见度,保持其位于 Logo 和标题之后。Tabbar 容器收窄,图标和标签同步提升视觉重量。
- 内容左右边距收至 `32rpx`,快捷入口到列表的无效留白减少;山水竹影扩展至两条列表和新建按钮后方,仍低于所有文字和操作层。
- `action/create-cloud-v1.png` 已由独立透明 PNG `action/create-cloud-v2.png` 替换;v2 使用项目生成的古金线描祥云,四角透明且有效图形审计通过,旧资产已移除。
- 已通过:更新后的 G-01 视觉契约、PNG 透明审计和编译审计。仍待 HBuilderX 的 `360 × 800``320 × 568` 截图与 v5 参考稿并排确认,G-01 不标记为设计完成。
## 2026-07-13 第八轮预览字号校正
- 根据 HBuilderX 预览,列表第二行的地点、成员数与更新时间分别提升至可读字号,元信息图标同步放大;`320px` 继续只隐藏更新时间。
- 新建家谱按钮保留单行文字:缩小云纹和加号的占位宽度,并为按钮文字设置不换行约束,避免“新建家谱”折为两行。
- 已通过更新后的 G-01 视觉契约与编译审计;仍待下一张 HBuilderX 截图复核实际观感。
## 2026-07-13 第九轮顶部状态栏兼容
- 用户确认根页 `124rpx` 的可视朱砂导航高度符合视觉稿;不再扩大其内容区。
- 根页头总高度改为可视导航高度加 `var(--status-bar-height, 0px)`,并以相同变量作为顶部内边距;状态栏不会压缩 Logo、标题和通知入口。
- 宣纸纸纹起点使用同一计算高度,避免状态栏存在时红头结束处出现错层。
- Android App 配置朱砂状态栏背景和浅色系统图标;仍需在有刘海、无刘海与三键导航 Android 真机复核。
## 2026-07-13 最终视觉验收
- 用户已提供 `360 × 800` 正常页、`320 × 568` 顶部与滚动到底部的响应式预览截图:顶部、题签、四个快捷入口、两条列表、新建按钮、山水与 Tabbar 均无重叠;`320 × 568` 下新建按钮可完整滚动至 Tabbar 上方。
- 用户已提供 HBuilderX Web 浏览器中 `Pixel 2 XL` 的常规屏预览:页面内容、山水和 Tabbar 均无裁切。
- 用户于 2026-07-13 明确确认“没事你标记吧可以了”,据此将 G-01 标记为设计验收完成。该确认不等同于 Android 原生包、真机刘海/三键导航或接口联调验收,以上工作仍按总规划暂停。
@@ -1,79 +0,0 @@
# G05 家谱总览设计记录
> 日期:2026-07-14
> 状态:视觉候选已实现并完成本轮 Product Design 截图审计;未获用户审美确认,等待 G 模块完成后集中查看。
## 1. 技能与证据
- 已调用 `Product Design:index`,将任务路由为现有产品的 `audit``get-context` 与实现后设计检查。
- 已调用 `Product Design:audit`,以本轮新截的真实 H5 画面为证据,不用旧截图代替。
- 已调用 ImageGen 生成完整不透明位图表面;没有用 CSS 伪造卡片、边框或装饰。
- 改前证据:`screens/runtime/2026-07-14/g-module-audit/before/01-g05-before-360x800.png`
- 改后证据:`screens/runtime/2026-07-14/g-module-audit/g05/01-g05-ready-360x800.png``02-g05-empty-360x800.png``03-g05-error-360x800.png``04-g05-ready-412x915.png`
- 同画布对照:`screens/runtime/2026-07-14/g-module-audit/g05/05-g05-before-after-comparison.png`,左侧改前、右侧改后;所有判断均基于这张合并输入,不把两个分离预览冒充并排比较。
## 2. 产品与思维导图参考
外部只读参考位于 `C:\Users\Rain\Desktop\软件\JOB\app设计`。已查看 `思维导图.png``家谱主页.png``加入家谱.png``字辈谱.png`
采用的只有信息结构:谱名、堂号、地点和成员概况置顶;世系、录入、字辈、审核作为核心入口;家族内容作为下一层。没有采用外部灰绿色卡片、现代图标、邀请码加入或底部双按钮视觉。
外部“邀请码加入”与当前产品不一致。当前唯一加入流程是 G06 公开检索 → G08 提交申请 → G09 查看进度 → G10 管理员审核,因此不把邀请码或邀请按钮加入 G05。
## 3. 路由与状态所有权
- 唯一路由:`pages/genealogy/g05-genealogy-overview`
- 唯一上下文查询键:`genealogyId`G01 的旧 `id` 链接已同步迁移,不保留兼容读取。
- 同页状态:`loading``ready``empty``error`,不为加载、空数据、无权或失败另建页面。
- “录入族人”进入 G03 `step=ancestor&genealogyId=...`;已删除的 G04 不再被引用。
- G05 不再把 G08 申请加入表单误写成管理员的“邀请亲人”。
## 4. OpenAPI 设计边界
| 页面内容/动作 | OpenAPI 依据 | 页面阶段处理 |
| --- | --- | --- |
| 谱名、堂号、地区、成员数、可见范围 | `GET /genealogy/app/genealogies/{genealogyId}/overview` | 正常态展示真实接口所需字段;本轮继续使用现有 mock |
| 管理设置 | `GET/PUT /genealogy/app/genealogies/{genealogyId}` | 只进入 G11,不在 G05 复制设置表单 |
| 世系树 | `GET /genealogy/app/genealogies/{genealogyId}/lineage/tree` | 进入 T01,不在总览加载完整树 |
| 录入首代 | `POST /genealogy/app/genealogies/{genealogyId}/lineage/persons` | 进入 G03 的始祖步骤 |
| 字辈谱 | `GET/POST /genealogy/app/genealogies/{genealogyId}/generation-poems` | 进入 G12 |
| 入谱审核 | `GET .../join-applies/pending``PUT .../{applyId}/audit` | 进入 G10 |
接口响应仍使用通用 `JsonObject/ListResult`,因此页面不臆造邀请码、分享码、视频或多级管理员字段。
## 5. 位图资产
- 最终资产:`static/assets/modules/genealogy/opaque/g05-overview-surface.png`
- 尺寸:1122×1506`Format24bppRgb`,四角 alpha 均为 255。
- 内容:墨蓝谱名区、四个完整宣纸入口槽、古金分隔、底部访问说明面;文字和点击层不烘焙进图片。
- ImageGen 使用 `ui-mockup` 模式,参考 G05 改前 360×800 截图,明确要求无文字、无图标、无占位符、无现代玻璃拟态。
## 6. Product Design 审计
### 改前主要风险
1. G05 的“录入族人”指向已删除 G04,核心动作实际不可达。
2. “邀请亲人”跳到申请者填写的 G08,角色和任务语义错误;OpenAPI 也没有邀请端点。
3. 深色头、四宫格卡片和底部邀请面均由 CSS 拼接,不符合完整视觉表面必须使用位图的项目规则。
4. 只有模糊载入文案,没有区分空数据、无权限和加载失败。
### 改后步骤与健康度
1. `ready`:健康。谱名和成员概况在墨蓝区,四个核心任务在首屏可见,家族近况和访问说明层级清楚。
2. `empty`:健康。仍在 G05 路由内说明缺少上下文,并返回“我的家谱”。
3. `error`:健康。说明网络、数据或权限三类可能原因,提供同页重试。
4. 412×915:健康。位图、文字和点击槽同步放大,没有横向溢出或裁切。
### 可访问性边界
- 本轮从截图确认了文字未裁切、主要入口具有完整卡片面积、按钮文案可见。
- 审计后已提高谱名区元信息、入口说明、近况和底部说明字号,降低 360 宽屏小字风险。
- 截图不能证明读屏语义、键盘焦点和 Android 字体放大行为;这些留到真机与可访问性专项验证,不能宣称完整 WCAG 合规。
## 7. 验证
- `tests/g05-overview-contract.ps1`
- `tests/g05-overview-runtime-smoke.js`
- `tests/g01-visual-contract.ps1`
以上在实现后均已通过;最终集中审美确认前不将 G05 标记为视觉冻结。
@@ -1,81 +0,0 @@
# G08–G10 入谱申请链路设计记录
> 日期:2026-07-14
> 状态:页面候选、本地模拟交互与本轮 Product Design 截图审计已完成;标记为 `[~]`,等待后续逐页视觉审核。
## 1. Product Design 工作流
- `Product Design:index`:将工作路由为现有产品的上下文确认、截图审计和实现后设计检查。
- `Product Design:audit`:本轮重新捕获 G08–G10 的表单、成功、列表、空态和 412 宽屏,不使用旧通用壳图冒充最终证据。
- ImageGen:生成 `application-record-card.png`,并在截图审计发现假按钮后精确编辑出 `application-status-card.png`
- TDD`tests/g08-g10-application-flow-contract.ps1` 与运行冒烟先因通用壳和缺少同页状态红灯,再由最小实现转绿。
## 2. 思维导图与外部参考
已查看 `C:\Users\Rain\Desktop\软件\JOB\app设计\思维导图.png``加入家谱.png`。外部参考的“加入家谱”依赖邀请码,但当前 OpenAPI 没有邀请码端点,因此不采用该流程。
当前申请链路唯一结构是:G06 公开家谱检索 → G08 填写真实身份与关系 → G09 查看自己的全部申请 → G10 管理员审核。三个阶段是不同用户任务,保留三条路由;各自的加载、空、失败、提交成功和审核结果只作为原路由状态,不再拆页。
## 3. 页面与状态
| 页面 | 独立任务 | 同页状态 |
| --- | --- | --- |
| G08 | 对某一 `genealogyId` 提交加入申请 | `form`、提交中、`success``error` |
| G09 | 当前用户查看全部申请 | `loading``list``empty``error``PENDING/APPROVED/REJECTED` 为卡内状态 |
| G10 | 当前家谱管理员审核待处理申请 | `loading``list``empty``error`;审核确认与结果留在卡内 |
G07/G08/G09 的旧 `ModulePage` 目录条目已经删除;G07 结果态继续只归 G06。
## 4. OpenAPI 功能参考
| 页面动作 | OpenAPI |
| --- | --- |
| G08 提交 | `POST /genealogy/app/genealogies/{genealogyId}/join-applies` |
| G09 我的申请 | `GET /genealogy/app/genealogies/join-applies/mine` |
| G09 撤销边界 | `DELETE /genealogy/app/genealogies/join-applies/{applyId}`;本轮页面不展示未接入的撤销按钮 |
| G10 待审核列表 | `GET /genealogy/app/genealogies/{genealogyId}/join-applies/pending` |
| G10 审核 | `PUT /genealogy/app/genealogies/{genealogyId}/join-applies/{applyId}/audit` |
OpenAPI 的申请体仍是 `JsonObject`,页面只使用已有业务能解释的 `realName``relation``message`,没有臆造邀请码、推荐人层级或多管理员审批字段。本阶段只据此安排字段、状态和动作位置;三页均使用页面内模拟数据与交互,不调用 `appApi`,不进行接口对接。
## 5. 视觉资产
- G08 复用 `g03-create-flow-panel.png` 的完整宣纸表单面,以及 `g06-search-input-wide.png` 的完整输入框皮肤;没有复制近似资产。
- `application-record-card.png`1050×360、24 位 RGB、不透明;右下留双审核槽,只供 G10 列表。
- `application-status-card.png`1050×360、24 位 RGB、不透明;移除双审核槽,供 G09 列表和 G09/G10 空/失败状态。
- 主次操作分别使用 `a01-primary-button.png``a01-secondary-button.png`CSS 只负责位置、文字和点击层。
## 6. 截图证据
- G08`screens/runtime/2026-07-14/g-module-audit/applications/01-g08-form-360x800.png``02-g08-success-360x800.png``03-g08-form-412x915.png`
- G09`04-g09-list-360x800.png``05-g09-empty-360x800.png`
- G10`06-g10-list-360x800.png``07-g10-empty-360x800.png``08-g10-list-412x915.png`
- 同画布对照:`09-g08-form-success-comparison.png``10-g09-list-empty-comparison.png``11-g10-list-empty-comparison.png`
## 7. Product Design 审计结果
### 强项
1. G08 表单在 360/412 下均完整显示,姓名、关系、说明和提交按钮顺序清楚;提交后仍在 G08 显示成功结果。
2. G09 的申请状态以审核中、已通过、未通过映射接口枚举;通过项才可进入家谱。
3. G10 的拒绝/通过使用主次完整位图按钮,动作前有确认弹窗,避免误审。
4. 三页的空态均留在原路由,没有新增状态页。
### 已修复问题
- P2:第一张共享卡为审核按钮预留了两个槽,放到 G09 和空态时形成假按钮。已生成无按钮槽的状态卡并重新截图,问题消失。
- P2:运行冒烟最初在面板出现后立即查找原生输入,可能早于 `uni-input` 内部节点渲染。测试改为等待真实输入节点,再填写和点击;真实提交已到达同页成功态。
### 可访问性边界
- 截图可确认主按钮、审核按钮、表单顺序和文字未裁切。
- G10 审核按钮在 360 下仍有完整卡内点击区域,但最终 Android 真机仍需验证触摸目标、字体放大和读屏标签。
- 截图不能证明弹窗焦点管理或读屏状态播报,不宣称完整无障碍合规。
## 8. 验证
- `G08-G10-APPLICATION-FLOW-CONTRACT PASS`
- `G08-G10-APPLICATION-FLOW-RUNTIME-SMOKE PASS`,包含真实控件填写与本地模拟提交
- `PASS compile audit`
三页仅标记为候选完成,用户集中看样式前不标记为视觉冻结。
@@ -1,51 +0,0 @@
# G11–G12 家谱设置与字辈诗设计记录
> 日期:2026-07-14
> 状态:页面候选、同页状态、运行截图与 Product Design 对比审视已完成;标记为 `[~]`,等待用户后续逐页视觉审核。
## 1. 设计边界
- 继续使用项目已冻结的宣纸、朱砂、藏青与古金视觉体系,不照搬外部参考的颜色、卡片或按钮。
- OpenAPI 只用于确认可设计的功能位置与数据语义,不导入 `appApi`、不新增 API 方法、不进行接口联调。
- G11 与 G12 的空、失败、成功、编辑状态全部留在原路由,不为同一任务新增页面。
- G11 不放置“转让管理权”假入口:该动作需要成员选择上下文,当前页面只安排名称、公开范围和访问说明。
## 2. 页面与状态
| 页面 | 核心任务 | 同页状态 |
| --- | --- | --- |
| G11 | 编辑家谱名称、公开范围、访问说明 | `loading``form``success``error` |
| G12 | 查看逐代字辈、批量录入连续字辈 | `loading``list``empty``edit``error` |
G11 的公开范围提供“仅成员可见”和“公开可申请”两个明确选项,并给出权限解释。G12 采用外部思维导图可借鉴的逐世代行结构,但视觉表面仍完全使用本项目资产;编辑区保留接口清单所描述的连续 `content` 与“缺失旧世代时停止”策略位置。
## 3. 视觉资产
- 两页复用 `g03-create-flow-panel.png` 作为完整双金线宣纸面板。
- 输入、字辈行使用 `g06-search-input-wide.png` 完整位图皮肤。
- 主次操作分别使用 `a01-primary-button.png``a01-secondary-button.png`
- CSS 只负责布局、真实文字和点击层,不绘制卡片背景、边框、圆角或装饰。
- 现有资产已能覆盖页面,因此本轮没有调用 ImageGen 新增近似资产。
## 4. 截图证据
目录:`screens/runtime/2026-07-14/g-module-audit/settings-poems/`
- 改前基线:`00-g11-before-360x800.png``00-g12-before-360x800.png`
- G11`01-g11-form-360x800.png``02-g11-success-360x800.png``03-g11-form-412x915.png`
- G12`04-g12-list-360x800.png``05-g12-empty-360x800.png``06-g12-edit-360x800.png``07-g12-list-412x915.png`
- 同画布对比:`08-g11-before-after-comparison.png``09-g12-before-after-comparison.png`
## 5. Product Design 审视
- G11 相比通用设置壳,信息层级变为“设置目的 → 名称 → 公开范围及权限解释 → 访问说明 → 保存”,不再出现无法完成的管理权转让入口。
- G12 相比通用详情壳,逐世代字辈可直接扫描,当前字辈使用朱砂强调;空态与编辑态仍保持同一页面语义。
- 360 × 800 与 412 × 915 下,完整面板、按钮和底部山水均未被裁切;编辑态主次动作层级清楚。
- 截图不能证明 Android 字体放大、读屏播报和真机触摸区域,留到最终真机验证阶段。
## 6. 验证
- `G11-G12-SETTINGS-POEMS-CONTRACT PASS`
- `G11-G12-SETTINGS-POEMS-RUNTIME-SMOKE PASS`
- 页面代码不引用 `@/utils/api.js``appApi`
@@ -1,192 +0,0 @@
# P00 页面结构与资产清单
> 状态覆盖:当前实际为 52 条活动路由、52 页全部 `[~]` 待审核、0 页冻结;A06 已封存且保留实现。页面状态以 `docs/交接记录.md` 与 `docs/验收规划.md` 为准。
> 目的:让页面、路由和资产都有唯一、可读、可审计的归属;本文件是 P-00 的执行清单。
## 1. 页面命名规则
最终页面文件遵循 `<页面编号>-<语义名>.vue`
- 账户:`a01-entry.vue``a02-login.vue``a04-register.vue``a05-reset-password.vue``a06-auth-status.vue`
- 家谱:`g01-my-genealogies.vue``g03-create-genealogy.vue`
- 世系:`t01-tree-overview.vue``t03-member-profile.vue`
- 家族:`f01-family-feed.vue``f02-publish-feed.vue`
- 消息:`n01-message-center.vue`
- 我的:`m01-profile-home.vue`
尚未被全量设计确认、但为了保留现有功能骨架的通用页面,必须在文件名中使用 `skeleton`,不能使用含义不明的 `index.vue``list.vue``detail.vue`
## 2. 首批 15 个路由的历史迁移映射
| 当前路由 | 当前可确认用途 | 目标文件 | 处理状态 |
| --- | --- | --- | --- |
| `pages/auth/a01-entry` | A01 启动/登录引导 | `pages/auth/a01-entry.vue` | 7 类非滑动验证视觉状态已获用户确认;真实滑动验证用接口组件自带样式,待接入审核;Android 复核前保持 `[~]` |
| `pages/auth/a04-register` | A04 注册账号 | `pages/auth/a04-register.vue` | 当前 8 类 H5 视觉状态已获用户确认;真实滑动验证、接口结果态与 Android/HBuilderX 待审核;保持 `[~]` |
| `pages/auth/a05-reset-password` | A05 重置密码 | `pages/auth/a05-reset-password.vue` | 当前 7 类 H5 视觉状态已获用户确认;接口回流手机号/焦点、真实滑动验证与 Android/HBuilderX 待审核;保持 `[~]` |
| (已从 `pages.json` 移除) | A06 登录阻断状态(封存) | `pages/auth/a06-auth-status.vue` | 用户确认当前样式没有问题,但当前流程暂时不用;源码、测试和证据保留,不计入活动验收统计,恢复时重新接入真实入口并审核 |
| `pages/auth/a02-login` | A02 账号登录 | `pages/auth/a02-login.vue` | 已迁移;已验收,视觉冻结 |
| `pages/genealogy/g01-my-genealogies` | G01 我的家谱 | `pages/genealogy/g01-my-genealogies.vue` | 用户已选择 C 作为 9 个 G 页面的公共背景;完整宽度显示、固定贴底与上方宣纸承接的新四档 H5 候选待复核,整页仍为 `[~]`,固定区/独立滚动和 Android 待审核 |
| `pages/genealogy/g03-create-genealogy` | G03 创建家谱/始祖录入 | `pages/genealogy/g03-create-genealogy.vue` | `step=create|ancestor`;已获用户验收,视觉冻结 |
| `pages/genealogy/g05-genealogy-overview` | G05 家谱总览 | `pages/genealogy/g05-genealogy-overview.vue` | `loading|ready|empty|error`;视觉候选已实现,待集中审美确认 |
| `pages/genealogy/g06-search-genealogies` | G06 公开家谱搜索/结果/无结果 | `pages/genealogy/g06-search-genealogies.vue` | 已收敛 G07;朱砂题签三态候选已截图,待集中审美确认 |
| `pages/genealogy/g08-join-application` | G08 申请加入家谱 | `pages/genealogy/g08-join-application.vue` | `form|success|error`;本地模拟提交已验证,待集中审美确认 |
| `pages/genealogy/g09-my-applications` | G09 我的申请 | `pages/genealogy/g09-my-applications.vue` | `loading|list|empty|error`;待集中审美确认 |
| `pages/genealogy/g10-application-review` | G10 管理员入谱审核 | `pages/genealogy/g10-application-review.vue` | `loading|list|empty|error`;待集中审美确认 |
| `pages/tree/t01-tree-overview` | T01 世系树总览 | `pages/tree/t01-tree-overview.vue` | 已收敛 T02 四态;视觉候选待审 |
| `pages/tree/t03-member-profile` | T03 成员档案 | `pages/tree/t03-member-profile.vue` | 详情/失败候选待审 |
| `pages/family/f01-family-feed` | F01 家族动态 | `pages/family/f01-family-feed.vue` | 已迁移;未验收 |
| `pages/family/f02-publish-feed` | F02 发布动态 | `pages/family/f02-publish-feed.vue` | 已迁移;未验收 |
| `pages/notification/n01-message-center` | N01 消息中心 | `pages/notification/n01-message-center.vue` | 已迁移;未验收 |
| `pages/profile/m01-profile-home` | M01 我的首页 | `pages/profile/m01-profile-home.vue` | 已迁移;未验收 |
上述表仅保留首批迁移的历史背景;当前最终 54 路由、文件存在性和中文编号注释的唯一合同是 `tests/full-page-visual-contract.ps1`。临时 `content-list-skeleton` 已由谱文、相册、礼仪、备忘录和字辈诗最终页面替代并移除。
迁移要求:同一轮更新页面文件、`pages.json`、所有跳转路径、测试和中文文件头注释;未完成全部引用更新时,不得删除旧路径。
## 3. 最终资产目录
```text
static/assets/
foundation/
opaque/
page-paper.jpg
auth-page-paper.jpg
auth-header.png
a01-primary-button.png
a01-secondary-button.png
root-header-cinnabar.jpg
transparent/
brand-seal.png
auth-title-cloud.png
auth-divider-knot.png
...
modules/
auth/
opaque/
a02-login-panel.png
transparent/
a02-agreement-unchecked.png
a02-agreement-checked.png
genealogy/
opaque/
g01-empty-panel.png
g03-create-flow-panel.png
g05-overview-surface.png
g06-search-title-strip.png
g06-search-input-wide.png
g06-search-button.png
application-record-card.png
application-status-card.png
transparent/
tree/
opaque/
transparent/
family/
opaque/
transparent/
```
当前已迁入的资产以第 4 节台账为准。A01 已引用版本化的卷轴祥云四件套 v3:主/次按钮与弹窗使用 `aspectFit`Toast 使用固定切片的 `border-image`;文字和交互由代码承载。旧资产与 v2 试点资产保留,不覆盖、不删除。v3 已通过本机自动质量门和 H5 四尺寸检查,但尚未获得 Android 与用户验收。
## 4. 当前资产台账
以下为当前唯一可用资产路径。尺寸为原始像素;页面中的显示尺寸仍以组件/页面样式为准。
| 路径 | 属性/尺寸 | 用途 | 引用位置 | 状态 |
| --- | --- | --- | --- | --- |
| `foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色 | A01、A02、A04、A05、A06 | 保留 |
| `foundation/opaque/auth-header.png` | opaque / 750×196 | 认证页红色页头 | A01、A02、A04、A05、A06 | 保留 |
| `foundation/opaque/page-paper.jpg` | opaque / 852×1846 | 根页宣纸底图 | G、T、F、R、N、M 非认证页面 | 保留 |
| `foundation/opaque/root-header-cinnabar.jpg` | opaque / 720×184 | 根页朱砂页头 | `PageHeader` | 保留 |
| `foundation/transparent/auth-ink-scenery.png` | transparent / 750×1334 | 认证页淡墨叠层 | A01、A02、A04、A05、A06 | 保留 |
| `foundation/transparent/auth-title-cloud.png` | transparent / 200×120 | 认证标题右侧云纹 | A01、A02、A04、A05、A06 | 保留 |
| `foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 认证标题与正文结饰 | A01、A04、A05、A06 | 保留 |
| `foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | 旧朱砂主按钮皮肤 | 其他仍实际引用的模块页面 | 暂时保留;A01、A04、A05、A06 已停止引用,其他页面需逐页迁移 |
| `foundation/opaque/a01-secondary-button.png` | opaque / 1881×419 | 旧宣纸次按钮皮肤 | 其他仍实际引用的页面 | 暂时保留;A01 可见按钮和 Toast 已停止引用,其他页面未逐页迁移 |
| `foundation/transparent/a01-primary-button-v2.png` | transparent / 1866×276 | A01 固定槽位主按钮历史试点 | 当前 A01 已停止引用 | 保留,不覆盖、不删除 |
| `foundation/transparent/a01-secondary-button-v2.png` | transparent / 1866×300 | A01 固定槽位次按钮历史试点 | 当前 A01 已停止引用 | 保留,不覆盖、不删除 |
| `foundation/transparent/a01-scroll-primary-v3.png` | transparent / 1866×276 | 卷轴祥云朱砂主按钮皮肤 | A01 登录、A04 注册、A05 重设、A06 恢复入口及弹层按钮 | A01/A04/A05 当前 H5 状态已获用户确认;A06 待逐态审核;均待 Android 复核 |
| `foundation/transparent/a01-scroll-secondary-v3.png` | transparent / 1866×300 | 卷轴祥云宣纸次按钮皮肤 | A01 微信按钮 | 用户 H5 视觉审核通过;待 Android 复核 |
| `foundation/transparent/a01-scroll-toast-v3.png` | transparent / 1770×246 | 卷轴祥云 Toast 可切片表面 | A01、A04、A05 自定义反馈 Toast | A01/A04 用户 H5 审核通过;A05 待逐态审核;均待 Android 复核 |
| `modules/auth/transparent/a01-scroll-dialog-v3.png` | transparent indexed PNG / 1860×1560 | 卷轴祥云对话容器 | A01 历史验证占位、A05 成功结果、A06 恢复说明 | A01 不得用于最终滑动验证;A05/A06 仅用于本地结果或说明候选 |
| `modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | 旧认证完整卷轴面板 | 当前认证页无引用 | 历史保留,不覆盖、不删除 |
| `modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | 认证未同意协议图标 | A01、A04 协议确认行 | 保留;A01/A04 用户 H5 审核通过 |
| `modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | 认证已同意协议图标 | A01、A04 协议确认行 | 保留;A01/A04 用户 H5 审核通过 |
| `foundation/transparent/auth-login-outline.png` | transparent / 96×96 | 登录/状态图标 | A01、A06 | 保留 |
| `foundation/transparent/auth-wechat.png` | transparent / 96×96 | 微信图标 | A01 | 保留 |
| `foundation/transparent/brand-seal.png` | transparent / 240×288 | 品牌谱印 | A01、A02、A04、A05、A06、G06、`PageHeader` | 保留 |
| `foundation/transparent/root-header-hall.png` | transparent / 750×300 | 根页祠堂线稿 | `PageHeader` | 保留 |
| `foundation/transparent/footer-mountain-bamboo.png` | transparent / 750×360 | 根页底部山水竹影 | G01、G06 | 保留 |
| `foundation/transparent/notice.png` | transparent / 96×96 | 通知图标 | `PageHeader` | 保留 |
| `foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回与列表箭头 | A02、A04、A05、A06、`GenealogyCard` | 保留 |
| `docs/design/assets/g01-background/masters/g01-list-background-direction-a-chroma-master.png` | candidate master / 1024×1536 | G01 背景 A,绿幕透明历史候选 | 未接入 | 母版保留,不删除 |
| `docs/design/assets/g01-background/masters/g01-list-background-direction-b-chroma-master.png` | candidate master / 1024×1536 | G01 背景 B,绿幕透明历史候选 | 未接入 | 母版保留,不删除 |
| `docs/design/assets/g01-background/masters/g01-list-background-direction-c-paper-master.png` | historical selected master / 1024×1536 | 上一轮 G 模块公共暖宣纸背景 C 的稳定母版 | `genealogy-page-background.png` | 历史方向保留,不删除 |
| `docs/design/assets/g01-background/masters/genealogy-page-background-long-flagship-imagegen-source.png` | source master / 793×1983 | 用户确认的连续长背景原始 ImageGen 输出 | 归一化母版输入 | 原稿保留,不删除 |
| `docs/design/assets/g01-background/masters/genealogy-page-background-long-flagship-master.png` | selected master / 1536×3840 | G 模块旗舰长屏连续背景稳定母版 | `genealogy-page-background-long.png` | 当前选定母版;确定性输出输入 |
| `modules/genealogy/opaque/genealogy-page-background.png` | opaque / 1024×1536 | 上一轮 C 公共运行图 | 当前无页面入口 | 历史输出保留,不删除 |
| `modules/genealogy/opaque/genealogy-page-background-long.png` | opaque / 1440×3600 | G 模块公共旗舰长屏云竹亭台连续宣纸景 | 9 个活动 G 页面通过 `GenealogyPageBackground.vue` 使用,`widthFix` 固定贴底 | 当前公共运行输出;H5 候选已覆盖五档,待逐页审核及 Android 复核 |
| `modules/genealogy/opaque/g01-empty-panel.png` | opaque / 1122×1402 | 无家谱空态完整宣纸卡,双金线、角饰、云纹与下沿山水 | G01 `state=empty` | 保留;由 ImageGen 生成,已获用户验收 |
| `modules/genealogy/opaque/g03-create-flow-panel.png` | opaque / 1122×1500 | 完整宣纸任务面板,双金线、回纹角饰、云纹与下沿淡墨山水 | G03、G08、G11、G12、T01、T03 至 T06、T08、F/R/N/M 表单/详情/设置/状态 | 保留;由 ImageGen 生成,G03 已获用户验收,复用页待审 |
| `modules/genealogy/opaque/g05-overview-surface.png` | opaque / 1122×1506 | 家谱总览完整视觉表面,含墨蓝谱名区、四宫格宣纸槽、金线近况分隔与底部访问说明面 | G05 `loading|ready|empty|error` | 保留;由 ImageGen 参考 G05 改前截图生成,页面只叠放真实文字和点击层;待集中审美确认 |
| `modules/genealogy/opaque/g06-search-title-strip.png` | opaque / 1122×220 | 朱砂题签完整视觉面,含古金边饰与云纹,不烘焙文字或印玺 | G06 顶部检索题签 | 保留;用户选定 ImageGen 第 3 稿方向,Vue 叠放真实 `brand-seal.png` 与标题文字 |
| `modules/genealogy/opaque/g06-search-input-wide.png` | opaque / 1120×248 | 宽版独立宣纸字段完整皮肤,含古金双线与角饰 | G、T 与 F/R/N/M 输入、详情段落、设置行 | 保留;真实文字与控件叠放其上 |
| `modules/genealogy/opaque/g06-search-input.png` | opaque / 720×248 | 早期窄版输入框完整皮肤 | 当前无引用 | 已停用;仅因用户要求停止工作而保留,恢复工作后需在引用扫描通过且用户允许时删除 |
| `modules/genealogy/opaque/g06-search-button.png` | opaque / 300×132 | 独立朱砂搜索按钮完整皮肤,含古金双线与角饰 | G06 真实搜索点击控件底层 | 保留;由 ImageGen 生成,真实点击控件与文本叠放其上 |
| `modules/genealogy/opaque/application-record-card.png` | opaque / 1050×360 | 带右下双审核槽的完整申请记录卡 | G10 待审核申请 | 保留;由 ImageGen 参考 G09/G10 改前截图生成,按钮另用完整位图叠放 |
| `modules/genealogy/opaque/application-status-card.png` | opaque / 1050×360 | 无按钮槽的完整信息状态卡 | G09/G10、T01/T07/T08、F/R/N/M 列表/时间轴/通知/状态 | 保留;由 ImageGen 精确移除审核槽,避免无操作状态出现假按钮 |
| `foundation/transparent/meta-location.png` | transparent / 96×96 | 地点元信息 | G01、`GenealogyCard` | 保留 |
| `foundation/transparent/meta-member.png` | transparent / 96×96 | 成员元信息 | G01、`GenealogyCard` | 保留 |
| `foundation/transparent/meta-admin.png` | transparent / 96×96 | 管理员元信息 | G01 | 保留 |
| `foundation/transparent/tab-genealogy.png` | transparent / 96×96 | 家谱 Tab 默认态 | `AppTabbar` | 保留 |
| `foundation/transparent/tab-genealogy-active.png` | transparent / 96×96 | 家谱 Tab 选中态 | `AppTabbar` | 保留 |
| `foundation/transparent/tab-family.png` | transparent / 96×96 | 家族 Tab 默认态 | `AppTabbar` | 保留 |
| `foundation/transparent/tab-family-active.png` | transparent / 96×96 | 家族 Tab 选中态 | `AppTabbar` | 保留 |
| `foundation/transparent/tab-profile.png` | transparent / 96×96 | 我的 Tab 默认态 | `AppTabbar` | 保留 |
| `foundation/transparent/tab-profile-active.png` | transparent / 96×96 | 我的 Tab 选中态 | `AppTabbar` | 保留 |
| `modules/genealogy/transparent/current-slip-frame.png` | transparent / 720×272 | 当前家谱题签框 | G01 | 保留 |
| `modules/genealogy/transparent/list-slip-frame.png` | transparent / 720×144 | 家谱列表题签框 | `GenealogyCard` | 保留 |
| `modules/genealogy/transparent/section-divider.png` | transparent / 720×30 | G01 分区金线 | G01 | 保留 |
| `modules/genealogy/transparent/current-seal-frame.png` | transparent / 144×208 | 当前家谱谱印框 | G01 | 保留 |
| `modules/genealogy/transparent/row-seal-frame.png` | transparent / 112×160 | 列表谱印框 | `GenealogyCard` | 保留 |
| `modules/genealogy/transparent/create-cloud.png` | transparent / 192×96 | 新建/搜索状态云纹 | G01、G06 | 保留 |
| `modules/genealogy/transparent/add.png` | transparent / 96×96 | 新建入口加号 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-tree.png` | transparent / 96×96 | 世系图入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-members.png` | transparent / 96×96 | 成员入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-generation-poem.png` | transparent / 96×96 | 字辈诗入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-application.png` | transparent / 96×96 | 审核入口 | G01 | 保留 |
本轮已迁入 38 项在用资产,删除 24 项运行时零引用的旧副本。A01 的两张完整按钮皮肤与 G06 检索资产均由图像生成工具制作,不是设计图裁切;G06 不再使用大型检索面板,当前使用朱砂题签、宽版输入框与搜索按钮三张独立位图,页面只叠放真实品牌印、文字与交互控件。旧版设计记录中的历史路径不再是资产依据;后续只按本台账引用和维护。
## 5. 混合资产属性规则
完整生产、质量门和换机恢复方法以 `docs/design/设计资产生产流水线规范.md` 为准。P00 只登记最终资产归属,不重复维护算法和阈值。
| 类型 | 文件格式与内容 | 典型用途 | 页面使用规则 |
| --- | --- | --- | --- |
| 代码原生 | Vue/SCSS,不产生图片 | 布局、文字、间距、普通分隔线、纯色和交互状态 | 不伪造复杂品牌装饰;普通内容保持正常布局流 |
| 固定比例位图 | JPG、PNG 或 WebP;比例与槽位一致 | 宗祠、水墨背景、固定比例复杂视觉面 | manifest 声明槽位和 `uniform-only`;禁止变形拉伸 |
| 透明叠加图 | RGBA PNG/WebP;外缘透明、主体边界干净 | Logo、图标、祥云、谱印、分隔纹 | manifest 声明 Alpha 与边缘策略;禁止白边、绿边 |
| 可伸缩装饰框 | 九宫格或经过验证的等价组件资产 | 多宽度按钮框、卡片框、弹窗框 | 必须先验证 H5 与 Android;四角和边线不得被整体拉伸 |
| 平铺纹理 | 可无缝重复的小图 | 宣纸、无方向纹理 | manifest 明确平铺/覆盖策略,不承担文字或边框 |
禁止项:整页截图、设计图局部页面裁切、半边边框、按钮角标拼接、临时 CSS/SVG 伪造复杂品牌装饰、未声明的 `scaleToFill``fit: 'fill'`、同一语义的多版本长期共存。
## 6. 资产清理登记规则
每项现有资产必须登记以下字段后才可以决定保留或删除:
| 字段 | 含义 |
| --- | --- |
| 当前路径 | 盘点时的真实文件路径 |
| 语义用途 | 它服务的视觉元素,而不是模糊类别 |
| 背景属性 | `opaque``transparent` |
| 代码引用 | 页面、组件、配置或测试中的引用位置 |
| 替代资产 | 若要迁移,写入唯一的新路径;无替代则留空 |
| 决定 | `保留``迁移后删除``无引用删除` |
执行顺序固定为:扫描引用 → 填写登记 → 迁移引用 → 编译与截图验证 → 删除旧资产 → 再次扫描确认零引用。任何一步失败都停止删除。
## 7. 中文注释约定
每个页面和组件文件以中文注释写清页面编号、用途和关键依赖;模板至少区分背景、页头、主体、操作、状态五类区域。资产图层、路由跳转、非直观状态和防回归样式要解释“为什么这样写”。显而易见的单行 CSS 不写噪声注释。
@@ -1,46 +0,0 @@
# T01–T08 世系与成员设计记录
> 日期:2026-07-14
> 状态:T02 已收敛至 T01T01、T03–T08 共 7 个页面候选、运行截图和 Product Design 审视完成,统一标记 `[~]`。
## 1. 信息架构
- T01 是阅读世系的唯一页面,`tree|landscape|empty|error` 为同页状态;T02 路由、文件和目录条目已删除。
- T03 负责成员档案;T04 新增亲属、T05 编辑成员、T06 维护关系分别保留独立任务页,但共享同一高质量表单母版。
- T07 是成员检索目录;T08 将隐私、离世纪念和无权限保留为同一路由的三个状态,不拆成重复页面。
- 接口文档仅用于确定成员字段、关系冲突、隐私和状态位置;所有候选使用页面内模拟数据,不调用 `appApi`
## 2. 视觉体系
- 延续已确认的宣纸、朱砂、古金与墨褐体系。
- 世系画布和成员表单复用 `g03-create-flow-panel.png` 完整宣纸面;成员节点/字段使用 `g06-search-input-wide.png`;信息条、目录卡和状态卡使用 `application-status-card.png`
- 主次操作使用 `a01-primary-button.png``a01-secondary-button.png`CSS 仅负责布局、文字和点击层。
- 现有完整位图已覆盖需要,因此没有生成语义重复的新资产。
## 3. Product Design 截图审视
### T01
目录:`screens/runtime/2026-07-14/t01-audit/`
- 候选:`04-t01-tree-360x800.png``05-t01-landscape-360x800.png``06-t01-empty-360x800.png``07-t01-error-360x800.png``08-t01-tree-412x915.png`
- 对比:`09-t01-before-after-comparison.png`
- 首轮状态截图发现状态文案位于 1180rpx 横向画布中导致右侧裁切;先更新契约要求 `tree-canvas--state`,再将非树状态画布收窄到当前视口,重新截图后已完整显示。
### T03T08
目录:`screens/runtime/2026-07-14/t-module-audit/`
- 关键候选:`01-t03-detail-360x800.png``13-t07-list-412x915.png`
- 同画布对比:`14-t03-comparison.png``15-t04-t06-comparison.png``16-t07-t08-comparison.png`
- 360/412 下表单字段、成员卡、状态切换和主次操作均未裁切;T06 冲突动作与 T08 三种权限状态层级清楚。
## 4. 验证
- `T01-TREE-STATE-CONTRACT PASS`
- `T01-TREE-STATE-RUNTIME-SMOKE PASS`
- `T03-T08-MEMBER-FLOW-CONTRACT PASS`
- `T03-T08-MEMBER-FLOW-RUNTIME-SMOKE PASS`
- `PASS compile audit`
H5 截图不能替代 Android 真机字体放大、读屏和触摸目标验证;这些留到全量候选后的设备复核。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

@@ -1,45 +0,0 @@
{
"schemaVersion": 1,
"canvas": {
"width": 1236,
"height": 2745,
"logicalWidth": 412,
"logicalHeight": 915,
"scale": 3,
"resolution": 72
},
"groups": [
{ "name": "00-参考", "visible": false },
{ "name": "10-背景", "visible": true },
{ "name": "20-卷轴", "visible": true },
{ "name": "30-品牌与标题装饰", "visible": true },
{ "name": "40-公共控件皮肤", "visible": true },
{ "name": "50-密码登录", "visible": true },
{ "name": "60-验证码登录", "visible": false },
{ "name": "70-内容与标注", "visible": true }
],
"layers": [],
"states": [
{
"name": "password-hidden",
"show": ["50-密码登录"],
"hide": ["60-验证码登录"]
},
{
"name": "password-visible",
"show": ["50-密码登录"],
"hide": ["60-验证码登录"]
},
{
"name": "sms-default",
"show": ["60-验证码登录"],
"hide": ["50-密码登录"]
},
{
"name": "sms-countdown",
"show": ["60-验证码登录"],
"hide": ["50-密码登录"]
}
],
"exports": []
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 957 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 626 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 496 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 KiB

@@ -1,34 +0,0 @@
# 上传前文件清理审计(2026-07-17 更新)
## 审计边界
- 生成资产所需的母版、清单、脚本、测试、`requirements.txt` 和 APP 正在引用的运行图一律保留。
- 只删除可再生成的本机缓存,以及已经被新版长期代表证据或正式母版替代的旧截图。
- 不修改仓库体积阈值,不执行 Git 暂存、提交、推送、重置或检出。
- `unpackage/` 中已有的 tracked 缓存修改不覆盖、不删除,上传时单独排除。
## 已清理的本机缓存
- `design-pipeline/.venv/``design-pipeline/generated/` 和 Python `__pycache__/`
- `.superpowers/``tmp/``tmp-g01-icon-audit.png`
- `docs/design/screens/runtime/`113 个文件,共 40,858,831 字节。该目录受 Git 忽略,只是本机运行截图缓存。
删除 `.venv``generated` 不影响换机恢复;新电脑按 `requirements.txt` 重建环境后,由正式母版、清单和脚本重新生成输出。
## 已清理的长期截图
用户于 2026-07-17 确认删除 20 张已被新版联系表、当前代表图或 A01 正式 PSD 母版替代的旧 handoff 截图,共 12,987,496 字节。长期索引已迁移到:
- `docs/design/screens/handoff/2026-07-16/` 中 A01、A04、A05、A06、G01、G03、G05、G08G12、T01、T04 的当前联系表或代表图。
- `docs/design/assets/a01-vnext/source/A01-layered-source-v1.psd``a01-psd-manifest.json`
此前 2026-07-16 已删除的两张无引用 A01 旧全页图继续保持删除状态。
仓库体积合同还会统计 `docs/design/screens/` 根目录。为满足同一合同,另删除 7 张早期整页设计稿:A01 v1–v3 已由正式分层 PSD 和保留的四档栅格证据替代,G01 v1–v4 已由仍保留的 v5 安全区稿和 2026-07-16 当前联系表替代。相关长期文档引用已迁移。
## 清理结果
- `docs/design/screens/handoff/`30 个文件,16,899,601 字节,低于 35 个文件/20MB 合同。
- `docs/design/screens/` 全目录:35 个文件,低于 20MB,满足仓库截图体积合同。
- 正式 G01 与 T/F/R/N/M 生成输入、运行资产和恢复脚本均保留。
- `design-pipeline/generated/``.venv/`、runtime 与 tmp 不属于长期交接材料,换机后按需重建。
@@ -1,46 +0,0 @@
# 全模块长背景与 A 系列控件交接
## 当前决定
- A 系列现有按钮、弹窗、Toast 和对话框视觉已经由用户确认,作为全局唯一标准。
- G01 是 G 系列风格母体;9 个活动 G 页面继续共用 `GenealogyPageBackground.vue` 与既定 G01 长背景。
- T、F、R、N、M 各自保留模块性格,但共享浅色国风、楷体、宣纸、朱砂、古金与 A 系列控件。
- 本轮按用户要求不生成新的运行截图;页面仍需用户逐页审核和 Android/HBuilderX 复核。
## 公共组件
- `components/AppButton.vue`A 系列主/次卷轴按钮。
- `components/AppDialog.vue`A 系列单/双按钮卷轴对话框。
- `components/AppToast.vue`A 系列卷轴轻提示。
- `components/AppLoading.vue`:项目自定义水墨加载。
- `components/PageHeader.vue`:普通页使用真实返回箭头,根页保留品牌头部。
- `components/ModulePageBackground.vue`:T、F、R、N、M 背景唯一映射入口。
## 可恢复输入与运行资产
| 模块 | ImageGen 原始输入 | APP 运行资产 | SHA-256 |
| --- | --- | --- | --- |
| T | `tree-page-background-imagegen-source.png` | `static/assets/modules/tree/opaque/tree-page-background-long.png` | `b4322e6d8294c1e30d03baa005aa77122dd49257504da2462db74bfe79e44b37` |
| F | `family-page-background-imagegen-source.png` | `static/assets/modules/family/opaque/family-page-background-long.png` | `9c65aa0526d392e6d03e6c0216e9f5f9f9f917aa539e15c045283195882b5fec` |
| R | `records-page-background-imagegen-source.png` | `static/assets/modules/records/opaque/records-page-background-long.png` | `a420ac3791acc13e25ae68f68782e07754c0040b7f9fbde037bf1588f2ff7007` |
| N | `notification-page-background-imagegen-source.png` | `static/assets/modules/notification/opaque/notification-page-background-long.png` | `7f707153f6ecf53183fc360e6a34b4312975babeb5ccb3f36e048f1f64c65ca5` |
| M | `profile-page-background-imagegen-source.png` | `static/assets/modules/profile/opaque/profile-page-background-long.png` | `c5adb199e5773582775f9f0bab1fef62e0948755c9f22aca647d236f8d4ef8b8` |
所有原始输入位于 `docs/design/assets/module-backgrounds/masters/`;运行资产统一为 `1440×3600` RGB PNG。
## 换机重建
```powershell
design-pipeline/.venv/Scripts/python.exe design-pipeline/scripts/build_module_page_backgrounds.py
powershell -NoProfile -ExecutionPolicy Bypass -File tests/global-heritage-visual-system-contract.ps1
```
清单:`design-pipeline/manifests/module-page-backgrounds.json`
## 验证边界
- 当前静态合同和无截图 H5 运行 smoke 已覆盖主要页面状态、按钮事件、导航与自定义弹层。
- 尚未完成 Android/HBuilderX 字体、状态栏、返回手势、软键盘与不同面板亮度复核。
- 五张 `1440×3600` 图片在 4GB Android 上的解码、切页与回收仍需专项检查。
- 当前仅为全线基础样式候选,不表示 52 页已由用户正式验收或冻结。
-217
View File
@@ -1,217 +0,0 @@
# 家谱 APP 视觉设计交接手册
> **2026-07-16 状态覆盖说明:** 本手册中的截图方法、资产规则和验证流程继续有效;旧路由与验收数字不再有效。当前为 52 条活动路由、52 页全部 `[~]` 待审核、0 页冻结;A06 已从路由与活动验收队列封存但保留实现。接管时先读 `docs/交接记录.md` 与 `docs/验收规划.md`。
> 更新日期:2026-07-14
> 用途:在新电脑或交给新的 GPT 后,按本手册恢复当前工作;它只记录已发生的事实,不把待验收写成已完成。
## 0. 给新 GPT 的可直接执行指令
你接手的是一个 **uni-app Android 家谱项目的高质量视觉设计任务**,全程中文工作;它不是只改 CSS 的任务。先不修改代码,完整阅读:`AGENTS.md``docs/交接记录.md`、本手册、`docs/规划.md``docs/design/D1_安卓视觉规范与页面壳.md``docs/design/P00_页面结构与资产清单.md``docs/design/设计资产生产流水线规范.md``docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md``design-qa.md`。随后只向用户简洁复述当前停点和准备如何处理反馈。
必须保留已有未提交改动;不使用 worktree;不执行 `git add``git commit``git push`、上传、`git reset``git checkout`。旧阶段的 A01、A02、A04、A05、A06、G01、G03 验收/冻结记录只作历史证据;本轮 52 个活动页面全部重新待审核。A06 已封存,G07 是 G06 的页面内状态,不得重新建为独立页。
当前实际为 52 条活动路由,52 页全部标 `[~]`,0 页冻结;已有 14 个活动页面内部 H5 候选,A06 候选另行封存,均不得写成用户已正式验收。用户下一活动审核页是 G01;无人审核时下一施工页是 T07。接口只作功能布局参考,本轮没有对接。
新环境必须可用并实际调用:`product-design:index``product-design:audit``imagegen``superpowers:test-driven-development``superpowers:systematic-debugging``superpowers:verification-before-completion`。没有这些能力时,先安装/启用同等能力,不得假装已经完成设计审视或位图生成。
## 1. 当前停点:先看这一节
项目实际有 52 条活动路由;A02 已合并进 A01,A06 已封存,T02 已合并进 T01且遗留占位文件已删除。`docs/验收规划.md` 中 52 个活动页面全部为 `[~]`0 页已验收,0 页冻结。
- 已有 14 个活动页面内部 H5 候选:A01、A04、A05、G01、G03、G05、G06、G08、G09、G10、G11、G12、T01、T04。A06 的 H5 候选、源码、测试和证据已封存保留。
- 这些候选、内部 smoke、GPT 审视和旧 QA 都不等于用户正式验收。
- 用户下一活动审核页是 G01;无人审核时下一施工页是 T07 成员目录。
- 基础版本只做浅色国风主题;深色和跟随系统延期。
- 不提交、不推送、不上传 Git;由用户自行处理版本库操作。
下一位执行者先读 `docs/交接记录.md``docs/验收规划.md`,再按 `[~]` 清单协助用户逐页审核。默认只打开一张代表图或一张复杂状态联系表;多尺寸、before/after 与历史废稿仅在发现问题时展开。
## 1.1 迁移前必须保留的文件
本手册、G06 最终候选资产和截图工具均是接管所需文件;换电脑前,用户需在自行提交/上传时包含它们,或完整复制当前工作区。我没有执行任何 Git 暂存、提交、推送或上传操作。
至少要保留:`docs/design/视觉设计交接手册.md``docs/交接记录.md``docs/design/视觉证据索引.md``scripts/capture-chrome-page.js`、全部页面/资产/测试、`docs/design/screens/runtime/` 的运行证据,以及现有计划与设计记录。只复制已提交的旧版本会丢失当前停点。
## 2. 必读文件与唯一职责
| 文件 | 负责什么 |
| --- | --- |
| `AGENTS.md` | 最小修改、保护既有未提交内容、验证后再交付的项目规则。 |
| `docs/规划.md` | 54 条独立路由的范围、模块顺序和“完成”的定义。 |
| `docs/design/D1_安卓视觉规范与页面壳.md` | Android 页面、资产、布局与中文注释的硬约束。 |
| `docs/design/P00_页面结构与资产清单.md` | 路由、页面文件和资产台账的唯一清单。 |
| `docs/design/设计资产生产流水线规范.md` | 混合代码/位图落地、manifest、Node/Sharp/Python 分工、质量门和跨电脑恢复合同。 |
| `docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md` | 已批准的分模块视觉精修计划和验收顺序。 |
| `docs/design/2026-07-13-A01-G01-A02-视觉审视.md` | A01/G01 视觉证据与旧 A02 的问题定位。 |
| `docs/design/A02_账号登录_设计记录.md` | A02 当前实现、资产、截图和测试记录。 |
| `design-qa.md` | A02 的 Design QA;当前 `final result: accepted`。 |
| `docs/交接记录.md` | 简版当前状态与恢复入口;本手册提供完整操作细节。 |
发生冲突时,按“用户最新明确指令 > AGENTS.md > 上表中的当前台账/计划 > 历史文档”的顺序处理。不要以旧的草案或已废弃的截图切片方案为依据。
## 3. 已验收的风格与绝对禁区
### A01 与 G01 是可观察的品牌真源
- A01 参考图:`docs/design/screens/A01-启动登录引导-栅格验收-412x915.png`
- G01 参考图:`docs/design/screens/G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png`
共同语言是“家祠卷轴”:暖宣纸、朱砂主色、古金框线和元数据、墨褐字、低对比淡墨山水。主信息应先于背景被读到,留白是结构的一部分。
必须遵守:
1. 最新生产方法以 `docs/design/设计资产生产流水线规范.md` 为准:代码承担布局、文字、间距、状态和普通结构;复杂水墨、品牌装饰和代码无法忠实表达的视觉使用真实位图。
2. 固定比例完整位图、透明叠加资产和经 H5/Android 验证的九宫格必须在 manifest 中声明真实槽位、缩放和 Alpha 策略;不得默认使用 `scaleToFill` 或 Sharp `fit: 'fill'` 掩盖比例错误。
3. 不能把整张设计截图或局部截图裁进运行页面;运行资产必须是可复用的独立元素。
4. A01/G01 历史证据仍是品牌观察真源,但不等于本轮已验收或冻结;当前状态以 `docs/交接记录.md``docs/验收规划.md` 为准。
5. 不要用一个通用卡片母版覆盖所有模块。家谱、世系树、内容档案、人物记录、通知和设置必须在同一视觉语言下有各自的信息密度与层级。
## 4. A02 的精确状态
> 本节是 2026-07-14 的历史实现记录,不是当前路由或验收状态。当前 A02 已删除并合入 A01,本轮不得恢复 A02 路由;最新状态以 `docs/交接记录.md` 为准。
### 实现内容
- 路由与页面:`pages/auth/a02-login.vue`
- 新面板资产:`static/assets/modules/auth/opaque/a02-login-panel.png`
- 实际尺寸:940 × 1672
- 属性:四角不透明,承载宣纸底、双古金框、角饰与淡纹样
- 主按钮继续复用已验收完整资产:`static/assets/foundation/opaque/a01-primary-button.png`
- 账号密码与短信验证码 Tab、输入、忘记密码跳转和原有交互均保留;短信 Tab 已经通过真实 Chrome 调试点击截图。
### 已保存的运行证据
默认只查看 `docs/design/screens/handoff/2026-07-16/A01-current-password-sms-contact-824x915.png`。A02 已并入 A01;小屏、大屏和 before/after 历史证据保存在项目外完整归档中,按需展开,不在交接正文连续罗列。
### 通过/未通过的界线
已通过的是:资产尺寸与不透明角审计、A01/A02 页面契约、编译检查、A02 的多尺寸运行截图和短信 Tab 交互。
已通过的是:用户对 A02 的最终审美确认,`design-qa.md``accepted`,A02 可见效果冻结。用户若提出新的明确调整,只改动被指出的区域并重新截图复核;不要无根据改动面板框、输入区或交互。
## 5. 换电脑后如何恢复截图与审视能力
### 必备环境
- Windows、Chrome、HBuilderX(项目当前以 Android `uni-app` 为目标)。
- Node.js 22 或更高版本;当前脚本已在 Node 24 环境使用原生 `fetch``WebSocket`
- 先在 HBuilderX 启动本地 H5 调试页,并确认它能在 `http://localhost:5173` 打开。不要臆测项目的 npm 启动命令。
用专用 Chrome 调试实例开启远程端口;它与用户日常 Chrome 隔离:
```powershell
$chrome = "$env:ProgramFiles\Google\Chrome\Application\chrome.exe"
Start-Process -FilePath $chrome -ArgumentList `
'--remote-debugging-port=9222', `
"--user-data-dir=$env:TEMP\jiapu-chrome-debug", `
'http://localhost:5173/#/pages/auth/a02-login?agreed=1'
```
确认调试端口与应用页面存在:
```powershell
Invoke-RestMethod 'http://127.0.0.1:9222/json/list' | Select-Object title, url
```
使用项目内的正式脚本截图。它会导航**专用调试 Chrome**的当前标签页、写出 PNG,并在结束时清除设备尺寸覆盖;不能操作或关闭用户的日常 Chrome。
```powershell
node scripts/capture-chrome-page.js `
'http://localhost:5173/#/pages/auth/a02-login?agreed=1' `
'.login-page' `
'docs/design/screens/runtime/2026-07-14/A02-after-360x800.png' `
360 800
```
新截图先保存到已忽略的 `docs/design/screens/runtime/<日期>/`,绝不能放回 `static/assets/` 作为运行资源。每个代表页面至少做 360 × 800;只有出现比例风险或用户要求时再展开 320 × 568、360 × 640、412 × 915,多状态页面优先合成一张联系表。用户确认需要长期交接时,只把代表图复制到 `docs/design/screens/handoff/`。最终 Android/HBuilderX 截图仍需补做,H5 Chrome 截图不能替代它。
## 6. 后续执行顺序与每轮产物
### 历史门禁记录(本轮已失效)
以下内容只解释旧阶段为何保留某些资产,不得据此把任何页面写成当前已验收或冻结。
1. A02 与 A04 均已通过;不因后续页面改动而触碰其可见效果。
2. 若用户提出明确调整:只在对应页面修正,先调整对应契约测试,再改页面/资产,重新截图复核。
3. A05、A06 与 G01 空状态均已通过并完成状态同步;G04 已合并为 G03 `step=ancestor`,该双步骤已获用户通过;G07 已合并为 G06 三态。G06 三态候选和内部审视已完成,仍待用户视觉确认。
### 当前唯一顺序:逐页视觉审核
54 条路由候选已经全部覆盖。用户从 `docs/规划.md` 指定或按清单顺序审核页面;只有用户明确通过才改 `[x]`,要求返工则改 `[!]` 并只修改对应页面。接口、Android 打包和真机复核均留在视觉审核之后。
### 每个模块的固定工作流
1. 用 Product Design 对已运行页面截图审视,明确该模块与 A01/G01 的继承点、不同的信息结构与验收尺寸。
2. 先补/改最小的页面契约测试并看到失败,再实现页面;只有缺少真实视觉资产时才生成资产。
3. 资产生成后记录路径、尺寸、是否不透明、用途和引用页到 P00;生成图必须经过本地检查后进入 `static/assets/`
4. 保留既有可用跳转和返回行为,删除本轮替换后不再使用的临时导入、目录项和样式。
5. 运行受影响的测试、编译审计、真实路由截图,再更新设计记录、规划和交接状态。
6. 在用户验收之前,状态统一写“实现与截图完成,视觉待用户验收”。
## 7. 下一位 GPT 需要具备并实际调用的能力
这不是“只改 CSS”的任务。执行视觉页前应先读取对应技能说明,并在对用户的工作说明中指出正在使用的技能及目的。
| 能力/技能 | 何时使用 | 项目中的正确做法 |
| --- | --- | --- |
| `product-design:index``product-design:audit` | 审视、评价或设计一个已运行页面/流程时。 | 先拿到真实路由截图,再依据 A01/G01 与页面任务写审视结论;不要靠源码猜好不好看。 |
| Product Design 的 `user-context``get-context``ideate``image-to-code`、Design QA 流程 | 需要探索方向、选择视觉方案、将已选样稿落地、或交付前比对时。 | 有明确视觉真源时先忠实落地;没有真源且需要新方向时先给可比较方案,选定后再实现;最后在 `design-qa.md` 诚实记录通过或阻塞。 |
| `imagegen` | 现有资产无法承担完整视觉面时。 | 先用 A01/G01 实图作为参考,明确输出是完整不透明面板还是透明叠加件;检查实际尺寸/Alpha 后再放入项目。不能用截图代替资产。 |
| `superpowers:brainstorming``superpowers:writing-plans` | 新模块或会改变页面行为的创作工作开始前。 | 先写清用户目标、交互和验收,不以“尽快”跳过设计决定。 |
| `superpowers:test-driven-development` | 修改功能、路由契约、可审计视觉结构前。 | 先让最小契约测试失败,再做实现;视觉资产同样写尺寸/Alpha/引用审计。 |
| `superpowers:systematic-debugging` | 截图、路由、构建或测试出现意外时。 | 先复现和定位单一根因,禁止靠删测试、盲改样式掩盖问题。 |
| `superpowers:verification-before-completion` | 任何“完成/修好/通过”的表述前。 | 以命令输出、运行截图和用户确认作证据;不能用意图代替验证。 |
若新电脑没有 Product Design 或 ImageGen 插件,应先安装/启用同等能力;在能力缺失时不能假装完成视觉审计或资产生成。新环境先执行 `python --version``node --version` 确认可用环境;当前用户已确认 Python 已安装。若 Product Design 的持久 context 预检仍失败,记录原因即可,不得阻塞对项目内真实截图、资产和测试的接管。
## 8. 验证命令
先看工作区,再运行与改动相匹配的聚焦测试;模块阶段结束前运行全量 PowerShell 审计:
```powershell
git status --short
Get-ChildItem tests -Filter *.ps1 | Sort-Object Name | ForEach-Object {
& powershell.exe -NoProfile -ExecutionPolicy Bypass -File $_.FullName
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
git diff --check
```
A02 当前的最小回归集合:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a02-asset-alpha-audit.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a01-a02-ui-contract.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/compile-audit.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/full-page-visual-contract.ps1
git diff --check
```
G06 当前候选继续或验收前的最小回归集合:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/g06-search-flow-contract.ps1
node tests/g06-search-flow-runtime-smoke.js http://localhost:5173
node scripts/capture-chrome-page.js "http://localhost:5173/#/pages/genealogy/g06-search-genealogies" ".search-page" "docs/design/screens/runtime/<日期>/G06-selected-strip-initial-360x800.png" 360 800
git diff --check
```
若 G06 发生视觉改动,必须用真实输入分别截取有结果和无结果状态,再用 Product Design 审视;只有三态、相关测试与用户确认齐全,才能更新为验收通过。
`git diff --check` 可能提示仓库既有的 CRLF 行尾警告;只有真正的空白错误或非零退出码才算失败。不要 reset、checkout、清空或覆盖用户已有改动。
## 9. 文档与资源维护清单
每次完成一个页面/模块,按事实更新:
- `docs/规划.md`:用户验收状态与下一个模块。
- `docs/design/P00_页面结构与资产清单.md`:新旧资产、尺寸、透明属性、引用位置与去留。
- `docs/design/<页面>_设计记录.md`:设计意图、截图、交互与测试。
- `docs/design/screens/runtime/<日期>/`:真实运行截图。
- `design-qa.md`:修复项、未决项与最终 `passed/blocked` 结果。
- `docs/交接记录.md` 与本手册:真实停点、风险、下一步;未获得用户确认就不能写成“已完成”。
当前工作区已经存在用户和历史任务的未提交改动。后续工作只能触及当前任务需要的文件;若改动与当前设计目标无关,只报告,不清理。
-82
View File
@@ -1,82 +0,0 @@
# 视觉证据索引
## 当前换机检查点
- A01 当前密码/短信登录联系表(待审核,不代表通过):[824×915 真实运行代表图](screens/handoff/2026-07-16/A01-current-password-sms-contact-824x915.png)
- A04 当前注册页(待审核,不代表通过):[412×915 真实运行代表图](screens/handoff/2026-07-16/A04-current-register-412x915.png)
- A05 当前重设密码页(待审核,不代表通过):[412×915 真实运行代表图](screens/handoff/2026-07-16/A05-current-reset-412x915.png)
- A06 封存前风险限制页(样式无异议但不代表完整验收):[412×915 真实运行代表图](screens/handoff/2026-07-16/A06-current-risk-412x915.png)
- G01 当前默认/空态联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G01-current-default-empty-contact-720x800.png)
- G06 当前搜索初始/结果/邀请码联系表(待审核,不代表通过):[1080×800 真实运行联系表](screens/handoff/2026-07-16/G06-current-initial-results-invite-contact-1080x800.png)
- G08 当前搜索申请/邀请码直加联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G08-current-search-invite-contact-720x800.png)
- G09 当前申请列表/空态联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G09-current-list-empty-contact-720x800.png)
- G03 当前创建/首代人物联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G03-current-create-ancestor-contact-720x800.png)
- G05 当前成员总览/公开预览联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G05-current-member-public-contact-720x800.png)
- G10 当前审核列表/无权限联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G10-current-list-permission-contact-720x800.png)
- G11 当前设置/无权限联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G11-current-form-permission-contact-720x800.png)
- G12 当前字辈列表/编辑联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/G12-current-list-edit-contact-720x800.png)
- T01 当前世系树/空态联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/T01-current-tree-empty-contact-720x800.png)
- T04 当前新增亲属表单/成功态联系表(待审核,不代表通过):[720×800 真实运行联系表](screens/handoff/2026-07-16/T04-current-form-success-contact-720x800.png)
- 当前实际为 52 个活动页面全部 `[~]` 待审核;A06 证据封存保留,不计入活动验收统计。下方旧“已验收”图片只作为历史视觉基础,不计入本轮完成状态。
> 本仓库只保留低负担交接证据:每页一张代表图,复杂模块使用联系表。完整 before/after、多尺寸、历史废稿和全部运行截图保存在项目外本地归档,不进入 Git。
## 完整本地归档
Windows 路径:`C:\Users\Rain\Desktop\job\jiapuapp-design-evidence-archive-2026-07-15`
归档内的 `design-full/` 是精简前完整 `docs/design/``tmp/` 是 ImageGen 与调试临时源文件。新电脑默认不需要这份归档;只有追溯历史决策或检查旧尺寸时才单独复制。
## 历史视觉基准(不计本轮通过)
- A01/已合并的 A02[密码与短信联系表](screens/handoff/2026-07-16/A01-current-password-sms-contact-824x915.png)
- A04[注册账号](screens/handoff/2026-07-16/A04-current-register-412x915.png)
- A05[重置密码](screens/handoff/2026-07-16/A05-current-reset-412x915.png)
- A06(封存):[登录状态](screens/handoff/2026-07-16/A06-current-risk-412x915.png)
- G01[默认态与空态联系表](screens/handoff/2026-07-16/G01-current-default-empty-contact-720x800.png)
- G03[创建与始祖联系表](screens/handoff/2026-07-16/G03-current-create-ancestor-contact-720x800.png)
## F、R、N、M 默认审核入口
- [F03F10 联系表](screens/handoff/2026-07-14/all-page-candidates/00-family-contact-sheet.png)
- [R01R11 联系表](screens/handoff/2026-07-14/all-page-candidates/00-records-contact-sheet.png)
- [N02、M02M10 联系表](screens/handoff/2026-07-14/all-page-candidates/00-profile-notification-contact-sheet.png)
- [F01 家族动态](screens/handoff/2026-07-14/root-pages-audit/01-f01-list-360x800.png)
- [F02 发布动态](screens/handoff/2026-07-14/root-pages-audit/03-f02-form-360x800.png)
- [N01 消息中心](screens/handoff/2026-07-14/root-pages-audit/05-n01-list-360x800.png)
- [M01 我的首页](screens/handoff/2026-07-14/root-pages-audit/07-m01-ready-360x800.png)
## G 家谱候选
- [G05 家谱总览](screens/handoff/2026-07-16/G05-current-member-public-contact-720x800.png)
- G06[初始态](screens/handoff/2026-07-14/G06-selected-strip-final-initial-recheck-360x800.png)、[结果态](screens/handoff/2026-07-14/G06-selected-strip-final-results-360x800.png)、[无结果态](screens/handoff/2026-07-14/G06-selected-strip-final-empty-360x800.png)
- [G08 申请入谱](screens/handoff/2026-07-16/G08-current-search-invite-contact-720x800.png)
- [G09 我的申请](screens/handoff/2026-07-16/G09-current-list-empty-contact-720x800.png)
- [G10 申请审核](screens/handoff/2026-07-16/G10-current-list-permission-contact-720x800.png)
- [G11 家谱设置](screens/handoff/2026-07-16/G11-current-form-permission-contact-720x800.png)
- [G12 字辈诗](screens/handoff/2026-07-16/G12-current-list-edit-contact-720x800.png)
## T 世系与成员候选
- [T01 世系树](screens/handoff/2026-07-16/T01-current-tree-empty-contact-720x800.png)
- [T03 成员档案](screens/handoff/2026-07-14/t-module-audit/01-t03-detail-360x800.png)
- [T04 新增亲属](screens/handoff/2026-07-16/T04-current-form-success-contact-720x800.png)
- [T05 编辑成员](screens/handoff/2026-07-14/t-module-audit/04-t05-form-360x800.png)
- [T06 编辑关系](screens/handoff/2026-07-14/t-module-audit/05-t06-form-360x800.png)
- [T07 成员目录](screens/handoff/2026-07-14/t-module-audit/07-t07-list-360x800.png)
- [T08 成员状态](screens/handoff/2026-07-14/t-module-audit/09-t08-privacy-360x800.png)
## 风格锚点与设计记录
- [G01 美术锚点](references/G01-我的家谱-美术锚点.png)
- [公共操作图标锚点](references/公共操作图标-风格锚点.png)
- [页面与状态合并审计](2026-07-14_页面与状态合并审计.md)
- [G05 设计记录](G05_家谱总览_设计记录.md)
- [G08G10 设计记录](G08-G10_入谱申请链路_设计记录.md)
- [G11G12 设计记录](G11-G12_设置与字辈诗_设计记录.md)
- [T01T08 设计记录](T01-T08_世系与成员_设计记录.md)
- [F/R/N/M 设计记录](F-R-N-M_全量候选设计记录.md)
## 后续截图规则
新的运行截图仍输出到 `docs/design/screens/runtime/<日期>/`,该目录已被 `.gitignore` 排除。用户确认需要作为长期交接基准时,再把单张代表图复制到 `docs/design/screens/handoff/` 并更新本索引;不要把整轮截图重新加入 Git。
@@ -1,374 +0,0 @@
# 家谱 APP 设计资产生产流水线规范
> 状态:已批准并完成 A01 卷轴祥云四件套 v3 的本机 H5 试点;仍待 Android/HBuilderX、跨电脑复现和用户正式验收。
> 更新日期:2026-07-16。
> 适用范围:本项目后续页面重设计、独立视觉资产生产、跨电脑恢复与质量审计。
> 当前边界:manifest v2、Python/Pillow 质量门和 A01 主按钮、次按钮、Toast、验证弹窗四张 v3 资产已经落地并通过本机 H5 四尺寸检查;这不代表 Android 已复核、用户已验收或流水线可以推广到其他页面。
## 1. 目标
本项目采用“混合落地”方式,不把所有视觉都做成整张位图,也不把复杂国风装饰退化为临时 CSS 或手绘 SVG。
目标是:
1. 设计稿中的布局、文字、间距、状态和普通结构由 Vue/SCSS 负责。
2. 复杂水墨、宗祠、品牌印、专用图标和难以代码复现的装饰由真实位图资产负责。
3. 可复用且需要伸缩的装饰框优先进入经过 Android/H5 验证的九宫格或组件化资产方案。
4. Node.js、Sharp 与 Python 读取同一份 JSON manifest,禁止在脚本、页面和文档中重复维护尺寸规则。
5. 自动化负责消除机械错误;真实运行截图和用户逐页审核仍是最终视觉判断来源。
流水线不能保证任意扁平设计图自动拆成一比一资产。要获得稳定质量,页面设计阶段必须同时明确组件边界、目标槽位、伸缩策略和独立资产任务。
## 2. 已有雏形与升级原则
仓库现有可复现雏形:
- `design-pipeline/package.json`
- `design-pipeline/package-lock.json`
- `design-pipeline/manifests/a01.json`
- `design-pipeline/scripts/build-a01.mjs`
- `tests/a01-code-pipeline-contract.ps1`
原 schema v1 雏形已经具备 Node.js、Sharp、JSON 清单、路径约束、尺寸/Alpha/体积检查和 A01 预览组合能力,但单独使用时仍不是合格的资产生产线,原因包括:
- 对所有资产统一使用 `fit: 'fill'`,不能阻止比例拉伸。
- manifest 只记录文件像素,不记录页面真实槽位和允许的缩放策略。
- 没有检查白边、绿边、半透明脏边、预乘 Alpha、色彩空间和边缘污染。
- 代码预览不是 uni-app 真实运行截图。
- `source === output` 主要保证换机可验证,不能替代新资产的生产与质量处理。
升级时保留已有目录、Node/Sharp 依赖和清单入口,不另建一条互相冲突的流水线。新合同升级为 manifest v2;A01 试点通过前不得批量迁移其他页面。
2026-07-16 已实现的 v2 试点包括:
- `design-pipeline/manifests/a01-buttons-v2.json`:尺寸、槽位、缩放、透明边、质量阈值和消费者的单一机器合同。
- `design-pipeline/scripts/rebuild-a01-buttons.mjs``rebuild_a01_buttons.py`Node 编排、Pillow 横向三段式离线重建。
- `design-pipeline/scripts/verify-assets.mjs``verify-assets.py``asset_quality.py`:尺寸、Alpha 外圈、绿边、浅色半透明边、透明 RGB、体积和色彩声明检查。
- `design-pipeline/requirements.txt`:锁定 `Pillow==12.3.0`
- Node/Python 单元测试、A01 静态契约、资产审计和四档 H5 运行时检查。
在双按钮试点基础上,用户选择“方案 2:卷轴祥云”并批准扩展为四件套 v3:
- `design-pipeline/manifests/a01-scroll-skins-v3.json`:四件套源母图、输出槽位、缩放、透明边、体积和消费者的唯一机器合同。
- `build-a01-scroll-skins.mjs``build_scroll_skins.py`Node 编排与 Pillow 确定性构建;构建会清除外缘绿边、浅色半透明脏边和透明 RGB 残留。
- 主/次按钮和弹窗按固定比例等比输出;Toast 输出可切片透明 PNG,由页面 `border-image` 承担自适应宽度。
- 弹窗采用带透明度表的索引 PNG 控制体积,质量门读取真实透明通道,不通过放宽阈值换取通过。
旧 schema v1 仍保留给现有 A01 预览流程;不得把它的 `fit: 'fill'` 规则复制到 v2 固定比例资产。
## 3. 资产分类与唯一落地方式
每个设计元素在 manifest 中只能属于以下一种主要类型:
| 类型 | `assetClass` | 正确落地 | 典型内容 |
| --- | --- | --- | --- |
| 代码原生 | `code-native` | Vue/SCSS | 布局、文字、间距、纯色、普通分隔线、状态与交互 |
| 固定比例位图 | `fixed-bitmap` | 精确槽位比例的 PNG/WebP,不允许变形 | 宗祠头图、复杂水墨、固定比例品牌视觉面 |
| 透明叠加资产 | `transparent-overlay` | 干净 RGBA PNG/WebP | Logo、印章、云纹、专用图标、结饰 |
| 可伸缩装饰框 | `nine-slice` | 经 H5/Android 验证的九宫格或等价组件 | 多宽度按钮框、卡片框、弹窗框 |
| 平铺纹理 | `tile-texture` | 明确的重复或覆盖策略 | 小尺寸宣纸纹、无方向噪声纹理 |
禁止:
- 把整页设计截图或局部页面截图直接裁入运行页面。
- 用 emoji、文本符号、临时第三方 SVG、CSS 拼画代替缺失的品牌装饰或图标。
- 同一资产既声明固定比例又在页面中随意拉伸。
- 未经 manifest 授权使用 `scaleToFill` 或 Sharp `fit: 'fill'`
- 把候选图、审阅图、runtime 截图或 `generated/` 中间文件当成唯一正式源。
## 4. 单一 manifest v2 合同
manifest 是资产生产、页面接入和质量验证的唯一机器可读所有者。建议结构:
```json
{
"schemaVersion": 2,
"page": "A01",
"assets": [
{
"id": "a01-primary-button-v2",
"assetClass": "fixed-bitmap",
"source": "static/assets/foundation/transparent/a01-primary-button-v2.png",
"output": "static/assets/foundation/transparent/a01-primary-button-v2.png",
"logicalSlot": {
"widthRpx": 622,
"heightRpx": 92
},
"outputPixels": {
"width": 1866,
"height": 276
},
"render": {
"scalePolicy": "uniform-only",
"uniMode": "aspectFit",
"allowDistortion": false
},
"alpha": {
"required": true,
"transparentOutsideFrame": true,
"cornerMaxAlpha": 0
},
"edge": {
"forbidChromaResidue": true,
"forbidLightFringe": true,
"premultipliedAlphaCheck": true
},
"quality": {
"maxBytes": 500000,
"symmetry": "horizontal",
"colorSpace": "sRGB"
},
"consumers": [
"pages/auth/a01-entry.vue"
]
}
]
}
```
正式实现时应为 schema v2 编写 JSON Schema 或等价的严格校验器。未知字段、缺失字段、越出工作区的路径、重复 ID 和未登记消费者都应尽早失败。
## 5. Node.js 与 Sharp 的职责
Node.js 是流水线编排层,继续复用当前 `design-pipeline/`
1. 解析并校验 manifest。
2. 检查路径只能位于工作区内。
3. 调用 Sharp 读取元数据、裁切、等比缩放、格式转换、压缩和预览组合。
4. 根据 `scalePolicy` 选择算法;`uniform-only` 禁止 `fit: 'fill'`
5. 扫描 Vue/SCSS 中的资产引用、`mode` 和显示槽位。
6. 检查资源比例与页面逻辑槽位比例,默认容差不超过 0.5%。
7. 禁止页面引用未进入 manifest 的新视觉资产。
8. 生成包含 SHA-256、尺寸、字节数、Alpha、消费者和检查结果的构建报告。
9. 使用现有 Chrome CDP 9222 对真实 H5 页面做尺寸、资源加载和局部截图验证。
Node/Sharp 不负责艺术判断,也不把代码组合预览当作用户验收证据。
## 6. Python 的职责
Python 是像素质量层,建议使用 Pillow;只有 Pillow 无法稳定完成的边缘分析再引入 OpenCV,避免不必要的重依赖。
职责:
1. 验证 PNG/WebP 解码、实际尺寸、通道数和 sRGB 色彩空间。
2. 检查透明角、外框外 Alpha、可见内容边界和空白边距。
3. 检测绿幕残留、异常高亮边缘和半透明脏边。
4. 对透明边缘执行去污染与正确的 Alpha 处理,避免 Android 缩放后出现白边或绿边。
5. 检查预乘 Alpha 风险;完全透明像素不得保留会渗出的异常 RGB。
6. 对要求对称的按钮和装饰框检查左右差异。
7. 生成局部边缘放大图、资产联系表和机器可读报告。
8. 质量不达标时返回非零退出码,禁止继续接入页面。
白边检测不能简单地“禁止白色”,因为次按钮内部可能本来就是暖白宣纸。检查必须只针对外框外区域、半透明边界和 manifest 声明的允许色板。
## 7. 资产生产流程
### 7.1 设计阶段
设计或 ImageGen 输出页面方向时,同时登记:
- 页面逻辑尺寸和目标视口。
- 组件边界与逻辑槽位。
- 哪些内容必须由代码渲染。
- 哪些内容需要独立透明资产。
- 哪些装饰允许伸缩以及不可伸缩安全区。
- 字体、字号、颜色和状态。
不接受只有一张扁平页面图而没有资产任务单的“最终设计”。
### 7.2 候选生产
1. 只有缺少完整位图资产时使用 ImageGen。
2. 输入图必须明确角色:编辑目标、风格参考或组合参考。
3. 生成内容不包含应由代码渲染的按钮文字、表单文字和状态文案。
4. 中间候选进入忽略目录,不覆盖正式资产。
5. 选择一个母图后再进入确定性处理;候选图不长期堆入仓库。
ImageGen 的艺术输出不能保证跨电脑逐像素复现。跨电脑可复现的是“已选择母图之后的处理、验证和页面接入”。需要长期重建的唯一母图必须进入受控正式路径或由最终资产本身承担稳定输入。
### 7.3 确定性处理
1. 按 manifest 裁切或补透明边距。
2. 以目标槽位比例导出 2×/3×文件。
3. 清理 Alpha、白边、绿边和异常 RGB。
4. 转为 sRGB,使用高质量等比缩放。
5. 输出新的版本化文件,不直接覆盖当前正式资产。
6. Python 质量门通过后,才允许更新页面引用。
### 7.4 页面接入
1. 先写或调整资产合同并看到预期失败。
2. 页面使用 manifest 指定的渲染模式。
3. 文字、图标和交互状态保持独立可访问节点。
4. 只在真正需要叠层的地方使用定位;普通内容保持正常布局流。
5. 禁止为了匹配截图而恢复错误比例或无依据的定位。
### 7.5 运行验证
最低验证层级:
1. manifest/schema 合同。
2. Python 像素质量检查。
3. Node/Sharp 构建和引用检查。
4. H5 Chrome 真实运行:320×568、360×640、360×800、412×915。
5. 一张代表图或一张复杂状态联系表。
6. Android/HBuilderX 真机或模拟器复核。
7. 用户明确逐页验收。
H5、自动截图差异、内部 smoke 和 GPT 审视都不能替代第 6、7 层。
## 8. 质量门槛
### 8.1 通用门槛
- 输出像素必须与 manifest 完全一致。
- 固定比例资产与逻辑槽位比例误差默认不超过 0.5%。
- `uniform-only` 资产不得出现非等比缩放。
- PNG 声明透明时必须真正包含 Alpha 通道。
- 声明透明角时,指定角点 Alpha 必须为 0。
- 禁止绿幕残留和未授权的浅色外缘。
- 文件必须为 sRGB;不得依赖另一台电脑上的专有字体、PSD 或本机临时目录。
- 体积超过 `maxBytes` 时失败,不通过降低清晰度或删除证据掩盖。
### 8.2 固定按钮门槛
- 图片中不包含按钮文字和微信图标。
- 外框之外透明,内部视觉面完整。
- 四角、双边和装饰连续,不得出现切口或拼接缝。
- 3×输出缩小到真实槽位后,金线仍连续且不过度发虚。
- 按钮点击区域由代码控制,不由图片透明区决定。
### 8.3 自动差异的边界
截图差异只比较同视口、同状态和同字体环境。字体抗锯齿、WebView 与 Chrome 的细小差异不能用单一全屏像素阈值判死刑;应优先比较资产局部裁图、尺寸、边缘和结构,再由人工判断整体视觉。
## 9. A01 卷轴祥云资产试点
流水线首先用两张 v2 按钮验证固定槽位,随后按用户选定方向升级为四件套 v3。当前 A01 实际引用:
- `a01-scroll-primary-v3.png``1866×276px`,登录主按钮。
- `a01-scroll-secondary-v3.png``1866×300px`,微信次按钮。
- `a01-scroll-toast-v3.png``1770×246px`,反馈 Toast 九宫格/切片表面。
- `a01-scroll-dialog-v3.png``1860×1560px`,安全验证弹窗表面。
当前 `a01-primary-button.png``a01-secondary-button.png` 的原始比例与页面槽位不一致,且次按钮外缘存在高亮白/浅绿色像素,不能作为新流水线质量样板。
本机 H5 试点结果:
- 四张 v3 输出通过尺寸、Alpha 外圈、透明 RGB、绿边、浅色半透明边、体积和色彩声明检查;旧资产和 v2 试点资产原样保留。
- A01 主/次按钮与弹窗使用 v3 路径和 `aspectFit`;Toast 使用 v3 切片资产;所有文字、微信图标和交互仍由页面代码独立承载。
- 自动质量门与 `320×568``360×640``360×800``412×915` H5 运行检查通过。
- 412×915 默认态、Toast 和验证弹窗真实运行截图未见原来的外缘白/浅绿边、角饰断裂或整体比例拉伸;仍需 Android/HBuilderX 与用户确认。
试点规则:
1. 保留当前资产,不覆盖、不删除。
2. 新资产使用版本化路径。
3. 先通过 Python/Node 自动质量门,再接入 A01。
4. 接入后只保存一张 412×915 代表图;四尺寸可以自动检查但不连续保存大量相似截图。
5. H5 通过只能写“内部候选”;Android 和用户确认之前,A01 仍为 `[~]`
6. 只有用户确认试点资产质量达到标准,才把 manifest v2 和混合流水线推广到其他页面。
## 10. 跨电脑环境合同
### G01 列表背景候选扩展
2026-07-16 已把混合流水线扩展到 G 模块公共背景。A/B/C 历史母版、旗舰长屏原稿、1536×3840 归一化母版、准确提示和处理模式保存在 `docs/design/assets/g01-background/masters/``design-pipeline/manifests/g01-background-candidates.json``build-g01-backgrounds.mjs` 使用 Node 内置模块编排,`build_g01_backgrounds.py` 使用锁定的 Pillow 完成绿幕转 Alpha、去绿边、不透明归一化、Lanczos 锁定尺寸缩放、sRGB 写入和确定性 PNG 输出。用户已选择旗舰长屏方向,清单以 `selectedCandidateId``runtimeOutput` 记录唯一运行方向;正式输出为 `static/assets/modules/genealogy/opaque/genealogy-page-background-long.png`G01、G03、G05、G06、G08、G09、G10、G11、G12 通过 `GenealogyPageBackground.vue` 共用。图片使用 `widthFix` 按页面宽度等比完整显示并固定贴底,左右不裁剪、不使用 `scaleToFill` 拉伸;1440×3600 长图覆盖当前最高压力档,不再拼接纯色上层。A/B/C 母版与旧 C 运行图仅作为历史输入/输出保留,不进入当前页面。
执行 `npm.cmd --prefix design-pipeline run build:g01-background-candidates` 可在另一台电脑从仓库母版重建 A/B/C 和旗舰长屏四个输出。模型重新生成不能保证逐像素一致;精确重建必须使用仓库内母版。完整步骤、当前哈希和质量基线见 `docs/design/G01_列表背景候选与换机重建.md`
### 10.1 当前已可运行的 Node 雏形
新电脑需要 Windows、Node.js 22 或更高版本、npm、HBuilderX、Chrome 和项目完整工作区。当前 Node 24 已验证可用。
```powershell
node --version
npm --version
npm.cmd ci --prefix design-pipeline
npm.cmd --prefix design-pipeline run build:a01
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a01-code-pipeline-contract.ps1
```
这些命令只证明现有 schema v1 雏形可运行,不证明新质量门已经实现。
### 10.2 manifest v2 的 Python 环境
`design-pipeline/` 已提供锁定依赖、统一 Node 入口和 Python 质量脚本;不得要求接管者凭经验安装不确定版本。当前结构:
```text
design-pipeline/
package.json
package-lock.json
requirements.txt
manifests/
scripts/
rebuild-a01-buttons.mjs
rebuild_a01_buttons.py
verify-assets.mjs
verify-assets.py
generated/ # 忽略,可再生成
```
恢复和验证命令:
```powershell
python --version
python -m venv design-pipeline/.venv
design-pipeline/.venv/Scripts/python.exe -m pip install --upgrade pip
design-pipeline/.venv/Scripts/python.exe -m pip install -r design-pipeline/requirements.txt
npm.cmd ci --prefix design-pipeline
npm.cmd --prefix design-pipeline run test:v2
npm.cmd --prefix design-pipeline run validate:a01-buttons
npm.cmd --prefix design-pipeline run rebuild:a01-buttons
npm.cmd --prefix design-pipeline run verify:assets
npm.cmd --prefix design-pipeline run validate:a01-scroll-skins
npm.cmd --prefix design-pipeline run build:a01-scroll-skins
npm.cmd --prefix design-pipeline run verify:a01-scroll-skins
design-pipeline/.venv/Scripts/python.exe -m unittest discover -s design-pipeline/tests -p "test_*.py" -v
```
Node 入口优先使用 `PYTHON` 环境变量,其次自动使用 `design-pipeline/.venv/Scripts/python.exe`,最后才回退到系统 `python`。本机已按以上依赖完成验证;跨电脑仍必须真实执行并保存输出,不能只因文件齐全就写成换机复现通过。
### 10.3 可迁移文件
至少保留:
- `design-pipeline/package.json`
- `design-pipeline/package-lock.json`
- 实施后新增的 Python 锁定依赖文件
- manifest、JSON Schema、构建/质量脚本和对应测试
- manifest 引用的正式资产
- 页面源码和真实截图工具
- 本规范、`docs/交接记录.md` 与 P00 资产台账
不得依赖:
- `node_modules/`
- Python 虚拟环境
- `design-pipeline/generated/`
- `tmp/`
- 本机 Chrome 用户目录
- Photoshop/PSD
- 未进入仓库的候选图或 runtime 截图
## 11. 失败处理
- 依赖安装失败:停止并报告缺失环境,不绕过锁文件。
- manifest 不合法:修正单一数据源,不在页面里增加例外。
- 比例不匹配:回到目标槽位或重新导出,禁止 `fill` 掩盖。
- 白边/绿边:回到 Alpha 去污染步骤,禁止用页面背景色遮盖。
- H5 与组合预览不同:以真实 H5 为准并查明差异。
- H5 与 Android 不同:不得冻结资产,记录 WebView/字体/缩放差异后修正。
- 自动检查通过但用户认为不好看:状态仍为待审核,视觉判断以用户最新决定为准。
## 12. 推广条件
以下条件全部满足后,才能从 A01 推广:
1. A01 四张 v3 卷轴祥云资产通过 manifest、Python、Node 和四尺寸检查。
2. 412×915 真实 H5 代表图没有白边、绿边、拉伸或模糊。
3. Android/HBuilderX 已复核。
4. 用户明确确认四件套资产质量和 A01 整页达到标准。
5. 新电脑按文档能够从锁文件恢复环境并得到一致的质量报告。
当前仅满足第 1、2 项;第 3、4、5 项尚未满足。因此本规范和 A01 试点仍不是整项目推广或用户验收完成证明。