看板视图
看板视图以列式布局展示任务,直观反映每个任务当前所处的状态。通过拖拽操作即可快速变更任务状态,无需打开任务详情页。
进入看板页面
启动 Web 界面后,点击顶部导航栏的「看板」标签,即可进入看板视图页面。页面默认展示以任务状态划分的列布局。
异步加载指示
看板页面采用 bind-first 启动:浏览器界面会立即显示骨架屏和加载阶段文案(如扫描任务、构建索引),后台完成 Core 语料初始化后再渲染真实内容。如果初始化过程中出错,页面会显示可重试的错误面板,点击即可重新加载。加载期间侧边栏保持挂载,仅任务计数显示为加载状态。
隐藏空状态列
当项目使用 5+ 个状态而多数任务集中在少数几个状态时,看板会出现大量空列造成杂乱。可在设置面板(或 config.yml 的 hide_empty_columns)开启隐藏空状态列:启用后,当前没有任何任务的空状态列会被自动隐藏,看板只展示至少有一个任务的状态列。
拖拽任务期间所有状态列保持可见,以便将任务放入目标列。拖拽结束后,空列再次隐藏。
拖放变更任务状态
看板页面将任务按状态分列展示,常见列包括:
- Todo — 待办任务
- In Progress — 进行中任务
- Done — 已完成任务
将鼠标悬停在目标任务卡片上,按住左键拖动卡片,移动到目标状态列后松开,任务状态即自动更新。状态变更会实时同步到对应的 Markdown 文件。
拖动过程中,目标列会高亮显示,提示可放置区域。
拖拽行为细节
- 保持列排序:如果当前列已手动排序(如按 ID 降序),拖拽期间视觉顺序保持稳定,不会在光标下重新排序
- 跨列精确放置:将任务拖入目标列时,可以放置到该列中任意两个现有任务之间。系统会根据你松开鼠标时的视觉位置插入任务,而非简单地追加到列末尾
- 跨列后排序恢复:任务跨列放置后,目标列的手动排序会自动清除,恢复为默认的 ordinal 排序,确保新任务出现在正确位置
里程碑泳道
若项目中存在里程碑,看板页面支持以里程碑为维度划分泳道。在页面上方找到里程碑筛选或视图切换控件,点击选择「按里程碑分组」。
每个里程碑展开为一个横向泳道,泳道内再按状态分列显示任务。这种视图便于追踪特定里程碑的推进情况。
标签筛选
页面顶部提供标签筛选下拉框。点击下拉框,勾选需要筛选的标签,看板将只显示带有选中标签的任务。
- 支持多选标签,任务只需匹配任一选中标签即可显示
- 取消勾选或点击「清除筛选」可恢复显示全部任务
自定义标签颜色
每个标签右侧有一个彩色小方块(颜色 swatch),点击可打开颜色选择器,为标签设置自定义颜色。
- 预设调色板:提供 17 种预设颜色,自动适配亮色/暗色模式
- 持久化:非默认颜色配置保存到
backlog/config.yml的label_colors字段,重启服务后仍然有效 - 默认恢复:选择「Default」并保存可恢复为系统默认灰色
- 卡片渲染:看板任务卡片上的标签会显示配置的背景色,未配置的标签保持默认灰色
标签颜色配置按项目独立存储,不同项目可拥有不同的标签配色方案。
任务卡片标签
每张任务卡片底部会显示该任务的标签列表。
- 宽度自适应:卡片会根据自身可用宽度动态计算能显示多少标签,尽可能多地展示,超出部分以
+N折叠 - 实时响应:调整窗口大小或侧边栏宽度时,标签显示数量会自动重新计算
- 标签颜色:已配置自定义颜色的标签会以对应背景色显示
任务卡片验收标准进度
对于状态为 In Progress 且包含验收标准(AC)的任务,卡片标题行会显示圆角进度条和已勾选/总数分数(如 2/4),进度条与任务 ID 同处一行弹性排列:
- 进度从验收标准实时计算,不持久化为单独字段
- 没有验收标准的任务不显示任何进度指示
- 全部验收标准勾选后,任务仍保持 In Progress 状态,需手动拖拽到 Done 列完成
- 进度条使用翠绿填充配灰色轨道,亮 / 暗主题下均保证与卡片背景的对比度
任务列表视图同样在标题列显示该进度指示(固定宽度 80px 的进度条,每行占位一致)。
显示已完成任务
看板与任务列表的筛选栏提供「显示已完成」(Show completed)复选框:
- 勾选后,
backlog/completed/目录中的已完成记录与活跃任务走同一条筛选、排序与分组管线一并展示;卡片和列表行以「Completed」徽章标记 - 勾选状态同步到地址栏(
completed=1),可随链接分享、刷新后保留;它计入激活筛选,「清除筛选」会一并取消勾选 - 已完成卡片不可拖拽(状态无法写回 completed 目录),点击打开的是只读弹窗:展示全部内容但不提供编辑、状态变更等操作按钮,标题栏下方显示只读提示
- 未勾选时不产生任何额外查询开销
多选与批量拖拽
看板支持一次移动多张卡片:
- 多选:
Ctrl/Cmd + 点击切换单张卡片的选中状态,Shift + 点击按区间选择;选中后页面顶部出现选择工具栏,显示选中数量并提供清除入口 - 批量拖拽:拖动任一已选中卡片即可整组移动,拖拽幽灵上的徽章显示实际移动的卡片数;对未选中的卡片按住
Ctrl/Cmd起拖会将其并入当前选择 - 定点插入:批量放置支持精确插入到目标列任意两卡之间,落点顺序按看板阅读顺序一并提交;目标列若处于手动排序状态,放置时自动回到默认排序以保证落点正确
- 跨分支卡片不参与批量写入;在原地松手属于无操作,不会发出请求
列内排序
每列右上角有一个「⋮」列操作按钮,点击展开排序菜单:
本地排序(6 个选项)
菜单上半部分提供 6 个纯展示排序选项:
- ID ↑ / ID ↓:按任务 ID 升序/降序排列
- 标题 ↑ / 标题 ↓:按任务标题字母顺序升序/降序排列
- 优先级 ↑ / 优先级 ↓:按优先级升序/降序排列
本地排序仅影响当前看板列的展示顺序,不会保存到后端。选中后再次展开菜单,激活的排序项会以深色背景高亮显示,右侧出现 × 按钮,点击即可清除排序,恢复按原始顺序(ordinal)显示。
拖拽任务卡片或执行下方的「Apply Priority Order」后,本地排序会自动清除。
按创建日期排序
列菜单在本地排序之外还提供按创建日期排序操作(升序/降序)。系统使用 parseStoredUtcDate 比较各任务的 createdDate 字段,缺失或无效日期的任务排在末尾,任务 ID 作为平局决胜。该排序与优先级排序一样作用于当前列。
跨分支任务的列菜单
当某一列包含来自其他分支的任务(cross-branch tasks)时,列操作菜单仍然可见,但部分操作会受到限制:
- 本地排序选项(ID/标题/优先级)仍可正常使用,因为这些仅影响视图展示顺序,不会修改任何持久化数据
- Apply Priority Order 按钮会被隐藏,因为该操作会修改当前列所有任务的
ordinal字段,而跨分支任务不应被当前分支的排序操作影响
跨分支任务在卡片上会显示分支来源标识。当列中所有任务均属于当前分支时,Apply Priority Order 恢复正常显示。
按优先级重排(保存)
菜单底部(以分隔线与上方隔开)提供「按优先级重排(保存)」选项:
- 一键将当前列所有任务按优先级(高 → 中 → 低)重新排列
- 新顺序会保存到后端,刷新页面后仍然保持
- 图标为列表+向上箭头,表示这是一个持久化操作
任务卡片日期指示器
看板中的每张任务卡片会显示日期信息(如已设置):
- 头部:日历图标 +
plannedStart ~ plannedEnd计划日期范围。当年份与当前年一致时自动省略年份,减少视觉噪音。 - 脚部:时钟图标 +
dueDate截止日期,紧邻相对创建时间显示。 - 完成时间:处于终态(如 Done)且有
actualEnd的卡片,在脚部负责人右侧显示实际完成时间(本地时间M/D HH:mm,跨年显全年;鼠标悬停显示存储的 UTC 值)。 - 逾期高亮:当任务未处于终端状态(Done / Cancelled)且截止日期已过时,
dueDate以红色高亮显示(text-red-600 dark:text-red-400 font-semibold)。
打开任务详情
点击看板中的任意任务卡片,即可打开任务详情模态框:
- 底层看板页面保持可见,地址栏自动更新为
/task/:id/:title - 支持依赖项钻取导航:在任务详情中点击依赖标签可进一步查看子任务
- 任务详情中包含 Comments 区域,可查看和追加评论(编辑模式下)
- 验收标准(AC)列表项会显示序号编号(
#1、#2…),便于引用与沟通 - 关闭模态框后回到原来的看板视图,保留当前的标签筛选和列排序状态
- 直接访问
/task/:id链接时,系统会以看板为背景打开对应任务
看板中的任务卡片本身不支持拖放与点击同时触发;开始拖拽后松开即完成状态变更,不会误打开任务详情。
任务详情键盘快捷键
打开任务详情后,以下快捷键可快速操作:
| 按键 | 操作 |
|---|---|
e / E |
进入编辑模式 |
c |
变更状态 |
d |
删除任务 |
p |
打印 |
Escape |
关闭模态框 / 取消编辑 |
Cmd/Ctrl + S |
保存修改 |
当焦点在 input、textarea、select 或 contenteditable 等可编辑元素内时,预览态快捷键(e/E/c/d/p)会被抑制,不会拦截正常的文字输入。编辑态的 Escape 和 Cmd/Ctrl + S 在可编辑目标内仍然生效。
实时更新
看板视图支持多人协作场景下的实时同步:
- 其他用户在 Web 界面中拖放任务,你的页面会自动更新卡片位置
- 外部编辑器修改任务文件后,看板列中的卡片内容和状态会自动刷新
- 新建或删除任务后,看板会即时反映变化,无需手动刷新
- 里程碑、文档、决策与 Wiki 的变更同样通过 WebSocket 按类型广播,对应列表原地增量刷新
刷新采用原地调和(reconcile)策略:未变化的数据保持原对象引用,已打开的页面、滚动位置与筛选状态不受广播影响;仅在首次加载、配置变更或增量刷新失败时才回退为整页重载。