Files
BossAi/pmdocs/2-task-bossai-uiux.md
T
selfreleaseandDevin 4de36547cd
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled
feat: BossAi v2.0 UI/UX 重构 + 看板断点续接 + 多轮上下文
- 新增 web2/ 前端:任务卡看板、风险雷达、决策日志、我的团队、快捷指令
- ChatPanel 增强:风险卡置顶、案卡接入、起诉状向导、语音输入
- 事项看板:点击查看详情弹窗、断点续接(恢复历史对话+matterId)
- 保密模式恢复:密码验证后重建内存 session,保留多轮上下文
- 多轮对话:ask/ask-stream/ask-analyze 注入 session 历史,AI 有上下文
- 追问优化:紧扣用户问题,不再偏离主题(社保问社保,工伤问工伤)
- 对话区可滚动,输入区固定可见
- 状态机放宽:允许从任意非终态转到 pending_expert
- session 存活检查端点,后端重启后自动重建 session
- DB migration:风险推送表、案卡表

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-31 08:38:33 +08:00

470 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BossAi UIUX 重构任务拆分
- **版本**:v1.0
- **状态**:已交付(三阶段全部完成)
- **日期**:2026-08-30
- **关联**:PRD v2.0、ADR-002、CHG-20260830-001
- **执行前读取顺序**:run.md → 本文档 → CHG-20260830-001 → 1-prd-bossai.md → ADR-001/002
---
## 总览
三阶段,每阶段可独立交付。任务编号一旦分配不复用。
| 阶段 | 周期 | 核心交付 | TASK 范围 |
|---|---|---|---|
| 一 | 2 周 | 老板台 + 案卡看板 + 移动端底部 Tab | TASK-001 ~ TASK-012 |
| 二 | 2 周 | 快捷指令 + 我的团队 + 语音输入 | TASK-013 ~ TASK-020 |
| 三 | 2 周 | 风险雷达 + 决策日志 + ChatPanel 升级 | TASK-021 ~ TASK-028 |
**依赖关系**:
```
阶段一 ──→ 阶段二 ──→ 阶段三
TASK-003(DB) → TASK-004(API) → TASK-005~008(前端)
TASK-006(案卡前端) → TASK-013(快捷指令)
TASK-010(团队后端) → TASK-011(团队前端)
```
---
## 阶段一:老板台 + 案卡看板(P0,2 周)
### TASK-001:DB migration — 案卡表
- **描述**:新增 `matters` 表,扩展 `sessions` 表关联案卡
- **依赖**:无
- **验收**:
- [x] `matters` 表创建,字段见 PRD §7.1
- [x] `matters.code` 唯一索引
- [x] `matters.user_id` 索引
- [x] `sessions` 表新增 `matter_id` nullable 外键
- [x] migration 脚本 + rollback 脚本
- [x] seed 1 条测试案卡
- **测试**:migration up/down 各跑一次,schema 校验
### TASK-002:DB migration — 专家关系表
- **描述**:新增 `expert_relations` 表
- **依赖**:无
- **验收**:
- [x] `expert_relations` 表创建,字段见 PRD §7.3
- [x] `(user_id, expert_id)` 联合唯一索引
- [x] migration + rollback
- **测试**:migration up/down 校验
### TASK-003:后端 — 案卡 CRUD API
- **描述**:实现案卡增删改查端点
- **依赖**:TASK-001
- **端点**:
- `GET /matters?status=xxx` — 按状态分组返回案卡看板
- `POST /matters` — 创建案卡(绑定 session_id)
- `GET /matters/{id}` — 案卡详情(含会话消息摘要)
- `PATCH /matters/{id}/status` — 更新状态
- `POST /matters/{id}/close` — 闭环(可选填 execution_result)
- **验收**:
- [x] 租户隔离(user_id 校验)
- [x] 状态机校验(非法转换 422)
- [x] code 自动生成 `MTR_{YYYYMMDD}_{seq}`
- [x] OpenAPI 同步
- [x] 单元测试覆盖 CRUD + 权限 + 状态机
- **测试**:pytest 覆盖正常/越权/非法状态转换
### TASK-004:后端 — 案卡状态自动流转
- **描述**:在现有 `ask-analyze` 流程中自动推进案卡状态
- **依赖**:TASK-003
- **验收**:
- [x] 首次提问时自动创建案卡(status=new)
- [x] AI 返回 questions 时 → status=asking_facts
- [x] 事实提交后 → status=pending_confirm
- [x] 用户确认分析 → status=analyzing
- [x] 流式分析完成 → status=analyzing(保持)
- [x] 问专家 → status=pending_expert
- [x] 不破坏无案卡的旧会话(matter_id nullable)
- **测试**:集成测试覆盖全状态流转
### TASK-005:后端 — 老板台聚合 API
- **描述**:新增 `/dashboard/today` 聚合端点
- **依赖**:TASK-003
- **端点**:`GET /dashboard/today`
- **返回**:
```json
{
"greeting": "早上好,张总",
"high_risks": [{ "matter_id": 1, "title": "...", "level": "red" }],
"pending_confirm": [{ "matter_id": 2, "title": "...", "scene": "legal" }],
"expert_replies": [{ "consultation_id": 1, "expert_name": "...", "snippet": "..." }],
"health_score": { "legal": 80, "operation": 60, "compliance": 70 }
}
```
- **验收**:
- [x] 聚合高风险案卡(risk_level=red/orange)
- [x] 聚合待确认案卡(status=pending_confirm)
- [x] 聚合未读专家回复
- [x] health_score 基于案卡风险分布计算
- [x] 单元测试
- **测试**:pytest 覆盖空数据/正常数据
### TASK-006:前端 — 导航重构(共享 NavConfig)
- **描述**:合并 Sidebar/MobileNav 的重复常量为单一 `NavConfig`
- **依赖**:无
- **验收**:
- [x] 新建 `src/lib/nav-config.ts`,导出 `USER_NAV`、`EXPERT_NAV`、`ADMIN_NAV`
- [x] Sidebar 和 MobileNav 消费同一配置
- [x] 补齐 MobileNav 缺失的"我的画像"入口
- [x] 补齐 Header 标题映射(/history、/profile、/admin/*)
- [x] 新增路由:/matters、/team、/decisions-log、/me
- [x] lint + build 通过
- **测试**:手动验证导航一致性
### TASK-007:前端 — 老板台页面
- **描述**:重构 Dashboard 为"老板台"
- **依赖**:TASK-005、TASK-006
- **页面**:`src/pages/Dashboard.tsx`
- **验收**:
- [x] 顶部问候语(按时段)
- [x] 高风险提醒卡片(红/橙底,[立即处理]按钮)
- [x] 待确认事项列表([去确认]跳转案卡)
- [x] 专家回复摘要([查看回复]跳转)
- [x] 经营健康度条形图(recharts)
- [x] 加载/空态/错误状态覆盖
- [x] 移动端适配
- **测试**:手动验证 + 响应式
### TASK-008:前端 — 事项看板页面
- **描述**:新增案卡看板
- **依赖**:TASK-003、TASK-006
- **页面**:`src/pages/Matters.tsx`
- **验收**:
- [x] 看板分列:待补充事实 / 待确认 / 分析中 / 待专家 / 已闭环
- [x] 案卡卡片:图标+标题+场景标签+时间+[继续/确认]按钮
- [x] 点击案卡 → 跳转对应 ChatPanel 并恢复会话
- [x] 移动端横向滚动看板列
- [x] 案卡左滑归档(移动端手势)
- [x] 加载/空态(引导完善画像)
- **测试**:手动验证 + 响应式
### TASK-009:前端 — 案卡组件抽取
- **描述**:抽取 `MatterCard` 公共组件
- **依赖**:TASK-008
- **组件**:`src/components/common/MatterCard.tsx`
- **验收**:
- [x] props: matter / onClick / onArchive
- [x] 状态色映射(new=blue, asking_facts=amber, pending_confirm=indigo, analyzing=purple, pending_expert=orange, closed=gray)
- [x] 更新 `ui-components.md` 登记
- **测试**:组件渲染测试
### TASK-010:前端 — ChatPanel 接入案卡
- **描述**:ChatPanel 新建会话时创建案卡,状态随会话流转
- **依赖**:TASK-004、TASK-008
- **改动**:`src/components/common/ChatPanel.tsx`
- **验收**:
- [x] 新建会话时调用 `POST /matters` 绑定
- [x] 顶部显示案卡标题(可编辑)
- [x] 状态流转时调用 `PATCH /matters/{id}/status`
- [x] 分析完成后显示"闭环"按钮
- [x] 闭环时弹窗可选填执行结果
- [x] 不破坏无案卡的旧会话
- **测试**:集成测试覆盖创建→流转→闭环
### TASK-011:前端 — 移动端底部 Tab + FAB
- **描述**:移动端导航重构为底部 Tab + FAB
- **依赖**:TASK-006
- **组件**:`src/components/layout/BottomTab.tsx`、`src/components/layout/Fab.tsx`
- **验收**:
- [x] 底部 4 Tab:老板台 / 事项 / 团队 / 我
- [x] "我"页聚合 profile/history/settings/knowledge 入口
- [x] FAB(+) 全局浮动,点击弹出快捷指令占位(阶段二实现)
- [x] md 以上隐藏底部 Tab,显示 Sidebar
- [x] 触控区 ≥ 44×44px
- [x] 活跃 Tab 高亮
- **测试**:响应式手动验证
### TASK-012:阶段一构建验证
- **描述**:lint + typecheck + build + 手动冒烟
- **依赖**:TASK-001 ~ TASK-011
- **验收**:
- [x] `npm run lint` 无 error
- [x] `npm run build` 通过
- [x] 后端 pytest 通过
- [x] 手动冒烟:老板台→案卡→ChatPanel→闭环 全流程
- [x] 移动端底部 Tab 全功能可达
- [x] 更新 `run.md`(若有新命令)
- [x] 更新 `ui-components.md`
---
## 阶段二:快捷指令 + 我的团队(P1,2 周)
### TASK-013:后端 — 快捷指令 API
- **描述**:新增 `/quick-commands` 画像驱动指令生成
- **依赖**:无
- **端点**:`GET /quick-commands`
- **返回**:
```json
{
"legal": [{ "id": "contract_review", "label": "查合同风险", "template": "我有一份合同,帮我看看..." }],
"decision": [{ "id": "expand", "label": "该不该扩张", "template": "我在考虑开新店..." }],
"life": [...]
}
```
- **验收**:
- [x] 基于画像行业/规模生成个性化指令
- [x] 画像不全时返回通用指令 + 缺口提示
- [x] 指令模板预填问题,留关键细节占位符
- [x] 单元测试
- **测试**:pytest 覆盖画像完整/缺失
### TASK-014:前端 — 快捷指令面板
- **描述**:FAB 点击弹出底部抽屉
- **依赖**:TASK-011、TASK-013
- **组件**:`src/components/common/QuickCommandPanel.tsx`
- **验收**:
- [x] 底部抽屉动画(300ms slide-up)
- [x] 分组展示:法务/经营/生活
- [x] 指令网格卡片(图标+标签)
- [x] 点击指令 → 预填模板到 ChatPanel 输入框 → 跳转对应页面
- [x] 底部语音输入按钮 + 文字输入框
- [x] 画像不全时显示"完善画像解锁更精准建议"
- [x] 抽屉可下拉关闭
- **测试**:手动验证 + 响应式
### TASK-015:前端 — 语音输入
- **描述**:快捷指令面板支持语音输入
- **依赖**:TASK-014
- **验收**:
- [x] 使用 Web Speech API(webkitSpeechRecognition)
- [x] 中文识别(lang='zh-CN')
- [x] 识别结果实时填入输入框
- [x] Safari/不支持浏览器隐藏语音按钮(降级)
- [x] 识别中状态动画
- **测试**:Chrome 验证,Safari 降级验证
### TASK-016:后端 — 我的团队 API
- **描述**:新增 `/team` 端点,聚合专家关系
- **依赖**:TASK-002
- **端点**:`GET /team`
- **返回**:
```json
[{
"expert_id": 1, "name": "王律师", "avatar": "...", "categories": ["劳动法"],
"online": true, "consultation_count": 3, "last_consulted_at": "...",
"last_topic": "用工纠纷"
}]
```
- **验收**:
- [x] 自动从 consultation 记录聚合关系
- [x] 首次咨询自动创建 expert_relations 记录
- [x] 后续咨询更新 count/last_consulted_at
- [x] 单元测试
- **测试**:pytest 覆盖聚合逻辑
### TASK-017:前端 — 我的团队页面
- **描述**:重构 Experts 为"我的团队"
- **依赖**:TASK-016、TASK-006
- **页面**:`src/pages/Team.tsx`(替代/兼容 Experts)
- **验收**:
- [x] "我的团队"列表:头像+姓名+擅长+在线状态+关系深度
- [x] 每人卡片:[发消息] [新咨询] 按钮
- [x] [新咨询] → 跳转 ChatPanel,自动带上历史上下文摘要
- [x] 底部"找新专家"入口 → 跳转完整专家库
- [x] 空态:"你还没有咨询过专家,去逛逛专家库"
- [x] 保留原有 Experts 页面作为完整专家库(/experts)
- **测试**:手动验证
### TASK-018:前端 — 团队一键咨询上下文
- **描述**:从"我的团队"发起咨询时自动带上历史
- **依赖**:TASK-017
- **验收**:
- [x] 跳转 ChatPanel 时传入 `expertId` + `lastTopic`
- [x] ChatPanel 顶部显示"咨询王律师·上次话题:用工纠纷"
- [x] 首条消息自动带上"基于上次咨询..."上下文
- [x] 问专家弹窗默认选中该专家
- **测试**:手动验证上下文传递
### TASK-019:前端 — 移动端"我"页面
- **描述**:新增移动端"我"聚合页
- **依赖**:TASK-011
- **页面**:`src/pages/Me.tsx`
- **验收**:
- [x] 头像+姓名+行业规模标签
- [x] 入口列表:我的画像 / 对话历史 / 知识库 / 设置
- [x] 仅移动端底部 Tab 可达,桌面端无此路由
- [x] 桌面端这些入口仍在 Sidebar
- **测试**:响应式验证
### TASK-020:阶段二构建验证
- **描述**:lint + typecheck + build + 手动冒烟
- **依赖**:TASK-013 ~ TASK-019
- **验收**:
- [x] lint/build 通过
- [x] 后端 pytest 通过
- [x] 冒烟:FAB→快捷指令→预填→提问→问专家→我的团队
- [x] 语音输入 Chrome 验证
- [x] 更新 `ui-components.md`
---
## 阶段三:风险雷达 + 决策日志 + ChatPanel 升级(P1-P2,2 周)
### TASK-021:DB migration — 风险推送表
- **描述**:新增 `risk_alerts` 表
- **依赖**:无
- **验收**:
- [x] `risk_alerts` 表创建,字段见 PRD §7.2
- [x] `(user_id, read_at)` 索引
- [x] migration + rollback
- **测试**:migration 校验
### TASK-022:后端 — 风险雷达扫描任务
- **描述**:定时扫描知识库新规 + 画像匹配,生成推送
- **依赖**:TASK-021
- **验收**:
- [x] 定时任务(APScheduler 或简单轮询),每日 1 次
- [x] 扫描知识库近 7 天新增文档,匹配用户画像行业
- [x] 生成 risk_alerts 记录(level=blue/orange)
- [x] 文档上传后触发即时扫描(level=red/orange/blue)
- [x] 单元测试
- **测试**:pytest mock 定时任务
### TASK-023:后端 — 风险推送 API
- **描述**:风险推送查询与标记已读
- **依赖**:TASK-022
- **端点**:
- `GET /risk-alerts?unread=true` — 未读推送列表
- `POST /risk-alerts/{id}/read` — 标记已读
- **验收**:
- [x] 租户隔离
- [x] unread 过滤
- [x] 单元测试
- **测试**:pytest
### TASK-024:前端 — 老板台风险推送卡片
- **描述**:老板台集成风险推送
- **依赖**:TASK-005、TASK-023
- **改动**:`src/pages/Dashboard.tsx`
- **验收**:
- [x] 高风险推送置顶(红/橙底)
- [x] [立即处理] → 跳转相关案卡或知识库文档
- [x] [稍后] → 标记已读
- [x] Header 铃铛角标显示未读数
- [x] 点击铃铛 → 下拉推送列表
- **测试**:手动验证
### TASK-025:前端 — 决策日志页面
- **描述**:新增决策日志
- **依赖**:TASK-003
- **页面**:`src/pages/DecisionsLog.tsx`
- **验收**:
- [x] 按月分组展示闭环案卡
- [x] 每条:日期+场景图标+标题+决定摘要+执行情况标记
- [x] [标记结果] → 弹窗选 顺利/受阻/未执行 + 备注
- [x] 月度统计条:本月决策数、已执行率
- [x] 空态:"你还没有闭环的决策,去处理进行中的事项"
- **测试**:手动验证
### TASK-026:前端 — ChatPanel 风险卡置顶
- **描述**:风险卡从消息流提取为置顶固定卡片
- **依赖**:TASK-010
- **改动**:`src/components/common/ChatPanel.tsx`、`RiskCardView.tsx`
- **验收**:
- [x] 分析完成后风险卡固定在对话区顶部
- [x] 可折叠/展开
- [x] [分享] 按钮 → 复制链接或文本
- [x] [导出] 按钮 → 下载 PDF/Markdown
- [x] 消息流中保留风险卡引用锚点
- **测试**:手动验证
### TASK-027:前端 — 起诉状三步向导
- **描述**:要素式起诉状改为三步向导
- **依赖**:TASK-010
- **组件**:`src/components/common/FilingWizard.tsx`
- **验收**:
- [x] 步骤1 预览:展示模板+已填要素
- [x] 步骤2 编辑:可修改要素值
- [x] 步骤3 导出:下载 / 发送给专家 / 复制
- [x] 步骤指示器
- [x] 替换当前一键生成按钮
- [x] 更新 `ui-components.md`
- **测试**:手动验证
### TASK-028:阶段三构建验证 + 三端视觉对齐
- **描述**:lint + typecheck + build + 三端视觉对齐
- **依赖**:TASK-021 ~ TASK-027
- **验收**:
- [x] lint/build 通过
- [x] 后端 pytest 通过
- [x] C 端主色 indigo-600 落地
- [x] Admin Header 深色 + amber-400 + ADMIN 徽章
- [x] 冒烟:风险推送→老板台→决策日志→起诉状向导
- [x] 更新 `run.md`(定时任务配置)
- [x] 更新 `ui-components.md`
- [x] 更新 `CHANGELOG.md`
---
## 执行规则
1. **按阶段顺序执行**,阶段内任务可并行(后端/前端分离)
2. **每个 TASK 完成后**:
- 标记 `[x]`
- 更新 `ui-components.md`(若涉及组件)
- 更新 `run.md`(若涉及新命令/配置)
3. **DB 变更**必须先 migration 再 API 再前端
4. **不删无关代码**,旧页面保留为兼容入口直到新页面验证通过
5. **commit 前缀**:`feat(uiux)` / `feat(api)` / `feat(db)` / `fix` / `refactor`
6. **PR ≤ 400 行**,单一职责
---
## 验收检查清单(整体)
### 阶段一完成标准
- [x] 老板台展示今日要事
- [x] 案卡看板全状态流转
- [x] ChatPanel 接入案卡
- [x] 移动端底部 Tab 可用
- [x] build + pytest 通过
### 阶段二完成标准
- [x] FAB 快捷指令基于画像
- [x] 语音输入 Chrome 可用
- [x] 我的团队显示关系
- [x] 一键咨询带上上下文
- [x] build + pytest 通过
### 阶段三完成标准
- [x] 风险推送出现在老板台
- [x] 决策日志可标记结果
- [x] 风险卡置顶可分享
- [x] 起诉状三步向导
- [x] 三端视觉对齐
- [x] build + pytest 通过
- [x] CHANGELOG 同步