194 lines
5.7 KiB
Markdown
194 lines
5.7 KiB
Markdown
# 消息台重构任务单(卡片改列表 Feed)
|
||
|
||
> 目标:把消息台从双列卡片重构为高密度列表 Feed,保证用户可读、可操作、可追溯。
|
||
> 范围:仅前端(不改后端接口)。
|
||
> 新增硬约束:信息流严格按时间倒序,最新在上。
|
||
|
||
---
|
||
|
||
## 0. 实施原则(先定边界)
|
||
|
||
- 不改 `backend` 接口与字段,仅做前端映射/渲染重构。
|
||
- 保持 `buildInboxView` 领域聚合能力不变,避免影响 TopBar 与其他入口。
|
||
- 用户视角文案与技术字段解耦:技术字段可在行内展开区可见,默认隐藏。
|
||
- 主列表排序规则统一:`updated_at || created_at` 降序(最新在上)。
|
||
|
||
---
|
||
|
||
## 1. 现状定位(SCOUT)
|
||
|
||
- [x] 定位页面入口:`frontend/src/pages/InboxPage.tsx`
|
||
- [x] 定位数据聚合:`frontend/src/lib/inbox.ts`
|
||
- [x] 定位类型定义:`frontend/src/types/inbox.ts`
|
||
- [x] 定位顶部铃铛预览依赖:`frontend/src/components/layout/TopBar.tsx`
|
||
- [x] 确认以下信息:
|
||
- [x] 列表数据来源接口(notifications + ai-pmo work-items)
|
||
- [x] 当前卡片组件边界(`InboxCard`)
|
||
- [x] Tab 分类逻辑位置(`activeSection` + `display_kind`)
|
||
|
||
---
|
||
|
||
## 2. 爆炸半径评估(TRACE)
|
||
|
||
- [x] 执行 `FIND_USAGE buildInboxView`
|
||
- [x] 执行 `FIND_USAGE InboxDisplayKind`
|
||
- [x] 执行 `FIND_USAGE InboxSectionKey`
|
||
- [x] 执行 `FIND_USAGE getInboxSectionLabel`
|
||
- [x] 评估结论记录:
|
||
- [x] `InboxPage` 改造是否会影响 `TopBar` 预览行为
|
||
- [x] 是否需要保持 `action_required|auto_running|auto_done|info` 内部枚举不变
|
||
|
||
> 说明:本次推荐保持内部枚举不变,仅在 UI 层映射为“待处理/进行中/已完成/全部”。
|
||
|
||
---
|
||
|
||
## 3. 组件与文件改造清单(SNIPER)
|
||
|
||
### 3.1 新增文件
|
||
|
||
- [x] `frontend/src/components/inbox/InboxListItem.tsx`
|
||
- [x] `frontend/src/lib/inboxTextMap.ts`
|
||
- [x] `frontend/src/lib/formatInboxTime.ts`
|
||
|
||
### 3.2 修改文件
|
||
|
||
- [x] `frontend/src/pages/InboxPage.tsx`
|
||
- [x] `frontend/src/components/layout/TopBar.tsx`(复用统一时间格式函数,可选;本次保持现状未改)
|
||
- [x] `CLAUDE.md`(目录结构变更同步)
|
||
|
||
---
|
||
|
||
## 4. 列表行设计规范
|
||
|
||
### 4.1 两种行高
|
||
|
||
- 需要操作行:72px
|
||
- 左:状态图标 + 标题 + 副标题
|
||
- 右:项目名、时间、`主操作`、`详情`
|
||
- 纯通知行:52px
|
||
- 左:状态图标 + 标题 + 副标题
|
||
- 右:项目名、时间、`详情`
|
||
|
||
### 4.2 行内交互
|
||
|
||
- [x] 点击行本体:展开/收起详情(inline,不跳页)
|
||
- [x] 点击主操作按钮:执行动作,不触发行展开
|
||
- [x] 点击详情按钮:仅展开详情(或打开详情弹窗,二选一,需统一)
|
||
|
||
### 4.3 详情展开区(默认折叠)
|
||
|
||
- [x] 显示技术字段:`intent` 原始值、typed actions、`chat_id`、完整时间戳、重复次数、撤销信息
|
||
- [x] 默认主行不出现技术字段
|
||
|
||
---
|
||
|
||
## 5. 文案映射策略(用户视角)
|
||
|
||
### 5.1 intent 映射(显示层)
|
||
|
||
- `signal_source.onboard` → `信号源接入`
|
||
- `signal.create` → `新信号识别`
|
||
- `project.create` → `项目已创建`
|
||
- `query.read_only` → `信息查询`
|
||
- `followup.confirm` → `确认执行`
|
||
- `followup.continue` → `跟进处理`
|
||
- `ignore` → `系统忽略`
|
||
|
||
### 5.2 状态映射(显示层)
|
||
|
||
- `action_required` → `待处理`
|
||
- `auto_running` → `进行中`
|
||
- `auto_done` → `已完成`
|
||
- `info` → `通知`
|
||
|
||
### 5.3 标题清洗规则
|
||
|
||
- [x] 优先使用 `notification.title` / `work_item.title`
|
||
- [x] 包含 `给项目ID:` 前缀时仅保留后半段
|
||
- [x] `registry#` 替换为 `历史记录`
|
||
- [x] 去除明显技术噪音字段展示(默认行)
|
||
|
||
---
|
||
|
||
## 6. Tab 重构(不改底层枚举)
|
||
|
||
## 用户 Tab(展示)
|
||
|
||
- `待处理`(映射 `action_required`)
|
||
- `进行中`(映射 `auto_running`)
|
||
- `已完成`(映射 `auto_done`)
|
||
- `全部`(映射 `all`)
|
||
|
||
## 计数规则
|
||
|
||
- [x] 每个 Tab 角标来自当前项目过滤后的实时集合
|
||
- [x] `全部 = 待处理 + 进行中 + 已完成 + 通知`(若通知不单列则并入全部但不单独显示)
|
||
|
||
---
|
||
|
||
## 7. 时间与排序规则(强制)
|
||
|
||
### 7.1 时间显示
|
||
|
||
- 1 分钟内:`刚刚`
|
||
- 1 小时内:`X 分钟前`
|
||
- 当天:`HH:mm`
|
||
- 昨天:`昨天 HH:mm`
|
||
- 更早:`MM-DD HH:mm`
|
||
|
||
### 7.2 排序(硬约束)
|
||
|
||
- 主 Feed 严格按 `updated_at || created_at` 降序。
|
||
- 最新消息永远在最上方。
|
||
- Tab 切换、搜索、项目筛选后仍保持同一倒序规则。
|
||
- 如时间缺失:降级到 `created_at`;仍缺失时排到分组末尾。
|
||
|
||
---
|
||
|
||
## 8. 首屏密度与布局调整
|
||
|
||
- [x] 折叠/压缩顶部指标区(避免占用过高首屏)
|
||
- [x] 列表单列展示(移动端与桌面统一 Feed 心智)
|
||
- [x] 状态筛选仅作为过滤器,不采用任何看板分栏布局
|
||
- [x] 验证 1080p 下首屏可见条数 `>= 8`
|
||
|
||
---
|
||
|
||
## 9. 验收标准(Definition of Done)
|
||
|
||
- [x] 一屏可见条数 `>= 8`
|
||
- [x] 主列表默认无技术字段暴露(展开区除外)
|
||
- [x] Tab 筛选准确:待处理/进行中/已完成/全部
|
||
- [x] 时间显示全部为相对/友好格式
|
||
- [x] 点击行可展开/收起详情
|
||
- [x] 主 Feed 严格“最新在上”
|
||
- [x] `npm run build` 通过
|
||
- [x] `tsc --noEmit` 零错误
|
||
|
||
---
|
||
|
||
## 10. 自检命令(前端)
|
||
|
||
```bash
|
||
cd frontend
|
||
npm run build
|
||
npx tsc --noEmit
|
||
```
|
||
|
||
技术词裸露扫描(渲染主行):
|
||
|
||
```bash
|
||
rg -n "typed actions|read_only|registry#|chat_id" frontend/src/pages frontend/src/components/inbox
|
||
```
|
||
|
||
> 期望:仅允许出现在“展开详情区”相关代码路径,不允许出现在默认主行渲染文本。
|
||
|
||
---
|
||
|
||
## 11. 交付物
|
||
|
||
- [x] 变更文件清单
|
||
- [x] 首屏可见条数描述(含测试分辨率)
|
||
- [x] 排序规则验证说明(最新在上)
|
||
- [x] 构建与类型检查结果
|