5.3 KiB
5.3 KiB
中医诊断主诊断功能实现说明
问题描述
中医诊断在添加时无法设置主诊断标记,导致保存后无法正确标识主诊断。
问题原因
在 addDiagnosisDialog.vue 中保存中医诊断时,没有传递 maindiseFlag(主诊断标记)字段到后端。
解决方案
1. 前端修改
1.1 添加主诊断UI(addDiagnosisDialog.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());
业务规则
- 主诊断标记位置:主诊断标记在"病"上(每个病-证组合的第一条记录)
- 主诊断唯一性:中医诊断只能有一个主诊断
- 与西医诊断的关系:中医诊断和西医诊断可以各有一个主诊断(互不冲突)
- 默认行为:第一个添加的中医诊断自动设置为主诊断
修改文件清单
-
openhis-ui-vue3/src/views/doctorstation/components/diagnosis/addDiagnosisDialog.vue- 添加主诊断复选框UI
- 添加主诊断逻辑处理函数
- 修改保存数据时包含 maindiseFlag 字段
-
openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue- 修改获取中医诊断列表时读取 maindiseFlag 字段
- 修改传递给对话框的数据包含 maindiseFlag 字段
测试要点
- ✅ 新增中医诊断时,第一个诊断自动设置为主诊断
- ✅ 可以手动勾选/取消主诊断复选框
- ✅ 只能有一个主诊断(尝试勾选第二个时会提示错误)
- ✅ 保存后主诊断标记正确保存到数据库
- ✅ 刷新页面后主诊断标记正确显示
- ✅ 修改已有诊断时,主诊断标记正确回显
- ✅ 中医诊断和西医诊断的主诊断互不影响
注意事项
- 中医诊断是"病-证"成对出现的,主诊断标记只设置在"病"上
- 证候记录的 maindiseFlag 始终为 0
- 主诊断唯一性校验只在中医诊断内部进行,不影响西医诊断
完成时间
2026年1月9日