# 消息中台管理后台菜单重构与界面设计

> **日期**：2026-07-09  
> **状态**：已确认，待实现  
> **关联文档**：[消息与客户互动中台架构设计](../architecture/2026-07-06-message-customer-interaction-design.md)

---

## 1. 背景与问题

当前管理后台采用 14 项平铺菜单，功能随需求逐步叠加，导致：

- **职责割裂**：同一业务对象（如渠道账号）的初始化、状态监控、登录操作分散在不同页面。
- **工作流不连贯**：运营人员完成一次“发消息”需要跳转发送记录、测试发送、发送策略等多个平级菜单。
- **设计不统一**：部分页面是对象管理 CRUD，部分是流程编排，部分是工具页面，缺少统一的信息架构。

本设计从三类用户（平台管理员、租户管理员/技术人员、运营人员）的实际工作流出发，重新梳理菜单层级与功能定义。

---

## 2. 设计目标

1. **按工作流组织顶层菜单**：让用户按“接入 → 客户关系 → 运营发送 → 编排流程 → 系统管理”的路径找到功能。
2. **按业务对象聚合二级功能**：同一对象（渠道账号、会话、联系人）的关联操作放在同一模块下。
3. **明确功能边界**：每个菜单项都有清晰的功能定义、面向角色和与现有页面的映射关系。
4. **统一设计语言**：
   - 列表页 = 筛选 + 表格 + 顶部「新增」按钮 + 分页
   - 新增 = 弹窗/小抽屉，只填核心字段
   - 编辑/详情 = 大抽屉，基础信息区 + 标签字段 + 关联内容区
5. **预留扩展位**：钉钉/飞书/IVR 本期仅保留入口，不实现具体能力。

---

## 3. 设计决策

采用 **混合式组织**：

- 顶层按 **工作流/职责域** 划分，降低日常操作路径长度。
- 模块内按 **业务对象** 分组，保持数据模型与 UI 结构一致。
- 权限按角色控制菜单可见性，而不是为每个角色单独一套菜单。

---

## 4. 角色定义

| 角色 | 说明 | 典型操作 |
|------|------|---------|
| 平台管理员 | 中台平台级管理 | 创建租户、维护平台角色 |
| 租户管理员 | 业务系统技术人员/管理员 | 配置渠道、管理用户、配置流程 |
| 运营人员 | 日常消息运营 | 发送、查看记录、维护联系人/群 |

> 说明：运营人员缺少部分租户内容管理，其他权限与租户管理员相同。具体可见性通过角色权限控制，不由菜单结构区分。

---

## 5. 菜单结构

### 5.1 一级菜单总览

| 一级菜单 | 定位 | 可见角色 |
|---------|------|---------|
| 概览 | 运营总览、快捷入口 | 全部 |
| 渠道接入 | 渠道资源与账号接入 | 租户管理员、运营人员 |
| 客户关系 | 联系人、会话、标签资产 | 租户管理员、运营人员 |
| 消息运营 | 发送、记录、消息查询 | 租户管理员、运营人员 |
| 流程编排 | 入站消息处理配置 | 租户管理员 |
| 系统管理 | 租户、用户、角色 | 平台管理员、租户管理员 |

### 5.2 概览

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 运营总览 | 展示今日发送量、成功/失败/待发送统计、最近异常、关键指标卡片 | 复用并增强现有 Dashboard |
| 快捷入口 | 提供常用功能的一键跳转（测试发送、发送记录、渠道账号） | 新增 |

### 5.3 渠道接入

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 渠道主体 | 维护企业在各渠道的主体信息；企微主体支持会话存档、员工/客户/群聊/会话存档同步 | 现有 ChannelSubject 页面增强 |
| 渠道账号 | 维护用于收发消息的载体账号；支持按 ID 拉取企微信息、pywechat 扫码登录、同步会话 | 现有 ChannelAccount 页面迁移 |
| 应用管理 | 企微应用的配置：agent_id、agent_secret、能力验证；本期只实现企微，其他占位 | 新增 |

