feat(board): 已完成列按完成时间倒序排列
CI / verify (push) Successful in 1m45s
CI / 部署到服务器 (push) Successful in 27s

- 已完成列的展示顺序改由 completedAt 倒序决定(新增 sortCompletedDesc 纯函数),
  最近完成的永远在最上面;缺 completedAt 的旧数据排在有完成时间的任务之后,
  彼此退回 sortOrder 倒序
- 该列停用列内排序:拖拽与 ↑↓ 只能跨列,列头标注「按完成时间倒序」说明口径
- 数据层不动:不迁移 sortOrder,导入导出、快照结构与 schemaVersion 均不变,
  倒序只在 BoardView.visibleColumns 单点发生
- 新增 ADR-009,并在 ADR-008 的否决项里标注被部分推翻
- 单测 705 → 738(sortOrder +5、BoardView +5、BoardColumn +1),README 同步
This commit is contained in:
chenshoulin
2026-10-22 13:15:25 +08:00
parent b39267fba7
commit 51235a59a2
8 changed files with 228 additions and 5 deletions
+5 -2
View File
@@ -3,6 +3,7 @@
一个轻量的个人看板工具:打开即用、数据存在本地、不依赖后端。
- 固定三列:**待办 / 进行中 / 已完成**
- **已完成列按完成时间倒序**:最近完成的永远在最上面(列内不支持手动调序)
- 快速新增、拖拽排序、详情编辑、删除撤销;详情里可直接切换状态
- **批量添加**:一次录入多行清单,整批共用目标列 / 优先级 / 标签 / 截止日期
- **批量编辑**:多选后可统一移动列、改优先级、加/减标签、设截止日期、归档
@@ -92,7 +93,8 @@ npm run dev
| `↑` `↓` | 在列内上移 / 下移 |
| `Enter` | 打开任务详情 |
在输入框内输入时不会触发全局快捷键。方向键移动在筛选态下只允许跨列(列内排序需要看到完整列表才有意义)。
在输入框内输入时不会触发全局快捷键。方向键移动在筛选态下只允许跨列(列内排序需要看到完整列表才有意义);
「已完成」列的列内顺序由完成时间决定,`↑` `↓` 在该列不生效(拖拽同理只能跨列)。
---
@@ -316,7 +318,7 @@ E2E 需要真实浏览器,默认不放进 CI(要求 runner 预装 Chrome)
## 测试
- 单元测试:705 个用例,覆盖 `src/` 下的纯逻辑与组件行为。
- 单元测试:738 个用例,覆盖 `src/` 下的纯逻辑与组件行为。
- 端到端测试:28 个用例,分两组运行 —— 交互类跑 dev server,PWA 类跑生产构建(Service Worker 只在构建产物中生成)。覆盖「新增 → 拖拽 → 完成 → 刷新保持」「批量添加」「多选批量删除 + 撤销」「导出 → 清空 → 导入还原」「删除撤销」「搜索筛选」「键盘快捷键与方向键移动」「深色模式切换」「今日视图」「离线打开」等主链路,每个用例使用独立的浏览器上下文。
```bash
@@ -339,6 +341,7 @@ PLAYWRIGHT_CHANNEL=chromium npm run test:e2e # 用自带 Chromium(需先 npx
- 单用户、单设备,无协作与同步能力(离线可用,但多设备之间不会同步)。
- 看板列固定为三列,不支持自定义。
- 「已完成」列固定按完成时间倒序,不支持手动调序(拖拽与方向键只能跨列)。
- 归档阈值固定为「已完成超过 7 天」,暂不可配置。
- 今日视图的分组规则固定(逾期 > 今天到期 > 进行中 > 待办),不可自定义。
- 统计只覆盖本周完成数等基础指标,没有趋势图或历史留存。