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

急救转运任务 - 病情选择功能(ICD-10)说明

功能概述

在创建急救转运任务时,可以从SQL Server的ICD-10疾病分类数据库中选择标准化的疾病诊断,支持多个病情同时添加,并可补充其他病情描述。

数据库表结构

ICD10表(SQL Server)

表名: ICD10
字段:
- id: 主键ID
- icd_code: ICD编码(如:A00.0)
- icd_name: 疾病名称(如:霍乱)
- zjm: 助记码(用于快速搜索)
- sm: 疾病说明
- ICDState: 状态(1=启用)

功能特性

1. 病情标签展示

  • 已选择的病情以彩色标签形式展示
  • 每个标签显示疾病名称
  • 点击标签上的 ✗ 可移除该病情

2. 添加病情

  • 点击"添加病情"按钮打开选择弹窗
  • 弹窗底部弹出,占80%屏幕高度

3. 搜索功能

支持多种方式搜索:
- 按疾病名称:如"肺炎"
- 按ICD编码:如"J18"
- 按助记码:如"FY"

实时防抖搜索,300ms延迟

4. 搜索结果展示

每条结果显示:
- 疾病名称(粗体)
- ICD编码(蓝色标签)
- 疾病说明(灰色小字)
- 选中状态(✓ 或空心圆圈)

5. 多选操作

  • 点击疾病条目切换选中状态
  • 底部显示"确定(已选N)"
  • 支持同时选择多个病情

6. 补充描述

  • 除了选择标准疾病外
  • 还可以在文本框中补充其他病情描述
  • 最终提交时会合并所有病情信息

实现细节

后端实现

1. 实体类

