feat(mp): Veepoo M2 BLE 管线扩展 — 精准睡眠数据 + 自动测量 + UI 重构

- 新增 VeepooBridge API:精准睡眠读取(readPreciseSleepData)、B3自动测量配置
  (readAutoTestConfig/setAutoTestConfig)、开关设置(setAutoHeartRate/BP/Temp)、
  体温自动数据读取(readAutoTemperatureData),共 10 个新 API
- 新增 SDK 事件类型:SDK_EVENT_SLEEP(4)、SDK_EVENT_AUTO_TEST(54)
- VeepooPipeline 新增:readSleepData/readAllSleepData(enableAutoMeasurement
  睡眠数据 Promise 化读取 + 自动测量一键开启
- VeepooHistoryReader 新增:uploadSleepReadings 睡眠数据上传
- stores/veepoo.ts 实装:注册 onSleepData 回调、syncHistory 实际读取+上传、
  readSleepData 状态管理、enableAutoMeasurement、连接后自动触发三件事
- 原生页面(native/pkg-veepoo):_onReady 后自动读取 3 天睡眠 + 开启自动测量,
  新增 _readSleepData/_handleSleepEvent/_enableAutoMeasurement
- UI 重构:测量页药丸式选择器+SVG 圆环仪表盘+健康评估标签
- 数据上传页:2 列结果卡片网格+彩色条标识+睡眠数据卡片(★评分+总时长)
- 修复上传按钮无响应 bug:patientId 增加 URL fallback + 错误提示不再静默
- 设计原型:docs/design/veepoo-measure-prototype.html(4 状态预览)
This commit is contained in:
iven
2026-05-31 21:48:06 +08:00
parent 6d073840aa
commit 92ffd8cecb
14 changed files with 3419 additions and 603 deletions

View File

@@ -4,7 +4,7 @@
## 关键数字
> 最后更新: 2026-05-30 | 数据截止: feat/media-library-banner 分支Veepoo M2 BLE 实时测量 + SDK 对接全流程修复
> 最后更新: 2026-05-31 | 数据截止: feat/media-library-banner 分支Veepoo M2 BLE 管线扩展:精准睡眠 + 自动测量 + UI 重构
| 指标 | 值 |
|------|-----|
@@ -18,7 +18,7 @@
| erp-ai 实体 | 20 个 Entity95 文件4 AI Providerchat_handler 支持 FC/Ollama fallback |
| 全系统 Entity | **115 个**58 health + 20 ai + 33 基础 + 4 core |
| Web 前端 | 316 个 TS/TSX 文件54 活跃路由83 API 模块108 页面) |
| 微信小程序 | Taro 4.2 + React 18185 个 TS/TSX 文件 / 62 页面(15 主包 + 47 分包) / 4 TabBar + 医生端独立分包34 组件(ui 21 + patterns 4 + 独立 9) / 49 service 文件 / 5 Zustand store / 12 hooks统一组件库 + CSS 变量主题103 SCSS 全量接入 `var(--tk-*)`,字号 token 对齐原型统计,医生端 `.doctor-mode` 靛蓝覆盖,登录页账号密码+微信一键登录);**Phase 2+3 完成**Token 构建时生成 + Canvas 适老 + PII 清理 + 缓存加密 + any 清零 + 大文件拆分(3→6) + 触觉反馈 + 导航状态保持 + 独立分包 + CI 集成 + HMAC 请求签名;**并发安全**:长轮询独立通道 `requestUnlimited` + ConcurrencyLimiter(12) + safeNavigateTo 全局页栈保护 + reLaunch 去重;**Veepoo M2 BLE 管线**独立管线VeepooBridge 14 API + VeepooPipeline 事件路由 + VeepooStore 状态管理+ **原生分包页面**`pkg-veepoo` 原生 JS+WXML脱离 Taro 直接调用 SDK绕过框架兼容性限制+ 实时测量页面(心率/血氧/血压/体温/压力 5 指标,圆环仪表盘 + 长者模式适配)+ 3 天历史数据同步VeepooHistoryReader 分批上传 + 断点续传);**preloadRule 已移除 pkg-health** 防止 380KB SDK 预加载导致首页 DevTools 卡死;**构建优化**`lazyCodeLoading: requiredComponents` 仅生产构建启用dev 下已知 DevTools 卡死 bug`addChunkPages` 仅 TabBar 页注入 common chunk主包 dev 892KB / prod 766KB**五维度分析评分 6.7/10**架构7.25/安全6.0/UX7.4/工程6.2 |
| 微信小程序 | Taro 4.2 + React 18185 个 TS/TSX 文件 / 62 页面(15 主包 + 47 分包) / 4 TabBar + 医生端独立分包34 组件(ui 21 + patterns 4 + 独立 9) / 49 service 文件 / 5 Zustand store / 12 hooks统一组件库 + CSS 变量主题103 SCSS 全量接入 `var(--tk-*)`,字号 token 对齐原型统计,医生端 `.doctor-mode` 靛蓝覆盖,登录页账号密码+微信一键登录);**Phase 2+3 完成**Token 构建时生成 + Canvas 适老 + PII 清理 + 缓存加密 + any 清零 + 大文件拆分(3→6) + 触觉反馈 + 导航状态保持 + 独立分包 + CI 集成 + HMAC 请求签名;**并发安全**:长轮询独立通道 `requestUnlimited` + ConcurrencyLimiter(12) + safeNavigateTo 全局页栈保护 + reLaunch 去重;**Veepoo M2 BLE 管线**独立管线VeepooBridge 24 API(含精准睡眠/自动测量/开关设置/体温自动数据)+ VeepooPipeline 事件路由type=1/4/5/6/18/31/51/54/58+ VeepooHistoryReader 日常+睡眠上传 + VeepooStore 状态管理(含 sleepData/sleepLoading+ **原生分包页面**`pkg-veepoo` 原生 JS+WXML脱离 Taro 直接调用 SDK绕过框架兼容性限制+ 实时测量页面(心率/血氧/血压/体温/压力 5 指标,圆环仪表盘 + 长者模式适配)+ 3 天历史数据同步VeepooHistoryReader 分批上传 + 断点续传)+ **精准睡眠数据自动读取**(认证后自动读取 3 天睡眠:深睡/浅睡/总时长/质量评分,通过 Storage 回传 Taro 页面)+ **自动测量功能**(认证后自动开启心率/血压/体温自动监测);**UI 重构**:测量页药丸式选择器 + SVG 圆环仪表盘 + 健康评估标签;数据上传页 2 列结果卡片网格 + 彩色条标识 + 睡眠数据卡片(★ 评分 + 总时长)**preloadRule 已移除 pkg-health** 防止 380KB SDK 预加载导致首页 DevTools 卡死;**构建优化**`lazyCodeLoading: requiredComponents` 仅生产构建启用dev 下已知 DevTools 卡死 bug`addChunkPages` 仅 TabBar 页注入 common chunk主包 dev 892KB / prod 766KB**五维度分析评分 6.7/10**架构7.25/安全6.0/UX7.4/工程6.2 |
| 前端测试 | Web 62 单元测试文件(~693 断言) + 17 E2E spec(13 Web + 4 MP~64 断言);小程序 12 单元测试文件(127 断言) + 4 E2E spec(~16 断言),覆盖率 ~6% |
| 后端测试 | **1030 个函数**839 同步 + 191 异步96 个文件含测试 |
| 事件系统 | 31 事件类型health/ 51 全系统 / 82 发布点 / 15 消费者模块 / Outbox + LISTEN/NOTIFY |
@@ -153,6 +153,7 @@
| veepoo-measure 页面空白useRef is not defined | [[miniprogram]] 原生页面桥接 | TSX 文件使用 `useRef` 但仅 `import React from 'react'` 未解构导入 | **已修复:** 改为 `import React, { useRef } from 'react'`2026-05-30 |
| M2 设备扫描不到(名称匹配过严) | [[miniprogram]] 原生页面扫描 | 过滤条件 `name.indexOf('M2')` 过严,设备可能广播为 VPM/VEEPOO | **已修复:** 放宽匹配 M2/VPM/VEEPOO 三种前缀2026-05-30 |
| M2 设备认证超时3 层根因) | [[miniprogram]] 原生页面认证 | **根因链**:①连接回调 `errno:0` 在第 1 次回调就匹配,认证在特征值订阅前发送 → 修复为只匹配 `connection:true`;②`veepooWeiXinSDKNotifyMonitorValueChange``onLoad` 注册时内部调用 `wx.notifyBLECharacteristicValueChange`,适配器未初始化 → `not init` 错误,改到 `connection:true` 后注册;③认证结果字段检查错误:代码检查 `VPDevicepassword`(值="0000")而非 `VPDeviceAck`(值="successfulVerification" | **已修复:** 三层修复 — connection:true 唯一匹配 + 监听器时序 + VPDeviceAck 字段2026-05-30 |
| Veepoo 上传按钮无响应(无日志无报错) | [[miniprogram]] veepoo-measure | `handleUpload``if (!patient) return;` 静默退出,`currentPatient` 从 auth store 恢复可能为 null原生页返回后 | **已修复:** patientId 增加 URL 参数 fallback + 每个 early return 添加 console.warn + Taro.showToast 用户提示 + 上传按钮 disabled/loading 状态2026-05-31 |
## 模块导航