### 5.4 客户关系

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 联系人 | 维护 Person；详情抽屉涵盖基本信息、渠道身份、标签、所属会话 | 现有 Person 页面增强 |
| 会话/群聊 | 维护 Conversation；详情抽屉涵盖基本信息、成员、收发账号绑定、标签、历史消息 | 现有 Conversation 页面迁移 |
| 标签体系 | 树形标签管理；标签用于表达角色/合同/机构/供应商等业务属性 | 现有 Tag 页面升级为体系化管理 |

### 5.5 消息运营

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 发送记录 | 按任务查询发送明细、状态、结果；支持取消待发送任务；失败固定重试 2 次 | 现有 SendRecord 页面迁移 |
| 测试发送 | 模拟出站/入站消息，用于业务系统联调和发送逻辑验证 | 现有 MessageTest 页面迁移并改名 |
| 消息查询 | 聊天界面查看入站/出站消息事件，支持按会话、人员、来源筛选 | 新增 |

### 5.6 流程编排

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 入站 Webhook | 配置业务系统接收入站消息的 webhook URL、签名方式、测试连通性 | 现有 InboundWebhook 页面迁移 |
| 入站流程 | 画布配置入站消息处理流程，支持多轮上下文与槽位收集 | 现有 InboundFlow 页面增强 |

> **本期不做**：IVR 流程、发送策略配置。

### 5.7 系统管理

| 二级菜单 | 功能定义 | 页面/备注 |
|---------|---------|----------|
| 租户管理 | 平台管理员创建/编辑租户；租户管理员维护本租户基础信息 | 现有 TenantManagement 页面增强 |
| 用户管理 | 中台用户增删改查、重置密码、启用/停用、绑定角色 | 现有 UserManagement 页面迁移 |
| 角色权限 | 平台角色 admin/operator/viewer 的权限配置与分配 | 新增 |

---

## 6. 现有菜单调整映射

| 当前菜单 | 调整方式 | 新位置 |
|---------|---------|--------|
| 概览 | 保留并增强 | 概览 → 运营总览 |
| 渠道主体 | 保留并增强 | 渠道接入 → 渠道主体 |
| 渠道账号 | 拆分 | 渠道接入 → 渠道账号 / 应用管理 |
| 会话/群聊 | 保留，绑定功能移入详情 | 客户关系 → 会话/群聊 |
| 联系人 | 保留，增强 | 客户关系 → 联系人 |
| 标签 | 升级为体系 | 客户关系 → 标签体系 |
| 发送记录 | 保留 | 消息运营 → 发送记录 |
| 消息测试 | 保留，改名 | 消息运营 → 测试发送 |
| 发送策略 | 本期移除 | — |
| 入站流程 | 保留并增强 | 流程编排 → 入站流程 |
| IVR 流程 | 本期移除 | — |
| 入站 Webhook | 保留 | 流程编排 → 入站 Webhook |
| 流程追踪 | 合并 | 消息运营 → 发送记录（详情）/ 消息查询 |
| 用户管理 | 保留 | 系统管理 → 用户管理 |
| 租户管理 | 保留 | 系统管理 → 租户管理 |
| 账号初始化 | 删除独立菜单 | 能力分散到渠道主体/账号/联系人/会话 |
| 渠道身份 | 删除独立菜单 | 并入联系人详情 |
| 账号-会话绑定 | 删除独立菜单 | 并入会话详情 |

---

## 7. 统一页面设计语言

### 7.1 列表页

- 顶部筛选区（可折叠）
- 右上角「新增」按钮
- 表格展示核心字段 + 标签 + 关联数量
- 行内操作：编辑 / 详情 / 删除 / 启用禁用
- 底部分页

### 7.2 新增

- 弹窗或小抽屉
- 只收集创建必需的字段
- 创建成功后刷新列表

### 7.3 编辑/详情

- 大抽屉
- 基础信息区（可编辑）
- 标签字段（树形多选，随基础信息一起保存）
- 关联内容区（只读列表 + 快捷操作）
- 不同对象按自身关联内容展示，不拆成多个 Tab

