编辑 | blame | 历史 | 原始文档

病情选择功能优化说明

修改概述

优化了非急救转运任务创建页面中的病情选择功能,使其默认显示所有病情数据,输入文字时再进行过滤筛选。

修改文件

  • app/pages/task/create-emergency.vue

功能变更

优化前

  • 打开病情选择弹窗时,不显示任何数据
  • 需要用户输入关键词才能显示搜索结果
  • 用户体验不佳,增加了操作步骤

优化后

  • 打开病情选择弹窗时,**自动加载并显示所有病情数据**(最多50条)
  • 用户可以直接浏览和选择常见病情
  • 输入关键词后,实时过滤显示匹配的病情
  • 清空关键词时,重新显示所有病情数据

技术实现

1. 新增方法 loadAllDiseases()

// 加载所有病情(默认显示)
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 <view class="no-data" v-if="diseaseSearchResults.length === 0"> <uni-icons type="info" size="40" color="#ccc"></uni-icons> <text>{{ diseaseSearchKeyword ? '未找到相关疾病' : '暂无病情数据' }}</text> </view>

后端支持说明

后端接口 /system/icd10/search 已支持空关键词查询:

Controller层

  • keyword 参数设置为 required = false
  • 允许传入空值或不传值

Mapper XML

<select id="searchIcd10" parameterType="String" resultMap="Icd10Result">
    SELECT TOP 50
        id, icd_code, xh, fm, icd_name, zjm, sm, sbxz, lxxz, ICDState
    FROM ICD10
    WHERE 1=1
    <if test="keyword != null and keyword != ''">
        AND (icd_name LIKE '%' + #{keyword} + '%' 
             OR icd_code LIKE '%' + #{keyword} + '%'
             OR zjm LIKE '%' + #{keyword} + '%')
    </if>
    AND (ICDState IS NULL OR ICDState = 1)
    ORDER BY icd_name
</select>

关键特性:
- 当 keyword 为空时,返回前50条有效病情(ICDState IS NULL OR ICDState = 1
- 按病情名称 icd_name 排序
- 限制返回数量为50条,避免数据量过大

用户操作流程

流程图

点击"添加病情"
    ↓
弹窗打开,自动加载显示所有病情(前50条)
    ↓
用户可以:
1. 直接浏览选择 ← 新增功能
2. 输入关键词过滤
    ↓
选择完成后点击"确定"
    ↓
病情显示在表单中

优势分析

1. 提升用户体验

  • ✅ 减少操作步骤,打开即可浏览
  • ✅ 常见病情一目了然
  • ✅ 支持两种选择方式:浏览和搜索

2. 保持性能

  • ✅ 限制返回50条,避免数据过载
  • ✅ 保留防抖机制,优化搜索性能
  • ✅ 按名称排序,便于查找

3. 灵活性

  • ✅ 支持空查询和关键词查询
  • ✅ 输入搜索时实时过滤
  • ✅ 清空搜索框后恢复默认列表

测试要点

  1. 默认加载测试
  • 打开病情选择弹窗
  • 验证是否自动显示病情列表
  • 验证是否最多显示50条数据
  1. 搜索功能测试
  • 输入疾病名称关键词
  • 输入ICD编码
  • 输入助记码(拼音首字母)
  • 验证搜索结果是否准确
  1. 清空搜索测试
  • 输入关键词后再清空
  • 验证是否重新显示所有病情
  1. 选择功能测试
  • 选择单个病情
  • 选择多个病情
  • 取消选择
  • 验证确认后是否正确显示

注意事项

  1. 数据库性能
  • ICD10表建议在 icd_nameicd_codezjm 字段上建立索引
  • 定期维护 ICDState 字段,确保数据有效性
  1. 数据量控制
  • 当前限制返回50条
  • 如需调整,修改Mapper XML中的 TOP 50
  1. 后续优化建议
  • 可考虑添加分页加载(上拉加载更多)
  • 可添加病情分类筛选
  • 可添加收藏常用病情功能

相关文件

前端

  • 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