# medical-ai-platform-frontend
**Repository Path**: zeron2022/medical-ai-platform-frontend
## Basic Information
- **Project Name**: medical-ai-platform-frontend
- **Description**: 医疗问答大模型平台前端,主要是涉及客户端的功能,用户可以根据自身的病情提出问题,从后端获取答案
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-08-08
- **Last Updated**: 2025-08-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 医疗问答AI聊天系统 - 前端
## 项目简介
这是一个基于Vue 3开发的医疗问答AI聊天系统前端,与后端配合使用,为用户提供友好的医疗咨询界面。用户可以通过此界面向AI提问医疗健康问题,并获取专业回答。
## 技术栈
- **Vue 3**: 核心框架,使用Composition API
- **TypeScript**: 类型安全的JavaScript超集
- **Vite**: 现代前端构建工具
- **Pinia**: 状态管理
- **Vue Router**: 路由管理
- **Element Plus**: UI组件库
- **Axios**: HTTP请求库
- **SockJS** & **STOMP.js**: WebSocket通信
## 项目结构
```bash
medical-ai-platform-frontend/
├── public/ # 静态资源目录
├── src/ # 源代码目录
│ ├── api/ # API接口定义
│ ├── assets/ # 静态资源
│ │ ├── images/ # 图片资源
│ │ └── styles/ # 全局样式
│ ├── components/ # 公共组件
│ │ ├── chat/ # 聊天相关组件
│ │ ├── common/ # 通用基础组件
│ │ └── medical/ # 医疗相关组件
│ ├── composables/ # 组合式函数
│ ├── layouts/ # 布局组件
│ ├── router/ # 路由配置
│ │ └── index.ts # 路由定义
│ ├── stores/ # Pinia状态管理
│ │ ├── chat.ts # 聊天状态
│ │ └── auth.ts # 认证状态
│ ├── types/ # TypeScript类型定义
│ ├── utils/ # 工具函数
│ │ ├── request.ts # HTTP请求封装
│ │ └── websocket.ts # WebSocket封装
│ ├── views/ # 页面组件
│ │ ├── auth/ # 认证相关页面
│ │ ├── chat/ # 聊天主页面
│ │ ├── history/ # 历史记录页面
│ │ └── profile/ # 个人中心页面
│ ├── App.vue # 根组件
│ └── main.ts # 应用入口
├── index.html # HTML模板
├── tsconfig.json # TypeScript配置
├── vite.config.ts # Vite配置
└── package.json # 项目依赖配置
```
## 主要功能
### 1. 用户认证
- 用户注册
- 用户登录
- JWT令牌管理
### 2. 聊天功能
- 创建新对话
- 发送消息给AI
- 实时接收AI回复
- 聊天界面美观展示
### 3. 历史记录
- 查看历史对话
- 继续历史对话
- 删除历史对话
### 4. 个人中心
- 查看个人信息
- 修改个人设置
## 运行步骤
### 准备工作
1. **安装Node.js**
- 下载安装Node.js 16.0或更高版本
- 确保npm已正确安装
2. **后端服务**
- 确保后端API服务已启动
- 默认后端地址为`http://localhost:8081/api`
### 安装依赖
进入项目目录,执行以下命令安装依赖:
```bash
npm install
```
### 开发环境运行
执行以下命令启动开发服务器:
```bash
npm run dev
```
启动成功后,通常可通过 `http://localhost:3000` 或 `http://localhost:3001` 访问应用。
### 生产环境构建
执行以下命令构建生产环境版本:
```bash
npm run build
```
构建完成后,生成的文件会在`dist`目录中。
## 与后端连接
前端默认通过代理连接到后端API,在`vite.config.ts`中配置:
```typescript
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:8081',
changeOrigin: true,
},
},
}
```
## 功能说明
### 聊天功能
聊天功能是本应用的核心,实现逻辑如下:
1. 用户发送消息 → 前端通过HTTP请求发送到后端
2. 后端处理请求并调用AI模型
3. AI响应通过WebSocket实时推送给前端
4. 前端接收并展示AI回复
WebSocket连接管理在`src/utils/websocket.ts`中实现,消息状态管理在`src/stores/chat.ts`中。
### 认证功能
用户认证采用JWT方式,流程为:
1. 用户登录 → 获取JWT令牌
2. 令牌存储在localStorage
3. 每次API请求通过请求拦截器自动添加令牌
4. 令牌过期自动跳转到登录页面
## 常见问题
### 1. 连接后端问题
如果无法连接后端,检查:
- 后端服务是否已启动
- `vite.config.ts`中的代理配置是否正确
- 浏览器控制台是否有CORS错误
### 2. WebSocket连接问题
如果WebSocket连接失败,检查:
- 后端WebSocket服务是否已启动
- 用户是否已正确登录
- 网络连接是否正常
### 3. 页面样式问题
如果页面样式异常,检查:
- 是否正确安装了所有依赖包
- 是否有CSS冲突
## 项目扩展
可以考虑以下方向扩展项目功能:
1. 语音输入功能
2. 医疗术语高亮和解释
3. 对话内容导出为PDF
4. 深色模式支持
5. 移动端适配优化
## 最近更新
### 2023年最新更新
#### 1. 修复登录认证系统
我们对认证系统进行了全面修复和优化,解决了注册成功但登录失败的问题:
- **后端修复**:
- 实现了`CustomUserDetailsService`类,用于Spring Security用户认证
- 添加了`DaoAuthenticationProvider` Bean配置,正确连接用户服务与密码编码器
- 完善了JWT令牌的生成和验证流程
- **前端修复**:
- 修正了前端处理响应的数据结构,正确处理嵌套的用户信息
- 优化了`request.ts`中的响应拦截器,保留完整响应结构
- 更新了`auth.ts`中的登录方法,适配后端返回的嵌套数据格式
- **安全增强**:
- 改进了错误处理机制,提供更详细的错误信息
- 增强了异常状态的恢复能力
- 增加了对令牌有效性的验证
现在用户可以顺利完成注册和登录过程,系统稳定性大大提高。
#### 2. 修复输入框实时刷新问题
我们解决了Element Plus输入框在特定情况下不能实时刷新的问题,主要修改内容包括:
- 创建了专用的`inputHelper.ts`工具,提供以下功能:
- `fixInputEvents`:修复输入事件处理,确保视图实时更新
- `fixFormInputs`:为表单中的所有输入元素添加修复
- `InputRefreshDirective`:Vue自定义指令,自动应用输入修复
- `useInputRefreshFix`:组合式函数,可在组件挂载后修复所有输入框
- 改进了`LoginView.vue`和`RegisterView.vue`组件:
- 使用单独的`ref`变量代替嵌套的响应式对象,提高数据绑定的可靠性
- 添加了多种事件监听器(`@update:modelValue`, `@keydown`, `@focus`, `@blur`)确保捕获所有输入事件
- 实现了`forceRefresh`/`forceUpdate`函数,在需要时强制刷新视图
- 注册了全局`v-input-refresh`指令,可用于任何需要输入刷新增强的表单:
```html
```
#### 3. 优化用户认证体验
- 增强了登录和注册页面的表单验证
- 改进了错误信息展示和用户反馈
- 优化了表单提交和响应处理流程
#### 4. 性能优化
- 减少不必要的组件重渲染
- 优化了事件处理机制,提高了输入响应速度
- 改进了DOM监听策略,使用MutationObserver监控动态添加的输入元素
## 使用说明
### 输入刷新增强功能
如果您在开发新表单时遇到输入不实时刷新的问题,可以:
1. 在表单元素上添加`v-input-refresh`指令:
```html
```
2. 或在组件挂载后手动修复表单:
```javascript
import { fixFormInputs } from '@/utils/inputHelper'
onMounted(() => {
const form = document.querySelector('form')
if (form) {
fixFormInputs(form)
}
})
```
3. 对于特别复杂的情况,可以使用组合式函数:
```javascript
import { useInputRefreshFix } from '@/utils/inputHelper'
const { fixAllForms } = useInputRefreshFix()
onMounted(() => {
fixAllForms()
})
```
### 开发建议
开发新表单和输入组件时,建议:
1. 优先使用独立的`ref`变量而非嵌套的响应式对象
2. 为关键输入事件添加多个事件监听器
3. 考虑在复杂表单中实现`forceRefresh`机制
4. 对于中文输入法,特别注意监听`compositionend`事件
```bash
medical-ai-chat/
├── public/ # 静态资源目录
├── src/ # 源代码目录
│ ├── api/ # API接口定义
│ │ └── chat.ts # 聊天相关API
│ ├── assets/ # 静态资源
│ │ ├── images/ # 图片资源
│ │ └── styles/ # 全局样式
│ ├── components/ # 公共组件
│ │ ├── chat/ # 聊天相关组件
│ │ ├── common/ # 通用基础组件
│ │ └── medical/ # 医疗相关组件
│ ├── composables/ # 组合式函数
│ │ └── useVoiceInput.ts # 语音输入功能
│ ├── layouts/ # 布局组件
│ │ ├── MainLayout.vue # 主布局
│ │ └── AuthLayout.vue # 认证页面布局
│ ├── router/ # 路由配置
│ │ └── index.ts # 路由定义
│ ├── stores/ # Pinia状态管理
│ │ ├── chat.ts # 聊天状态
│ │ └── index.ts # Pinia实例
│ ├── types/ # TypeScript类型定义
│ ├── utils/ # 工具函数
│ │ └── request.ts # HTTP请求封装
│ ├── views/ # 页面组件
│ │ ├── auth/ # 认证相关页面
│ │ │ ├── LoginView.vue # 登录页面
│ │ │ └── RegisterView.vue # 注册页面
│ │ ├── chat/ # 聊天主页面
│ │ │ └── ChatView.vue # 聊天界面
│ │ ├── history/ # 历史记录页面
│ │ │ └── HistoryView.vue # 历史记录界面
│ │ ├── home/ # 首页
│ │ │ └── HomeView.vue # 首页界面
│ │ └── profile/ # 个人中心页面
│ │ └── ProfileView.vue # 个人中心界面
│ ├── App.vue # 根组件
│ ├── main.ts # 应用入口
│ └── env.d.ts # 环境变量类型声明
├── .env # 环境变量
├── .env.development # 开发环境变量
├── .env.production # 生产环境变量
├── index.html # HTML模板
├── tsconfig.json # TypeScript配置
├── vite.config.ts # Vite配置
├── package.json # 项目依赖配置
└── README.md # 项目说明文档