fix(#628): 请修复 Bug #628:[住院医生工作站-] 诊断录入模块缺少中医诊断录入,诊断体系及中医证候关联逻辑
根因: - 诊断录入模块(`diagnosis.vue`)缺少中医诊断支持,包括诊断体系字段、中医证候字段和相关业务逻辑。 修复: - 文件:** `src/views/inpatientDoctor/home/components/diagnosis/diagnosis.vue` - 1. **新增诊断体系下拉框**(诊断类别列前) - 选项:西医、中医 - 默认值:西医 - 2. **新增中医证候下拉框**(诊断医生列后) - 仅当诊断体系选择"中医"时显示 - 选项取值于中医证候目录 - 3. **业务逻辑实现** - `handleDiagnosisSystemChange()`: 诊断体系切换时清空或加载证候 - `handleTcmSyndromeChange()`: 证候选择时更新名称 - `loadTcmSyndromeOptions()`: 从API加载中医证候选项 - 4. **保存校验** - 中医诊断必须录入证候 - 校验失败弹出提示:"中医诊断不完整,请录入对应的证候!" - 5. **数据初始化** - 新增诊断默认诊断体系为"西医" - 加载已有诊断时确保`diagnosisSystem`字段存在 - 中医诊断数据正确映射证候信息 - ### 全链路验证 - ✅ 录入:诊断体系和中医证候下拉框正常显示 - ✅ 保存:校验逻辑正确,数据包含新字段 - ✅ 查询:加载数据时正确映射诊断体系和证候 - ✅ 编译:`npm run build:prod` 通过 - ### 注意事项 - 后端API需支持`diagnosisSystem`和`tcmSyndromeCode`字段的保存和查询 - 已有的`addDiagnosisDialog.vue`和`chineseMedicineDialog.vue`组件保持不变
This commit is contained in:
@@ -94,7 +94,7 @@
|
|||||||
>
|
>
|
||||||
保存诊断
|
保存诊断
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- <el-button type="primary" plain @click="handleAddTcmDiagonsis()"> 中医诊断 </el-button> -->
|
<el-button type="primary" plain @click="handleAddTcmDiagonsis()"> 中医诊断 </el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@@ -142,6 +142,34 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="诊断体系"
|
||||||
|
align="center"
|
||||||
|
prop="diagnosisSystem"
|
||||||
|
width="120"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item
|
||||||
|
:prop="`diagnosisList.${scope.$index}.diagnosisSystem`"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.diagnosisSystem"
|
||||||
|
placeholder=" "
|
||||||
|
style="width: 100px"
|
||||||
|
@change="(value) => handleDiagnosisSystemChange(scope.row, value)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
label="西医"
|
||||||
|
value="西医"
|
||||||
|
/>
|
||||||
|
<el-option
|
||||||
|
label="中医"
|
||||||
|
value="中医"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="诊断类别"
|
label="诊断类别"
|
||||||
align="center"
|
align="center"
|
||||||
@@ -209,6 +237,35 @@
|
|||||||
prop="diagnosisDoctor"
|
prop="diagnosisDoctor"
|
||||||
width="120"
|
width="120"
|
||||||
/>
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="中医证候"
|
||||||
|
align="center"
|
||||||
|
prop="tcmSyndromeName"
|
||||||
|
width="150"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<template v-if="scope.row.diagnosisSystem === '中医'">
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.tcmSyndromeCode"
|
||||||
|
placeholder="请选择证候"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
style="width: 130px"
|
||||||
|
@change="(value) => handleTcmSyndromeChange(scope.row, value)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in tcmSyndromeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<span style="color: #c0c4cc;">-</span>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="诊断时间"
|
label="诊断时间"
|
||||||
align="center"
|
align="center"
|
||||||
@@ -298,6 +355,7 @@ import {
|
|||||||
getEmrDetail,
|
getEmrDetail,
|
||||||
getEncounterDiagnosis,
|
getEncounterDiagnosis,
|
||||||
getTcmDiagnosis,
|
getTcmDiagnosis,
|
||||||
|
getTcmSyndrome,
|
||||||
isFoodDiseasesNew,
|
isFoodDiseasesNew,
|
||||||
saveDiagnosis,
|
saveDiagnosis,
|
||||||
} from '../api';
|
} from '../api';
|
||||||
@@ -315,6 +373,7 @@ const openDiagnosis = ref(false);
|
|||||||
const openAddDiagnosisDialog = ref(false);
|
const openAddDiagnosisDialog = ref(false);
|
||||||
const diagnosisSearchkey = ref('');
|
const diagnosisSearchkey = ref('');
|
||||||
const diagnosisOptions = ref([]);
|
const diagnosisOptions = ref([]);
|
||||||
|
const tcmSyndromeOptions = ref([]);
|
||||||
const rowIndex = ref();
|
const rowIndex = ref();
|
||||||
const diagnosis = ref();
|
const diagnosis = ref();
|
||||||
const orgOrUser = ref();
|
const orgOrUser = ref();
|
||||||
@@ -406,6 +465,10 @@ function getList() {
|
|||||||
if (obj.diagSrtNo == null) {
|
if (obj.diagSrtNo == null) {
|
||||||
obj.diagSrtNo = '1';
|
obj.diagSrtNo = '1';
|
||||||
}
|
}
|
||||||
|
// 确保 diagnosisSystem 字段存在,默认为西医
|
||||||
|
if (!obj.diagnosisSystem) {
|
||||||
|
obj.diagnosisSystem = '西医';
|
||||||
|
}
|
||||||
return obj;
|
return obj;
|
||||||
});
|
});
|
||||||
form.value.diagnosisList = datas;
|
form.value.diagnosisList = datas;
|
||||||
@@ -421,9 +484,12 @@ function getList() {
|
|||||||
diagnosisNetDatas.value = res.data.illness;
|
diagnosisNetDatas.value = res.data.illness;
|
||||||
res.data.illness.forEach((item, index) => {
|
res.data.illness.forEach((item, index) => {
|
||||||
newList.push({
|
newList.push({
|
||||||
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
|
name: item.name,
|
||||||
ybNo: item.ybNo,
|
ybNo: item.ybNo,
|
||||||
medTypeCode: item.medTypeCode,
|
medTypeCode: item.medTypeCode,
|
||||||
|
diagnosisSystem: '中医',
|
||||||
|
tcmSyndromeCode: res.data.symptom[index]?.ybNo || '',
|
||||||
|
tcmSyndromeName: res.data.symptom[index]?.name || '',
|
||||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||||
diagnosisTime: new Date().toLocaleString('zh-CN')
|
diagnosisTime: new Date().toLocaleString('zh-CN')
|
||||||
});
|
});
|
||||||
@@ -595,6 +661,7 @@ function addDiagnosisItem() {
|
|||||||
name: undefined,
|
name: undefined,
|
||||||
verificationStatusEnum: 4,
|
verificationStatusEnum: 4,
|
||||||
medTypeCode: undefined,
|
medTypeCode: undefined,
|
||||||
|
diagnosisSystem: '西医',
|
||||||
diagSrtNo: form.value.diagnosisList.length + 1,
|
diagSrtNo: form.value.diagnosisList.length + 1,
|
||||||
iptDiseTypeCode: 2,
|
iptDiseTypeCode: 2,
|
||||||
diagnosisDesc: '',
|
diagnosisDesc: '',
|
||||||
@@ -675,6 +742,44 @@ function handleMaindise(value, index) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 诊断体系变化处理
|
||||||
|
*/
|
||||||
|
function handleDiagnosisSystemChange(row, value) {
|
||||||
|
// 当切换到西医时,清空中医证候
|
||||||
|
if (value === '西医') {
|
||||||
|
row.tcmSyndromeCode = '';
|
||||||
|
row.tcmSyndromeName = '';
|
||||||
|
}
|
||||||
|
// 当切换到中医时,加载中医证候选项
|
||||||
|
if (value === '中医') {
|
||||||
|
loadTcmSyndromeOptions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载中医证候选项
|
||||||
|
*/
|
||||||
|
function loadTcmSyndromeOptions() {
|
||||||
|
getTcmSyndrome().then((res) => {
|
||||||
|
if (res.code == 200 && res.data && res.data.records) {
|
||||||
|
tcmSyndromeOptions.value = res.data.records.map((item) => ({
|
||||||
|
value: item.ybNo,
|
||||||
|
label: item.name,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中医证候变化处理
|
||||||
|
*/
|
||||||
|
function handleTcmSyndromeChange(row, value) {
|
||||||
|
// 找到对应的证候名称
|
||||||
|
const syndrome = tcmSyndromeOptions.value.find(item => item.value === value);
|
||||||
|
row.tcmSyndromeName = syndrome ? syndrome.label : '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存诊断
|
* 保存诊断
|
||||||
*/
|
*/
|
||||||
@@ -713,6 +818,15 @@ function handleSaveDiagnosis() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 中医诊断完整性校验
|
||||||
|
const incompleteTcmDiagnosis = form.value.diagnosisList.find(
|
||||||
|
(diagnosis) => diagnosis.diagnosisSystem === '中医' && !diagnosis.tcmSyndromeCode
|
||||||
|
);
|
||||||
|
if (incompleteTcmDiagnosis) {
|
||||||
|
proxy.$modal.msgWarning('中医诊断不完整,请录入对应的证候!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 设置保存标志,避免触发watch监听器
|
// 设置保存标志,避免触发watch监听器
|
||||||
isSaving.value = true;
|
isSaving.value = true;
|
||||||
|
|
||||||
@@ -817,6 +931,7 @@ function handleNodeClick(data) {
|
|||||||
name: data.name,
|
name: data.name,
|
||||||
verificationStatusEnum: 4,
|
verificationStatusEnum: 4,
|
||||||
medTypeCode: undefined,
|
medTypeCode: undefined,
|
||||||
|
diagnosisSystem: '西医',
|
||||||
diagSrtNo: form.value.diagnosisList.length + 1,
|
diagSrtNo: form.value.diagnosisList.length + 1,
|
||||||
definitionId: data.definitionId,
|
definitionId: data.definitionId,
|
||||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user