---

## 8. 渠道接入模块详细设计

### 8.1 渠道主体

#### 列表字段

| 字段 | 说明 |
|------|------|
| 渠道 | wecom / dingtalk / feishu（本期仅 wecom 可用） |
| 主体编码 | `subject_code` |
| 主体名称 | `subject_name` |
| CorpID | `corp_id` |
| 会话存档 | 开启 / 关闭 |
| 状态 | 启用 / 禁用 |
| 操作 | 编辑 / 详情 / 删除 / 启用禁用 |

#### 新增/编辑

- 渠道类型
- 主体编码
- 主体名称
- CorpID
- CorpSecret（通讯录同步 secret）
- AgentID
- AgentSecret
- 会话存档开关
- 会话存档 RSA 私钥

#### 详情抽屉（企微能力区）

| 能力 | 所需凭证 | 操作 |
|------|---------|------|
| 验证主体连通 | `corp_id + corp_secret` | 点击验证 |
| 同步企业员工 | `corp_id + corp_secret` | 拉取通讯录，写入 `mci_person` + `mci_channel_identity` + `department_path` |
| 同步客户/客户群 | 主体下配置的企微应用 `agent_secret` | 拉取外部联系人和客户群 |
| 同步会话存档 | 应用管理中配置的会话存档应用 secret | 用 Finance SDK 拉取最近消息 |

每个能力执行后展示状态、上次执行时间、成功/失败数量、错误信息，并写入 `mci_channel_subject_sync_task` 日志表。

### 8.2 渠道账号

#### 列表字段

| 字段 | 说明 |
|------|------|
| 账号类型 | 企微内部账号 / 企微应用 / pywechat 个人号 |
| 渠道 | wecom / wechat_personal |
| 账号 ID | `account_id` |
| 名称 | `account_name` |
| 所属主体 | `subject_name` |
| 登录状态 | 已登录 / 未登录 |
| 在线状态 | 在线 / 离线 |
| 状态 | 启用 / 禁用 |
| 操作 | 编辑 / 删除 / 启用禁用 / 初始化 / 同步会话 |

#### 企微内部账号

- 创建/编辑时输入 `userid` 后，可点击「从企微拉取」回填姓名、部门信息
- 会话存档开关（标记该员工是否开启存档）

#### 企微应用

- 应用凭证在「应用管理」维护
- 渠道账号中创建时选择应用，自动带出 `agent_id`
- 提供「验证应用」按钮

#### pywechat 个人号

- 创建时填写 `wxid / bot_code` 和 `server_host`
- 行操作「扫码登录」：返回二维码，轮询登录状态
- 行操作「同步会话」：拉取该个人号所在群聊

### 8.3 应用管理

#### 列表字段

| 字段 | 说明 |
|------|------|
| 应用名称 | `app_name` |
| 应用类型 | wecom / wecom_session_archive / dingtalk / feishu |
| agent_id | 企微应用 ID |
| 所属主体 | `subject_name` |
| 状态 | 启用 / 禁用 |
| 操作 | 编辑 / 验证 / 删除 / 启用禁用 |

#### 新增/编辑

- 应用名称
- 所属主体
- 应用类型
- agent_id
- agent_secret
- 状态

#### 操作

- **验证并获取能力**：用 `corp_id + agent_id + agent_secret` 获取 access_token，验证通过更新状态
- 钉钉/飞书应用仅保留表单入口，验证按钮禁用

---

## 9. 客户关系模块详细设计

### 9.1 联系人

#### 列表字段

| 字段 | 说明 |
|------|------|
| 人员编码 | `person_code` |
| 姓名 | `person_name` |
| 手机号 | `phone` |
| 类型 | 内部人员 / 供应商人员 / 客户 / 司机 |
| 所属机构 | `institution_id` 名称 |
| 部门路径 | 多个标签式展示 |
| 标签 | 直接展示绑定的标签 |
| 渠道身份数 | 几个渠道身份 |
| 参与会话数 | 该人员在多少个会话中 |
| 状态 | 启用 / 禁用 |
| 操作 | 编辑 / 详情 / 删除 / 启用禁用 |

