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
+36
View File
@@ -0,0 +1,36 @@
/** 移动端"我"聚合页:头像占位+入口列表 */
import { NavLink } from 'react-router-dom'
import { User, History, BookOpen, Settings as SettingsIcon, ChevronRight } from 'lucide-react'
import { getName } from '@/lib/auth'
export function Me() {
const name = getName()
const items = [
{ path: '/profile', label: '我的画像', icon: User },
{ path: '/history', label: '对话历史', icon: History },
{ path: '/knowledge', label: '知识库', icon: BookOpen },
{ path: '/settings', label: '设置', icon: SettingsIcon },
]
return (
<div className="space-y-4">
<div className="flex items-center gap-3 rounded-xl border border-border bg-card p-4">
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-primary/10 text-primary font-bold">
{name?.[0] || '老'}
</div>
<div>
<div className="font-semibold text-foreground">{name || '老板'}</div>
<div className="text-sm text-muted-foreground">中小企业老板</div>
</div>
</div>
<div className="rounded-xl border border-border bg-card divide-y divide-border">
{items.map((item) => (
<NavLink key={item.path} to={item.path} className="flex items-center gap-3 p-4 hover:bg-muted transition-colors">
<item.icon className="h-5 w-5 text-muted-foreground" />
<span className="flex-1 text-sm text-foreground">{item.label}</span>
<ChevronRight className="h-4 w-4 text-muted-foreground" />
</NavLink>
))}
</div>
</div>
)
}