fix(mp): T40 UI 审计修复 — 28 项设计系统合规 + 安全加固 + 讨论记录

T40 UI 审计修复(60 页面全覆盖):
- 新增 $acc-d/$wrn-d 渐变中间色变量,修复首页轮播渐变硬编码
- 替换 8 处裸 white 为 $white 设计变量(5 个 SCSS 文件)
- 修复 7 处触摸目标 40/44px → 48px(健康/消息/咨询/预约/首页)
- 3 页面新增 Loading 状态(体征录入/个人中心/就诊人添加)
- statusTag 移除硬编码布局值,改用 SCSS mixin 控制
- 医生端 14 页面架构 Hook 层补充(useThrottledDidShow 替换 useEffect)
- 移除 action-inbox 未使用 import

安全 P0 修复:
- JWT 中间件加固:token 类型校验 + 过期预检 + 类型别名简化
- 速率限制增强:滑动窗口 + 暴力破解防护
- analytics handler 错误处理完善

文档:
- T40 审计报告(24 PASS / 36 PASS_WITH_ISSUES / 0 NEEDS_WORK)
- 5 份 DevTools/性能审计讨论记录
- wiki 症状导航 + 小程序章节更新
This commit is contained in:
iven
2026-05-14 23:12:54 +08:00
parent 447126b6c5
commit 8f353946e1
90 changed files with 2089 additions and 830 deletions

View File

@@ -64,6 +64,15 @@
| MCP 批量审计页面栈溢出 | [[miniprogram]] MCP 联调 §6.6 | `navigateTo` 超 10 层 | 改用 `reLaunch` 逐页测试 |
| 告警管理按钮不显示 | [[frontend]] 权限码拼写 | AlertList.tsx | `health.alert.manage``health.alerts.manage`(缺 s |
| 小程序晚间血压丢失 | [[miniprogram]] 体征录入 | indicator_type 映射 | **已修复:** 新增 `blood_pressure_evening` 类型,录入页+日常监测页+后端+测试全覆盖 |
| 咨询页长轮询 CPU 飙升 | [[miniprogram]] §5 审查 | longPoll delay=0 递归 | **已修复:** 成功路径加 3s 间隔 + 连续失败上限 50 次 |
| 小程序 DevTools 卡死(所有 API ERR_SSL_PROTOCOL_ERROR | [[miniprogram]] request.ts | `process.env.NODE_ENV === 'production'` 时 http→https 自动转换 | **已修复:** 移除 `getHeaders` 中自动 http→https 升级URL 以 `.env` 为唯一来源 |
| 小程序 Tab 切换卡死(并发请求阻塞 30s | [[miniprogram]] request.ts | `getHeaders()``await tryRefreshToken()` 预检查 | **已修复:** 移除 getHeaders 中的同步 Token 刷新预检查,仅依赖 401 重试路径 |
| 小程序登录卡死getPhoneNumber 无响应) | [[miniprogram]] login 页 | DevTools 中 `openType='getPhoneNumber'` 不弹窗 | **已修复:** dev 模式新增"开发模式快速登录"按钮绕过手机号授权 |
| 轮播图图片 500 | [[erp-health]] banner_handler | 媒体文件不在磁盘上 | 测试数据问题,生产环境不影响 |
| 设备同步内存无限增长 | [[miniprogram]] §5 审查 | BLE 模块单例 + readings 无上限 | **已修复:** useRef 懒初始化 + MAX_LIVE_READINGS=200 |
| 医生端日期选择器不可用 | [[miniprogram]] §5 审查 | 原生 `<input type='date'>` | **已修复:** 替换为 `<Picker mode='date'>` |
| 透析记录列表过滤不准 | [[miniprogram]] §5 审查 | 客户端过滤代替服务端过滤 | **已修复:** 传 status 参数给后端 |
| 告警详情加载失败 | [[miniprogram]] §5 审查 | 列表加载 100 条客户端过滤 | **已修复:** 新增 `getAlert(id)` 单条查询 |
| AI 分析 SSE 无 UI 入口 | [[erp-health]] AI 分析 | 前端未调用 | 4 个 SSE 端点无管理界面触发 |
| AI 分析返回对话式回复 | [[erp-ai]] prompt 模板 | 迁移 000123 | system_prompt 未加非对话指令 / 数据为空 |
| AI 分析结果显示原始 JSON | [[erp-ai]] 缓存回放 | `replay_cached` | 迁移 000123 前的嵌套 JSON bug前端 `extractPlainText` 兼容 |