#### 新增

弹窗字段：
- 人员编码
- 姓名
- 手机号
- 类型
- 所属机构
- 状态

#### 编辑/详情抽屉

**基础信息区**
- 人员编码、姓名、手机号
- 类型
- 所属机构、供应商、合同
- 部门路径（支持多条）
- 状态

**标签字段**
- 树形多选，已选标签平铺展示

**渠道身份区**
- 列表展示所有渠道身份
- 行内新增 / 编辑 / 删除
- 新增时：选择渠道 → 选择主体 → 输入渠道用户 ID → 「拉取企微信息」回填昵称

**所属会话区**
- 展示该人员参与的会话列表
- 点击会话名称打开会话详情抽屉

### 9.2 会话/群聊

#### 列表字段

| 字段 | 说明 |
|------|------|
| 会话类型 | 单聊 / 群聊 |
| 渠道 | wecom / wechat_personal |
| 渠道会话 ID | `channel_conversation_id` |
| 会话名称 | `conversation_name` |
| 群主/负责人 | `owner_account_id` 名称 |
| 所属主体 | `subject_id` 名称 |
| 标签 | 直接展示 |
| 成员数 | 群聊显示成员数量 |
| 业务绑定 | 机构 / 供应商 / 合同 / 渠道编码 |
| 状态 | 启用 / 禁用 |
| 操作 | 编辑 / 详情 / 删除 / 同步成员 |

#### 新增

弹窗字段：
- 会话类型
- 渠道
- 所属主体
- 渠道会话 ID
- 会话名称
- 负责人账号
- 状态

#### 编辑/详情抽屉

**基础信息区**
- 会话类型、渠道、所属主体
- 渠道会话 ID、会话名称
- 负责人账号
- 关联机构 / 供应商 / 合同 / 渠道编码
- 状态

**标签字段**
- 树形多选

**成员区**
- 列表展示 `mci_conversation_participant`
- 字段：人员姓名、渠道身份、角色
- 操作：同步成员、移除
- 人员名称可点击进入联系人详情

**收发账号绑定区**
- 展示发送主号 / 发送备用号 / 接收主号 / 接收备用号
- 行内新增、编辑优先级、删除
- 单聊限制：只能绑定同 `channel_type` 的账号
- 群聊允许跨渠道绑定，但给出提示

**历史消息区**
- 展示该会话最近消息列表
- 可跳转消息查询页面

### 9.3 标签体系

#### 列表字段

| 字段 | 说明 |
|------|------|
| 标签名 | `tag_name` |
| 路径 | `tag_path` |
| 层级 | `level` |
| 来源 | system / business_sync / manual |
| 状态 | 启用 / 禁用 |
| 关联人员数 | 使用数量 |
| 关联会话数 | 使用数量 |
| 操作 | 新增子标签 / 编辑 / 删除 / 启用禁用 |

#### 新增/编辑

弹窗字段：
- 标签名
- 父标签（树形选择，顶级为根）
- 来源
- 状态

#### 详情抽屉

- 标签基本信息
- 关联人员列表（分页）
- 关联会话列表（分页）

---

## 10. 消息运营模块详细设计

### 10.1 发送记录

#### 页面结构

- 顶部统计卡片：今日发送总数 / 成功 / 失败 / 待发送
- 筛选区：任务 ID、发送时间、渠道、状态、目标类型
- 记录列表
- 详情抽屉

#### 列表字段

| 字段 | 说明 |
|------|------|
| 任务 ID | `task_id` |
| 目标类型 | 单人会话 / 群聊 / 人员 / 标签 / 规则 |
| 目标摘要 | 会话名称 / 人员姓名 / 标签名 / 规则描述 |
| 渠道 | wecom / wechat_personal |
| 发送账号 | 实际使用的账号名称 |
| 状态 | 待发送 / 发送中 / 成功 / 失败 |
| 发送时间 | `send_time` |
| 完成时间 | `finish_time` |
| 操作 | 详情 / 取消（仅待发送） |

