ericwyuan
|
32588085a1
|
perf: 今日页首屏 394KB/2.0s → 51.5KB/0.82s
逐个接口计时后的两处改动:
- 健康摘要不再下发空值。一天 40 项指标里大部分是这块表没有的传感器,
全按 null 发出去占了约两成体积。客户端本来就把「键不存在」和 null
当同一回事。
- 今日页首屏由 365 天改为 60 天,往前翻越界时再加载 180 天。
一次取一年是为了让翻页不发请求,代价是首屏 394 KB,手机上不划算。
日历选到窗口外的日期同样会自动加载。
顺带把加载逻辑收成一个 loadFrom:原来初始 effect 的依赖是空数组,
日历里改 from 不会触发重新拉取,是个还没被触发的 bug。
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 04:34:32 +08:00 |
|
ericwyuan
|
f1319a6171
|
feat: 补齐 Garmin 未同步的数据,并各自配上界面
审计 57 个接口后,把账号里真有数据却从未入库的部分补上。全部走同步模块,
界面只读本地库。
新增数据
- 体重与身体成分(体脂率/肌肉量/体水分/骨量/内脏脂肪/代谢年龄)
- 血压(接口通,账号暂无记录)
- 跑步成绩预测(5 公里 / 10 公里 / 半马 / 全马)
- 爬坡分、饮水量、出汗量 → health_data 新增七列
- 全天曲线:心率 / 压力 / 身体电量 / 呼吸 / 血氧
- 挑战赛(徽章挑战与好友挑战,与一次性的徽章不同,有周期和进度)
- 已配对设备
新增界面
- /body/ 身体成分:体重大数字 + BMI 分级 + 体脂肌肉曲线 + 血压表格
- /race/ 成绩预测:四个距离的预测成绩与配速,以及预测随时间的变化
- /challenges/ 挑战赛:按类型筛选,有目标的显示进度条
- /devices/ 已配对设备
- 每日页新增「全天曲线」,这是存日内采样的主要目的
- 健康页新增「身体成分」分组与「更多」入口,运动页加挑战赛与成绩预测入口
同步开销
- 日内曲线每天五个请求,14 天以内的同步顺带拉,更长的历史交给后台
「补齐详细数据」,否则一年的同步会多出约 1800 个请求
- 原来的「补齐运动详情」扩展为统一的补齐任务,分阶段上报进度
日内采样抽稀到每天 240 点:手机图表分辨不出更多,只会把行撑大。
全量 446 项测试通过。
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 04:16:33 +08:00 |
|
ericwyuan
|
fa865ca8a6
|
fix: 实机验证发现的七个缺陷
部署与时区
- client/.env.production 写死 REACT_APP_API_URL=/api。之前没有这个文件,
构建靠命令行临时传参,一旦忘了就把开发默认值 localhost:5000 打进包里,
部署后整站 Network Error。
- 新增 lib/day.ts,所有日期改用本地日历日。原先用 toISOString() 取的是 UTC 日期,
在 UTC+8 每天前 8 小时都会少查一天——当天的数据佳明已经有了,应用却够不到。
界面
- 覆盖 Framework7 9 给 .navbar .left/.right 加的 frosted pill,
就是各页右上角和返回键旁边那个半透明椭圆。
- .metric-tab 显式 width:auto。F7 把每个 button 渲染成整宽块元素,
运动详情的四个 Tab 因此竖着堆成四行。
- 主要收益为 UNKNOWN 时不显示该区块,那是「没有结论」的哨兵值。
正确性
- 心率区间百分比改用整次运动时长作分母。原先除以「落在区间内的总时长」,
把低于区间 1 的时间挤掉了:44:06 的登山里区间 1 占 23:03,
手表显示 52%,我算成了 90%。现在对上了。
性能
- 按进程缓存已认证的 Garmin 会话(15 分钟 TTL)。实测 _connect 单次 11 秒,
而七个数据接口加起来才 4 秒——瓶颈全在每次重新认证。
冷启 16s → 热 7s → 命中缓存 0.8s,不再撞客户端超时。
- get_activity_details 的 maxchart 由 2000 降到 500,反正写入时抽稀到 300。
- 重新绑定账号时丢弃缓存会话。
删除前端重做前遗留的 5 个无引用页面文件。
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 01:16:44 +08:00 |
|
ericwyuan
|
8430ff335e
|
feat(ui): 今日页日期切换 + 卡片可点 + 路由切换进度条
需求 3.7 / 4.5 / 4.6 / 4.7
今日页
- 左右箭头切换日期,中间点开日历选任意一天,范围限定在已有数据内
- 没有记录的日期直接跳过,不会停在一个空白页上
- 一次读一年:往回翻一天不该产生一次请求,卡片的迷你曲线本来也需要前后几天
- 曲线窗口跟着所看的那天结束,卡片上的走势总是通向它上面那个数字
- 卡片改为从 lib/metrics.ts 渲染,点击进入指标详情
路由切换进度条
- 切换本身是瞬时的,用户等的是新页面的第一次请求,没有指示就像点了没反应
- 跑到 90% 停住等页面就位,不谎报完成
- 有最短显示时长,快速跳转时不会闪一下
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 00:49:38 +08:00 |
|
ericwyuan
|
0c7fecc124
|
feat(ui): 设置页重做 + 同步页简化 + 评分依据页
需求 2.5 / 2.6 / 2.7 / 2.8 / 5.1 / 5.2 / 5.3
设置页
- 个人资料:身高/体重/出生日期/性别,另显示算出的 BMI 与年龄
- 单位:公制 / 英制
- 同步:自动同步开关、频率、历史范围
- 改动即存,不放「保存」按钮——每项都是单值且效果直观,
而能保持脏状态的表单就是会悄悄丢编辑的表单
- 开关用原生 checkbox 只换绘制,键盘与读屏行为保持不变
/rating-basis/ 评分依据
- 11 项参考区间逐条列出边界与出处,包括「一般性参考,无权威标准」这种
诚实的答案。判断从哪来必须能查到。
同步页
- 首要按钮「同步最新数据」,等几秒直接返回结果
- 次要按钮「同步历史」,按设置里的历史范围后台跑
- 状态压缩成三格:上次同步 / 自动同步 / 已同步天数
- 删掉原来四段说明文字,它们把两个动作埋在了下面
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 00:44:07 +08:00 |
|
ericwyuan
|
b0e0799a97
|
feat(ui): 卡片可点进详情 + 身体年龄 + 运动详情 + 指标选择弹窗
需求 3.5 / 3.6 / 4.4 / 4.5 / 4.8 / 4.9
- 删掉导航栏右上角那两个 Link,就是它们渲染成半透明椭圆的。
睡眠入口改为点健康页的睡眠卡片,每日入口移进趋势页内容里。
- 新增 lib/metrics.ts 作为唯一的指标注册表。label/unit/取值函数原本在
今日、健康、趋势各写一份,改一处要改三处,也就有三次写不一致的机会。
- /metric/:id/ 指标详情:大数值 + 参考区间 + 7/30/90/365 趋势图 +
平均最高最低达标天数 + 这个指标是什么 + 评分依据(取自后端,不在前端另写一份)
- /activity/:id/ 运动详情:概览/数据/分段/图表,数据分组照搬手表的排法,
心率区间用单色顺序色阶(区间是有序刻度,不是分类,不能用分类色)
- /body-age/ 身体年龄:逐步展示 VO₂max 基准与各项修正,以及每步的出处
- 趋势页 15 个 chip 占满一屏且像张表单,改成弹窗选择,页面上只留一行摘要
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 00:39:33 +08:00 |
|
ericwyuan
|
6b4c5375dc
|
docs: 建立需求文档,记录全部需求与进度
每完成一条需求更新状态并推送。
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
2026-08-24 00:28:48 +08:00 |
|