# doctor-pc **Repository Path**: xiaoyistudy/doctor-pc ## Basic Information - **Project Name**: doctor-pc - **Description**: 医疗项目pc - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-09 - **Last Updated**: 2026-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 医疗项目PC端 ## 项目简介 这是一个基于Vue 3 + Element Plus的医疗管理系统,包含聊天功能和用户管理功能。 ## 功能特性 - 用户登录/退出 - 实时聊天功能 - 用户管理 - 任务管理 - 权限管理 ## 最近修复的问题 ### WebSocket退出问题修复 **问题描述:** - 用户点击退出后,其他用户的好友列表中仍能看见已退出的用户 - 后端报错:`java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING]` **解决方案:** #### 1. 前端修复 - **消息工具类** (`src/util/messageUtils.js`):统一消息格式 - **退出逻辑优化**:发送退出消息给服务器,通知其他用户 - **生命周期管理**:页面卸载时自动发送退出消息 - **错误处理**:添加WebSocket连接错误处理 #### 2. 后端修复建议 ```java @OnClose public void onClose(Session session) throws IOException { // 从 onlineUsers 中找到并删除当前用户的 session 对象 String userToRemove = null; for (Map.Entry entry : onlineUsers.entrySet()) { if (entry.getValue().equals(session)) { userToRemove = entry.getKey(); break; } } if (userToRemove != null) { onlineUsers.remove(userToRemove); // 发送退出消息给其他用户 String logoutMessage = MessageUtils.getLogoutMessage(userToRemove); broadcastAllUsers(logoutMessage); // 更新在线用户列表 String updateMessage = MessageUtils.getMessage(true, null, getFriends()); broadcastAllUsers(updateMessage); } } ``` #### 3. 关键代码修改 ```javascript // 发送退出消息 const logoutMessage = MessageUtils.createLogoutMessage(username.value) webSocket.value.send(JSON.stringify(logoutMessage)) // 处理退出消息 if (response.type === 'logout') { const logoutUsername = response.username || response.fromName friendsList.value = friendsList.value.filter(name => name !== logoutUsername) ElMessage.info(`${logoutUsername} 已退出聊天`) } ``` #### 4. 修复效果 - ✅ 解决后端WebSocket状态错误 - ✅ 实时更新用户列表 - ✅ 用户退出时显示提示消息 - ✅ 完善退出流程和错误处理 - ✅ 统一消息格式,提高代码可维护性 ## 技术栈 - Vue 3 - Element Plus - WebSocket - Vite ## 安装和运行 ```bash # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build ``` ## 注意事项 - 确保后端WebSocket服务器在`localhost:7024`运行 - 用户退出时会自动清理本地数据并跳转到登录页面 - 页面刷新或关闭时会自动发送退出消息 - 建议后端也按照上述建议进行相应修改