#### 详情抽屉

- 基础信息：任务 ID、目标、渠道、发送账号、内容摘要
- 内容区：完整 `content_body`
- 策略与回调：`channel_strategy`、`callback_url`
- 渠道结果：`channel_result` 格式化展示
- 关联跳转：会话 / 人员 / 账号 / 消息事件
- 时间线：创建 → 发送中 → 完成 / 失败

> 失败固定重试 2 次，由后端策略处理，前台不配置。

### 10.2 测试发送

工具型页面，两个 Tab：

#### Tab 1：出站测试

| 字段 | 说明 |
|------|------|
| 目标类型 | 会话 / 人员 / 标签 / 规则 |
| 目标 | 根据类型选择或输入 |
| 内容类型 | text / markdown / image / file / news 等 |
| 内容 | 对应内容编辑器 |
| 渠道策略 | 优先渠道、备用渠道 |
| 回调地址 | 可选 |

点击「发送测试」后展示返回的 `task_id`，并刷新发送记录。

#### Tab 2：入站模拟

| 字段 | 说明 |
|------|------|
| 事件 ID | 自定义事件 ID |
| 渠道类型 | wecom / wechat_personal |
| 消息来源 | realtime / session_archive |
| 会话 ID | 选择已有会话 |
| 发送人 | 选择人员或输入 channel_user_id |
| 接收账号 | 选择接收账号 |
| 内容类型 | text / image / voice 等 |
| 内容 | 消息内容 |

点击「模拟入站」后触发入站流程编排，展示处理结果。

### 10.3 消息查询

#### 页面布局

三栏式聊天界面：

```
┌─────────────┬─────────────────────┬─────────────┐
│  会话列表    │      聊天内容        │  会话信息    │
│  搜索/筛选   │                     │  成员/标签   │
└─────────────┴─────────────────────┴─────────────┘
```

#### 左侧：会话列表

- 按时间倒序展示会话
- 每个会话卡片：会话名称、最后一条消息预览、最后消息时间、标签小圆点
- 搜索：会话名称、成员姓名、消息内容
- 筛选：渠道、消息来源（实时/会话存档）、会话类型、标签

#### 中间：聊天内容区

- 按时间顺序展示消息气泡
- 区分入站消息（左侧）、出站消息（右侧）、系统事件（中间）
- 根据 `msgtype` 渲染：文本、图片、语音、视频、文件、撤回提示等
- 支持按时间范围筛选，滚动加载历史消息

#### 右侧：会话信息

- 基础信息：会话名称、渠道、来源、群主
- 业务绑定：机构 / 供应商 / 合同 / 渠道编码
- 标签：直接展示，可编辑
- 成员列表
- 快捷操作：查看发送记录、跳转联系人详情、同步成员

---

## 11. 流程编排模块详细设计

### 11.1 入站 Webhook

每个租户独立配置一个入站推送地址。

#### 页面内容

| 字段 | 说明 |
|------|------|
| Webhook URL | 业务系统接收中台入站消息的地址 |
| 签名算法 | HMAC-SHA256 / HMAC-SHA512 / 无 |
| Webhook Secret | 签名密钥 |
| 超时时间 | 推送超时秒数，默认 10s |
| 失败重试 | 固定重试 2 次 |

#### 操作

- 保存
- 测试推送
- 查看最近推送日志（状态、响应码、响应摘要）

> 这是流程中 Webhook 节点的默认推送地址，只有流程走到该节点才会触发。

### 11.2 入站流程

#### 页面布局

保留三栏画布：

```
┌────────────┬─────────────────────────┬────────────┐
│  流程列表   │       流程画布           │  节点配置   │
│  组件面板   │                         │            │
└────────────┴─────────────────────────┴────────────┘
```

#### 流程节点

