Files
hms/docs/discussions/2026-05-14-miniprogram-deep-analysis-brainstorm.md
iven 447126b6c5 fix(mp): 安全 P0 修复 + 架构 Hook 层补充 + 五专家组分析报告
安全修复:
- 提取 sanitizeHtml 共享工具,修复 article/detail RichText XSS 风险
- request.ts 生产环境强制 HTTPS,消除 HTTP 回退风险
- 错误信息净化:后端错误码映射为用户友好消息,不再透传原始内容
- Token 生命周期管理:利用 expires_in 记录过期时间,请求前主动刷新

工程修复:
- Babel 依赖从 dependencies 移至 devDependencies(包体积优化)

架构改进:
- 新增 usePagination hook(分页加载 + hasMore + refresh,10+ 页面可复用)
- 新增 useAuthRequired hook(登录态 + 患者档案 + 角色判断统一入口)
- 新增 usePageRefresh hook(下拉刷新统一封装,17 页面可复用)

文档:
- 五专家组深度分析+头脑风暴报告(架构7.2/安全5.5/UX6.0/工程5.5/产品7.2)
2026-05-14 20:22:29 +08:00

8.6 KiB
Raw Blame History

HMS 小程序深度分析 + 五专家组头脑风暴

日期: 2026-05-14 | 参与者: 5 专家组(架构师 / 安全专家 / UX 专家 / 工程效能专家 / 产品战略专家)

一、综合评分矩阵

维度 评分 评审人 核心评价
架构设计 7.2/10 (B+) 架构师 基础设施优秀(网络层/BLE/关怀模式中间层缺失Hook 层/类型共享)
安全性 5.5/10 (C+) 安全专家 认证框架正确,但 PHI 明文存储、XSS 风险、无远程错误追踪
UX/无障碍 6.0/10 (B-) UX 专家 Design Token 体系优秀,但零 ARIA 标注、错误处理不一致、关怀模式仅视觉
工程效能 5.5/10 (C+) 工程专家 依赖精简、BLE 抽象优秀,但零 CI/CD、零 ESLint、测试覆盖 ~2%
产品完整度 7.2/10 (B) 产品专家 患者端闭环基本完整,但 AI 能力空转、无推送、无看护者模式
综合 6.3/10 (B-) 技术基座扎实,产品进入「好用」跃升期,工程基础设施是最大短板

二、关键发现汇总

2.1 五大亮点(跨专家组共识)

# 亮点 涉及文件 专家评价
1 request.ts 网络层 services/request.ts Token 刷新去重 + 响应缓存 + 飞行中请求去重 + LRU 淘汰,"可当教材"
2 BLE 子系统 services/ble/ 8 文件 适配器模式 + 离线缓冲 + 同步调度,"接近产品级方案"
3 关怀模式 CSS 变量级联 styles/tokens.scss + elder-mode.scss 非线性缩放 + 58/58 页面 100% 覆盖,"业内罕见优雅实现"
4 分包策略 app.config.ts 10 个分包 边界清晰,主包 14 页,功能分包合理
5 长者模式触觉反馈 utils/elder-toast.ts Toast 时长延长 + 震动反馈,细节关怀到位

2.2 五大风险(按严重程度排序)

# 风险 级别 影响 涉及范围
1 PHI/敏感数据明文存储 CRITICAL 患者姓名/手机号/Token 明文可读root 设备可提取 utils/secure-storage.ts + 4 stores
2 零 CI/CD + 零代码质量门禁 CRITICAL 代码质量完全依赖人工,回归风险极高 全项目
3 测试覆盖 ~2% HIGH 66 个页面几乎零测试,重构无安全网 __tests__/ 13 文件
4 Hook 层缺失124 文件仅 2 Hook HIGH 跨页面重复代码 ~1200 行,随功能增长恶化 全部 56 页面
5 AI 分析 4 个 SSE 端点无 UI 入口 HIGH 核心差异化能力空转,投入产出为零 后端 4 端点 + 前端无对应页面

2.3 架构师视角:应该存在的 12 个自定义 Hook

# Hook 受益页面 消除重复
1 usePagination 10+ 分页加载 + hasMore + loadMore
2 useAuthRequired 15+ 登录守卫 + GuestGuard
3 usePageRefresh 20+ usePullDownRefresh + stopPullDownRefresh
4 useVitalSigns 4 体征获取/提交/阈值校验
5 useHealthTrend 3 趋势数据 + healthStore.getTrend
6 useFormValidation 6+ 表单验证 + 脏检查
7 useConsultation 2 咨询长轮询 + 自动标记已读
8 useBLEConnection 1 BLE 扫描/连接/读取状态机
9 useReminder 1 首页智能提醒加载
10 useUnreadCount 3 未读消息计数 + 轮询
11 useAppNavigation 15+ 条件导航 + 参数解析
12 useThresholdCheck 2 阈值校验 + 异常提示弹窗

P0最高 ROI usePagination + useAuthRequired + usePageRefresh → 一个工作日完成,减少 50% 重复代码。

2.4 安全专家视角6 个关键修复

