# A-01 启动/登录引导页 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use `superpowers:executing-plans` to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 新增不接接口的 A-01 登录方式选择页,以账号密码为主入口,并要求用户主动勾选协议后才允许进入已设计完成的下一页。
**Architecture:** A-01 使用独立的 `pages/auth/entry.vue`,不改动现有 `pages/auth/login.vue` 的临时密码登录骨架,避免破坏现有核心流程合同。页面状态只包含 `consented` 和点击守卫;视觉由现有本地纸纹、朱砂红头、祠堂线描与山水资产组合,微信图标以本地透明 PNG 引入。A-02/A-03 的最终跳转仅在两页都完成设计并注册路由后接通。
**Tech Stack:** uni-app、Vue 3 `
```
本任务阶段不得引入 `appApi`、`calcMD5`、真实登录、真实微信授权或不存在的 A-02/A-03 路由;跨页跳转在 Task 5 的执行门槛满足后替换。
- [ ] **Step 3: 写入页面主体,保持三种入口与显式复选框**
```vue
家谱为家族留存可传承的记忆
我已阅读并同意《用户协议》与《隐私政策》
```
- [ ] **Step 4: 完成最小 SCSS 外观**
要求:用 `background-image` 组合 `header-cinnabar-texture-v2.jpg`、`paper-rice-texture-v2.jpg`;红头可见祠堂线描;纸面底部可见但低对比的 `footer-mountain-bamboo.png`;按钮高度至少 `88rpx`;不使用 CSS Grid、`gap`、`clip-path`、滤镜或外部 URL。协议区域不得使用“登录即表示同意”文案,未选中复选框只显示古金圆圈,选中后显示朱砂对勾。
- [ ] **Step 5: 运行合同测试,确认通过**
Run: `powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1`
Expected: `PASS A-01 login guide contract`.
- [ ] **Step 6: 做一次静态构建健康检查**
Run: `powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1`
Expected: `PASS compile audit`.
- [ ] **Step 7: 提交独立 A-01 页面**
```powershell
git add pages/auth/entry.vue pages.json tests/a01-login-guide-contract.ps1
git commit -m "feat: add A01 login guide"
```
### Task 4: 视觉验收与设计状态记录
**Files:**
- Modify: `docs/规划.md`
- Test: `tests/a01-login-guide-contract.ps1`, HBuilderX Android 小屏预览
**Interfaces:**
- Consumes: Task 3 完成的页面与合同
- Produces: D2 阶段下 A-01 的真实设计状态
- [ ] **Step 1: 在 HBuilderX 中预览 `pages/auth/entry` 的 `360 × 800dp` 画面**
检查:红头、标题、三个按钮和未勾选协议同时可见;账号密码为唯一红色主操作;宣纸与山水不压住协议;没有底部 Tab。
- [ ] **Step 2: 手动验证两种协议状态**
1. 初始未勾选,分别点击三个入口,均显示“请先阅读并同意相关协议”,且不跳转。
2. 勾选后复选框显示朱砂对勾;三个入口只显示本地确认提示,不请求网络。
- [ ] **Step 3: 仅在上述视觉和手动检查通过后更新 `docs/规划.md`**
将 `A-01 启动 / 登录引导页` 改为“视觉完成(已验收)”;D2 保持“进行中”,因为 A-02 至 A-06 尚未完成。
- [ ] **Step 4: 重跑最终验证**
Run:
```powershell
powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1
powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1
powershell -ExecutionPolicy Bypass -File tests\uni-scss-injection.ps1
```
Expected: 三条命令均输出 `PASS`.
- [ ] **Step 5: 提交验收记录**
```powershell
git add docs/规划.md
git commit -m "docs: mark A01 visual review"
```
### Task 5: D2 跨页设计完成后的路由接通(执行门槛任务)
**Precondition:** A-02 与 A-03 的设计说明、页面文件和 `pages.json` 路由均已通过各自视觉验收;否则此任务不得开始。
**Files:**
- Modify: `pages/auth/entry.vue`
- Test: `tests/a01-login-guide-contract.ps1`(扩展路由断言)
**Interfaces:**
- Consumes: A-02 的已验收密码页路由;A-03 的已验收验证码/微信回跳页路由
- Produces: `entryRoutes`,键固定为 `password`、`phone`、`wechat`
- [ ] **Step 1: 扩展合同,要求所有目标路由已在 `pages.json` 注册**
```powershell
foreach ($route in @('pages/auth/password-login', 'pages/auth/phone-login')) {
if ($route -notin $paths) { throw "Missing approved auth target route: $route" }
}
```
- [ ] **Step 2: 将 Task 3 的本地确认提示替换为唯一的目标映射**
```js
const entryRoutes = {
password: '/pages/auth/password-login',
phone: '/pages/auth/phone-login',
wechat: '/pages/auth/phone-login?source=wechat'
}
const enterLogin = (entry) => {
if (!consented.value) {
uni.showToast({ title: '请先阅读并同意相关协议', icon: 'none' })
return
}
uni.navigateTo({ url: entryRoutes[entry] })
}
```
模板调用固定为 `enterLogin('password')`、`enterLogin('phone')`、`enterLogin('wechat')`。不得在 A-01 增加任何接口调用或注册入口。
- [ ] **Step 3: 运行合同和 A-02/A-03 各自的视觉合同**
Run: `powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1`
Expected: `PASS A-01 login guide contract`.
- [ ] **Step 4: 提交跨页接通**
```powershell
git add pages/auth/entry.vue tests/a01-login-guide-contract.ps1
git commit -m "feat: connect A01 auth routes"
```
## Self-Review
- **规格覆盖:** Task 1 和 Task 3 覆盖三入口、主次层级、本地资产、无接口和显式协议;Task 4 覆盖小屏视觉与两种协议状态;Task 5 覆盖 A-02/A-03 的跳转契约且被 D2 设计完成门槛锁住。
- **占位检查:** 没有未落实的实现步骤。Task 2 的来源 URL 是执行时取得的审计事实;没有可验证来源即停止该任务,不得提交资产。
- **命名一致性:** 页面状态固定为 `consented`,守卫固定为 `enterLogin`,跨页唯一映射固定为 `entryRoutes`;Task 1 与 Task 5 的测试和实现使用同一命名。