# 病情选择功能优化说明
## 修改概述
优化了非急救转运任务创建页面中的病情选择功能,使其默认显示所有病情数据,输入文字时再进行过滤筛选。
## 修改文件
- `app/pages/task/create-emergency.vue`
## 功能变更
### 优化前
- 打开病情选择弹窗时,不显示任何数据
- 需要用户输入关键词才能显示搜索结果
- 用户体验不佳,增加了操作步骤
### 优化后
- 打开病情选择弹窗时,**自动加载并显示所有病情数据**(最多50条)
- 用户可以直接浏览和选择常见病情
- 输入关键词后,实时过滤显示匹配的病情
- 清空关键词时,重新显示所有病情数据
## 技术实现
### 1. 新增方法 `loadAllDiseases()`
```javascript
// 加载所有病情(默认显示)
loadAllDiseases() {
// 使用空字符串调用搜索接口,后端返回前50条数据
searchIcd10('').then(response => {
this.diseaseSearchResults = response.data || []
}).catch(error => {
console.error('加载病情列表失败:', error)
this.diseaseSearchResults = []
})
}
```
### 2. 修改 `showDiseaseSelector()` 方法
- 打开弹窗时调用 `loadAllDiseases()` 加载默认数据
```javascript
showDiseaseSelector() {
this.tempSelectedDiseases = [...this.selectedDiseases]
this.diseaseSearchKeyword = ''
// 默认加载所有病情
this.loadAllDiseases()
this.$refs.diseasePopup.open()
}
```
### 3. 优化 `onDiseaseSearch()` 搜索逻辑
- 当关键词为空时,重新加载所有病情
- 当有关键词时,执行过滤搜索
```javascript
onDiseaseSearch(e) {
const keyword = e.detail.value
this.diseaseSearchKeyword = keyword
if (this.diseaseSearchTimer) {
clearTimeout(this.diseaseSearchTimer)
}
// 如果关键词为空,加载所有病情
if (!keyword || keyword.trim() === '') {
this.loadAllDiseases()
return
}
// 有关键词时进行搜索
this.diseaseSearchTimer = setTimeout(() => {
this.searchDiseaseByKeyword(keyword)
}, 300)
}
```
### 4. 优化空数据提示文案
- 根据是否有搜索关键词显示不同的提示
```vue
{{ diseaseSearchKeyword ? '未找到相关疾病' : '暂无病情数据' }}
```
## 后端支持说明
后端接口 `/system/icd10/search` 已支持空关键词查询:
### Controller层
- `keyword` 参数设置为 `required = false`
- 允许传入空值或不传值
### Mapper XML
```xml
```
**关键特性:**
- 当 `keyword` 为空时,返回前50条有效病情(`ICDState IS NULL OR ICDState = 1`)
- 按病情名称 `icd_name` 排序
- 限制返回数量为50条,避免数据量过大
## 用户操作流程
### 流程图
```
点击"添加病情"
↓
弹窗打开,自动加载显示所有病情(前50条)
↓
用户可以:
1. 直接浏览选择 ← 新增功能
2. 输入关键词过滤
↓
选择完成后点击"确定"
↓
病情显示在表单中
```
## 优势分析
### 1. 提升用户体验
- ✅ 减少操作步骤,打开即可浏览
- ✅ 常见病情一目了然
- ✅ 支持两种选择方式:浏览和搜索
### 2. 保持性能
- ✅ 限制返回50条,避免数据过载
- ✅ 保留防抖机制,优化搜索性能
- ✅ 按名称排序,便于查找
### 3. 灵活性
- ✅ 支持空查询和关键词查询
- ✅ 输入搜索时实时过滤
- ✅ 清空搜索框后恢复默认列表
## 测试要点
1. **默认加载测试**
- 打开病情选择弹窗
- 验证是否自动显示病情列表
- 验证是否最多显示50条数据
2. **搜索功能测试**
- 输入疾病名称关键词
- 输入ICD编码
- 输入助记码(拼音首字母)
- 验证搜索结果是否准确
3. **清空搜索测试**
- 输入关键词后再清空
- 验证是否重新显示所有病情
4. **选择功能测试**
- 选择单个病情
- 选择多个病情
- 取消选择
- 验证确认后是否正确显示
## 注意事项
1. **数据库性能**
- ICD10表建议在 `icd_name`、`icd_code`、`zjm` 字段上建立索引
- 定期维护 `ICDState` 字段,确保数据有效性
2. **数据量控制**
- 当前限制返回50条
- 如需调整,修改Mapper XML中的 `TOP 50`
3. **后续优化建议**
- 可考虑添加分页加载(上拉加载更多)
- 可添加病情分类筛选
- 可添加收藏常用病情功能
## 相关文件
### 前端
- `app/pages/task/create-emergency.vue` - 任务创建页面
- `app/api/icd10.js` - ICD-10 API接口
### 后端
- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/Icd10Controller.java` - 控制器
- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/Icd10Mapper.java` - Mapper接口
- `ruoyi-system/src/main/resources/mapper/system/Icd10Mapper.xml` - SQL映射
- `ruoyi-system/src/main/java/com/ruoyi/system/domain/Icd10.java` - 实体类
## 修改日期
2025-10-18