Commit Graph
6 Commits
Author SHA1 Message Date
chenshoulin 69a868a7b1 fix(ui): 深色模式下补齐卡片与弹层的层次感
CI / verify (push) Successful in 1m40s
CI / 部署到服务器 (push) Successful in 27s
- 深色里沿用浅色那套低透明度黑色阴影没有对比度(黑投影落在 zinc-950 上),
  悬停和弹层都看不出「浮起来」,本次为深色单独配一套阴影与状态色
- 卡片:静止态改「近距投影 + 顶部内高光」;悬停改「外扩暗晕 + 极淡白光晕 +
  内高光 12%」,同时底色提亮一档(zinc-900 → zinc-800)、边框提到 zinc-600,
  位移补偿到 2px —— 暗底上 1px 的移动肉眼看不出来
- 弹层:新增 shadow-pop-dark / shadow-panel-dark 标记类,只挂给深色底面的
  下拉与抽屉;toast 在深色下仍是亮色块(dark:bg-zinc-100),保留原黑色投影,
  避免亮块套白光晕发脏
- 抽屉补 dark:border-l:它在深色下既无边框又无可视阴影,与背景糊成一片
- 实现说明:Tailwind v4 会把 @theme 的阴影值内联进 --tw-shadow,覆盖 CSS 变量
  对已生成的工具类无效,因此直接重写 box-shadow;规则不放进 @layer 以便稳定
  压过原子类,且选择器需按 hover: 变体转义后的类名书写

验证:vue-tsc -b 与 eslint src 干净;TaskCard / SideDrawer / TagFilter /
TagInput / BatchSelectionBar 共 114 例单测通过;另用 Playwright 采样像素亮度
与 getComputedStyle 确认深浅两套阴影各自命中。
2026-10-23 08:16:07 +08:00
chenshoulin 2d6e24dc91 feat(board): 支持批量添加与批量删除任务
- 批量添加面板:一行一条,整批共用目标列、优先级、标签与截止日期
- 快速新增支持粘贴多行文本,直接拆成多条任务
- 多选模式支持全选可见任务、整批删除,撤销时连原顺序一起还原
- 批量创建与删除走 store 的批量方法,一次落盘、一次广播
- 补充单元测试与 E2E 用例
2026-10-19 17:21:42 +08:00
chenshoulin 48f178e5bb style(ui): 抽屉遮罩改为半透明加背景模糊,透出底下的看板
原来的遮罩压得太重(浅色 slate-900/40、深色 black/60),打开抽屉后左边几乎
是一片灰,看不出底下是什么。改为浅色 slate-900/25、深色 black/40,并加
backdrop-blur-sm:背景仍然看得见轮廓,模糊把它推远,不和面板抢焦点。

补三条测试盯住这个观感:遮罩必须半透明、必须带模糊、必须铺满视口且在
面板之下。
2026-10-18 19:51:38 +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