Commit Graph
11 Commits
Author SHA1 Message Date
chenshoulin 347ec6fe27 feat: 校验截止日期不能早于起始日期
CI / 部署到服务器 (push) Successful in 29s
CI / verify (push) Successful in 1m55s
- utils/date 新增纯函数 isDateRangeInvalid:任一端为空视为未排期,不判非法
- DatePicker 支持 min 属性,截止日期日历里选不到早于起始日期的日期
- 任务详情抽屉与批量添加面板实时提示,并在保存/提交时拦截
- 看板批量设置截止日期时逐条跳过起始日期更晚的任务,提示里说明跳过数量

测试:新增纯函数、抽屉、批量面板与看板批量四组用例,全量 957 用例通过。
2026-11-02 16:24:10 +08:00
chenshoulin 6d58227614 feat: 添加起始日期功能并更新相关组件与测试用例
CI / 部署到服务器 (push) Successful in 29s
CI / verify (push) Successful in 1m57s
- 在任务创建和编辑界面中新增起始日期字段,默认值为当天。
- 更新任务卡片展示逻辑,仅在起始日期不是当天时显示相关信息。
- 修改相关测试用例以覆盖起始日期的功能,包括批量创建和编辑任务的场景。
- 数据库模式版本更新至4,以支持起始日期字段的存储与迁移。
2026-11-02 00:17:14 +08:00
chenshoulin 29100b6d7d feat: 优化任务详情抽屉时间信息展示顺序
CI / 部署到服务器 (push) Successful in 26s
CI / verify (push) Successful in 1m39s
2026-10-24 19:37:38 +08:00
chenshoulin 1d92ab2cb5 feat: 添加新建任务按钮功能,聚焦待办列输入框
CI / 部署到服务器 (push) Successful in 27s
CI / verify (push) Successful in 1m42s
2026-10-24 19:14:58 +08:00
chenshoulin b39267fba7 feat(board): 展示任务时间,并修正已完成任务的逾期基准
CI / 部署到服务器 (push) Successful in 26s
CI / verify (push) Successful in 1m43s
时间展示(ADR-008):
- 详情抽屉新增只读「时间」区块:创建 / 更新常驻,完成时间缺失时标注「未完成」,归档任务追加归档时间;时间不进入草稿与 dirty 判定
- 已完成卡片在元信息行右侧显示「完成于 M月D日」,卡片根元素 title 汇总创建 / 完成 / 归档时间(精确到分钟)
- 回收站条目补创建时间,删掉内联 formatTime,统一走 @/utils/date
- date.ts 新增 formatDateTime(YYYY-MM-DD HH:mm)与 formatCompactDate(同年 M月D日 / 跨年带年份),空值与非法时间戳返回 null

逾期基准修复:
- 新增 formatDueDateForTask:未完成任务仍以「今天」推算;已完成任务改以「完成日」推算,19 号截止、19 号当天完成的任务不会在 20 号显示「逾期 1 天」,完成时确实超期则定格为「逾期 N 天完成」,不再随日期增长
- 新增 localDateOf:completedAt 存 UTC 时间戳,按本地时区取日期,避免跨日偏差
- TaskCard 改用 dueLabel computed 取代模板内直接调用 formatDueDate;颜色仍由 isOverdue 决定,已完成卡片保持中性色

测试:date / TaskCard 补时间格式化与逾期基准用例(当天完成、提前完成、完成时超期定格、缺 completedAt、跨年),全量 728 单测通过;vue-tsc 与 eslint 干净。
2026-10-20 09:23:29 +08:00
chenshoulin f69a24de94 feat(ui): 详情抽屉支持状态切换、归档恢复与未保存确认
- 新增三列状态切换,今日视图也能把任务移到进行中
- 归档任务显示归档提示与「恢复」入口
- 关闭抽屉前检查未保存修改,二次确认后才丢弃草稿
2026-10-19 17:20:58 +08:00
chenshoulin 45c5040198 style(ui): 清除与删除按钮补上边框,与取消/保存成套
抽屉底部的取消有边框、保存是实心,而删除是纯文字;日期框旁的清除同样是
纯文字。两者都缺少按钮的可点击暗示,放在一起不成套。

- 删除:加 border-rose-300 / dark:border-rose-800,保留 rose 文字色
- 清除:加 border-slate-300 / dark:border-zinc-600,圆角由 rounded(4px)
  改为 rounded-md(6px) 与日期输入框对齐,文字色提到 slate-600/zinc-300

窄屏下验证过不溢出:320 / 336 / 390 / 1440 四种宽度、深浅两色,
日期行 scrollWidth 均等于 clientWidth。
2026-10-18 20:33:55 +08:00
chenshoulin 88ea09e94d feat(tags): 编辑任务时可从已有标签里选,不必每次手打
TagInput 增加候选下拉:聚焦即展开(输入框为空列全部、有草稿按子串过滤),
上下键移动高亮、回车选中高亮项、点击也能选;候选项排除已选中的,选完自动
从列表移除。列表没展开或没有匹配时,回车仍把草稿建成新标签,原行为不变。
候选点击用 mousedown.prevent 保住输入框焦点,否则 blur 会先把草稿提交掉。

