# 聊天与视频通话集成完成 ## 解决方案 采用**分离架构**,避免 TUICallKit 与 Chat UIKit 的初始化冲突: 1. **聊天对话框** (`admin/src/components/chat-dialog/index.vue`) - 只初始化 Chat UIKit(IM 聊天系统) - 提供视频通话按钮 - 通过事件通知父组件发起视频通话 2. **视频通话组件** (`admin/src/components/video-call/index.vue`) - 独立的浮动窗口 - 独立初始化 TUICallKit - 可拖拽、可调整大小 ## 功能特性 ### 聊天功能 - ✅ 文字聊天 - ✅ 表情发送 - ✅ 图片上传 - ✅ 文件上传 - ✅ 视频上传 - ✅ 会话列表 - ✅ 消息历史 ### 视频通话功能 - ✅ 1v1 视频通话 - ✅ 群组视频通话 - ✅ 通话状态监听 - ✅ 浮动窗口显示 - ✅ 窗口拖拽和调整大小 ## 使用流程 ### 1. 打开聊天界面 ```typescript // 在预约列表点击"聊天"按钮 chatDialogRef.value?.open({ patientId: row.patient_id, patientName: row.patient_name, diagnosisId: row.diagnosis_id || row.id }) ``` ### 2. 在聊天界面发起视频通话 - 点击聊天界面右上角的"视频通话"按钮 - 触发 `@video-call` 事件 - 父组件接收事件并打开独立的视频通话窗口 ### 3. 视频通话窗口 - 自动初始化 TUICallKit - 发起视频通话 - 等待对方接听 - 通话中可以拖拽窗口位置 - 通话结束后自动关闭 ## 技术实现 ### 聊天对话框组件 ```vue ``` ### 预约列表页面 ```vue ``` ## 架构优势 ### 1. 避免冲突 - Chat UIKit 和 TUICallKit 在不同组件中初始化 - 互不干扰,各自独立运行 ### 2. 职责分离 - 聊天对话框:专注于聊天功能 - 视频通话组件:专注于视频通话功能 ### 3. 可维护性 - 每个组件功能单一,易于维护 - 可以独立测试和调试 ### 4. 用户体验 - 聊天和视频通话可以同时进行 - 视频通话窗口可以自由拖拽 - 不影响聊天界面的使用 ## 文件清单 ### 修改的文件 1. `admin/src/components/chat-dialog/index.vue` - 添加视频通话按钮 - 添加 videoCall 事件 - 移除 TUICallKit 初始化 2. `admin/src/views/tcm/appointment/list.vue` - 监听 @video-call 事件 - 添加 handleChatVideoCall 方法 ### 现有文件(无需修改) 1. `admin/src/components/video-call/index.vue` - 独立的视频通话组件 - 已完整实现所有功能 2. `admin/src/assets/chat-uikit.css` - Chat UIKit 样式文件 ## API 接口 ### 获取签名 - 接口:`/tcm.diagnosis/getCallSignature` - 参数: ```typescript { patient_id: number diagnosis_id: number } ``` - 返回: ```typescript { sdkAppId: number userId: string // 医生ID,如 "doctor_1" userSig: string // 签名 patientUserId: string // 患者ID,如 "patient_4" expireTime: number } ``` ## 后端配置 ```env SDK_APP_ID = "1600127710" SECRET_KEY = "8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d" ENABLE = "true" ``` ## 测试建议 ### 聊天功能测试 1. ✅ 打开聊天对话框 2. ✅ 发送文字消息 3. ✅ 发送表情 4. ✅ 上传图片 5. ✅ 上传文件 6. ✅ 上传视频 7. ✅ 查看会话列表 8. ✅ 查看消息历史 ### 视频通话测试 1. ✅ 在聊天界面点击"视频通话"按钮 2. ✅ 视频通话窗口弹出 3. ✅ 发起通话 4. ✅ 等待对方接听 5. ✅ 通话接通 6. ✅ 拖拽窗口 7. ✅ 调整窗口大小 8. ✅ 挂断通话 9. ✅ 窗口自动关闭 ### 集成测试 1. ✅ 聊天时发起视频通话 2. ✅ 视频通话时继续聊天 3. ✅ 关闭聊天对话框,视频通话继续 4. ✅ 结束视频通话,聊天继续 ## 注意事项 1. **HTTPS 要求** - 视频通话需要 HTTPS 环境 - 或在 localhost 下测试 2. **浏览器权限** - 需要授权摄像头和麦克风访问 - 首次使用会弹出权限请求 3. **用户 ID 格式** - 医生:`doctor_{id}` - 患者:`patient_{id}` 4. **表情功能** - 可能需要腾讯云授权 - 默认表情包有版权限制 ## 故障排查 ### 聊天界面无法加载 1. 检查后端签名接口是否正常 2. 查看浏览器控制台错误信息 3. 确认 SDK_APP_ID 配置正确 ### 视频通话无法发起 1. 确认使用 HTTPS 或 localhost 2. 检查浏览器权限设置 3. 查看控制台是否有 TUICallKit 错误 4. 确认对方用户 ID 正确 ### 视频通话窗口不显示 1. 检查 z-index 是否被其他元素遮挡 2. 确认 TUICallKit 初始化成功 3. 查看窗口位置是否在屏幕外 ## 总结 通过分离架构,成功解决了 Chat UIKit 和 TUICallKit 的初始化冲突问题。现在系统同时支持: - 完整的聊天功能(文字、表情、图片、文件、视频) - 完整的视频通话功能(1v1、群组、浮动窗口) - 两个功能互不干扰,可以同时使用 这种架构清晰、可维护,为后续功能扩展提供了良好的基础。