| 节点 | 作用 |
|------|------|
| 接收消息 | 流程入口，指定渠道 |
| 加载上下文 | 读取当前会话已有的 intent / slots / 轮次 |
| 意图识别 | LLM / 规则识别本轮意图和槽位 |
| 合并槽位 | 把本轮新槽位合并到会话上下文 |
| 槽位校验 | 检查必需槽位是否齐全 |
| 自动追问 | 缺槽位时自动生成追问文案并回复 |
| Webhook | 槽位齐全后推送给业务系统 |
| 回复消息 | 可配置固定回复 |
| 保存上下文 | 把更新后的 intent / slots 写回 |
| 清空上下文 | Webhook 成功后结束当前会话 |

#### 多轮流程示例

```
接收消息
  │
  ▼
加载上下文
  │
  ▼
意图识别（结合上下文）
  │
  ▼
合并槽位
  │
  ▼
槽位校验
  ├─ 缺槽位 ──▶ 自动追问 ──▶ 保存上下文 ──▶ 结束
  │
  └─ 槽位齐全 ──▶ Webhook ──▶ 回复客户 ──▶ 清空上下文 ──▶ 结束
```

#### 上下文存储

新增 `mci_conversation_context` 表：

| 字段 | 说明 |
|------|------|
| conversation_id | 会话 ID |
| intent | 当前意图 |
| slots | JSON，已收集槽位 |
| missing_slots | JSON，还缺哪些槽位 |
| turn_count | 当前轮次 |
| status | collecting / complete / expired |
| expire_time | 上下文过期时间 |
| update_time | 最后更新时间 |

超过一定时间（如 10 分钟）无新消息，上下文自动过期。

---

## 12. 系统管理模块详细设计

### 12.1 租户管理

#### 列表字段

| 字段 | 说明 |
|------|------|
| 租户编码 | `tenant_code` |
| 租户名称 | `tenant_name` |
| 状态 | 启用 / 禁用 |
| 用户数量 | 该租户下用户总数 |
| 创建时间 | `create_time` |
| 操作 | 编辑 / 删除 / 启用禁用 |

**平台管理员**：可操作全部租户。  
**租户管理员**：只能查看/编辑本租户，不可删除。

#### 新增（仅平台管理员）

- 租户编码
- 租户名称
- 入站 Webhook URL
- 初始化管理员账号（默认 `admin`）
- 初始化管理员密码
- 状态

创建成功后自动创建该租户的第一个管理员用户。

#### 编辑

- 租户名称
- 入站 Webhook URL
- 状态

默认租户（如 `platform`）不可删除。

### 12.2 用户管理

#### 列表字段

| 字段 | 说明 |
|------|------|
| 用户名 | `username` |
| 真实姓名 | `real_name` |
| 手机号 | `phone` |
| 所属租户 | `tenant_name`（平台管理员可见） |
| 角色 | 角色名称，多个用逗号 |
| 状态 | 启用 / 禁用 |
| 创建时间 | `create_time` |
| 操作 | 编辑 / 重置密码 / 删除 / 启用禁用 |

#### 新增

- 所属租户（平台管理员选择，租户管理员固定为本租户）
- 用户名
- 密码
- 真实姓名
- 手机号
- 角色（多选）
- 状态

#### 编辑

可编辑：真实姓名、手机号、角色、状态。  
不可编辑：用户名、所属租户。

### 12.3 角色权限

#### 列表字段

| 字段 | 说明 |
|------|------|
| 角色编码 | `role_code` |
| 角色名称 | `role_name` |
| 权限数量 | 已配置的权限项数 |
| 状态 | 启用 / 禁用 |
| 操作 | 配置权限 / 启用禁用 |

**首期固定角色**：

| 角色编码 | 角色名称 | 默认权限 |
|---------|---------|---------|
| `platform_admin` | 平台管理员 | 全部权限 |
| `admin` | 租户管理员 | 除租户创建外的全部权限 |
| `operator` | 运营人员 | 发送、查看记录、维护联系人/会话、配置渠道账号 |
| `viewer` | 只读用户 | 仅查看发送记录、统计、消息查询 |

#### 权限配置

抽屉中展示权限树：

