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
ericwyuan
d73405decb
Initial commit: Set up Garmin Health Lab project structure
...
- Initialize monorepo with root workspace configuration
- Set up Express.js backend with TypeScript
- Set up React 18 frontend with TypeScript
- Create database schema with SQLite
- Implement project architecture and documentation
- Add development and deployment guidelines
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2026-08-23 11:11:29 +08:00