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