```
□ 全部
  □ 概览
    □ 查看
  □ 渠道接入
    □ 渠道主体（查看 / 新增 / 编辑 / 删除）
    □ 渠道账号（查看 / 新增 / 编辑 / 删除）
    □ 应用管理（查看 / 新增 / 编辑 / 删除）
  □ 客户关系
    □ 联系人（查看 / 新增 / 编辑 / 删除）
    □ 会话/群聊（查看 / 新增 / 编辑 / 删除）
    □ 标签体系（查看 / 新增 / 编辑 / 删除）
  □ 消息运营
    □ 发送记录（查看 / 取消）
    □ 测试发送
    □ 消息查询
  □ 流程编排
    □ 入站 Webhook（查看 / 编辑）
    □ 入站流程（查看 / 新增 / 编辑 / 删除 / 发布）
  □ 系统管理
    □ 租户管理（查看 / 新增 / 编辑 / 删除）
    □ 用户管理（查看 / 新增 / 编辑 / 删除 / 重置密码）
    □ 角色权限（查看 / 配置）
```

保存后同步到 `mci_platform_role` 表的 `permissions` JSON。

### 12.4 全局管理员登录

- 默认创建 `platform` 租户
- 通过 Flyway 初始化 `admin` 用户，角色 `platform_admin`
- 初始密码在配置文件中设置，首次登录强制修改

---

## 13. 数据模型补充

### 13.1 新增/调整字段

| 表 | 字段 | 类型 | 说明 |
|---|------|------|------|
| `mci_person` | `department_path` | JSON | 多个部门路径，如 `["销售中心/销售一部", "销售中心/华北组"]` |
| `mci_channel_subject_sync_task` | — | 新表 | 记录各渠道主体同步任务 |
| `mci_conversation_context` | — | 新表 | 入站流程多轮会话上下文 |

### 13.2 同步任务日志表

`mci_channel_subject_sync_task`：

| 字段 | 说明 |
|------|------|
| subject_id | 渠道主体 ID |
| sync_type | employee / external_contact / group / session_archive |
| status | 0待执行 1执行中 2成功 3失败 |
| total_count | 总数 |
| success_count | 成功数 |
| fail_count | 失败数 |
| error_msg | 错误信息 |
| create_time / finish_time | 时间 |

---

## 14. 不在本期范围内的功能

| 功能 | 原因 |
|------|------|
| IVR 流程 | 属于 2092 IVR 语音配置需求 |
| 发送策略配置 | 本期失败固定重试 2 次，不开放前台配置 |
| 模板管理 | 中台不保存模板 |
| 业务触发规则 | 中台不承载业务系统触发规则 |
| 钉钉/飞书具体能力 | 仅保留入口 |

---

## 15. 实现要点

1. **前端路由**：按新菜单结构重排 `admin-web/src/router/index.ts`。
2. **布局组件**：`Layout.vue` 从平铺 `el-menu-item` 改为分组 `el-sub-menu`。
3. **权限控制**：菜单可见性通过 `authStore.roleCodes` 或后端返回的权限列表控制。
4. **页面拆分与合并**：
   - 删除 `ChannelAccountInit.vue` 独立页面
   - 删除独立的渠道身份、账号-会话绑定页面
   - `Conversation.vue` 增强详情抽屉，包含绑定功能
   - `Person.vue` 增强详情抽屉，包含渠道身份
5. **消息查询**：新增聊天界面组件。
6. **入站流程**：增强节点配置，新增上下文存储能力。
7. **空状态处理**：新增页面先实现最小可用版本。

---

## 16. 验收标准

- [ ] 左侧导航按新 6 大模块分组展示，无 IVR 流程、发送策略、账号初始化入口。
- [ ] 每个二级菜单有明确页面，无 404。
- [ ] 租户管理员、运营人员、平台管理员看到的菜单符合角色定义。
- [ ] 联系人、会话详情抽屉涵盖所有关联内容。
- [ ] 标签在列表和编辑表单中直接展示/编辑。
- [ ] 消息查询实现聊天界面。
- [ ] 入站流程支持多轮上下文与槽位收集。
- [ ] 现有功能在迁移后行为保持一致。
