# 智能IT支持服务台 — 管理后台增量 PRD

> **文档版本**: v1.0  
> **创建日期**: 2026-06-16  
> **产品经理**: 许清楚 (Xu) · 宋献  
> **状态**: 阶段一 1B — 待开发  
> **关联文档**: `docs/PRD.md` (主 PRD §18-20)、`docs/prototypes/admin-dashboard-v1.html`（原型参考）

---

## 目录

1. [项目信息](#1-项目信息)
2. [产品定义与目标](#2-产品定义与目标)
3. [用户故事](#3-用户故事)
4. [功能需求池](#4-功能需求池)
5. [页面清单与导航结构](#5-页面清单与导航结构)
6. [已实现功能映射](#6-已实现功能映射)
7. [数据模型扩展方案](#7-数据模型扩展方案)
8. [API 设计概要](#8-api-设计概要)
9. [占位模块规格](#9-占位模块规格)
10. [技术约束与约定](#10-技术约束与约定)
11. [待确认问题](#11-待确认问题)

---

## 1. 项目信息

| 字段 | 值 |
|------|------|
| 产品名称 | 智能IT支持服务台 — 管理后台 |
| 项目代号 | `wecom_it_smart_desk`（第三端：admin） |
| 编程语言 | 前端: Vue 3 + TypeScript + Element Plus + Pinia · 后端: FastAPI + SQLAlchemy + PostgreSQL + Redis |
| 部署路径 | `/itadmin/`（与 H5 `/itdesk/`、坐席 `/itagent/` 并列） |
| 文档语言 | 中文 |
| 原型参考 | `docs/prototypes/admin-dashboard-v1.html`（深色科技风，8页面） |
| 所属阶段 | 阶段一 1B — 管理后台骨架 |

---

## 2. 产品定义与目标

### 2.1 产品定位

管理后台是 IT 智能服务台的**第三端产品**，与员工端 H5（`/itdesk/`）和坐席工作台（`/itagent/`）并列，面向**坐席组长/IT运维负责人**（以下简称"组长"），提供系统配置、人员管理、内容运营三项核心能力。

### 2.2 阶段一 1B 目标

> 先把已实现功能相关的管理后台功能实现，后续项目功能开发时同步完成管理功能开发，未进行的管理功能预留占位。

**1B 交付范围**：
1. **功能开关/参数管理**（P0）— 可视化编辑 `system_configs` 表中的配置项
2. **坐席人员管理**（P0）— 坐席列表 + 角色/技能标签编辑 + 状态查看
3. **快速回复管理**（P1）— 分类列表 + 审核发布流程（坐席提交→组长审核→全员可见）
4. **外部系统集成配置**（P0 占位）— 6个外部系统卡片展示 + 配置入口（仅 Dify 可用）
5. **消息分配模式**（P1 占位）— 手动接单为当前模式，其他模式灰化锁定
6. **排查模板管理**（P1 占位）— 模板列表查看 + JSON 导入导出入口（阶段三启用）
7. **运营总览仪表盘**（P0）— 关键指标统计卡片 + 待处理事项 + 系统健康状态

### 2.3 产品目标（3个正交目标）

| # | 目标 | 衡量标准 |
|---|------|---------|
| G1 | **运维自助化** — 组长无需改代码即可调整系统参数、管理人员、审核内容 | 100% 配置项可通过管理后台修改，无需重启 |
| G2 | **操作可追溯** — 配置变更、审核操作记录版本历史 | 每次变更记录操作人和时间戳 |
| G3 | **页面可扩展** — 已规划的 10 个模块在导航中均有对应位置，未实现页面以占位方式呈现 | 所有已规划模块在菜单可见，未来阶段功能有明确入口 |

---

## 3. 用户故事

| ID | 用户故事 | 涉及模块 | 优先级 |
|----|---------|---------|--------|
| US1 | 作为**坐席组长**，我希望能通过可视化界面开关功能模块（如应急模式），而不需要登录服务器修改数据库 | 功能开关 | P0 |
| US2 | 作为**坐席组长**，我希望能查看所有坐席的在线状态、技能标签和当前负载，以便合理分配工作 | 坐席管理 | P0 |
| US3 | 作为**坐席组长**，我希望能编辑坐席的角色（组长/坐席）和技能标签（电脑/网络/软件等），以匹配实际分工 | 坐席管理 | P0 |
| US4 | 作为**坐席组长**，我希望能审核坐席提交的快速回复模板，通过后全员可见，驳回后仅提交人可见 | 快速回复管理 | P1 |
| US5 | 作为**坐席组长**，我希望能查看已连接的外部系统状态，并配置 API Key/URL | 系统集成 | P0 |
| US6 | 作为**坐席组长**，我希望在运营总览页面一目了然地看到在线坐席数、今日会话量、AI命中率等关键指标 | 运营总览 | P0 |
| US7 | 作为**坐席组长**，我希望能通过搜索快速找到某个配置项或坐席，而不需要逐页翻找 | 全局搜索 | P1 |

---

## 4. 功能需求池

### 4.1 P0 功能（阶段一 1B 必须交付）

#### P0-01 运营总览仪表盘

- **功能描述**：管理后台首页，展示4个统计卡片（在线坐席、今日会话、平均响应时间、AI命中率）+ 待处理事项列表 + 系统健康状态
- **对应原型**：`page-dashboard`
- **数据来源**：
  - 在线坐席：`agents` 表 `status='online'` 计数
  - 今日会话：`conversations` 表当日创建数
  - 平均响应时间：`conversations` 表计算（若无则显示占位符）
  - AI命中率：`conversations` 表 `ai_hit` 字段统计
  - 待处理事项：快速回复待审核 + 系统告警
  - 系统健康：各集成系统连接状态
- **后端模型**：`Agent`、`Conversation`、`SystemConfig`
- **API**：需新建 `GET /api/admin/dashboard/overview`
- **复杂度**：S（纯查询+聚合，无写入操作）

#### P0-02 功能开关/参数管理

- **功能描述**：以卡片网格展示按功能模块分组的配置开关，每组包含若干 toggle 开关。配置变更即时生效（更新 `system_configs` 表）。支持回滚（记录旧值）
- **对应原型**：`page-features`（6张功能卡片）
- **功能卡片清单**：

| 卡片 | 配置键 | 当前值来源 | 开关数 |
|------|--------|-----------|--------|
| AI 对话引擎 | `ai_auto_reply`、`hand_raise_keywords`、`intervene_round_threshold` | `system_configs` | 3 |
| 人工服务 | `manual_pickup_enabled`、`invite_employee_enabled` | 新建 | 2 |
| 排队系统 | 阶段二功能，开关灰化 | 无 | 2（灰化） |
| 满意度评价 | 阶段二功能，开关灰化 | 无 | 2（灰化） |
| 应急模式 | `emergency_mode` | `system_configs` | 1 |
| 关键词管理 | `hand_raise_keywords`、`emotion_keywords_*` | `system_configs` | 2组关键词编辑 |

- **编辑交互**：点击关键词旁的"编辑"按钮弹出对话框，支持 JSON 数组编辑；普通开关直接 toggle
- **后端模型**：`SystemConfig`
- **API**：需新建 `GET /api/admin/configs`、`PUT /api/admin/configs/{key}`、`GET /api/admin/configs/{key}/history`
- **复杂度**：M（涉及分组展示、JSON 编辑验证、变更历史）

#### P0-03 坐席人员管理

- **功能描述**：坐席列表（表格形式），支持按状态筛选（全部/在线/忙碌/离线），展示：头像、姓名、工号、状态、技能标签、角色、当前/最大负载、今日结单数。组长可编辑坐席的角色和技能标签
- **对应原型**：`page-agents`
- **扩展需求**（Agent 模型需新增字段）：
  - `role`：VARCHAR(20)，取值 `admin`（组长）/ `agent`（坐席），默认 `agent`
  - `skill_tags`：JSON 数组，取值从 7 大类中选择：`["电脑","软件","外设","网络","安全","资产","其他"]`
- **后端模型**：`Agent`（需扩展）
- **已有 API**：`GET /api/agents`（坐席端用，可复用获取列表）
- **需新建 API**：`PUT /api/admin/agents/{id}`（编辑角色/技能标签）、`POST /api/admin/agents`（添加坐席）、`DELETE /api/admin/agents/{id}`（移除坐席）
- **复杂度**：M（涉及模型扩展 + CRUD + 状态筛选）

#### P0-04 外部系统集成配置（占位）

- **功能描述**：展示 6 个外部系统的集成状态卡片（3×2 网格）。阶段一仅 Dify 和 RAGFlow 可配置（已有后端集成），其余 4 个系统仅展示"未连接"/"待确认"状态
- **对应原型**：`page-integrations`
- **6个系统**：

| 系统 | 阶段一状态 | 可操作 |
|------|-----------|--------|
| Dify AI | 已连接 | 配置（URL/Key）、测试连接 |
| RAGFlow | 部分集成 | 配置（URL/Key） |
| 数据平台 | 未连接 | 仅展示状态 |
| 北森 eHR | 未连接 | 仅展示状态 |
| 火绒安全 | 未连接 | 仅展示状态 |
| 联软安全 | 待确认 | 仅展示状态 + "申请"按钮（无实际功能） |

- **后端模型**：需新建 `IntegrationConfig` 模型（或复用 `SystemConfig` 存 JSON）
- **API**：需新建 `GET /api/admin/integrations`、`PUT /api/admin/integrations/{id}`
- **复杂度**：S（大部分为静态展示 + 2个配置表单）

### 4.2 P1 功能（阶段一 1B 应交付）

#### P1-01 快速回复管理（审核流程）

- **功能描述**：卡片式列表展示快速回复模板，按 7 大分类筛选（电脑/软件/外设/网络/安全/资产/其他）。支持审核流程：坐席提交→状态"待审核"（仅提交人可用）→组长审核通过→"已审核"（全员可见）/ 驳回→返回修改。每个模板展示版本号、变量列表、最后更新时间
- **对应原型**：`page-quickreply`
- **审核状态机**：
  ```
  draft（草稿）→ pending_review（待审核，仅提交人可用）
      ├─→ approved（已审核，全员可见）
      └─→ rejected（驳回，返回修改）
  ```
- **后端模型**：`QuickReplyTemplate`（需扩展 `status`、`version`、`submitted_by` 字段）
- **已有 API**：`GET/POST/PUT/DELETE /api/quick-replies`（坐席端用，需扩展审核逻辑）
- **需新建 API**：`PUT /api/admin/quick-replies/{id}/review`（审核通过/驳回）、`GET /api/admin/quick-replies/pending`（待审核列表）
- **复杂度**：L（涉及审核状态机 + 版本管理 + 权限可见性逻辑）

#### P1-02 消息分配模式（占位）

- **功能描述**：展示 6 种分配模式卡片，阶段一仅「手动接单」可选（当前启用），其余 5 种模式灰化锁定并显示解锁条件
- **对应原型**：`page-assignment`
- **6 种模式**：手动接单（✅启用）、轮询分配（P2锁定）、最少活跃优先（P2锁定）、加权比例分配（P3锁定）、技能匹配分配（P3锁定）、优先队列（P3锁定）
- **后端模型**：可复用 `SystemConfig`（键 `assignment_mode`）
- **API**：需新建 `GET /api/admin/assignment-mode`、`PUT /api/admin/assignment-mode`
- **复杂度**：S（静态展示为主，仅1个配置读写）

#### P1-03 排查模板管理（占位）

- **功能描述**：展示排查模板列表（表格形式：名称、分类、节点数、版本、状态），提供 JSON 导入/导出按钮。阶段一仅展示已有模板数据，导入导出功能灰化标注"阶段三启用"
- **对应原型**：`page-flowchart`
- **后端模型**：`TroubleshootingTemplate`（已有，可直接查询）
- **已有 API**：`GET /api/troubleshooting-templates`（可复用）
- **复杂度**：S（数据展示 + 按钮占位）

#### P1-04 会话监控（占位，Demo预览）

- **功能描述**：展示会话统计卡片（进行中/等待中/今日已结单/异常告警）+ 实时会话表格。阶段一从数据库查询真实数据展示，标注"Demo 预览"
- **对应原型**：`page-monitor`
- **数据来源**：`conversations` 表实时查询
- **API**：需新建 `GET /api/admin/monitor/sessions`
- **复杂度**：S（只读查询展示）

### 4.3 P2 功能（阶段一预留占位）

以下模块仅需在导航菜单中预留入口（灰化 + "开发中"标识），页面内容为空白占位页：

| 模块 | 对应阶段 | 导航分组 |
|------|---------|---------|
| 主题模板 | 阶段二 | P2 高级功能 |
| 数据看板 | 阶段四 | P2 高级功能 |
| 知识库管理 | 阶段四 | P2 高级功能 |

### 4.4 全局功能

#### P0-05 导航布局框架

- 深色科技风侧边栏（220px宽）+ 顶部面包屑 + 内容区
- 导航分组：概览 → P0 核心配置 → P1 运营管理 → P2 高级功能
- 每个导航项显示优先级标签（P0红/P1黄/P2绿）
- 灰化菜单项：不可点击，显示 tooltip "阶段X 开发中"

#### P0-06 RBAC 权限控制（最小实现）

- 认证方式：复用坐席端 Redis token 机制，`Agent` 模型新增 `role` 字段
- 权限校验：`role='admin'` 可访问管理后台，`role='agent'` 返回 403
- 后端中间件：`/api/admin/*` 路由组统一校验 token + role
- 前端路由守卫：无 admin 角色跳转 403 页面

#### P1-05 全局搜索

- 顶部搜索框输入关键词，搜索范围：配置项名称、坐席姓名、快速回复标题
- 搜索结果以下拉菜单展示，点击跳转到对应页面

---

## 5. 页面清单与导航结构

### 5.1 页面树

```
管理后台 (/itadmin/)
├── 概览
│   └── 运营总览                /admin/dashboard          P0 ✅
├── P0 核心配置
│   ├── 功能开关/参数            /admin/configs            P0 ✅
│   ├── 坐席人员管理            /admin/agents             P0 ✅
│   └── 外部系统集成            /admin/integrations       P0 ⚡（占位）
├── P1 运营管理
│   ├── 消息分配模式            /admin/assignment         P1 ⚡（占位）
│   ├── 快速回复管理            /admin/quick-replies      P1 ✅
│   ├── 会话监控                /admin/monitor            P1 ⚡（Demo预览）
│   └── 排查流程图              /admin/flowcharts         P1 ⚡（占位）
└── P2 高级功能
    ├── 主题模板                /admin/themes             P2 🚧（占位）
    ├── 数据看板                /admin/analytics          P2 🚧（占位）
    └── 知识库管理              /admin/knowledge          P2 🚧（占位）
```

> 图例：✅ 1B实现 | ⚡ 部分实现/占位 | 🚧 仅占位页

### 5.2 导航分组

| 导航分组 | 菜单项 | 排序 |
|---------|--------|------|
| 概览 | 运营总览 | 1 |
| P0 核心配置 | 功能开关、坐席管理、系统集成 | 2-4 |
| P1 运营管理 | 分配模式、快速回复、会话监控 | 5-7 |
| P2 高级功能 | 排查流程图、主题模板、数据看板、知识库 | 8-11 |

### 5.3 对应原型页面映射

| 原型页面 `id` | PRD 模块 | 实现方式 |
|--------------|---------|---------|
| `page-dashboard` | 运营总览 | Vue 组件实现 |
| `page-features` | 功能开关 | Vue 组件实现 |
| `page-agents` | 坐席管理 | Vue 组件实现 |
| `page-integrations` | 系统集成 | Vue 组件实现（部分占位） |
| `page-assignment` | 分配模式 | Vue 组件实现（大部分占位） |
| `page-quickreply` | 快速回复 | Vue 组件实现 |
| `page-monitor` | 会话监控 | Vue 组件实现（Demo预览） |
| `page-flowchart` | 排查流程图 | Vue 组件实现（大部分占位） |

---

## 6. 已实现功能映射

### 6.1 可直接复用的后端模型

| 模型 | 表名 | 复用方式 | 备注 |
|------|------|---------|------|
| `SystemConfig` | `system_configs` | 直接读写 | 已有 12 个配置键，功能开关页面直接映射 |
| `Agent` | `agents` | 查询列表 + 扩展字段 | 需要新增 role/skill_tags 列 |
| `QuickReplyTemplate` | `quick_reply_templates` | 查询列表 + 扩展字段 | 需要新增 status/version/submitted_by 列 |
| `TroubleshootingTemplate` | `troubleshooting_templates` | 只读查询 | 排查流程图页面展示 |
| `Conversation` | `conversations` | 只读聚合查询 | 仪表盘统计 + 会话监控 |
| `Employee` | `employees` | 只读查询 | 关联坐席信息 |

### 6.2 可直接复用的后端 API

| 现有 API | 复用场景 | 是否需要修改 |
|---------|---------|------------|
| `GET /api/agents` | 坐席列表查询 | 是，增加 role 和 skill_tags 返回 |
| `GET /api/quick-replies` | 快速回复列表 | 是，增加审核状态筛选 |
| `GET /api/troubleshooting-templates` | 排查模板列表 | 否，直接复用 |
| `GET /api/system/emergency-mode` | 应急模式状态读取 | 否，直接复用 |
| `PUT /api/system/emergency-mode` | 应急模式开关切换 | 否，直接复用 |

### 6.3 需要新建的 API 路由组

所有管理后台 API 统一挂载到 `/api/admin/` 路由组下：

| API | 方法 | 用途 | 优先级 |
|-----|------|------|--------|
| `/api/admin/dashboard/overview` | GET | 仪表盘统计数据 | P0 |
| `/api/admin/configs` | GET | 获取全部配置项（分组） | P0 |
| `/api/admin/configs/{key}` | PUT | 更新单个配置项 | P0 |
| `/api/admin/configs/{key}/history` | GET | 配置变更历史 | P0 |
| `/api/admin/agents` | GET | 坐席列表（管理视图，含角色/标签） | P0 |
| `/api/admin/agents` | POST | 添加坐席 | P0 |
| `/api/admin/agents/{id}` | PUT | 编辑坐席（角色/技能标签/负载上限） | P0 |
| `/api/admin/agents/{id}` | DELETE | 移除坐席 | P0 |
| `/api/admin/integrations` | GET | 集成系统列表+状态 | P0 |
| `/api/admin/integrations/{id}` | PUT | 更新集成配置 | P0 |
| `/api/admin/integrations/{id}/test` | POST | 测试连接 | P1 |
| `/api/admin/quick-replies/pending` | GET | 待审核模板列表 | P1 |
| `/api/admin/quick-replies/{id}/review` | PUT | 审核通过/驳回 | P1 |
| `/api/admin/assignment-mode` | GET/PUT | 分配模式读写 | P1 |
| `/api/admin/monitor/sessions` | GET | 实时会话列表 | P1 |
| `/api/admin/search` | GET | 全局搜索 | P1 |

### 6.4 需要扩展的已有模型

| 模型 | 新增字段 | 类型 | 默认值 | 说明 |
|------|---------|------|--------|------|
| `Agent` | `role` | VARCHAR(20) | `'agent'` | admin=组长, agent=坐席 |
| `Agent` | `skill_tags` | JSON | `[]` | 如 `["电脑","网络"]` |
| `QuickReplyTemplate` | `status` | VARCHAR(20) | `'approved'` | draft/pending_review/approved/rejected |
| `QuickReplyTemplate` | `version` | INTEGER | `1` | 版本号，每次审核通过后 +1 |
| `QuickReplyTemplate` | `submitted_by` | VARCHAR(36) | NULL | 提交人 agent_id（外键关联 agents） |

---

## 7. 数据模型扩展方案

### 7.1 Agent 模型扩展

```python
# 在 Agent 模型中新增：
role: Mapped[str] = mapped_column(
    String(20), nullable=False, default="agent",
    comment="角色：admin=组长, agent=坐席"
)
skill_tags: Mapped[List[str]] = mapped_column(
    JSON, nullable=False, default=list,
    comment="技能标签列表（电脑/软件/外设/网络/安全/资产/其他）"
)
```

已有种子数据：当前坐席（宋献 → 组长角色 + 电脑/网络/软件标签，王丽 → 坐席 + 外设/安全，张伟 → 坐席 + 资产/其他）。

### 7.2 QuickReplyTemplate 模型扩展

```python
# 在 QuickReplyTemplate 模型中新增：
status: Mapped[str] = mapped_column(
    String(20), nullable=False, default="approved",
    comment="状态：draft/pending_review/approved/rejected"
)
version: Mapped[int] = mapped_column(
    Integer, nullable=False, default=1,
    comment="版本号"
)
submitted_by: Mapped[str] = mapped_column(
    String(36), nullable=True, default=None,
    comment="提交人 agent_id"
)
```

已有种子数据默认 `status='approved'`（无需审核）。

### 7.3 新建 IntegrationConfig 模型（可选）

若需要持久化集成系统的配置（API URL、Key 等），建议新建：

```python
class IntegrationConfig(Base):
    __tablename__ = "integration_configs"
    id: str (UUID PK)
    system: str          # dify/ragflow/data_platform/beisen/huorong/liansoft
    name: str            # 显示名称
    api_url: str         # API 地址
    api_key: str         # API Key（加密存储）
    status: str          # connected/partial/disconnected/pending
    updated_at: datetime
```

阶段一可暂不复用此模型，直接硬编码 6 个系统的状态展示，Dify 和 RAGFlow 的配置暂时存 `system_configs`。

---

## 8. API 设计概要

### 8.1 路由注册

```python
# 新建 backend/app/api/admin.py
# 在 backend/app/api/router.py 中注册：
from app.api.admin import router as admin_router
api_router.include_router(admin_router, prefix="/admin", tags=["管理后台"])
```

### 8.2 权限中间件

```python
# 所有 /api/admin/* 路由需校验：
# 1. token 有效性（复用坐席端 Redis token）
# 2. Agent.role == 'admin'
# 不满足条件返回统一错误响应（code=1003, message="无管理权限"）
```

### 8.3 响应格式

沿用项目统一的 `success_response` / `error_response` 格式：

```json
{"code": 0, "message": "success", "data": {...}}
{"code": 1003, "message": "无管理权限"}
```

### 8.4 配置变更历史

`PUT /api/admin/configs/{key}` 时：
1. 读取当前值存入日志（`config_change_logs` 表或 JSON 字段）
2. 写入新值
3. 返回变更前后对比

日志结构：`{config_key, old_value, new_value, changed_by, changed_at}`

---

## 9. 占位模块规格

### 9.1 占位页面交互规范

所有未来阶段的占位页面遵循统一的展示方式：

**页面内容**：
```
┌────────────────────────────────────────┐
│                                        │
│         🚧  开发中                      │
│                                        │
│     该功能将在阶段 X 上线                │
│                                        │
│     预计功能：{简短描述}                  │
│                                        │
│              [返回首页]                  │
│                                        │
└────────────────────────────────────────┘
```

**导航菜单**：
- 灰化样式：`opacity: 0.4; pointer-events: none;`
- 不响应点击
- Tooltip 悬停提示："阶段X 开发中，敬请期待"

### 9.2 各占位页面规格

| 页面 | 占位类型 | 占位内容 |
|------|---------|---------|
| 主题模板 | 🚧 空白占位 | 居中显示"阶段二上线"，描述：支持全局/坐席端/H5端三层主题配置 |
| 数据看板 | 🚧 空白占位 | 居中显示"阶段四上线"，描述：坐席绩效、满意度趋势、热点问题排行 |
| 知识库管理 | 🚧 空白占位 | 居中显示"阶段四上线"，描述：标注→知识条目→RAGFlow同步迭代闭环 |
| 系统集成（部分） | ⚡ 功能占位 | 展示系统卡片但"配置""测试"按钮灰化，tooltip 说明"阶段二启用" |
| 分配模式（部分） | ⚡ 功能占位 | 展示所有模式卡片，非手动模式灰化+锁图标+解锁条件文字 |
| 排查流程图 | ⚡ 功能占位 | 展示已有模板数据，导入导出按钮灰化标注"阶段三启用" |

---

## 10. 技术约束与约定

### 10.1 前端技术栈

| 项目 | 值 |
|------|------|
| 框架 | Vue 3 + Composition API |
| 语言 | TypeScript |
| UI 库 | Element Plus |
| 状态管理 | Pinia |
| 构建工具 | Vite |
| 样式方案 | Tailwind CSS（与坐席端一致） |
| UI 风格 | 深色科技风（CSS 变量与原型一致） |
| 部署路径 | `/itadmin/` |

### 10.2 CSS 变量（与原型对齐）

```css
--bg-primary: #0f172a;      /* 主背景 */
--bg-secondary: #1e293b;    /* 侧边栏/卡片 */
--bg-tertiary: #334155;     /* 表格表头 */
--accent: #3b82f6;          /* 主题色 */
--success: #10b981;         /* 成功/在线 */
--warning: #f59e0b;         /* 警告 */
--danger: #ef4444;          /* 危险/错误 */
--text-primary: #f1f5f9;    /* 主文字 */
--text-secondary: #94a3b8;  /* 辅助文字 */
--text-muted: #64748b;      /* 弱化文字 */
```

### 10.3 后端技术栈

| 项目 | 值 |
|------|------|
| 框架 | FastAPI |
| ORM | SQLAlchemy 2.0 (async) |
| 数据库 | PostgreSQL（生产）/ SQLite（开发） |
| 缓存 | Redis（token + 配置热更新） |
| 认证 | Redis token + Agent.role 权限校验 |
| API 前缀 | `/api/admin/` |

### 10.4 部署

```nginx
# nginx 配置示例（新增 /itadmin/ 路由）
location /itadmin/ {
    alias /path/to/frontend-admin/dist/;
    try_files $uri $uri/ /itadmin/index.html;
}

location /api/admin/ {
    proxy_pass http://backend:8000/api/admin/;
}
```

### 10.5 其他约定

- 项目名称：`frontend-admin`，目录与 `frontend-agent/`、`frontend-h5/` 并列
- 后端新建文件：`backend/app/api/admin.py`、`backend/app/services/admin_service.py`（可选）
- 数据库迁移：新增列使用 Alembic 迁移脚本
- 中文界面，所有文案使用中文
- 配置项命名遵循现有 `snake_case` 规范

---

## 11. 待确认问题

| # | 问题 | 影响范围 | 建议方案 | 确认人 |
|---|------|---------|---------|--------|
| Q1 | 坐席组长是否只有 1 人（宋献）？其他坐席是否需要管理后台访问权限？ | RBAC 设计 | 阶段一仅宋献（role=admin），后续需新增组长时可扩展 | 宋献 |
| Q2 | IntegrationConfig 模型是新建独立表还是复用 SystemConfig 存 JSON？ | 数据模型 | 建议阶段一先用 SystemConfig，等集成系统配置复杂度上升后再建独立表 | 开发 |
| Q3 | 快速回复的版本历史是存一张新表（quick_reply_versions）还是在主表用 JSON 存历史版本？ | 数据模型 | 建议阶段一先用主表 version 字段递增 + JSON 字段存 diff，阶段二按需建版本表 | 开发 |
| Q4 | 配置变更历史的存储粒度：每键独立日志表 vs 通用 JSON 日志？ | 数据模型 | 建议阶段一在 config_change_logs 表中存 {key, old, new, who, when}，简单够用 | 开发 |
| Q5 | 仪表盘"平均响应时间"和"AI命中率"的计算口径需要确认（从坐席接单到首条回复？还是从员工发消息到坐席回复？） | 运营总览 | 建议阶段一先展示"今日会话数"和"在线坐席数"两个有把握的指标，其余用占位符 | 宋献 |
| Q6 | 快速回复"仅提交人可用"（待审核期间）的权限粒度：坐席端 API 是否需要改？ | 快速回复 | 是，坐席端 `GET /api/quick-replies` 返回需增加 status 筛选（全员可见的 approved + 自己的 pending_review） | 开发 |
| Q7 | 应急模式开启时，H5用户端展示引导文案的内容是否需要管理后台可配？ | 功能开关 | 建议阶段一固定文案（硬编码在 system.py 中），阶段二增加可配置 | 宋献 |

---

> **文档结束** — 本 PRD 覆盖管理后台阶段一 1B 的全部需求，与主 PRD §18-20 和原型 `admin-dashboard-v1.html` 对齐。后续阶段的功能将在迭代中增量补充。
