# 小程序 11 个核心页面参考图重设计实施计划 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 严格按照小程序参考图重构 5 个 Tab 页面与 6 个服务页面,保留真实数据、业务不变量和 8 个固定首页入口。 **Architecture:** 先建立全局 Token、正式素材和公共页面骨架,再按 A/B/C 三组迁移页面。页面继续使用现有 stores/services/API;视觉组件只接收状态与数据,不在组件内推导权限或关系事实。 **Tech Stack:** 微信原生小程序、TypeScript/JavaScript、WXML、WXSS、Node.js contracts、微信开发者工具 **Spec:** `docs/superpowers/specs/2026-09-13-reference-driven-dual-client-ui-redesign-design.md` ## Global Constraints - 五个 Tab 固定为首页、找对象、消息、活动、我的。 - 首页 8 入口采用两行四列并保持正式顺序。 - 页面使用深靛蓝/紫色夜景、珊瑚粉、白色内容卡片的参考图语言。 - 不使用 Emoji、字符图标、CSS 拼图或临时占位资产。 - Mutual Match、Block、Required、Capability 和活动二阶段确认逻辑保持不变。 - 只重构已确认 11 页;次级详情页只保证入口与现有功能不被破坏。 --- ### Task 1: 建立 11 页范围与参考图契约 **Files:** - Create: `ui-tests/miniapp-reference-contracts.mjs` - Modify: `miniapp/app.json` - Modify: `miniapp/app.wxss` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: 11 个页面路径、五项 Tab 和 8 入口正式顺序。 - Produces: 对页面范围、Token、图标资源和关键结构的失败优先契约。 - [ ] **Step 1: 编写失败的核心契约** ```js import assert from 'node:assert/strict' import { existsSync, readFileSync } from 'node:fs' import { resolve } from 'node:path' const root = resolve(import.meta.dirname, '..') const read = (p) => readFileSync(resolve(root, p), 'utf8') const app = JSON.parse(read('miniapp/app.json')) const pages = ['index','discover','messages','activity','mine','matchmaker','counseling-intro','premarital-intro','content','anti-fraud','service-station'] assert.deepEqual(app.tabBar.list.map((i) => i.text), ['首页','找对象','消息','活动','我的']) for (const page of pages) { const base = `miniapp/pages/${page}/${page}` for (const ext of ['.json','.wxml','.wxss']) assert.ok(existsSync(resolve(root, base + ext)), `${page}${ext} 不存在`) assert.match(read(base + '.wxml'), /reference-page/, `${page} 未接入参考图页面骨架`) assert.doesNotMatch(read(base + '.wxml'), /[\u{1F300}-\u{1FAFF}]/u, `${page} 含 Emoji`) } const home = read('miniapp/pages/index/index.ts') for (const code of ['find_object','matchmaker','activities','counseling','classroom','premarital','anti_fraud','service_station']) assert.ok(home.includes(code)) console.log('Miniapp reference contracts passed') ``` - [ ] **Step 2: 运行契约确认失败** Run: `node ui-tests/miniapp-reference-contracts.mjs` Expected: FAIL,报告首个未接入 `reference-page` 的页面。 - [ ] **Step 3: 建立全局 Token** ```css page { --mini-night-start: #171d72; --mini-night-end: #4d268f; --mini-accent-pink: #ff4f91; --mini-accent-coral: #ff6678; --mini-card-bg: #ffffff; --mini-text: #1f2744; --mini-muted: #7d839b; --mini-card-radius: 24rpx; --mini-shadow: 0 12rpx 32rpx rgba(31, 25, 91, 0.12); } ``` - [ ] **Step 4: 校准 `app.json`** 保持 64 个现有页面注册和五项 Tab 路径不变;只更新全局背景、导航颜色和本轮正式图标路径,不删除非本轮页面。 - [ ] **Step 5: 提交契约与基础 Token** ```powershell npm --prefix miniapp run type-check git add -- ui-tests/miniapp-reference-contracts.mjs miniapp/app.json miniapp/app.wxss git commit -m "test: lock miniapp reference page scope" ``` ### Task 2: 制作正式素材与公共组件 **Files:** - Create: `miniapp/assets/brand/home-hero-v2.jpg` - Create: `miniapp/assets/service/matchmaker-hero.jpg` - Create: `miniapp/assets/service/counseling-hero.jpg` - Create: `miniapp/assets/service/premarital-hero.jpg` - Create: `miniapp/assets/service/anti-fraud-hero.jpg` - Create: `miniapp/assets/service/station-hero.jpg` - Create: `miniapp/assets/icons/home/*.png` - Modify: `miniapp/components/nav-bar/*` - Modify: `miniapp/components/section-header/*` - Modify: `miniapp/components/loading/*` - Modify: `miniapp/components/empty/*` - Modify: `miniapp/components/error-state/*` - Create: `miniapp/components/service-hero/index.{js,json,wxml,wxss}` - Test: `ui-tests/brand-assets.mjs` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: 参考图的夜景、人物、花朵、爱心和丹阳城市风格。 - Produces: `service-hero` 组件属性 `title/subtitle/imageSrc/tone` 和 8 个入口 PNG 图标。 - [ ] **Step 1: 扩展资产失败契约** 断言上述图片存在、尺寸非零、首页 8 图标不复用封面图、WXML 不使用 Emoji/字符图标。 - [ ] **Step 2: 按实际组件尺寸生成素材** 生成不含设备边框和不可编辑 UI 文字的独立图片;首页 Banner 使用横向夜景,服务页 Hero 保留人物或主题主体安全区。逐张检查风格一致、无乱码、无水印。 - [ ] **Step 3: 实现公共组件状态** `service-hero` 只负责图片与文案布局;Loading、Empty、Error 保持明确状态;`nav-bar` 适配胶囊按钮和安全区,不写业务权限。 - [ ] **Step 4: 验证并提交素材组件** ```powershell node ui-tests/brand-assets.mjs npm --prefix miniapp run type-check git add -- miniapp/assets miniapp/components ui-tests/brand-assets.mjs git commit -m "feat: add miniapp reference assets and primitives" ``` ### Task 3: A1 首页重构 **Files:** - Modify: `miniapp/pages/index/index.ts` - Modify: `miniapp/pages/index/index.json` - Modify: `miniapp/pages/index/index.wxml` - Modify: `miniapp/pages/index/index.wxss` - Modify: `miniapp/components/recommend-card/*` - Test: `ui-tests/phase07-home-contracts.mjs` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: `GET /home`、服务端 quickEntries/Capability、推荐、活动、服务站、课堂与安全数据。 - Produces: 固定模块顺序与 2×4 入口布局。 - [ ] **Step 1: 扩展首页失败契约** 断言 WXML 模块顺序为品牌状态、Banner、8 入口、今日推荐、公益服务、近期活动、服务站、课堂、安全提醒;断言 `processHomeData` 不改变服务端 `enabled/disabledReason`。 - [ ] **Step 2: 运行契约确认失败** ```powershell node ui-tests/phase07-home-contracts.mjs node ui-tests/miniapp-reference-contracts.mjs ``` Expected: 至少一个新结构或视觉断言失败。 - [ ] **Step 3: 实现首屏和 8 入口** 参考图还原紫蓝品牌区、夜景 Banner、白色浮层入口卡和紧凑推荐卡;入口固定两行四列。服务端返回入口时按固定 code 排序,不允许运营重排。 - [ ] **Step 4: 完成状态和真实操作** 保留未登录、准入、审核中、暂停、成功牵手、空推荐、错误重试;Like/Pass 必须调用现有 service,删除当前 `setTimeout` 演示反馈。 - [ ] **Step 5: 验证并提交首页** ```powershell node ui-tests/phase07-home-contracts.mjs node ui-tests/miniapp-reference-contracts.mjs npm --prefix miniapp run type-check git add -- miniapp/pages/index miniapp/components/recommend-card git commit -m "feat: recreate miniapp home from reference" ``` ### Task 4: A2 找对象与消息重构 **Files:** - Modify: `miniapp/pages/discover/discover.{ts,json,wxml,wxss}` - Modify: `miniapp/pages/messages/messages.{js,json,wxml,wxss}` - Modify: `miniapp/components/user-card/*` - Modify: `miniapp/components/conversation-item/*` - Test: `ui-tests/miniapp-reference-contracts.mjs` - Test: `ui-tests/phase06-match-eligibility-contracts.mjs` **Interfaces:** - Consumes: `recommendationService`、筛选状态、messageStore、Mutual Match/Block 后端结果。 - Produces: 参考图人物列表、胶囊筛选、消息分类和会话列表。 - [ ] **Step 1: 添加失败断言** 断言找对象页包含 `discover-filter-chips`、`candidate-list`;消息页包含 `message-shortcuts`、`conversation-list`、未读徽标和无 Mutual 状态。 - [ ] **Step 2: 实现找对象页** 保持 Required 筛选语义,卡片展示头像、年龄、本地信息、职业、认证和兴趣;喜欢/忽略调用现有服务;Block 用户不在前端临时过滤后又可被搜索恢复。 - [ ] **Step 3: 实现消息页** 顶部四项为新朋友、互动喜欢、我的关注、系统通知;列表展示头像、摘要、时间和未读数;只有服务端允许的 Mutual Match 会话可进入聊天。 - [ ] **Step 4: 验证并提交** ```powershell node ui-tests/phase06-match-eligibility-contracts.mjs node ui-tests/miniapp-reference-contracts.mjs npm --prefix miniapp run type-check git add -- miniapp/pages/discover miniapp/pages/messages miniapp/components/user-card miniapp/components/conversation-item git commit -m "feat: redesign discovery and messages tabs" ``` ### Task 5: A3 活动与我的重构 **Files:** - Modify: `miniapp/pages/activity/activity.{js,json,wxml,wxss}` - Modify: `miniapp/pages/mine/mine.{js,json,wxml,wxss}` - Modify: `miniapp/components/activity-card/*` - Modify: `miniapp/components/avatar/*` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: activityStore、userStore、matchStore 和现有路由。 - Produces: 活动大图卡、报名状态、个人统计和五项服务入口。 - [ ] **Step 1: 添加失败断言** 断言活动页有分类、日历、人数/容量、状态按钮;我的页有个人头部、四项统计、公益身份卡、红娘/咨询/活动/预约/设置入口。 - [ ] **Step 2: 实现活动页** 活动卡展示真实时间、地点、适龄范围、人数和状态;报名按钮进入现有报名流程。不得在活动列表直接创建 Match 或聊天。 - [ ] **Step 3: 实现我的页** 未登录显示登录引导;登录态展示真实资料和统计;敏感数据不出现在页面摘要;设置和各服务入口保持现有路由。 - [ ] **Step 4: 验证 A 组并提交** ```powershell node ui-tests/miniapp-reference-contracts.mjs npm --prefix miniapp run type-check git add -- miniapp/pages/activity miniapp/pages/mine miniapp/components/activity-card miniapp/components/avatar git commit -m "feat: redesign activity and profile tabs" ``` Expected: 五个 Tab 均可打开且主要交互有效;暂停等待 A 组人工验收。 ### Task 6: B 组公益红娘、婚恋咨询、婚前辅导 **Files:** - Modify: `miniapp/pages/matchmaker/matchmaker.{js,json,wxml,wxss}` - Modify: `miniapp/pages/counseling-intro/counseling-intro.{ts,json,wxml,wxss}` - Modify: `miniapp/pages/premarital-intro/premarital-intro.{ts,json,wxml,wxss}` - Modify: `miniapp/components/matchmaker-card/*` - Modify: `miniapp/styles/service-page.wxss` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: matchmakerStore、咨询/辅导 API、Capability 和现有申请路由。 - Produces: 三个参考图服务首页及真实申请/预约入口。 - [ ] **Step 1: 添加 B 组失败断言** 断言三个页面使用 `service-hero`;红娘页包含免费服务/真实匹配/隐私保护与申请状态;咨询和辅导页包含四个主题、预约按钮和服务状态。 - [ ] **Step 2: 实现公益红娘** 展示公益说明、申请状态、红娘资料和服务记录;所有推荐仍由用户本人决定,页面不得出现代 Like 操作。 - [ ] **Step 3: 实现咨询与辅导** 咨询与红娘数据模型分离;咨询正文不在介绍页加载;预约按钮进入现有申请页;Capability 禁用时显示服务端原因。 - [ ] **Step 4: 验证 B 组并提交** ```powershell node ui-tests/miniapp-reference-contracts.mjs npm --prefix miniapp run type-check git add -- miniapp/pages/matchmaker miniapp/pages/counseling-intro miniapp/pages/premarital-intro miniapp/components/matchmaker-card miniapp/styles/service-page.wxss git commit -m "feat: redesign public relationship services" ``` Expected: 自动化 PASS;暂停等待 B 组人工验收。 ### Task 7: C 组婚恋课堂、婚恋反诈、善缘服务站 **Files:** - Modify: `miniapp/pages/content/content.{js,json,wxml,wxss}` - Modify: `miniapp/pages/anti-fraud/anti-fraud.{js,json,wxml,wxss}` - Modify: `miniapp/pages/service-station/service-station.{js,json,wxml,wxss}` - Modify: `miniapp/styles/service-page.wxss` - Test: `ui-tests/miniapp-reference-contracts.mjs` **Interfaces:** - Consumes: 内容、反诈和服务站 API;微信位置与电话接口。 - Produces: 参考图内容列表、安全页和服务站卡片。 - [ ] **Step 1: 添加 C 组失败断言** 断言课堂页有分类和内容列表;反诈页有四类风险与举报/求助入口;服务站页有地址、电话、开放时间、服务项目、定位和预约。 - [ ] **Step 2: 实现课堂与反诈页** 课堂列表展示真实封面、标题、浏览量和发布日期;反诈页使用明确警示但保持温和公益表达;举报入口进入现有举报页面。 - [ ] **Step 3: 实现服务站页** 站点数据为空时显示区域空状态;电话使用 `wx.makePhoneCall`;位置使用 `wx.openLocation`,不依赖 Google Maps;预约进入现有服务预约页。 - [ ] **Step 4: 验证 C 组并提交** ```powershell node ui-tests/miniapp-reference-contracts.mjs npm --prefix miniapp run type-check git add -- miniapp/pages/content miniapp/pages/anti-fraud miniapp/pages/service-station miniapp/styles/service-page.wxss git commit -m "feat: redesign content safety and service station pages" ``` Expected: 自动化 PASS;暂停等待 C 组人工验收。 ### Task 8: 微信开发者工具与逐屏视觉 QA **Files:** - Create: `artifacts/ui-redesign/miniapp/01-home.png` 至 `11-service-station.png` - Create: `artifacts/ui-redesign/miniapp/reference-comparisons/` - Create: `docs/MINIAPP_REFERENCE_UI_QA_2026-09-13.md` - Modify: 仅 QA 发现差异的本轮页面和公共组件 **Interfaces:** - Consumes: 微信开发者工具中的真实编译页面和小程序参考图。 - Produces: 11 页截图、对比图、交互检查与剩余差异记录。 - [ ] **Step 1: 在微信开发者工具重新编译** 确认 TypeScript 编译插件启用;清除旧编译缓存后重新编译。控制台不得出现 WXML、WXSS、组件路径或页面注册错误。 - [ ] **Step 2: 验证五项 Tab 和 11 页入口** 逐个检查 Tab 切换、8 个首页入口、Like/Pass、会话进入、活动报名、红娘申请、咨询预约、辅导预约、课堂详情、举报、电话、定位和服务预约。 - [ ] **Step 3: 验证异常状态** 检查未登录、Loading、空数据、网络失败、无权限、Capability 禁用、Block、无 Mutual Match、审核中和提交失败状态。 - [ ] **Step 4: 截图并对比** 使用同一设备基线截取 11 页,逐页检查顶部高度、卡片圆角、图片比例、按钮尺寸、标签密度、底部安全区和参考图视觉语言。 - [ ] **Step 5: 修复 P0/P1/P2 差异并复测** 每次修复后重新编译和截图;报告不得在仍有 P0/P1/P2 时写 `passed`。 - [ ] **Step 6: 运行最终自动化门禁** ```powershell node ui-tests/miniapp-reference-contracts.mjs node ui-tests/phase03-verification-contracts.mjs node ui-tests/phase04-local-eligibility-contracts.mjs node ui-tests/phase06-match-eligibility-contracts.mjs node ui-tests/phase07-home-contracts.mjs npm --prefix miniapp run type-check git diff --check ``` Expected: 全部退出码为 0。 - [ ] **Step 7: 提交 QA 证据** ```powershell git add -- artifacts/ui-redesign/miniapp docs/MINIAPP_REFERENCE_UI_QA_2026-09-13.md miniapp git commit -m "test: verify miniapp reference UI fidelity" ``` Expected: 11 页截图和报告齐全;等待用户最终验收。