feat: BossAi v2.0 UI/UX 重构 + 看板断点续接 + 多轮上下文
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled

- 新增 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>
This commit is contained in:
selfrelease
2026-08-31 08:38:33 +08:00
co-authored by Devin
parent 7a788bf8dc
commit 4de36547cd
88 changed files with 15237 additions and 62 deletions
+294
View File
@@ -0,0 +1,294 @@
# BossAi 产品需求文档(PRD)
- **版本**:v2.0(UIUX 重构)
- **状态**:待确认
- **日期**:2026-08-30
- **关联**:ADR-001 前端技术栈、ADR-002 UIUX 范式转变、CHG-20260830-001 UIUX 重构
---
## 1. 产品定位
**一句话**:BossAi 是面向中国中小企业老板的"经营智囊",把 AI 法务参谋、经营决策、生活助理、情绪支持整合为以"事项"为中心的主动式助手。
**定位转变**(v1.0 → v2.0):
| 维度 | v1.0(现状) | v2.0(本次重构) |
|---|---|---|
| 产品形态 | AI 对话工具 | 经营智囊(任务卡片优先) |
| 交互范式 | 老板主动问 | AI 主动推送 + 老板主动问 |
| 信息组织 | 按场景分页 | 按"我的事项"聚合,场景为标签 |
| 画像作用 | 存着、只读 | 驱动个性化指令与推送 |
| 专家关系 | 目录式 | "我的团队"关系视图 |
| 移动端 | 桌面缩放 | 原生移动体验(底部 Tab + FAB) |
---
## 2. 目标用户
### 2.1 主用户:中小企业老板(user 角色)
- **画像**:25-55 岁,时间碎片化,手机为主,30 秒内要拿到要点
- **行业**:餐饮、零售、制造、服务业为主
- **规模**:微型(<10人) ~ 中型(<200人)
- **痛点**:
- 不懂法律术语,怕说错话
- 同时挂着好几件事(合同、用工、税务、决策)
- 想要"结论+行动",不是"探讨"
- 决策做完就忘,没有复盘
- 信任专家但要"我的人",不是"找陌生人"
### 2.2 次用户:专家(expert 角色)、管理员(admin 角色)
本次重构**不改变** expert/admin 的核心功能,仅做视觉规范对齐(Admin 警示色、ADMIN 徽章)。
---
## 3. 核心场景(SCENE)
| 编号 | 场景 | 用户故事 | 优先级 |
|---|---|---|---|
| SCENE-001 | 老板台 | "我打开应用,一眼看到今天要关注的事,不用到处找" | P0 |
| SCENE-002 | 案卡看板 | "我同时处理 3 件事,每件到哪一步了,一目了然" | P0 |
| SCENE-003 | 快捷指令 | "我不懂法律,但我点一下就能问'用工合规',AI 帮我组织问题" | P0 |
| SCENE-004 | 我的团队 | "我咨询过的专家自动成为'我的人',下次直接找他" | P1 |
| SCENE-005 | 风险雷达 | "AI 主动提醒我行业新规和合同风险,不用我自己查" | P1 |
| SCENE-006 | 决策日志 | "我上个月做了哪些决策,结果如何,能复盘" | P2 |
| SCENE-007 | 法务咨询 | "我问合同问题,AI 追问关键事实,给我风险卡和起诉状" | P0(保留优化) |
| SCENE-008 | 经营决策 | "我纠结要不要扩张,AI 帮我算账给建议" | P0(保留优化) |
| SCENE-009 | 生活助理 | "我私人问题也能问,保密模式" | P1(保留) |
| SCENE-010 | 情绪中心 | "我压力大,有人陪我聊聊,阅后即焚" | P1(保留) |
---
## 4. 信息架构(v2.0)
### 4.1 桌面端导航
```
总览
└─ 老板台(/) ← 重构 Dashboard
我的事项
└─ 事项看板(/matters) ← 新增
智囊
├─ 法务参谋(/legal) ← 保留,接入案卡
├─ 经营决策(/decisions) ← 保留,接入案卡
├─ 生活助理(/life) ← 保留
└─ 情绪中心(/emotion) ← 保留
我的资源
├─ 我的团队(/team) ← 重构 Experts
├─ 决策日志(/decisions-log)← 新增
├─ 知识库(/knowledge) ← 保留
├─ 对话历史(/history) ← 保留
└─ 我的画像(/profile) ← 保留
系统
└─ 设置(/settings) ← 保留
```
### 4.2 移动端导航(底部 4 Tab + FAB)
```
底部 Tab:
🏠 老板台(/)
📋 事项(/matters)
👥 团队(/team)
👤 我(/me) ← 聚合 profile/settings/history
FAB(+):全局浮动按钮 → 快捷指令面板(底部抽屉)
```
**移动端"我"页**:聚合 我的画像 / 对话历史 / 设置 / 知识库 入口,解决移动端导航深度问题。
---
## 5. 功能清单(PRD-FUNC)
### 5.1 阶段一(P0,2 周)
| 编号 | 功能 | 描述 | 关联场景 |
|---|---|---|---|
| PRD-FUNC-001 | 老板台 | 替代 Dashboard,展示"今日要事":高风险提醒、待确认事项、专家回复、经营健康度 | SCENE-001 |
| PRD-FUNC-002 | 事项看板 | 案卡看板视图,按状态分列(待补充事实/待确认/分析中/待专家/已闭环),支持断点续接 | SCENE-002 |
| PRD-FUNC-003 | 案卡状态机 | 会话绑定案卡,状态:新建→待补充事实→待确认→分析中→待专家(可选)→已闭环 | SCENE-002 |
| PRD-FUNC-004 | 案卡续接 | 点击案卡进入对应 ChatPanel,恢复会话上下文 | SCENE-002 |
| PRD-FUNC-005 | ChatPanel 接入案卡 | 新建咨询自动创建案卡,状态随会话推进自动流转 | SCENE-007/008 |
| PRD-FUNC-006 | 移动端底部 Tab | 重构移动端导航为底部 4 Tab + FAB | SCENE-001 |
### 5.2 阶段二(P1,2 周)
| 编号 | 功能 | 描述 | 关联场景 |
|---|---|---|---|
| PRD-FUNC-007 | 快捷指令面板 | FAB 触发底部抽屉,画像驱动的指令网格 + 语音/文字输入 | SCENE-003 |
| PRD-FUNC-008 | 画像驱动指令 | 根据行业/规模生成个性化指令(餐饮→用工合规、食安风险) | SCENE-003 |
| PRD-FUNC-009 | 指令预填模板 | 点击指令预填问题模板,老板补充关键细节即可 | SCENE-003 |
| PRD-FUNC-010 | 我的团队 | 重构 Experts 为关系视图:咨询过的专家自动入队,显示关系深度 | SCENE-004 |
| PRD-FUNC-011 | 团队一键咨询 | 从"我的团队"发起咨询,自动带上历史上下文 | SCENE-004 |
| PRD-FUNC-012 | 语音输入 | 快捷指令面板支持语音输入(Web Speech API) | SCENE-003 |
### 5.3 阶段三(P1-P2,2 周)
| 编号 | 功能 | 描述 | 关联场景 |
|---|---|---|---|
| PRD-FUNC-013 | 风险雷达 | 后端定时扫描知识库新规+画像匹配,推送到老板台 | SCENE-005 |
| PRD-FUNC-014 | 风险分级推送 | 红(立即)/橙(本周)/蓝(知晓),老板台卡片展示 | SCENE-005 |
| PRD-FUNC-015 | 决策日志 | 闭环案卡自动归档为决策记录,支持月度/季度复盘 | SCENE-006 |
| PRD-FUNC-016 | 决策结果标记 | 老板标记决策执行情况(顺利/受阻/未执行),反哺 AI | SCENE-006 |
| PRD-FUNC-017 | ChatPanel 风险卡置顶 | 风险卡从消息流提取为置顶固定卡片,可独立分享/导出 | SCENE-007 |
| PRD-FUNC-018 | 起诉状三步向导 | 要素式起诉状改为:预览→编辑→导出/发专家 三步向导 | SCENE-007 |
---
## 6. UI/UX 设计原则
### 6.1 视觉规范
| 维度 | 规范 |
|---|---|
| 主色 | `indigo-600`(信任+专业),替代当前 gray-900 |
| 辅色 | `emerald`(安全) / `amber`(注意) / `rose`(风险) |
| 字体 | Geist,标题加粗,正文 15px(老板友好) |
| 圆角 | 卡片 `rounded-xl`(12px),按钮 `rounded-lg`(8px) |
| 容器 | `container mx-auto max-w-7xl px-4`(保留) |
| 触控 | 移动端最小点击区 44×44px |
| 禁止 | 硬编码 hex、emoji 作图标、alert/confirm、div onClick |
### 6.2 交互规范
| 场景 | 规范 |
|---|---|
| 页面切换 | 200ms ease-out |
| 案卡状态变化 | 300ms 过渡 |
| 案卡手势 | 左滑归档、右滑置顶(移动端) |
| 空态 | 引导"完善画像解锁更精准建议",非"暂无数据" |
| 离线 | 顶部条提示 + 本地缓存案卡列表 |
| 流式输出 | 先出结论卡片,再展开推理过程 |
| 危险操作 | Dialog 二次确认 |
### 6.3 角色化三端
| 端 | 风格 | Header | Sidebar |
|---|---|---|---|
| C 端(user/老板) | 温暖专业 | `h-14 bg-white/95 backdrop-blur`,主色 indigo | `w-60`,图标+文字 |
| B 端(expert/专家) | 专业密集 | 保留当前 | 保留当前 |
| Admin | 警示 | `bg-slate-950` + 主色 `amber-400` + ADMIN 徽章 | 深色 |
---
## 7. 数据模型影响
### 7.1 新增:案卡(Matter)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 主键 |
| code | string | 唯一业务代码 `MTR_{YYYYMMDD}_{seq}` |
| user_id | int | 所属老板 |
| scene | string | legal/decision/life/emotion |
| title | string | 案卡标题(AI 生成或用户命名) |
| status | string | new/asking_facts/pending_confirm/analyzing/pending_expert/closed |
| session_id | string | 关联会话 sid |
| risk_level | string | nullable,green/amber/orange/red |
| summary | text | nullable,AI 结论摘要 |
| closed_at | timestamp | nullable |
| execution_result | string | nullable,顺利/受阻/未执行 |
| created_at / updated_at | timestamp | 审计 |
### 7.2 新增:风险推送(RiskAlert)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 主键 |
| user_id | int | 推送对象 |
| level | string | red/orange/blue |
| title | string | 标题 |
| content | text | 详情 |
| source | string | 来源(knowledge/doc_scan) |
| related_matter_id | int | nullable |
| read_at | timestamp | nullable |
| created_at | timestamp | |
### 7.3 新增:专家关系(ExpertRelation)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 主键 |
| user_id | int | 老板 |
| expert_id | int | 专家 |
| consultation_count | int | 咨询次数 |
| last_consulted_at | timestamp | 最近咨询 |
| tags | string | 擅长领域标签(逗号分隔) |
| created_at / updated_at | timestamp | |
### 7.4 现有表扩展
- `sessions` 表新增 `matter_id`(nullable,关联案卡)
- `profiles` 表无变化(画像驱动指令只读消费)
---
## 8. API 影响概览
详细 API 契约在 `2-task-bossai-uiux.md` 中按 TASK 展开。核心新增端点:
| 端点 | 方法 | 说明 | 阶段 |
|---|---|---|---|
| `/matters` | GET | 案卡看板列表(按状态分组) | 一 |
| `/matters` | POST | 创建案卡(绑定会话) | 一 |
| `/matters/{id}` | GET | 案卡详情 | 一 |
| `/matters/{id}/status` | PATCH | 更新案卡状态 | 一 |
| `/matters/{id}/close` | POST | 闭环案卡 | 一 |
| `/quick-commands` | GET | 画像驱动快捷指令 | 二 |
| `/team` | GET | 我的团队列表 | 二 |
| `/risk-alerts` | GET | 风险推送列表 | 三 |
| `/risk-alerts/{id}/read` | POST | 标记已读 | 三 |
| `/matters/{id}/execution` | PATCH | 标记决策执行结果 | 三 |
---
## 9. 非功能需求
| 维度 | 要求 |
|---|---|
| 性能 | 老板台首屏 < 1.5s,案卡看板 < 1s |
| 移动端 | 底部 Tab 所有页面可达,FAB 全局可用 |
| 离线 | 案卡列表本地缓存,断网可查看 |
| 无障碍 | 键盘可达,对比度 ≥ 4.5:1,aria-label 完整 |
| 兼容 | Chrome/Safari/Edge 最近 2 版,iOS/Android 移动浏览器 |
| 安全 | 案卡数据租户隔离(user_id),前端隐藏 ≠ 后端放权 |
---
## 10. 验收标准(整体)
- [ ] 老板打开应用,3 秒内看到"今日要事"
- [ ] 案卡看板正确展示所有进行中事项,点击可续接
- [ ] 移动端底部 Tab 全功能可达,FAB 弹出快捷指令
- [ ] 快捷指令基于画像生成,点击预填问题
- [ ] "我的团队"显示咨询过的专家,一键发起咨询
- [ ] 风险推送出现在老板台,可标记已读
- [ ] 闭环案卡归档为决策日志,可标记执行结果
- [ ] ChatPanel 风险卡置顶,起诉状三步向导可用
- [ ] 三端视觉规范对齐(C 端 indigo / B 端 gray / Admin 深色+amber)
- [ ] lint + typecheck + build 通过
---
## 11. 风险与对策
| 风险 | 对策 |
|---|---|
| 范式转变用户不适应 | 阶段一保留法务/决策/生活独立入口,案卡为增量 |
| 后端定时任务复杂度 | 阶段三风险雷达先用简单轮询,后续优化 |
| 语音输入浏览器兼容 | 降级为文字输入,Safari 不支持时隐藏语音按钮 |
| 移动端底部 Tab 重构量大 | 与桌面 Sidebar 共享 NavConfig,仅渲染层不同 |
| 画像数据不全导致指令不准 | 缺口引导:"完善行业信息解锁更精准建议" |
---
📌 v2.0 更新:见 `pmdocs/changes/2026-08-30-001-uiux重构.md`
影响范围:SCENE-001~010、PRD-FUNC-001~018、全用户端导航与页面
状态:待确认
+469
View File
@@ -0,0 +1,469 @@
# 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 同步
+41
View File
@@ -0,0 +1,41 @@
# BossAi 变更索引(CHANGELOG)
> 记录所有需求变更、架构决策和重要里程碑。按时间倒序。
---
## 2026-08-30
### CHG-20260830-001:UIUX 重构 — 从"对话工具"到"经营智囊"
- **状态**:已交付(三阶段全部完成)
- **类型**:产品定位升级 + UIUX 重构
- **影响**:需求 / PRD / 任务 / DB / 后端 / 前端
- **关联文档**:
- `pmdocs/1-prd-bossai.md` v2.0
- `pmdocs/2-task-bossai-uiux.md`
- `pmdocs/adr/2026-08-30-002-uiux范式转变.md`
- `pmdocs/changes/2026-08-30-001-uiux重构.md`
- **摘要**:
- 产品定位从"AI 对话工具"升级为"经营智囊"
- 交互范式从"对话优先"转向"任务卡片优先"
- 新增老板台、事项看板、快捷指令、我的团队、风险雷达、决策日志
- 移动端导航重构为底部 Tab + FAB
- 三阶段交付,共 28 个 TASK
- **交付物**:
- `web2/` 全新前端(端口 5174)
- `migrations/001_bossai_v2.sql` + `002_risk_alerts.sql`
- `api.py` 新增 12 个端点
- `db_init.py` 新增 3 张表
- typecheck + build 全通过
---
## 2026-08-29
### ADR-001:前端技术栈选型
- **状态**:已确认
- **类型**:架构决策
- **摘要**:采用 React 18 + Vite + TypeScript + Tailwind + shadcn/ui
- **文档**:`pmdocs/adr/2026-08-29-001-frontend-stack.md`
@@ -0,0 +1,101 @@
# ADR-002 UIUX 范式转变:从"对话工具"到"经营智囊"
- **状态**:待确认
- **日期**:2026-08-30
- **决策者**:产品负责人 + 技术负责人
- **关联**:PRD v2.0、CHG-20260830-001
## 背景
BossAi v1.0 上线后,用户调研发现中小企业老板的核心痛点未被满足:
1. **对话流程过长**:提问→追问→确认→分析,老板 30 秒内拿不到要点
2. **无事项管理**:同时处理多件事时,无法可视化追踪进度
3. **AI 被动响应**:老板不问,AI 不说,缺少主动提醒
4. **专家关系断裂**:咨询过的专家无沉淀,每次重新找
5. **决策无复盘**:做完就忘,无法反哺 AI
根本原因:v1.0 是"AI 对话产品",老板要的是"我的经营智囊"。
## 选项
### 选项 A:保持对话优先,局部优化
- 优化 ChatPanel 追问体验、风险卡展示
- 保留当前按场景分页的导航
- **优点**:改动小,风险低
- **缺点**:不解决根本痛点,老板仍觉得"不像我的智囊"
### 选项 B:任务卡片优先,对话为手段(推荐)
- 新增"老板台"(今日要事)+ "事项看板"(案卡)
- 对话成为案卡的推进手段,不是目的
- AI 主动推送风险,专家沉淀为"我的团队"
- 移动端重构为底部 Tab + FAB
- **优点**:直击痛点,产品定位清晰
- **缺点**:重构量大,需分阶段交付
### 选项 C:完全重写
- 抛弃现有代码,重新设计
- **优点**:无历史包袱
- **缺点**:浪费已验证的 ChatPanel/要素化立案/事实确认等核心能力
## 决策
选择 **选项 B**:任务卡片优先,分三阶段交付。
核心原则:
1. **保留并优化 ChatPanel**,不推翻已验证的对话能力
2. **新增案卡层**,包裹现有对话,提供事项管理视角
3. **导航重组**,从"按场景分页"转向"按事项聚合"
4. **移动端重构**,底部 Tab 替代 Sidebar 抽屉
## 后果
### 收益
- 产品定位从"工具"升级为"智囊",差异化竞争力提升
- 老板可同时管理多件事,降低流失率
- AI 主动推送增加打开频次
- 专家关系沉淀提升续费意愿
### 成本
- 三阶段共约 6 周(每阶段 2 周)
- 后端新增 3 张表(matters/risk_alerts/expert_relations)
- 前端导航重构,移动端底部 Tab 为较大改动
- 需新增 10 个 API 端点
### 风险
- 范式转变用户不适应 → 阶段一保留独立入口,案卡为增量
- 移动端底部 Tab 重构 → 与 Sidebar 共享 NavConfig,降低重复
## 实施策略:新目录并行开发
**决策**:在 `web2/` 新目录开发 2.0 前端,保留 `web/` 原样不动。
| 维度 | 说明 |
|---|---|
| 原目录 `web/` | 保留为 v1.0,继续可用,不做任何改动 |
| 新目录 `web2/` | 2.0 全新实现,独立 package.json、独立端口 |
| 后端 `api.py` | 共享同一后端,新增端点向后兼容,不破坏 v1.0 调用 |
| 数据库 | 共享同一数据库,新增表通过 migration 脚本添加 |
| 切换 | 2.0 验证通过后,可切换 Nginx/反代指向 web2/dist,或直接替换 web/ |
**端口分配**:
- `web/` (v1.0):5173(保留)
- `web2/` (v2.0):5174
**优点**:
- v1.0 用户零影响,可随时回退
- 2.0 可大胆重构,无历史包袱
- 同一后端,API 契约清晰
## 回滚思路
- 阶段一可独立回滚:老板台/案卡为新增页面,不影响现有 ChatPanel
- 阶段二快捷指令为新增组件,不替换现有话题选择
- 阶段三风险雷达为后端新增任务,可关闭不影响主流程
- 若整体回滚,删除 web2/ 目录和新增表即可,web/ 和现有功能不受影响
@@ -0,0 +1,91 @@
# CHG-20260830-001:UIUX 重构 — 从"对话工具"到"经营智囊"
- **状态**:已完成(三阶段全部交付)
- **日期**:2026-08-30
- **关联**:PRD v2.0、ADR-002、2-task-bossai-uiux.md
## 背景
BossAi v1.0 上线后,用户调研发现中小企业老板核心痛点未被满足:对话流程过长、无事项管理、AI 被动响应、专家关系断裂、决策无复盘。根本原因是 v1.0 定位为"AI 对话产品",与老板需要的"经营智囊"错位。
## 原因
产品定位升级:从"对话优先"转向"任务卡片优先",对话成为推进案卡的手段而非目的。
## 目标
- 老板打开应用 3 秒内看到"今日要事"
- 可视化管理多件并行事项(案卡看板)
- AI 主动推送风险与提醒
- 专家关系沉淀为"我的团队"
- 决策可复盘,反哺 AI
## 范围
- 用户端(user)导航与页面全面重构
- 新增 3 张表:matters / risk_alerts / expert_relations
- 新增 10 个 API 端点
- 移动端导航重构为底部 Tab + FAB
- ChatPanel 优化(风险卡置顶、起诉状向导)
- 三端视觉规范对齐
- expert/admin 端仅做视觉对齐,功能不变
## 影响评估
| 维度 | 是否影响 | 影响说明 | 处理动作 | 状态 |
|---|---|---|---|---|
| 需求 | 是 | 新增 SCENE-001~006,PRD-FUNC-001~018 | 创建 PRD v2.0 | 已处理 |
| PRD | 是 | 产品定位、信息架构、功能清单全面升级 | 创建 1-prd-bossai.md v2.0 | 已处理 |
| 任务 | 是 | 新增 TASK-001~028,分三阶段 | 创建 2-task-bossai-uiux.md | 已处理 |
| DB | 是 | 新增 3 张表,sessions 表扩展 matter_id | TASK-001/002/021 migration | 已处理 |
| 后端 | 是 | 新增 10 个 API,案卡状态自动流转,定时扫描任务 | TASK-003~005/013/016/022/023 | 已处理 |
| 前端 | 是 | 导航重构、4 个新页面、ChatPanel 改造、移动端底部 Tab | TASK-006~012/014~020/024~027 | 已处理 |
| 权限码 | 否 | 不涉及权限码变更,沿用 user/expert/admin 三角色 | - | 不适用 |
## 落地任务
- [x] TASK-001:DB migration — 案卡表
- [x] TASK-002:DB migration — 专家关系表
- [x] TASK-003:后端 — 案卡 CRUD API
- [x] TASK-004:后端 — 案卡状态自动流转
- [x] TASK-005:后端 — 老板台聚合 API
- [x] TASK-006:前端 — 导航重构(共享 NavConfig)
- [x] TASK-007:前端 — 老板台页面
- [x] TASK-008:前端 — 事项看板页面
- [x] TASK-009:前端 — 案卡组件抽取
- [x] TASK-010:前端 — ChatPanel 接入案卡
- [x] TASK-011:前端 — 移动端底部 Tab + FAB
- [x] TASK-012:阶段一构建验证
- [x] TASK-013~020:阶段二(快捷指令 + 我的团队)
- [x] TASK-021~028:阶段三(风险雷达 + 决策日志 + ChatPanel 升级)
- [x] 更新 CHANGELOG.md
- [x] 更新 ui-components.md
- [x] 更新 run.md(定时任务配置)
## 风险与回滚
- **风险**:范式转变用户不适应
- **对策**:阶段一保留法务/决策/生活独立入口,案卡为增量
- **风险**:移动端底部 Tab 重构量大
- **对策**:与 Sidebar 共享 NavConfig,仅渲染层不同
- **风险**:后端定时任务复杂度
- **对策**:阶段三先用简单轮询,后续优化
- **回滚方案**:
- 阶段一可独立回滚(新增页面不影响现有)
- 阶段二快捷指令为新增组件
- 阶段三风险雷达为新增任务,可关闭
- 整体回滚:删除新增路由和表,现有功能不受影响
- **需要回归测试的功能**:
- ChatPanel 全流程(提问→追问→确认→分析→起诉状→问专家)
- 要素化立案
- 专家咨询
- 对话历史
- 知识库
## 完成记录
- 2026-08-30:创建变更文档,创建 PRD v2.0、ADR-002、任务拆分
- 2026-08-30:阶段一完成 — DB migration、案卡 API、老板台、事项看板、移动端导航
- 2026-08-30:阶段二完成 — 快捷指令、我的团队、语音输入
- 2026-08-30:阶段三完成 — 风险雷达、决策日志、ChatPanel 升级(案卡接入+风险卡置顶+起诉状向导)
- 2026-08-30:全部 28 个 TASK 交付,typecheck + build 通过,变更闭环
+26
View File
@@ -63,3 +63,29 @@
- 圆角:`--radius: 0.625rem`
- 字体:Geist → system-ui 回退
- 容器:`container mx-auto max-w-7xl px-4`
## 2.0 新增组件(web2/src)
> v2.0 在 `web2/` 新目录开发,保留 `web/` v1.0 不动。详见 ADR-002。
| 组件 | 类型 | 适用场景 | 输入状态 | 输出事件 | 使用页面 | 状态 |
|---|---|---|---|---|---|---|
| `NavConfig` | 基础模块 | 共享导航配置(USER_NAV/EXPERT_NAV/ADMIN_NAV/MOBILE_TABS) | - | - | Sidebar/BottomTab/Header | 稳定 |
| `BottomTab` | 布局组件 | 移动端底部 4 Tab(仅 md 以下) | - | `NavLink` 跳转 | AppLayout | 稳定 |
| `Fab` | 布局组件 | 浮动新建按钮(移动端) | - | `onClick` → 跳转 | AppLayout | 稳定 |
| `MatterCard` | 领域组件 | 案卡卡片(图标+标题+状态+时间) | `matter` / `onClick` / `onArchive` | `onClick` / `onArchive` | 事项看板 | 稳定 |
| `ChatPanel`(2.0) | 领域组件 | 通用对话面板(案卡接入+风险卡置顶+起诉状向导+URL预填+专家上下文) | `scene` / `samples` / `modes` / `defaultMode` / `showRiskCard` / `enableUpload` / `matterId` | 内部状态 + 案卡流转 | 法务/决策/生活/情绪 | 稳定 |
| `QuickCommandPanel` | 领域组件 | 快捷指令底部抽屉(画像驱动+语音输入) | `open` / `onClose` | `onClose` | FAB | 稳定 |
| `ExpertAvatar` | 基础组件 | 专家头像(带 fallback 首字母) | `name` / `avatarUrl` / `size` | - | 我的团队 | 稳定 |
| `EmptyState`(2.0) | 组合组件 | 空状态引导 | `title` / `description` / `icon` / `action` | - | 全部页面 | 稳定 |
| `LoadingState`(2.0) | 组合组件 | 加载状态 | `label` | - | 全部页面 | 稳定 |
| `ErrorState`(2.0) | 组合组件 | 错误状态+重试 | `message` / `onRetry` | `onRetry` | 全部页面 | 稳定 |
| `PageLayout`(2.0) | 布局组件 | 页面骨架(标题+描述+操作区+内容) | `title` / `description` / `actions` / `children` | - | 全部页面 | 稳定 |
## 2.0 设计 Token 变更
- 主色:`--primary` 从 gray-900 系改为 **indigo-600** (`hsl(243 75% 59%)`),C 端温暖专业
- 新增案卡状态色:`matter-new/asking/confirm/analyzing/expert/closed`
- 新增动画:`slide-up`(300ms) / `slide-down`(200ms) / `fade-in`(200ms)
- 移动端底部 Tab:`h-16`,主内容区 `padding-bottom: 4rem`
- FAB:`bottom-20 right-4`,圆形 56px,仅移动端