文件: Icd10.java
java public class Icd10 { private Integer id; private String icdCode; private String icdName; private String zjm; private String sm; // ... 其他字段 }

2. Mapper接口

文件: Icd10Mapper.java
java @DataSource(DataSourceType.SQLSERVER) public interface Icd10Mapper { List<Icd10> searchIcd10(@Param("keyword") String keyword); }

3. Mapper XML

文件: Icd10Mapper.xml
xml <select id="searchIcd10" resultMap="Icd10Result"> SELECT TOP 50 ... FROM ICD10 WHERE (icd_name LIKE '%' + #{keyword} + '%' OR icd_code LIKE '%' + #{keyword} + '%' OR zjm LIKE '%' + #{keyword} + '%') AND ICDState = 1 ORDER BY icd_name </select>

注意:使用SQL Server语法

4. Controller

文件: Icd10Controller.java
java @RestController @RequestMapping("/system/icd10") public class Icd10Controller { @GetMapping("/search") public AjaxResult searchIcd10(@RequestParam String keyword) { List<Icd10> list = icd10Mapper.searchIcd10(keyword); return success(list); } }

前端实现

1. API接口

文件: app/api/icd10.js
javascript export function searchIcd10(keyword) { return request({ url: '/system/icd10/search', method: 'get', params: { keyword } }) }

2. 数据结构

selectedDiseases(已选疾病列表)
javascript [ { id: 疾病ID, icdCode: 'ICD编码', icdName: '疾病名称', sm: '疾病说明' } ]

tempSelectedDiseases(临时选择列表)
- 在弹窗中使用
- 确认后才同步到 selectedDiseases

3. 关键方法

showDiseaseSelector()
- 打开病情选择弹窗
- 初始化临时选择列表

onDiseaseSearch(e)
- 处理搜索输入
- 300ms防抖延迟

searchDiseaseByKeyword(keyword)
- 调用后端API搜索疾病
- 更新搜索结果列表

toggleDiseaseSelection(disease)
- 切换疾病选中状态
- 添加/移除临时列表

confirmDiseaseSelection()
- 确认选择
- 同步临时列表到正式列表
- 关闭弹窗

removeDisease(index)
- 移除已选疾病标签

buildSubmitData()
- 合并病情信息
- 格式:疾病1(编码1)、疾病2(编码2)\n其他:补充描述

UI设计

主界面展示

病情
┌─────────────────────────────┐
│ [肺炎(J18.9)] [糖尿病(E11)] ✗│  <- 已选疾病标签
├─────────────────────────────┤
│ + 添加病情                   │  <- 打开选择弹窗
├─────────────────────────────┤
│ 其他病情描述(选填)         │  <- 补充描述
│                             │
└─────────────────────────────┘

选择弹窗布局

┌────────────────────────────┐
│ 选择病情(ICD-10)      ✗  │  <- 标题栏
├────────────────────────────┤
│ 🔍 搜索疾病名称、编码等    │  <- 搜索框
├────────────────────────────┤
│                            │
│ 肺炎 [J18.9]               │  <- 搜索结果
│ 由未特指的病原体所致的...  │
│                        ✓  │
│                            │
│ 支气管炎 [J40]             │
│ 未指明为急性或慢性的...    │
│                        ○  │
│                            │
├────────────────────────────┤
│ [取消]    [确定(已选2)]    │  <- 底部操作栏
└────────────────────────────┘

样式特点

疾病标签

  • 渐变紫色背景:linear-gradient(135deg, #667eea 0%, #764ba2 100%)
  • 圆角设计:border-radius: 30rpx
  • 白色文字
  • 删除按钮(白色 ✗)

ICD编码标签

  • 蓝色背景:#e6f2ff
  • 蓝色文字:#007AFF
  • 小圆角:border-radius: 6rpx

搜索框

  • 灰色背景:#f5f5f5
  • 搜索图标
  • 提示文字:搜索疾病名称、编码或助记码

数据流转

1. 打开弹窗

点击"添加病情"
  ↓
showDiseaseSelector()
  ↓
初始化 tempSelectedDiseases
  ↓
打开弹窗

2. 搜索选择

输入关键词
  ↓
onDiseaseSearch() - 防抖300ms
  ↓
searchDiseaseByKeyword()
  ↓
调用API: searchIcd10(keyword)
  ↓
显示搜索结果
  ↓
点击疾病
  ↓
toggleDiseaseSelection()
  ↓
更新临时选择列表

3. 确认提交

点击"确定"
  ↓
confirmDiseaseSelection()
  ↓
selectedDiseases = tempSelectedDiseases
  ↓
关闭弹窗
  ↓
显示疾病标签
  ↓
提交任务
  ↓
buildSubmitData()
  ↓
合并病情信息:
  - 疾病名称(编码)、疾病2(编码2)
  - 其他:补充描述

提交数据格式

{
  patient: {
    // ... 其他患者信息
    condition: "肺炎(J18.9)、糖尿病(E11)\n其他:患者发热3天",
    diseases: [
      {
        icdId: 1,
        icdCode: "J18.9",
        icdName: "肺炎"
      },
      {
        icdId: 2,
        icdCode: "E11",
        icdName: "糖尿病"
      }
    ]
  }
}

使用场景

场景1:选择单个标准疾病

  1. 点击"添加病情"
  2. 搜索"肺炎"
  3. 选择"肺炎(J18.9)"
  4. 点击确定
  5. 结果:显示 [肺炎(J18.9)] 标签

场景2:选择多个疾病

  1. 点击"添加病情"
  2. 搜索"肺炎",选择
  3. 继续搜索"糖尿病",选择
  4. 点击确定
  5. 结果:显示 [肺炎(J18.9)] [糖尿病(E11)]

场景3:标准疾病 + 补充描述

  1. 选择标准疾病
  2. 在"其他病情描述"框中输入"患者发热3天"
  3. 提交时合并:肺炎(J18.9)\n其他:患者发热3天

注意事项

1. 数据源配置

  • ICD10表在SQL Server数据库
  • Mapper必须添加 @DataSource(DataSourceType.SQLSERVER)
  • SQL语法使用SQL Server格式(TOP+ 拼接)

2. 搜索优化

  • 防抖延迟:300ms
  • 最多返回50条结果
  • 只查询启用状态的疾病(ICDState = 1)

3. 用户体验

  • 搜索实时响应
  • 多选支持
  • 已选数量提示
  • 删除操作简便

4. 数据完整性

  • 支持纯标准疾病
  • 支持纯文本描述
  • 支持混合模式
  • 疾病ID单独存储,便于统计

扩展功能(待开发)

  1. 常用疾病:记录常用疾病,快速选择
  2. 疾病分类:按系统分类浏览
  3. 历史记录:显示最近选择的疾病
  4. 疾病详情:点击查看完整ICD-10信息
  5. 批量导入:支持从病历系统导入诊断

相关文件

后端文件

  • ruoyi-system/src/main/java/com/ruoyi/system/domain/Icd10.java - 实体类
  • ruoyi-system/src/main/java/com/ruoyi/system/mapper/Icd10Mapper.java - Mapper接口
  • ruoyi-system/src/main/resources/mapper/system/Icd10Mapper.xml - MyBatis映射
  • ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/Icd10Controller.java - Controller

前端文件

  • app/api/icd10.js - API接口
  • app/pages/task/create-emergency.vue - 急救转运任务创建页面

数据库文件

  • sql/icd10.sql - ICD-10表结构

测试要点

  1. ✅ 搜索疾病名称
  2. ✅ 搜索ICD编码
  3. ✅ 搜索助记码
  4. ✅ 选择单个疾病
  5. ✅ 选择多个疾病
  6. ✅ 移除已选疾病
  7. ✅ 补充文本描述
  8. ✅ 只有文本描述(不选疾病)
  9. ✅ 只选疾病(不填描述)
  10. ✅ 混合模式(疾病+描述)
  11. ✅ 取消选择
  12. ✅ 提交数据格式正确
  13. ✅ SQL Server数据源切换正确
  14. ✅ 防抖搜索生效
  15. ✅ 已选数量显示正确