Files
jiapuapp/docs/superpowers/plans/2026-07-14-a02-agreement-control.md
T
2026-07-14 17:36:43 +08:00

5.8 KiB
Raw Blame History

A02 协议确认控件实施计划

现行范围更新:A03 已于 2026-07-14 删除;验证码登录归 A02,绑定手机号归个人中心,微信异常归 A06。历史方案不再作为实现依据。

For agentic workers: 本计划由当前根代理内联执行;用户明确禁止 worktree、子代理、Git 暂存、提交、推送与上传。步骤以复选框追踪。

Goal: 在不改变 A01 可见效果的前提下,让 A02 在当前页提供可见、可操作的协议确认并以其状态拦截登录提交。

Architecture: A02 页面本地 agreed 状态是提交前协议状态的唯一所有者,A01 的 agreed=1 只用于初始化。两个 96 × 96 的透明 PNG 负责未选中和选中图标,Vue 负责可点击行、文字、链接与状态切换;不新增协议正文路由。

Tech Stack: Vue 3 <script setup>、uni-app、SCSS、PowerShell 契约审计、ImageGen、Chrome DevTools 截图。

Global Constraints

  • A01、G01 可见效果冻结;本轮不触碰 A01。
  • 完整视觉图标使用真实透明 PNG;不以 CSS 圆环、勾号、伪元素或文本符号替代。
  • 先写并运行失败的最小契约,再生成资产或修改页面。
  • 不修改 A04--A06,不新增业务接口、协议路由、依赖或 Git 操作。
  • A02 已获用户视觉验收,保持可见效果冻结。

Task 1: 固化 A02 协议与资产合同

Files:

  • Modify: tests/a01-a02-ui-contract.ps1

  • Modify: tests/a02-asset-alpha-audit.ps1

  • Step 1: 写失败的 UI 合同。

加入以下锚点:agreement-rowagreement-icon、两枚 A02 协议图标路径、const agreed = ref(false)onLoad/onShow、H5 location.hash 与 Android 页面选项的路由同步、toggleAgreement请先阅读并同意相关协议。拒绝旧提示 请先在登录引导页阅读并确认协议 与 A02 协议图标的 CSS borderbackground、伪元素。

  • Step 2: 运行 UI 合同并确认红灯。

运行:powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a01-a02-ui-contract.ps1

预期:因 A02 尚无协议行和图标锚点而失败。

  • Step 3: 写失败的资产审计。

tests/a02-asset-alpha-audit.ps1 对两枚 static/assets/modules/auth/transparent/a02-agreement-*.png 逐个验证:存在、96 × 96、System.Drawing.Image.IsAlphaPixelFormat 为真、四角 Alpha 为 0,且至少一个像素 Alpha 为 255。

  • Step 4: 运行资产审计并确认红灯。

运行:powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a02-asset-alpha-audit.ps1

预期:因两枚协议图标尚不存在而失败。

Task 2: 生成并接入透明协议状态资产

Files:

  • Create: static/assets/modules/auth/transparent/a02-agreement-unchecked.png

  • Create: static/assets/modules/auth/transparent/a02-agreement-checked.png

  • Modify: pages/auth/a02-login.vue

  • Step 1: 生成未选中与选中图标。

用 ImageGen 参考 A02 运行截图生成两枚不含文字的圆形古金协议图标:未选中为细古金圆环,选中为朱砂圆印内白色对勾。先用平坦色键背景生成,再移除为透明 PNG;不得保留背景、阴影、边框或水印。

  • Step 2: 仅在资产审计通过后实施 A02。

模板将旧 agreement-reminder 换为可点击 agreement-row,内部按 agreed 切换两枚 agreement-icon 图片;协议文字链接调用 prepareAgreement 并停止行点击。脚本以 agreed 替代 agreedFromEntry,并在 onLoad/onShow 同步 H5 当前 hash 或 Android 当前页面选项;canSubmit 只判断本页状态。样式只做行尺寸、排版与状态可见性,不画图标。

  • Step 3: 运行绿灯合同。

运行:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a02-asset-alpha-audit.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/a01-a02-ui-contract.ps1

预期:两个脚本均输出 PASS

Task 3: 记录并做运行验证

Files:

  • Modify: docs/design/P00_页面结构与资产清单.md

  • Modify: docs/design/A02_账号登录_设计记录.md

  • Modify: design-qa.md

  • Create: docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png

  • Create: docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png

  • Create: docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png

  • Create: docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png

  • Create: docs/design/screens/runtime/2026-07-14/A02-agreement-checked-360x800.png

  • Step 1: 更新事实台账。

在 P00 登记两枚图标的路径、96 × 96 尺寸、transparent 属性、A02 引用位置与保留状态;设计记录和 QA 仅写本轮交互与运行截图,最终状态保持 blocked

  • Step 2: 截取并检查两种状态。

使用专用 Chrome 9222 捕获 A02 直接进入的 320×568、360×640、360×800、412×915 未选中状态,以及 ?agreed=1 的 360×800 选中状态;逐张打开检查,不接受复用状态、黑块、加载态、裁切或错误图。后续补充的注册入口已在新文档 360×800、412×915 截图中复核。

  • Step 3: 运行受影响验证。

运行:

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/a02-register-entry-contract.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/capture-chrome-page-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

预期:所有脚本 PASSgit diff --check 没有真实空白错误。