# 代码重构:视频会议 API 规范化 ## 重构日期 2025-12-26 ## 重构原因 原代码将类型定义和 API 调用混在一个独立的 `meeting.ts` 文件中,不符合项目规范。需要按照以下规范重构: 1. **类型定义规范**:所有 DTO/VO 类型应放在 `types/workcase/` 目录下 2. **API 调用规范**:使用 `shared/api` 的 `api` 对象发送请求 3. **API 组织规范**:按业务模块组织成对象形式(如 `workcaseAPI`、`workcaseChatAPI`) 4. **代码复用规范**:避免重复定义,视频会议属于聊天室模块 ## 重构内容 ### 1. 类型定义迁移 **原位置**:`api/workcase/meeting.ts`(已删除) **新位置**:`types/workcase/chatRoom.ts` 类型定义已经存在于 `chatRoom.ts` 中,无需创建新文件: - `TbVideoMeetingDTO` (line 68-88) - `VideoMeetingVO` (line 220-241) - `CreateMeetingParam` (line 279-285) ### 2. API 方法整合 **原文件**:`api/workcase/meeting.ts`(已删除) - 独立的函数式 API 调用 - 使用 `http.post/get` 发送请求 - 类型定义和 API 混在一起 **新文件**:`api/workcase/workcaseChat.ts`(已更新) 新增 6 个视频会议方法到 `workcaseChatAPI` 对象(line 227-276): ```typescript // ====================== 视频会议管理(Jitsi Meet) ====================== async createVideoMeeting(meeting: TbVideoMeetingDTO): Promise> async getVideoMeetingInfo(meetingId: string): Promise> async getActiveMeeting(roomId: string): Promise> async joinVideoMeeting(meetingId: string): Promise> async startVideoMeeting(meetingId: string): Promise> async endVideoMeeting(meetingId: string): Promise> ``` ### 3. 导入语句更新 **文件**:`api/workcase/workcaseChat.ts` (line 3-15) 新增导入: ```typescript import type { // ... 现有导入 TbVideoMeetingDTO, // 新增 VideoMeetingVO // 新增 } from '@/types/workcase' ``` ### 4. 导出配置更新 **文件**:`api/workcase/index.ts` ```typescript // 移除 - export * from './meeting' // 保留 export * from './workcase' export * from './workcaseChat' ``` ### 5. Vue 组件引用更新 **文件**:`components/chatRoom/chatRoom/ChatRoom.vue` **修改前**: ```typescript import { createVideoMeeting, getActiveMeeting, endVideoMeeting } from '@/api/workcase/meeting' // 使用 await createVideoMeeting({ ... }) await getActiveMeeting(props.roomId) await endVideoMeeting(currentMeetingId.value) ``` **修改后**: ```typescript import { workcaseChatAPI } from '@/api/workcase' // 使用 await workcaseChatAPI.createVideoMeeting({ ... }) await workcaseChatAPI.getActiveMeeting(props.roomId) await workcaseChatAPI.endVideoMeeting(currentMeetingId.value) ``` ## 重构优势 ### 1. 符合项目规范 - ✅ 类型定义集中在 `types/` 目录 - ✅ API 调用使用 `shared/api` - ✅ API 按业务模块组织 ### 2. 避免代码重复 - ✅ 复用已有的类型定义 - ✅ 统一的 API 调用风格 ### 3. 更好的可维护性 - ✅ 代码组织清晰,职责分明 - ✅ 类型定义和 API 调用分离 - ✅ 按业务模块聚合,易于查找 ### 4. 统一的开发体验 - ✅ 与其他 API 调用方式一致 - ✅ 自动类型推断 - ✅ 统一的错误处理 ## 受影响的文件 ### 删除的文件 - `packages/workcase/src/api/workcase/meeting.ts` ### 修改的文件 1. `packages/workcase/src/api/workcase/workcaseChat.ts` - 新增 6 个视频会议方法 2. `packages/workcase/src/api/workcase/index.ts` - 移除 meeting 导出 3. `packages/workcase/src/components/chatRoom/chatRoom/ChatRoom.vue` - 更新 API 调用 ### 保持不变的文件 - `packages/workcase/src/types/workcase/chatRoom.ts` - 类型定义已存在 - `packages/workcase_wechat/api/workcase/workcaseChat.ts` - UniApp 端已符合规范 ## 测试建议 1. **Vue Web 端测试** - 测试创建视频会议功能 - 测试加入已有会议功能 - 测试结束会议功能 - 测试自动检测活跃会议 2. **UniApp 端测试** - 测试 MeetingView 页面导航 - 测试视频会议页面显示 - 测试结束会议返回聊天室 3. **类型检查** ```bash # 运行 TypeScript 类型检查 npm run type-check ``` ## 后续优化建议 1. **错误处理增强** - 添加统一的错误提示 - 添加会议状态校验 2. **用户体验优化** - 添加会议加载状态提示 - 添加会议连接失败重试 3. **性能优化** - 会议状态使用 WebSocket 实时同步 - 离开页面自动结束会议 ## 参考文档 - 项目 API 规范:参考 `workcase.ts` 和 `workcaseChat.ts` - 类型定义规范:参考 `types/workcase/` 目录 - Vue 组件规范:参考现有聊天室组件 --- **重构人员**:Claude Code **审核状态**:待审核 **版本**:v1.0