180 lines
5.3 KiB
Markdown
180 lines
5.3 KiB
Markdown
# 中医诊断主诊断功能实现说明
|
||
|
||
## 问题描述
|
||
中医诊断在添加时无法设置主诊断标记,导致保存后无法正确标识主诊断。
|
||
|
||
## 问题原因
|
||
在 `addDiagnosisDialog.vue` 中保存中医诊断时,没有传递 `maindiseFlag`(主诊断标记)字段到后端。
|
||
|
||
## 解决方案
|
||
|
||
### 1. 前端修改
|
||
|
||
#### 1.1 添加主诊断UI(addDiagnosisDialog.vue)
|
||
在诊断详情区域为每个中医诊断添加了主诊断复选框:
|
||
|
||
```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 添加主诊断逻辑处理
|
||
|
||
**新增诊断时的默认行为:**
|
||
- 第一个添加的中医诊断自动设置为主诊断
|
||
- 后续添加的诊断默认不是主诊断
|
||
|
||
**主诊断唯一性校验:**
|
||
```javascript
|
||
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 保存时包含主诊断字段
|
||
|
||
**新增诊断时:**
|
||
```javascript
|
||
tcmDiagonsisSaveList.value.push({
|
||
definitionId: row.id,
|
||
ybNo: row.ybNo,
|
||
syndromeGroupNo: timestamp.value,
|
||
verificationStatusEnum: 4,
|
||
medTypeCode: '11',
|
||
maindiseFlag: isFirstDiagnosis ? 1 : 0, // 添加主诊断标记
|
||
});
|
||
```
|
||
|
||
**修改诊断时:**
|
||
```javascript
|
||
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)
|
||
|
||
在获取中医诊断列表时,正确读取并显示主诊断标记:
|
||
|
||
```javascript
|
||
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:**
|
||
```java
|
||
/**
|
||
* 主诊断标记 (1:是,0:否)
|
||
*/
|
||
private Integer maindiseFlag;
|
||
```
|
||
|
||
**DoctorStationChineseMedicalAppServiceImpl.java:**
|
||
```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日
|