# 修复项 当前 方案 优先级
1 RichText XSS article/detail 未净化 提取 sanitizeHtml() 为共享工具 P0
2 HTTPS 强制 HTTP 回退未保护 编译时校验 + 生产强制 HTTPS P0
3 错误信息净化 后端原始消息透传 error_code 映射 + 用户友好消息 P0
4 Token 生命周期 expires_in 从未使用 记录过期时间 + 主动刷新 P1
5 安全存储 明文 secureSet/Get Token 仅内存 / 微信原生加密 P1
6 远程错误追踪 无 Sentry/BugSnag 接入错误追踪服务 P1

2.5 UX 专家视角Top 10 改进

# 改进项 工作量 影响
1 统一 PageState 模式usePageState hook 3 天 56 页面 UX 一致性
2 全量 ARIA 标注 5 天 视障用户可访问
3 骨架屏组件 2 天 降低感知等待时间
4 修复 15+ 处静默错误 1 天 用户不再丢失关键反馈
5 类型安全路由 2 天 消除路由拼写错误
6 关怀模式简化导航3 大按钮) 3 天 老年用户操作成功率
7 异常值分级告警(黄/橙/红) 2 天 医疗安全关键路径
8 下拉刷新统一包装 2 天 交互一致性
9 体征录入大数字键盘 3 天 老年患者录入体验
10 InfiniteList 统一列表组件 2 天 减少 ~300 行重复

2.6 工程效能专家视角:技术债务优先级

优先级 任务 工时 收益
P0 建立 CI/CD + ESLint + Prettier 1 天 自动化质量门禁
P0 补齐 request.ts + auth store 测试 3 天 核心认证链路回归保护
P1 Babel 依赖错放修复 0.1 天 包体积/语义正确
P1 消除 35+ 处 any + 开启 noImplicitAny 4 天 类型安全
P2 创建 services/types/ 共享类型 4h 消除 4 套重复类型
P2 OpenAPI 代码生成引入 1 周 前后端类型自动同步

2.7 产品专家视角Top 10 缺失功能

# 功能 ICE 分 说明
1 AI 分析 UI 入口 27 4 个 SSE 端点已存在,只差一个按钮
2 微信订阅消息推送 24 没有推送 = 没有召回能力
3 体征异常智能提醒 22 录入后即时判断异常 + 行动建议
4 BLE 后台自动同步 20 手动同步是反用户体验
5 健康数据 PDF 导出 18 就诊时出示给医生,高频刚需
6 仪表盘异常患者快筛 17 医生每天第一步
7 告警智能分诊 + 批量操作 16 当前逐条处理效率极低
8 看护者模式(代操作) 15 老年患者子女代为录入/查看
9 离线体征录入 14 网络不稳定场景
10 随访自动化工作流 13 术后/出院自动创建随访

三、核心结论

3.1 跨专家组共识

  1. 技术基座扎实 — 网络层/BLE/关怀模式/分包策略是高标准实现,不需要推翻重来
  2. 中间层缺失是最大架构问题 — Hook 层和类型共享层的缺失会随页面增长加速恶化
  3. 安全合规是医疗产品的生死线 — PHI 明文存储 + XSS 风险 + 无远程错误追踪必须修复
  4. AI 能力空转是最大产品浪费 — 4 个 SSE 端点已建设,只差一个 UI 入口就能释放价值
  5. 工程基础设施是扩大团队的瓶颈 — 无 CI/CD + 无 ESLint + 测试 ~2%5 人以上团队必出问题

3.2 三个月路线图

Month 1安全加固 + 工程基础

  • P0: RichText XSS 净化、HTTPS 强制、错误信息净化
  • P0: CI/CD 流水线 + ESLint + Prettier + pre-commit hook
  • P1: request.ts + auth store 单元测试补齐
  • P1: Token 生命周期管理 + secure-storage 加密/内存化

Month 2架构优化 + UX 提升

  • P0: 提取 usePagination + useAuthRequired + usePageRefresh 三个高 ROI Hook
  • P0: AI 分析 UI 入口上线(释放已建设能力)
  • P1: 拆分 health/index.tsx (419→5 文件) + daily-monitoring (487→5 文件)
  • P1: 统一 PageState 模式 + 骨架屏组件
  • P1: 创建 services/types/ 共享类型

Month 3产品深化 + 质量补齐

  • 微信订阅消息推送接入
  • 体征异常即时提醒 + 分级告警
  • 医护端工作台化改造
  • 覆盖率提升至 50%+
  • OpenAPI 代码生成引入

四、数据资产清单

指标
源文件 124 TS/TSX + 82 SCSS
页面 56 (13 主包 + 43 分包)
组件 10 共享组件
Service 41 文件 (19 患者 + 8 医生 + 8 BLE + 6 核心)
Store 4 Zustand (auth/ui/health/points)
Hook 2 自定义 (应 12+)
测试 13 单元 + 4 E2E (~2% 覆盖率)
any 类型 35+ 处
重复类型 4 套 (patient/doctor 各定义)
大组件 (>200 行) 7 个 (最大 487 行)
静默 catch 15+ 处
ARIA 标注 0 处