Files
his/md/中医诊断主诊断功能实现说明.md
chenqi cb268fe26d feat(operating-room): 添加手术室类型和所属科室字段
- 新增手术室类型字段支持急诊、择期、日间、复合手术室四种类型
- 添加所属科室字段实现科室级别资源管理
- 前端列表页面新增类型和所属科室显示列
- 新增类型选择器和科室选择器组件
- 后端实体类和服务类添加对应字段处理逻辑
- 数据库添加room_type_enum字段和相关索引
- 创建手术室类型字典数据和字典项配置
- 生成手术室管理功能说明文档
2026-01-13 10:03:57 +08:00

5.3 KiB
Raw Blame History

中医诊断主诊断功能实现说明

问题描述

中医诊断在添加时无法设置主诊断标记,导致保存后无法正确标识主诊断。

问题原因

addDiagnosisDialog.vue 中保存中医诊断时,没有传递 maindiseFlag(主诊断标记)字段到后端。

解决方案

1. 前端修改

1.1 添加主诊断UIaddDiagnosisDialog.vue

在诊断详情区域为每个中医诊断添加了主诊断复选框:

<el-checkbox
  v-model="item.isMain"
  label="主诊断"
  :true-label="true"
  :false-label="false"
  border
  size="small"
  style="margin-right: 10px;"
  @change="(value) => handleMaindise(value, index)"
/>

1.2 添加主诊断逻辑处理

新增诊断时的默认行为:

  • 第一个添加的中医诊断自动设置为主诊断
  • 后续添加的诊断默认不是主诊断

主诊断唯一性校验:

function handleMaindise(value, index) {
  if (value) {
    // 检查是否已有其他主诊断
    let mainCount = 0;
    tcmDiagonsisList.value.forEach((item, idx) => {
      if (item.isMain && idx !== index) {
        mainCount++;
      }
    });
    
    if (mainCount > 0) {
      // 取消当前选择
      tcmDiagonsisList.value[index].isMain = false;
      proxy.$modal.msgWarning('只能有一条主诊断');
      return;
    }
    
    // 更新保存列表中的主诊断标记
    const syndromeGroupNo = tcmDiagonsisList.value[index].syndromeGroupNo;
    tcmDiagonsisSaveList.value.forEach((item, idx) => {
      if (item.syndromeGroupNo === syndromeGroupNo) {
        // 每个证候组有两条记录(病和证),只有第一条(病)设置主诊断标记
        if (idx % 2 === 0 || tcmDiagonsisSaveList.value[idx - 1]?.syndromeGroupNo !== syndromeGroupNo) {
          item.maindiseFlag = 1;
        }
      }
    });
  } else {
    // 取消主诊断
    const syndromeGroupNo = tcmDiagonsisList.value[index].syndromeGroupNo;
    tcmDiagonsisSaveList.value.forEach((item) => {
      if (item.syndromeGroupNo === syndromeGroupNo) {
        item.maindiseFlag = 0;
      }
    });
  }
}

1.3 保存时包含主诊断字段

新增诊断时:

tcmDiagonsisSaveList.value.push({
  definitionId: row.id,
  ybNo: row.ybNo,
  syndromeGroupNo: timestamp.value,
  verificationStatusEnum: 4,
  medTypeCode: '11',
  maindiseFlag: isFirstDiagnosis ? 1 : 0, // 添加主诊断标记
});

修改诊断时:

tcmDiagonsisSaveList.value.push({
  conditionId: item.conditionId,
  updateId: updateIds[0],
  definitionId: item.illnessDefinitionId,
  ybNo: item.ybNo,
  syndromeGroupNo: item.syndromeGroupNo,
  verificationStatusEnum: 4,
  medTypeCode: '11',
  diagSrtNo: item.diagSrtNo,
  maindiseFlag: isMain ? 1 : 0, // 保留原有的主诊断标记
});

1.4 诊断列表显示diagnosis.vue

在获取中医诊断列表时,正确读取并显示主诊断标记:

form.value.diagnosisList.push({
  name: item.name + '-' + res.data.symptom[index].name,
  diagSrtNo: item.diagSrtNo,
  ybNo: item.ybNo,
  medTypeCode: item.medTypeCode,
  syndromeGroupNo: item.syndromeGroupNo,
  typeName: '中医诊断',
  conditionId: item.conditionId,
  symptomConditionId: res.data.symptom[index].conditionId,
  updateId: item.encounterDiagnosisId + '-' + res.data.symptom[index].encounterDiagnosisId,
  illnessDefinitionId: item.definitionId,
  symptomDefinitionId: res.data.symptom[index].definitionId,
  symptomYbNo: res.data.symptom[index].ybNo,
  maindiseFlag: item.maindiseFlag || 0, // 添加主诊断标记
});

2. 后端支持

后端已经支持 maindiseFlag 字段的保存和读取:

SaveDiagnosisChildParam.java

/**
 * 主诊断标记 (1:是,0:否)
 */
private Integer maindiseFlag;

DoctorStationChineseMedicalAppServiceImpl.java

encounterDiagnosis.setMaindiseFlag(saveDiagnosisChildParam.getMaindiseFlag());

业务规则

  1. 主诊断标记位置:主诊断标记在"病"上(每个病-证组合的第一条记录)
  2. 主诊断唯一性:中医诊断只能有一个主诊断
  3. 与西医诊断的关系:中医诊断和西医诊断可以各有一个主诊断(互不冲突)
  4. 默认行为:第一个添加的中医诊断自动设置为主诊断

修改文件清单

  1. openhis-ui-vue3/src/views/doctorstation/components/diagnosis/addDiagnosisDialog.vue

    • 添加主诊断复选框UI
    • 添加主诊断逻辑处理函数
    • 修改保存数据时包含 maindiseFlag 字段
  2. openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue

    • 修改获取中医诊断列表时读取 maindiseFlag 字段
    • 修改传递给对话框的数据包含 maindiseFlag 字段

测试要点

  1. 新增中医诊断时,第一个诊断自动设置为主诊断
  2. 可以手动勾选/取消主诊断复选框
  3. 只能有一个主诊断(尝试勾选第二个时会提示错误)
  4. 保存后主诊断标记正确保存到数据库
  5. 刷新页面后主诊断标记正确显示
  6. 修改已有诊断时,主诊断标记正确回显
  7. 中医诊断和西医诊断的主诊断互不影响

注意事项

  1. 中医诊断是"病-证"成对出现的,主诊断标记只设置在"病"上
  2. 证候记录的 maindiseFlag 始终为 0
  3. 主诊断唯一性校验只在中医诊断内部进行,不影响西医诊断

完成时间

2026年1月9日