1
This commit is contained in:
281
_doc/聊天列表功能说明.md
Normal file
281
_doc/聊天列表功能说明.md
Normal file
@@ -0,0 +1,281 @@
|
||||
# 聊天列表功能说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
聊天列表模块实现了管理后台的实时聊天功能,包括:
|
||||
- 会话列表展示
|
||||
- 实时消息收发
|
||||
- 消息历史记录
|
||||
- 轮询机制接收新消息
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 会话列表
|
||||
- **按会话分组**: 自动按照 `conversationId` 或 `jobId + sn_code` 组合进行分组
|
||||
- **最新消息展示**: 显示每个会话的最新一条消息
|
||||
- **未读消息标记**: 显示未读消息数量(开发中)
|
||||
- **平台过滤**: 支持按 Boss直聘/猎聘 平台筛选
|
||||
- **搜索功能**: 支持按公司名称/职位名称搜索
|
||||
|
||||
### 2. 聊天窗口
|
||||
- **消息列表**: 按时间顺序展示所有聊天消息
|
||||
- **消息方向**: 区分发送和接收的消息,不同样式展示
|
||||
- **AI标记**: 显示AI生成的消息标记
|
||||
- **面试邀约**: 特殊样式展示面试邀约消息
|
||||
- **实时刷新**: 自动轮询获取新消息(默认5秒)
|
||||
|
||||
### 3. 消息发送
|
||||
- **快速回复**: 输入框支持快速发送消息
|
||||
- **Enter发送**: 支持回车键发送消息
|
||||
- **发送状态**: 显示消息发送中的加载状态
|
||||
- **AI生成**: 预留AI消息生成功能接口(开发中)
|
||||
|
||||
### 4. 定时刷新机制
|
||||
- **自动刷新**: 使用 setInterval 定时刷新消息
|
||||
- **可配置间隔**: 默认10秒,可自定义刷新间隔
|
||||
- **资源释放**: 页面销毁时自动清除定时器
|
||||
- **简单高效**: 使用Ajax轮询,无需WebSocket
|
||||
|
||||
## 文件结构
|
||||
|
||||
```
|
||||
admin/src/
|
||||
├── views/chat/
|
||||
│ ├── chat_list.vue # 聊天列表页面(新增)
|
||||
│ └── chat_records.vue # 聊天记录管理页面(原有)
|
||||
├── api/operation/
|
||||
│ └── chat_records_server.js # 聊天API服务
|
||||
└── router/
|
||||
└── component-map.js # 路由组件映射
|
||||
|
||||
api/
|
||||
├── controller_admin/
|
||||
│ └── chat_records.js # 聊天记录后端控制器(已扩展)
|
||||
└── model/
|
||||
└── chat_records.js # 聊天记录数据模型
|
||||
```
|
||||
|
||||
## API 接口
|
||||
|
||||
### 前端API服务 (chat_records_server.js)
|
||||
|
||||
| 方法 | 说明 | 参数 |
|
||||
|------|------|------|
|
||||
| `page(param)` | 分页查询聊天记录 | seachOption, pageOption |
|
||||
| `getByJobId(params)` | 获取指定职位的聊天记录 | jobId, sn_code |
|
||||
| `sendMessage(data)` | 发送聊天消息 | sn_code, jobId, content, chatType, platform |
|
||||
| `getUnreadCount(params)` | 获取未读消息数量 | sn_code |
|
||||
| `markAsRead(data)` | 标记消息为已读 | chatId |
|
||||
| `getStatistics()` | 获取聊天统计数据 | - |
|
||||
|
||||
### 后端API接口
|
||||
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| `/admin_api/chat/list` | POST | 获取聊天记录列表 |
|
||||
| `/admin_api/chat/by-job` | GET | 获取指定职位的聊天记录 |
|
||||
| `/admin_api/chat/send` | POST | 发送聊天消息 |
|
||||
| `/admin_api/chat/unread-count` | GET | 获取未读消息数量 |
|
||||
| `/admin_api/chat/mark-read` | POST | 标记消息为已读 |
|
||||
| `/admin_api/chat/statistics` | GET | 获取聊天统计数据 |
|
||||
| `/admin_api/chat/detail` | GET | 获取聊天记录详情 |
|
||||
| `/admin_api/chat/delete` | POST | 删除聊天记录 |
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 1. 访问聊天列表页面
|
||||
|
||||
在后台菜单中添加聊天列表页面的路由配置:
|
||||
|
||||
```javascript
|
||||
{
|
||||
name: '聊天列表',
|
||||
path: '/chat/chat_list',
|
||||
component: 'chat/chat_list'
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 查看会话列表
|
||||
|
||||
- 左侧显示所有会话列表
|
||||
- 每个会话显示公司名称、职位名称、最新消息和时间
|
||||
- 点击会话可在右侧查看完整的聊天记录
|
||||
|
||||
### 3. 发送消息
|
||||
|
||||
1. 在左侧选择一个会话
|
||||
2. 在右侧聊天窗口底部的输入框中输入消息
|
||||
3. 点击"发送"按钮或按回车键发送
|
||||
4. 消息发送成功后会自动刷新聊天记录
|
||||
|
||||
### 4. 筛选和搜索
|
||||
|
||||
- **平台筛选**: 在顶部选择 Boss直聘 或 猎聘 进行筛选
|
||||
- **关键词搜索**: 在搜索框输入公司名称或职位名称进行搜索
|
||||
- 筛选和搜索会实时更新会话列表
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 聊天记录模型 (chat_records)
|
||||
|
||||
主要字段:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | INTEGER | 主键ID |
|
||||
| sn_code | STRING | 设备SN码 |
|
||||
| platform | STRING | 平台(boss/liepin) |
|
||||
| jobId | STRING | 职位ID |
|
||||
| companyName | STRING | 公司名称 |
|
||||
| jobTitle | STRING | 职位名称 |
|
||||
| hrName | STRING | HR姓名 |
|
||||
| content | TEXT | 消息内容 |
|
||||
| direction | STRING | 消息方向(sent/received) |
|
||||
| chatType | STRING | 聊天类型(greeting/reply/interview) |
|
||||
| sendStatus | STRING | 发送状态(pending/sent/failed) |
|
||||
| sendTime | DATE | 发送时间 |
|
||||
| receiveTime | DATE | 接收时间 |
|
||||
| hasReply | BOOLEAN | 是否有回复 |
|
||||
| conversationId | STRING | 会话ID |
|
||||
| isAiGenerated | BOOLEAN | 是否AI生成 |
|
||||
| isInterviewInvitation | BOOLEAN | 是否面试邀约 |
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 1. 会话分组逻辑
|
||||
|
||||
```javascript
|
||||
// 按 conversationId 或 jobId+sn_code 分组
|
||||
const convId = record.conversationId || `${record.jobId}_${record.sn_code}`
|
||||
```
|
||||
|
||||
### 2. 定时刷新机制
|
||||
|
||||
```javascript
|
||||
// 启动定时刷新
|
||||
startAutoRefresh() {
|
||||
this.refreshTimer = setInterval(() => {
|
||||
// 如果有选中的会话,刷新消息
|
||||
if (this.activeConversation) {
|
||||
this.loadChatMessages()
|
||||
}
|
||||
// 刷新会话列表
|
||||
this.loadConversations()
|
||||
}, this.refreshInterval) // 默认10秒
|
||||
}
|
||||
|
||||
// 停止定时刷新
|
||||
stopAutoRefresh() {
|
||||
if (this.refreshTimer) {
|
||||
clearInterval(this.refreshTimer)
|
||||
this.refreshTimer = null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 消息发送流程
|
||||
|
||||
1. 前端调用 `chatRecordsServer.sendMessage()`
|
||||
2. 后端创建聊天记录,状态为 `pending`
|
||||
3. 后端通过MQTT发送消息到设备(待实现)
|
||||
4. 更新聊天记录状态为 `sent`
|
||||
5. 前端刷新消息列表
|
||||
|
||||
## 待开发功能
|
||||
|
||||
### 1. 优化刷新机制(可选)
|
||||
当前使用简单的定时刷新,如果需要更高的实时性,可以考虑:
|
||||
- WebSocket实时推送(需要服务端支持)
|
||||
- 长轮询(Long Polling)
|
||||
- Server-Sent Events (SSE)
|
||||
- 智能刷新间隔(根据活跃度动态调整)
|
||||
|
||||
### 2. AI消息生成
|
||||
集成AI服务生成智能回复:
|
||||
- 根据聊天上下文生成合适的回复
|
||||
- 支持不同的回复风格
|
||||
- 提高回复效率
|
||||
|
||||
### 3. 富文本消息
|
||||
支持更丰富的消息类型:
|
||||
- 图片消息
|
||||
- 文件消息
|
||||
- 表情包
|
||||
- Markdown格式
|
||||
|
||||
### 4. 消息状态管理
|
||||
完善消息状态:
|
||||
- 已读/未读状态
|
||||
- 消息撤回
|
||||
- 消息编辑
|
||||
- 消息引用回复
|
||||
|
||||
### 5. 会话管理
|
||||
增强会话管理功能:
|
||||
- 会话置顶
|
||||
- 会话静音
|
||||
- 会话归档
|
||||
- 会话标签
|
||||
|
||||
## 注意事项
|
||||
|
||||
### 1. MQTT集成
|
||||
当前消息发送功能需要集成MQTT客户端才能真正发送到设备。在 `chat_records.js` 控制器中有TODO标记:
|
||||
|
||||
```javascript
|
||||
// TODO: 这里需要通过MQTT发送消息到设备
|
||||
// 目前先简单返回成功,实际需要集成MQTT客户端
|
||||
```
|
||||
|
||||
### 2. 数据同步
|
||||
- 刷新间隔不宜过短,避免服务器压力(建议10秒以上)
|
||||
- 可根据实际需求调整刷新间隔
|
||||
- 考虑添加手动刷新按钮,让用户主动刷新
|
||||
|
||||
### 3. 性能优化
|
||||
- 会话列表分页加载
|
||||
- 消息列表虚拟滚动
|
||||
- 图片懒加载
|
||||
- 消息缓存机制
|
||||
|
||||
### 4. 安全性
|
||||
- 消息内容过滤和验证
|
||||
- 防止XSS攻击
|
||||
- 消息发送频率限制
|
||||
- 敏感信息加密
|
||||
|
||||
## 测试建议
|
||||
|
||||
### 1. 功能测试
|
||||
- 测试会话列表加载
|
||||
- 测试消息发送和接收
|
||||
- 测试筛选和搜索功能
|
||||
- 测试定时刷新机制
|
||||
|
||||
### 2. 边界测试
|
||||
- 测试空会话列表
|
||||
- 测试空消息列表
|
||||
- 测试网络异常情况
|
||||
- 测试大量消息加载
|
||||
|
||||
### 3. 性能测试
|
||||
- 测试大量会话的加载速度
|
||||
- 测试长时间运行的内存占用
|
||||
- 测试频繁切换会话的响应速度
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.0 (2025-01-XX)
|
||||
- ✅ 创建聊天列表页面
|
||||
- ✅ 实现会话分组和展示
|
||||
- ✅ 实现消息发送功能
|
||||
- ✅ 实现定时刷新接收新消息(Ajax轮询)
|
||||
- ✅ 添加后端API接口
|
||||
- ✅ 支持平台筛选和搜索
|
||||
|
||||
### 计划中
|
||||
- ⏳ AI消息生成
|
||||
- ⏳ 富文本消息支持
|
||||
- ⏳ 完善消息状态管理
|
||||
- ⏳ 增强会话管理功能
|
||||
- ⏳ 优化刷新机制(WebSocket/长轮询等)
|
||||
Reference in New Issue
Block a user