fix(mp): 小程序页面优化 + E2E 测试报告更新

- 小程序各页面优化和修复
- 更新联调报告和 E2E 测试报告
- 更新 miniprogram wiki
This commit is contained in:
iven
2026-05-15 23:03:21 +08:00
parent ced1c0ad0c
commit c06e986090
24 changed files with 905 additions and 441 deletions

View File

@@ -689,12 +689,28 @@ MCP 无法模拟微信 OAuth`Taro.login()` 返回的 code 走真实微信 `js
**原理:** 以 dev 模式重编译(空加密密钥),通过 MCP 的 `inject_auth` 工具自动完成:获取 admin token → evaluate 注入 storage → reLaunch 首页。
**auth store restore() 读取的 storage key关键**
| Storage Key | 说明 | restore() 读取方式 |
|-------------|------|-------------------|
| `access_token` | JWT access token | `secureGet('access_token')` |
| `refresh_token` | JWT refresh token | `secureGet('refresh_token')` |
| `user_data` | 用户 JSONid/username/display_name/phone/tenant_id | `secureGet('user_data')` → JSON.parse |
| `user_roles` | 角色数组 JSON`["admin","doctor"]` | `secureGet('user_roles')` → JSON.parse |
| `tenant_id` | 租户 ID | `secureGet('tenant_id')` |
| `current_patient` | 当前患者对象(含 id/name/phone | `Taro.getStorageSync('current_patient')` |
| `current_patient_id` | 当前患者 ID | `Taro.getStorageSync('current_patient_id')` |
> ⚠️ `secureGet` 在 dev 模式(空加密密钥)下等同于 `wx.getStorageSync`。生产模式下使用 XOR 混淆。
> ⚠️ 简单的 `wx.setStorageSync('token', jwt)` **不会生效** — auth store 的 `restore()` 不读取 `token` key它读取的是 `access_token`(通过 `secureGet`/`secureSet`)。必须使用 `inject_auth` 工具或手动调用 `wx.setStorageSync('access_token', jwt)` + `wx.setStorageSync('user_data', JSON.stringify({...}))` 等。
```
1. 准备:确保已按 §6.1 以 dev 模式构建,且已连接 MCPconnect
2. 调用 inject_auth 工具(默认参数即可):
- 自动 POST /auth/login 获取 admin token
- 通过 evaluate() 注入 access_token / refresh_token / user_data / tenant_id / patient_id
- 通过 evaluate() 注入 access_token / refresh_token / user_data / user_roles / tenant_id / current_patient_id
- reLaunch 到 /pages/index/index
- 等待 2 秒后返回当前页面路径
@@ -907,6 +923,7 @@ node scripts/audit-pages.mjs --role doctor --batch-size 8
| 日期 | 变更 |
|------|------|
| 2026-05-15 | **MCP 联调 auth 注入踩坑**§6.4 补充 auth store restore() 读取的 7 个 storage key 精确映射表;明确 `wx.setStorageSync('token')` 不生效auth store 读取的是 `access_token` via secureGet补充 inject_auth 注入的完整 key 列表 |
| 2026-05-15 | **五专家组最终审查**:架构 7.5 + 性能 8.0 + 安全 7.5 + 工程 7.5 + UX 6.5 = 综合 7.4/10(B);发现 HIGH×15 + MEDIUM×25核心问题隐私政策与实际不一致、8 页面绕过 patientId 架构、测试覆盖不足10 service + 4 store + 8 hook 零测试)、触摸反馈缺失;详细报告见 `docs/discussions/2026-05-15-miniprogram-final-audit-five-experts.md` |
| 2026-05-15 | **架构重构 P3长轮询通用化 useLongPolling**:抽取 `useLongPolling` hookgeneration counter + useDidShow/Hide 可见性 + 失败退避 + enabled 守卫);患者端 + 医生端 consultation/detail 接入,删除 ~80 行重复代码;架构建议 #2 全部完成 ✅ |
| 2026-05-15 | **架构重构 P2request.ts 模块级状态收编 + AbortSignal + Analytics 受控**:提取 `ConcurrencyLimiter` 类(并发限制)、`ResponseCache` 类(缓存+去重+patientId 绑定);新增 `resetForTesting()` 测试隔离函数;`api.get/post/put/delete` 支持 `AbortSignal` 请求取消app.tsx Analytics 定时器改为 `useDidShow`/`useDidHide` 控制后台暂停;构建通过 + 测试 74/75 |