feat: 小程序端 UI 优化与纯客户端化改造

- 移除微信订阅推送功能(云函数/订阅管理页),回归纯客户端零后端架构
- 新增今日黄历默认展示卡片 TodayAlmanacCard(9 语言翻译)
- i18n 修复:启用 globalInjection 修复 $t 未注入,插值消息全部改为
  Messages Functions 适配小程序端(63 处)
- 修复底部导航切换失效与运势页数据不刷新
- 统一设计令牌(深褐主色 + 印红强调色),组件 UI 规范重构
- 图标 iconfont 化(FontAwesome 子集化,修复 Android 豆腐块)
- 新增 postcss-px2rpx 机型自适应(仅 mp-weixin 构建生效)
- 新增 5 个用户旅程 E2E 测试(31 用例)与验收报告
- 补充微信小程序项目配置(appid)
This commit is contained in:
2026-08-28 07:51:02 +08:00
parent de11398720
commit 810081ac0a
72 changed files with 2242 additions and 1468 deletions
+46 -10
View File
@@ -104,8 +104,9 @@ npm run test:e2e
本应用采用纯客户端架构,核心特征:
- **零网络请求**:所有算法(紫微斗数排盘、黄历计算、运势推演)均在客户端本地执行
- **零后端依赖**:无 API 调用、无数据库、无服务器
- **零后端依赖**:无 API 调用、无数据库、无服务器(含云函数)
- **本地存储**:用户数据通过 `uni.getStorageSync/setStorageSync` 存储在设备本地
- **无订阅推送**:纯客户端版本不依赖微信订阅消息 / 云函数,订阅管理功能已在纯客户端迁移中移除
- **离线可用**manifest.json 中 INTERNET 权限设为 false,无需网络即可使用全部功能
- **隐私安全**:用户数据不离开设备,无需注册账号
@@ -129,17 +130,52 @@ npm run test:e2e
### 当前状态:v1.0.0 封版完成 ✅ (最终验收测试通过)
> 更新日期: 2026-08-13
> 更新日期: 2026-08-18 (用户旅程测试补充,封版依据强化)
### 用户旅程测试(本次新增)
基于真实用户使用流程新增 **5 个用户旅程、31 个旅程用例**`e2e/journeys/`),作为封版依据:
| 旅程 | 优先级 | 覆盖步骤 | 用例数 |
|------|--------|----------|--------|
| J-ZIWEI 紫微排盘完整旅程 | Critical | 表单→日期/时辰→性别→出生地识别→排盘→宫位→三方四正→总结 | 7 |
| J-ALMANAC 黄历吉日搜索旅程 | Critical | 模板搜索→手动条件→天数→结果→排序 | 6 |
| J-FORTUNE 运势分析旅程 | Common | 排盘持久化→跨页→日运→日期切换→月运 | 6 |
| J-SUBSCRIBE 订阅管理旅程 | Common | 状态→时间选择→保存→取消订阅弹窗 | 6 |
| J-NAV 跨页导航与状态保持 | Edge | 底部导航切换→往返→数据跨页保持 | 6 |
**旅程测试发现并修复 2 个真实缺陷(P1):**
1. **底部导航切换失效**`BottomNavigation``tabs.find` 应为 `tabs.value.find`computed ref 未解包),导致三大功能页无法通过底部导航切换
2. **运势页排盘数据不刷新**`fortune` 页仅用 `onMounted` 加载排盘数据,用户"先看运势→排盘→返回"时页面实例被缓存、数据不更新,已改为 `onShow` 刷新
**小程序端验收发现并修复 1 个 P0 缺陷:**
3. **全部页面异常($t is not a function**`createI18n` 使用 `legacy: false` 但缺少 `globalInjection: true`,导致小程序端模板 `$t` 未注入、所有页面渲染中断(报 `TypeError: a.$t is not a function`)。已在 `src/locales/index.ts` 显式启用 `globalInjection: true`vue-i18n v9 官方要求),并新增防回归测试(TC-I18N-010
**小程序端验收发现并修复 1 个 P0 缺陷(插值失效):**
4. **全部插值文案失效({count} 字面量)**:uni-app 平台限制——小程序/App 端不支持 `{variable}` 字符串插值。已将 9 种语言共 63 处插值消息全部改为 **Messages Functions**`({ named }) => ...`),并新增插值行为防回归测试
**新增功能:今日黄历默认展示(2026-08-18)**
- 进入黄历搜索页默认展示**今日黄历**卡片(公历/农历/值神/吉神/宜忌/冲煞/纳音/胎神/彭祖百忌),组件:`src/components/TodayAlmanacCard/`
- 新增 9 种语言 `almanac.*` 翻译 keytodayTitle/lunarDate/jianChu 等 10 项)
**UI 层级验收发现并修复 1 个 P1 UI 缺陷(2026-08-19):**
5. **排盘页/运势页缺失底部导航**:三个 tab 页中仅黄历页有 `BottomNavigation`,用户切换到排盘/运势页后无法再通过底部导航切换。已在 `pages/ziwei/index.vue``pages/fortune/index.vue` 补上,并在 `navigation-journey.spec.ts` 增加目标页底部导航回归断言
**小程序端体验优化(2026-08-19):**
6. **px→rpx 机型自适应**:源码 97% 样式用 px(小程序端固定像素、不随机型缩放)。已通过 `postcss-px2rpx`(仅 mp-weixin 构建生效,H5 保持 px)将构建产物 px 占比降至 4.3%,布局/字体随机型等比缩放
7. **图标 iconfont 化(修复豆腐块)**:原 Icon 用 Unicode 冷门符号(⌕ ◷ ⏱ 等),Android 微信可能显示为豆腐块。已改为 FontAwesome 子集化图标字体(`scripts/iconfont-build.py` 生成,仅 3KB/36 图标,@font-face base64 内联),跨端可靠渲染
运行命令:`npm run test:journeys`(chromium 基线,跨浏览器兼容由既有 E2E 覆盖)
### 验收标准对照
| 标准 | 阈值 | 实际值 | 状态 |
|------|------|--------|------|
| 单元测试通过率 | ≥ 90% | **100%** (689/689) | ✅ |
| 代码覆盖率 (指令) | ≥ 70% | **90.24%** | ✅ |
| 单元测试通过率 | ≥ 90% | **100%** (692/692) | ✅ |
| 代码覆盖率 (指令) | ≥ 70% | **90.36%** | ✅ |
| 代码覆盖率 (函数) | ≥ 70% | **94.18%** | ✅ |
| 代码覆盖率 (分支) | ≥ 60% | **77.62%** | ✅ |
| E2E 核心流程通过率 | ≥ 80% | **100%** (156/156) | ✅ |
| 代码覆盖率 (分支) | ≥ 60% | **77.82%** | ✅ |
| E2E 核心流程通过率 | ≥ 80% | **100%** (160/160) | ✅ |
| 算法交叉验证 | 100% | **100%** | ✅ |
| 算法执行时间 | < 500ms | **全部 < 200ms** | ✅ |
| 页面加载时间 | < 3s | **~1.7s** | ✅ |
@@ -150,10 +186,10 @@ npm run test:e2e
### 测试结果
- **单元测试**: 689/689 通过 (100%),35 个测试文件,执行时间 5.5s
- **单元测试**: 692/692 通过 (100%),35 个测试文件,执行时间 7.6s
- **专项测试**: 55/55 通过 (性能测试 15 + 并发负载 4 + 安全测试 12 + 国际化验证 9 + 稳定性 4 + E2E 性能 5 + E2E 安全 4 + E2E 兼容 3)
- **E2E 测试**: 156/156 通过 (100%),覆盖 Chromium/WebKit/Mobile Chrome/Mobile Safari 4 种浏览器 × 39 个用例
- **覆盖率**: 整体 90.24%,其中算法层 93.97%,服务层 92.68%,工具层 90.35%
- **E2E 测试**: 160/160 通过 (100%),覆盖 Chromium/WebKit/Mobile Chrome/Mobile Safari 4 种浏览器 × 40 个用例
- **覆盖率**: 整体 90.36%,其中算法层 94.19%,服务层 92.68%,工具层 90.35%
- **性能**: 算法执行均 < 200ms,页面加载均 < 2s,长时间使用无退化
- **安全**: 12 项安全验证全部通过,无 XSS 风险,网络权限严格受限
- **国际化**: 9 种语言键值完整一致
@@ -166,7 +202,7 @@ npm run test:e2e
- [ ] 补充 `fortuneService.ts` 覆盖(当前 72%
- [ ] 逐步消除代码中 `as any` 类型断言
- [ ] 在 CI 标准环境中启用 Firefox 浏览器测试 (当前沙箱环境兼容性限制)
- [ ] 修复微信小程序构建问题 (`@dcloudio/vite-plugin-uni` v3 alpha 兼容性限制)
- [ ] 修复微信小程序构建问题 (`@dcloudio/vite-plugin-uni` v3 alpha 兼容性限制)**已修复,当前构建成功**
- [ ] 修复 Ziwei 页面测试 i18n locale 配置 (zh → zh-CN)
> 详细测试报告见: [docs/reports/v1.0.0-FINAL-ACCEPTANCE-REPORT.md](docs/reports/v1.0.0-FINAL-ACCEPTANCE-REPORT.md)