Files
lc 05c4763e49 feat(timer): 循环训练组进度改为圆环分段弧 + 信息气泡三行合一
- progress-ring 新增 sets/currentSet/resting/successColor 属性,
  圆环外圈绘制分段弧(已完成=主色/当前=呼吸光点/休息下一组=绿),单组模式零渲染
- timer 删除顶部 circuit-bar 进度面板,布局骨架三模式统一
- 呼吸环淡化(描边 0.55→0.20,柔光渐变强度减半)
- 目标卡与提示气泡合并为 info-bubble,状态文案(撑住/休息中/已暂停)并入气泡顶部
2026-08-12 09:39:41 +08:00

1.8 KiB
Raw Permalink Blame History

2026-08-07

里程碑 tab 设计校正:时长维度改为「单次最长时间」

用户纠正先前理解偏差:时长里程碑要的是单次最长时间(个人最佳),不是"首次突破 X 分钟"的阈值事件。 这其实与用户最初原话"什么时间单次坚持最长"一致;之前被带偏成 first_duration 阈值家族。

校正后的家族(6 类):

  1. first_train 第一次训练 → min(record.date)
  2. badge ×7 勋章首解锁(复用 config.trainingDayBadges)→ 第 N 个去重训练日=解锁日
  3. longest_plank 单次坚持最久(个人最佳)→ argmax(duration),取该记录日期+时长;含循环circuit 的 record.duration=workTotal 已排除休息,公平)。属「个人最佳」类,与其余「第一次」类并列。
  4. first_streak 第一次连续打卡 N 天 → 门槛 config.milestoneFirsts.streaks=[7,14,30]
  5. 模式首秀:first_circuitfirst_plan

config 变化: milestoneFirsts 去掉 durations(不再有时长阈值);仅保留 streaks:[7,14,30]longest_plank 无需阈值配置,直接取全量记录 max(duration)。

待定细节(已向用户提出): longest_plank 是「1 个节点=当前历史最长(若被刷新则更新日期)」,还是「每次刷新纪录都记一个节点(PR 进阶时间线)」?默认按前者(最贴合"单次最长时间"语义)。

顺带诊断:模拟器 vs 正式版连续打卡不一致

streak 是本地缓存计数器(current_streak),validateStreak 普通启动只信任旧 count、不重算;recomputeStreak 仅删记录/云端恢复时跑。模拟器与真机是两套隔离存储沙箱,且 streak 不随记录并集自动对齐 → 4天 vs 2天属预期差异。根治=启动即 recomputeStreak()。用户尚未批准改代码。