把「全部标签」从 BoardToolbar 的局部 computed 提到 store 的 allTags,
筛选下拉和标签候选共用同一份,避免两处各算一份导致结果不一致。

测试:TagInput 新增 13 条(候选过滤、键盘选择、失焦/Escape 收起、aria-selected),
store 新增 2 条 allTags,E2E 新增 1 条打通 store → 抽屉 → 组件这条接线。
2026-10-18 20:26:55 +08:00
chenshoulin 85b2d8a30f style(theme): 深色模式配色由 slate 换成 zinc,去掉整页蓝调
slate 色阶带明显蓝调(页面底 B-R=+22、列底 +26),整页发蓝,与目标的中性灰
相差很远。换成 Tailwind 的 zinc 色阶做 1:1 映射,保持原有明暗层次不变
(卡片仍比列背景更亮),只去色偏:改后页面底 B-R=+2、列底 +2。

只替换带 dark: 前缀的类(16 个文件、182 处),外加 style.css 里三处
html.dark 基底色;浅色模式一字未动(页面底仍为 slate-100 #f1f5f9)。
2026-10-18 19:45:23 +08:00
chenshoulin 8721e8ab0b feat: 补齐今日视图待办组、卡片键盘操作、深色模式
今日视图
- 补上「待办」组。此前只收 逾期 / 今天到期 / 进行中,导致待办列里没设
  截止日期的任务在今日视图里完全消失 —— 用户明明有一堆事没做,却看到
  「今天没有待办事项」。现在只要任务未完成且未归档,就必定出现在某个
  分组里(归属优先级:逾期 > 今天到期 > 进行中 > 待办)。
- 统计卡片改为与分组一一对应(逾期 / 今天到期 / 进行中 / 本周完成),
  不再用「今日待办」这种把四组混在一起、与列表长度对不上的指标。

键盘操作(可访问性)
- 卡片可聚焦(Tab / 点击),← → 换列、↑ ↓ 列内调序、Enter 打开详情。
- 换列时追加到目标列末尾:用全量长度而不是可见下标,筛选态下也安全;
  列内调序要求该列渲染的是全量,否则禁用(与拖拽的规则一致)。
- 移动后手动恢复焦点 —— 卡片跨列会被重建,不恢复的话连续按键会失效。

深色模式
- 三态:跟随系统 / 浅色 / 深色,选择持久化到 localStorage。
- index.html 内联脚本在首帧之前应用主题,避免深色下闪白。
- 用 @custom-variant dark 做 class 控制(而不是纯 media query),
  才能支持「强制浅色」;html 的 color-scheme 让原生控件与滚动条跟随。

验证:单元测试 480 个、端到端测试 25 个全部通过,lint 与构建无错误。
截图脚本新增深色与移动端深色两组,便于后续对照。
2026-10-18 17:48:55 +08:00
chenshoulin 4e064e82ea feat: 个人轻量看板工具 MVP
从零实现一个 local-first 的个人任务看板,数据只存在浏览器本地,不依赖后端。

功能
- 固定三列看板(待办 / 进行中 / 已完成),支持拖拽改状态与列内排序
- 快速新增、详情编辑、删除撤销、已完成归档
- 搜索与筛选(关键词 / 优先级 / 标签 / 今日到期 / 逾期)
- 今日视图:按紧急度分组(逾期 > 今天到期 > 进行中)+ 统计卡片
- 导出导入 JSON;启动时自动留快照,保留最近 3 份
- 键盘快捷键(N / 「/」/ ? / Esc)
- PWA:可安装、离线可用、更新提示

技术要点
- 持久化采用 TaskRepository 端口 + 整份快照读写,schemaVersion 迁移表
  显式登记升级规则(当前 v2,v1 -> v2 为归档功能补 archivedAt)
- 同列排序用相邻中点插入,间距不足时按列 normalize,避免浮点精度耗尽
- 拖拽只消费 Sortable 的事件,store 保持唯一数据源,不接管数据
- 数据损坏时先备份到 *.corrupt.<时间戳> 再报错,不覆盖用户数据
- 引入 vue-router 拆分看板与今日两个视图(见 docs/adr.md ADR-005)

验证
- 单元测试 437 个(33 个文件),行覆盖率 96.8%
- 端到端测试 23 个(Playwright),含真实拖拽与断网离线场景
- npm run build 通过,产物可静态托管

注:部署时需配置 SPA 回落,否则直接访问 /today 会 404(详见 README)。
2026-10-18 11:59:49 +08:00