- date.js: addMonths 对 "YYYY-MM" 月粒度保持月粒度, 不再生成 "YYYY-MM-01"。 旧逻辑使日历切上月时请求 month=2026-10-01, 服务端判为非法后静默回退本月, 表现为上个月一片空白。 - MergedView: 「回到今天」同时把月份切回当前月; 日标题「已完成 x/y」改为 按 items 的 dayDone 现算, 避免把同周期后续日期的打卡计入历史日期, 并让打卡/撤销的乐观更新立即反映到标题。 - server /calendar: 兼容旧的 month=YYYY-MM-DD 请求并截回月份, 不再静默回退。 - server /habits: 回看历史日期时过滤当天尚未创建的打卡项, 与 /calendar 口径一致; summary.done 改用 dayDone (当天份额) 而非 completed (周期完成度)。 验证: Vite dev + 生产数据 (admin) 2026-10 显示 10 个环 / 完成率 32%, 10-22 的标题由错误的 3/14 修正为 1/14; 「回到今天」回到 2026-11 (14%)。
- 任务列表/看板拖动: 激活后用非 passive touchmove preventDefault 拦截浏览器滚动接管, 修复列表长按抬起后 pointercancel 导致无法真正拖动 - 打卡: 列表按周期分组展示(每天/每周/每月/每年), 长按拖动组内排序(上下落点指示), 新增 POST /checkin/habits/reorder 重写 sortOrder; 新建项排到末尾 - 打卡卡片加 touch-action/user-select 防长按误触; 拖动结束 350ms 内抑制点击余波
- 数据: Habit/CheckIn/CheckList/CheckListItem/CheckListTemplate + 迁移 + 重新生成 client - 后端: server/checkin/period.js 周期计算(日/周/月/年, 周一起始, Asia/Shanghai) /api/checkin/* 打卡项CRUD/打卡/撤销/补打/某日详情/月历 /api/checklists/* 清单与检查项CRUD/勾选/全选/复制/模板(系统预置出差·回老家) - 前端: 底部新增「打卡」Tab -> /checkin, 页内三视图 环形进度 RingProgress + 完成特效(粒子/光晕/触感, 可关闭) 打卡视图: 待办列表/乐观更新/撤销/新建编辑 日历视图: 月历网格 + 今天·昨天·明天 + 日期标记/完成率 清单视图: 场景清单/勾选进度条/模板生成/另存模板/归档 - 文档: docs/V0.2/需求文档.md 补充实现约定(附录B)与接口清单