feat: BossAi 老板AI助手初始版本
包含功能: - 法务参谋/经营决策/生活助理/情绪中心四大AI对话模块 - 专家咨询系统(用户选定→专家确认→咨询→回复→评价) - 角色登录(用户/专家/管理员)+ ProtectedRoute 权限控制 - 管理后台(用户管理/专家管理/AI使用统计/专家活跃度) - 专家工作台(待确认服务/待回复咨询/已回复咨询/服务中用户) - 服务关系取消(用户和专家均可取消,需自己确认) - 全页面移动端响应式适配 - 知识库RAG检索 - 对话历史(普通/保密模式) Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# ADR-001 前端技术栈选型
|
||||
|
||||
- **状态**:已确认
|
||||
- **日期**:2026-08-29
|
||||
- **决策者**:产品负责人 + 技术负责人
|
||||
- **关联**:TASK-前端 UI 体系、产品设计方案 §3 信息架构
|
||||
|
||||
## 背景
|
||||
|
||||
BossAI 面向中国中小企业老板,属 B 端专业工具(经营/法务/情绪支持)。MVP 后端已用 FastAPI 跑通 Kimi 云端模型闭环,现需构建专业前端 UI 体系。当前 `web.html` 为低保真单文件原型,无法支撑多模块信息架构(驾驶舱/法务参谋/经营决策/生活助理/情绪中心/设置)。
|
||||
|
||||
## 决策
|
||||
|
||||
采用 **React 18 + Vite + TypeScript + Tailwind CSS + shadcn/ui** 技术栈。
|
||||
|
||||
| 层 | 选型 | 理由 |
|
||||
|---|---|---|
|
||||
| 框架 | React 18 | 生态成熟,shadcn/ui 原生支持 |
|
||||
| 构建 | Vite 5 | 启动快,HMR 流畅,产物为静态包,部署简单 |
|
||||
| 语言 | TypeScript 5 | 类型安全,B 端信息密集场景必备 |
|
||||
| 样式 | Tailwind CSS 3 | 原子化,符合全局规则 oklch/语义 token 要求 |
|
||||
| 组件 | shadcn/ui | 复制即用,无运行时依赖锁死,可定制 |
|
||||
| 图标 | lucide-react | 全局规则首选图标库 |
|
||||
| 反馈 | sonner | 轻量 toast,替代 alert/confirm |
|
||||
| 图表 | recharts | 驾驶舱风险/待办可视化 |
|
||||
| 路由 | react-router-dom v6 | SPA 路由 |
|
||||
| 请求 | 原生 fetch + 轻封装 | 避免引入 axios 等额外依赖 |
|
||||
|
||||
## 否决方案
|
||||
|
||||
- **Next.js**:SSR 对内网 SPA 工具价值有限,且需 Node 常驻进程,部署比 Vite 静态包复杂。
|
||||
- **Vue + Element Plus**:与全局规则推荐的 shadcn 体系不一致,前后端生态割裂。
|
||||
|
||||
## 设计风格约束(B 端专业)
|
||||
|
||||
- 主色 `gray-900`,内容区 `bg-[#f8f9fb]`,信息密集
|
||||
- 左 Sidebar `w-60 sticky`,Header `h-14 bg-white/95 backdrop-blur`
|
||||
- 状态色三件套:`emerald(success) / amber(warning) / rose(destructive)`
|
||||
- 风险等级色:`green / amber / orange / red`
|
||||
- 禁硬编码 hex 主色,禁 alert/confirm,禁 div onClick,禁多 UI 库混用
|
||||
- 容器 `container mx-auto max-w-7xl px-4`
|
||||
- 符合中小企业老板审美:稳重、可信、克制,情绪中心模块适度加温
|
||||
|
||||
## 架构边界
|
||||
|
||||
- 前端工程独立目录 `web/`,与 Python 后端解耦
|
||||
- 开发期 Vite 代理 `/api` → `http://127.0.0.1:8000`,生产期同源或反代
|
||||
- 前端不持有密钥,所有模型调用经后端 `/sessions/{sid}/ask` 完成
|
||||
- 公共组件放 `web/src/components/`,页面放 `web/src/pages/`
|
||||
|
||||
## 后果
|
||||
|
||||
- 需 Node 18+ 环境运行前端
|
||||
- 前后端分离,部署需分别构建(后端 uvicorn,前端静态包)
|
||||
- shadcn/ui 组件按需复制进仓库,不依赖外部运行时包
|
||||
@@ -0,0 +1,65 @@
|
||||
# UI 公共组件登记表
|
||||
|
||||
> 记录 BossAi 前端可复用组件,避免重复造轮子。新增、重命名、废弃或职责变化时同步更新。
|
||||
> 技术栈:React 18 + Vite + TypeScript + Tailwind + shadcn/ui(详见 ADR-001)
|
||||
|
||||
## 基础组件(shadcn/ui,复制即用)
|
||||
|
||||
| 组件 | 类型 | 适用场景 | 输入状态 | 输出事件 | 使用页面 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `Button` | 基础组件 | 按钮交互 | `variant` / `size` / `disabled` / `asChild` | `onClick` | 全部页面 | 稳定 |
|
||||
| `Card` | 基础组件 | 内容卡片容器 | `className` | - | 全部页面 | 稳定 |
|
||||
| `Input` | 基础组件 | 单行输入 | `value` / `placeholder` / `disabled` | `onChange` | 设置(待实现) | 稳定 |
|
||||
| `Textarea` | 基础组件 | 多行输入 | `value` / `placeholder` | `onChange` | 法务参谋 | 稳定 |
|
||||
| `Badge` | 基础组件 | 状态标签 | `variant` | - | 全部页面 | 稳定 |
|
||||
| `Label` | 基础组件 | 表单标签 | `htmlFor` | - | 法务参谋 | 稳定 |
|
||||
| `Separator` | 基础组件 | 分隔线 | `orientation` | - | 通用 | 稳定 |
|
||||
| `ScrollArea` | 基础组件 | 滚动区域 | `className` | - | 通用 | 稳定 |
|
||||
| `Select` | 基础组件 | 下拉选择 | `value` / `onValueChange` | `onValueChange` | 预留 | 稳定 |
|
||||
| `Dialog` | 基础组件 | 弹窗/二次确认 | `open` / `onOpenChange` | `onOpenChange` | 法务参谋(销毁确认) | 稳定 |
|
||||
| `Toaster`(sonner) | 基础组件 | 全局 toast 反馈 | `position` | - | 全局(AppLayout) | 稳定 |
|
||||
|
||||
## 布局组件
|
||||
|
||||
| 组件 | 类型 | 适用场景 | 输入状态 | 输出事件 | 使用页面 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `AppLayout` | 布局组件 | 应用主框架(Sidebar+Header+内容) | - | - | 全部页面(路由出口) | 稳定 |
|
||||
| `Sidebar` | 布局组件 | 左侧导航(w-60 sticky) | - | `NavLink` 跳转 | 全部页面 | 稳定 |
|
||||
| `Header` | 布局组件 | 顶部栏(h-14 sticky,移动端含抽屉) | `nav`(移动端导航内容) | - | 全部页面 | 稳定 |
|
||||
| `MobileNav` | 布局组件 | 移动端抽屉导航 | - | `NavLink` 跳转 | Header 抽屉 | 稳定 |
|
||||
| `PageLayout` | 布局组件 | 页面骨架(标题+描述+操作区+内容) | `title` / `description` / `actions` / `children` | - | 全部页面 | 稳定 |
|
||||
|
||||
## 领域/组合组件
|
||||
|
||||
| 组件 | 类型 | 适用场景 | 输入状态 | 输出事件 | 使用页面 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `StatusBadge` | 组合组件 | 风险等级徽章 | `level`(green/amber/orange/red) | - | 驾驶舱、法务参谋 | 稳定 |
|
||||
| `RiskCardView` | 领域组件 | 风险卡片(等级+结论+行动+证据+升级) | `card`(RiskCard) / `answer` / `model` / `onEscalate` | `onEscalate` | 法务参谋 | 稳定 |
|
||||
| `EmptyState` | 组合组件 | 空数据状态 | `title` / `description` / `icon` / `action` | - | 法务参谋、占位页 | 稳定 |
|
||||
| `LoadingState` | 组合组件 | 加载状态 | `label` | - | 通用(预留) | 稳定 |
|
||||
| `ErrorState` | 组合组件 | 错误状态(带重试) | `message` / `onRetry` | `onRetry` | 驾驶舱 | 稳定 |
|
||||
| `ChatPanel` | 领域组件 | 通用对话面板(会话/提问/风险卡/上传/急停/工单升级) | `scene` / `samples` / `modes` / `defaultMode` / `emotionMode` / `modeSelector` / `showRiskCard` / `enableUpload` | 内部状态 + 工单创建 | 法务参谋、经营决策、生活助理、情绪中心 | 稳定 |
|
||||
| `OfflineIndicator` | 基础组件 | 全局离线提示条(网络断开时显示) | - | - | 全局(AppLayout) | 稳定 |
|
||||
| `Markdown` | 基础组件 | AI 回复 Markdown 渲染(GFM+代码高亮+流式光标) | `content` / `streaming` / `className` | - | ChatPanel、RiskCardView | 稳定 |
|
||||
| `TicketDetail` | 领域组件 | 工单详情弹窗(状态/分配/处理结果) | `ticket` / `onClose` / `onUpdate` | `onUpdate` | 复核工单 | 稳定 |
|
||||
|
||||
## 待沉淀组件(后续迭代)
|
||||
|
||||
| 组件 | 类型 | 适用场景 | 触发条件 | 状态 |
|
||||
|---|---|---|---|---|
|
||||
| `DataTable` | 基础组件 | 列表/表格 | 待办台账、合同列表页实现时 | 待开发 |
|
||||
| `Pagination` | 基础组件 | 分页 | 列表数据超过单页时 | 待开发 |
|
||||
| `FilterBar` | 组合组件 | 筛选栏 | 风险台账、合同管理页实现时 | 待开发 |
|
||||
| `TimeRangePicker` | 组合组件 | 时间范围筛选 | 数据看板、历史查询实现时 | 待开发 |
|
||||
| `ConfirmDialog` | 组合组件 | 通用二次确认 | 当前法务参谋用内联 Dialog,出现 2+ 处时抽取 | 待观察 |
|
||||
| `SessionModePicker` | 领域组件 | 隐私会话模式选择 | 已内联于 ChatPanel,情绪中心实现时抽取 | 已内联 | 待观察 |
|
||||
| `ToggleRow` | 组合组件 | 设置开关行 | `icon` / `title` / `desc` / `defaultOn` / `danger` | `onClick` | 设置 | 稳定 |
|
||||
|
||||
## 设计 Token 约定
|
||||
|
||||
- 主色:`--primary` (gray-900 系),通过 CSS 变量,禁硬编码 hex
|
||||
- 风险色:`risk-green/amber/orange/red`(Tailwind 语义类)
|
||||
- 状态色三件套:`emerald(success) / amber(warning) / rose(destructive)`
|
||||
- 圆角:`--radius: 0.625rem`
|
||||
- 字体:Geist → system-ui 回退
|
||||
- 容器:`container mx-auto max-w-7xl px-4`
|
||||
Reference in New Issue
Block a user