# 急救转运任务 - 病情选择功能(ICD-10)说明 ## 功能概述 在创建急救转运任务时,可以从SQL Server的ICD-10疾病分类数据库中选择标准化的疾病诊断,支持多个病情同时添加,并可补充其他病情描述。 ## 数据库表结构 ### ICD10表(SQL Server) ```sql 表名: 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 searchIcd10(@Param("keyword") String keyword); } ``` #### 3. Mapper XML **文件**: `Icd10Mapper.xml` ```xml ``` 注意:使用SQL Server语法 #### 4. Controller **文件**: `Icd10Controller.java` ```java @RestController @RequestMapping("/system/icd10") public class Icd10Controller { @GetMapping("/search") public AjaxResult searchIcd10(@RequestParam String keyword) { List 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) - 其他:补充描述 ``` ## 提交数据格式 ```javascript { 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. ✅ 已选数量显示正确