fix(#628 [住院医生工作站-] 诊断录入模块缺少中医诊断录入,诊断体系及中医证候关联逻辑): 住院医生站诊断录入增加中医诊断体系及证候关联逻辑
diagnosis.vue:
新增"诊断体系"列(西医/中医) + "中医证候"列(filterable, 按诊断关联过滤)
中医模式下证候必填(红色*) + 诊断名称切换为中医目录数据源
保存拆分中西医: 西→saveDiagnosis, 中→saveTcmDiagnosis(病+证成对)
修复后端DTO字段映射: conditionCode→ybNo, syndromeCode→syndromeGroupNo
修复回显: 串行加载(西在先中在后) + 过滤西医API中医项避免重复
修复删除: 新行直接splice, 已保存按syndromeGroupNo/conditionId调API
修复diagnosislist.id映射: item.id替代item.ybNo(定义ID)
修复loadTcmSyndromeOptions未定义报错(commit a0a5d7e76遗漏)
表格列统一el-form-item包裹保证水平对齐
diagnosislist.vue:
新增diagnosisSystem prop, 中医模式调用getTcmCondition
This commit is contained in:
@@ -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: 100%"
|
||||||
|
@change="handleDiagnosisSystemChange(scope.row)"
|
||||||
|
>
|
||||||
|
<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"
|
||||||
@@ -187,6 +215,7 @@
|
|||||||
>
|
>
|
||||||
<diagnosislist
|
<diagnosislist
|
||||||
:diagnosis-searchkey="diagnosisSearchkey"
|
:diagnosis-searchkey="diagnosisSearchkey"
|
||||||
|
:diagnosis-system="scope.row.diagnosisSystem || '西医'"
|
||||||
@select-diagnosis="handleSelsectDiagnosis"
|
@select-diagnosis="handleSelsectDiagnosis"
|
||||||
/>
|
/>
|
||||||
<template #reference>
|
<template #reference>
|
||||||
@@ -208,19 +237,74 @@
|
|||||||
align="center"
|
align="center"
|
||||||
prop="diagnosisDoctor"
|
prop="diagnosisDoctor"
|
||||||
width="120"
|
width="120"
|
||||||
/>
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item>
|
||||||
|
<span style="display: block; text-align: center; width: 100%;">{{ scope.row.diagnosisDoctor || '—' }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
prop="tcmSyndromeName"
|
||||||
|
width="180"
|
||||||
|
>
|
||||||
|
<template #header>
|
||||||
|
<span>中医证候 <span style="color: #f56c6c;">*</span></span>
|
||||||
|
</template>
|
||||||
|
<template #default="scope">
|
||||||
|
<template v-if="scope.row.diagnosisSystem === '中医'">
|
||||||
|
<el-form-item
|
||||||
|
:prop="`diagnosisList.${scope.$index}.tcmSyndromeCode`"
|
||||||
|
:rules="scope.row.diagnosisSystem === '中医' ? [{ required: true, message: '请选择中医证候', trigger: 'change' }] : []"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.tcmSyndromeCode"
|
||||||
|
placeholder="请选择中医证候"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
style="width: 100%"
|
||||||
|
@focus="loadSyndromeOptions(scope.row.ybNo)"
|
||||||
|
@change="(val) => handleSyndromeSelect(val, scope.row)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in syndromeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<el-form-item v-else>
|
||||||
|
<span>—</span>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="诊断时间"
|
label="诊断时间"
|
||||||
align="center"
|
align="center"
|
||||||
prop="diagnosisTime"
|
prop="diagnosisTime"
|
||||||
width="150"
|
width="150"
|
||||||
/>
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item>
|
||||||
|
<span style="display: block; text-align: center; width: 100%;">{{ scope.row.diagnosisTime || '—' }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="诊断代码"
|
label="诊断代码"
|
||||||
align="center"
|
align="center"
|
||||||
prop="ybNo"
|
prop="ybNo"
|
||||||
width="180"
|
width="180"
|
||||||
/>
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item>
|
||||||
|
<span style="display: block; text-align: center; width: 100%;">{{ scope.row.ybNo || '—' }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="诊断类型"
|
label="诊断类型"
|
||||||
align="center"
|
align="center"
|
||||||
@@ -228,30 +312,32 @@
|
|||||||
width="120"
|
width="120"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div style="display:flex;flex-direction:column;align-items:center;gap:5px;">
|
<el-form-item>
|
||||||
<el-checkbox
|
<div style="display:flex;flex-direction:column;align-items:center;gap:5px;">
|
||||||
v-model="scope.row.maindiseFlag"
|
<el-checkbox
|
||||||
label="主诊断"
|
v-model="scope.row.maindiseFlag"
|
||||||
:true-label="1"
|
label="主诊断"
|
||||||
:false-label="0"
|
:true-label="1"
|
||||||
border
|
:false-label="0"
|
||||||
size="small"
|
border
|
||||||
@change="(value) => handleMaindise(value, scope.$index)"
|
size="small"
|
||||||
/>
|
@change="(value) => handleMaindise(value, scope.$index)"
|
||||||
<el-select
|
|
||||||
v-model="scope.row.verificationStatusEnum"
|
|
||||||
placeholder=" "
|
|
||||||
style="width: 100%; padding-bottom: 5px; padding-left: 10px"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in diagnosisOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
/>
|
||||||
</el-select>
|
<el-select
|
||||||
</div>
|
v-model="scope.row.verificationStatusEnum"
|
||||||
|
placeholder=" "
|
||||||
|
style="width: 100%; padding-bottom: 5px; padding-left: 10px"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in diagnosisOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -260,13 +346,15 @@
|
|||||||
width="130"
|
width="130"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-form-item>
|
||||||
link
|
<el-button
|
||||||
type="primary"
|
link
|
||||||
@click="handleDeleteDiagnosis(scope.row, scope.$index)"
|
type="primary"
|
||||||
>
|
@click="handleDeleteDiagnosis(scope.row, scope.$index)"
|
||||||
删除
|
>
|
||||||
</el-button>
|
删除
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -288,7 +376,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {getCurrentInstance} from 'vue'; // 添加 nextTick 导入
|
import {getCurrentInstance, ref, watch} from 'vue'; // 添加 nextTick 导入
|
||||||
import useUserStore from '@/store/modules/user';
|
import useUserStore from '@/store/modules/user';
|
||||||
import {
|
import {
|
||||||
delEncounterDiagnosis,
|
delEncounterDiagnosis,
|
||||||
@@ -299,8 +387,10 @@ import {
|
|||||||
getEmrDetail,
|
getEmrDetail,
|
||||||
getEncounterDiagnosis,
|
getEncounterDiagnosis,
|
||||||
getTcmDiagnosis,
|
getTcmDiagnosis,
|
||||||
|
getTcmSyndrome,
|
||||||
isFoodDiseasesNew,
|
isFoodDiseasesNew,
|
||||||
saveDiagnosis,
|
saveDiagnosis,
|
||||||
|
saveTcmDiagnosis,
|
||||||
} from '../api';
|
} from '../api';
|
||||||
import {deleteTcmDiagnosis} from '@/views/doctorstation/components/api.js';
|
import {deleteTcmDiagnosis} from '@/views/doctorstation/components/api.js';
|
||||||
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
|
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
|
||||||
@@ -319,6 +409,7 @@ const diagnosisOptions = ref([]);
|
|||||||
const rowIndex = ref();
|
const rowIndex = ref();
|
||||||
const diagnosis = ref();
|
const diagnosis = ref();
|
||||||
const orgOrUser = ref();
|
const orgOrUser = ref();
|
||||||
|
const syndromeOptions = ref([]);
|
||||||
const form = ref({
|
const form = ref({
|
||||||
diagnosisList: [],
|
diagnosisList: [],
|
||||||
});
|
});
|
||||||
@@ -397,46 +488,68 @@ function getList() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化中医诊断列表
|
// 先加载西医诊断,再加载中医诊断(避免竞态覆盖)
|
||||||
const newList = [];
|
|
||||||
|
|
||||||
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
|
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
const datas = (res.data || []).map((item) => {
|
// 过滤掉中医诊断(typeName: '中医诊断'),中医数据由 getTcmDiagnosis 统一管理
|
||||||
let obj = {
|
const datas = (res.data || [])
|
||||||
...item,
|
.filter((item) => item.typeName !== '中医诊断')
|
||||||
};
|
.map((item) => {
|
||||||
if (obj.diagSrtNo == null) {
|
let obj = {
|
||||||
obj.diagSrtNo = 1;
|
...item,
|
||||||
}
|
diagnosisSystem: '西医',
|
||||||
return obj;
|
tcmSyndromeCode: '',
|
||||||
});
|
tcmSyndromeName: '',
|
||||||
|
syndromeDefinitionId: '',
|
||||||
|
syndromeGroupNo: '',
|
||||||
|
showPopover: false,
|
||||||
|
};
|
||||||
|
if (obj.diagSrtNo == null) {
|
||||||
|
obj.diagSrtNo = 1;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
});
|
||||||
form.value.diagnosisList = datas;
|
form.value.diagnosisList = datas;
|
||||||
// form.value.diagnosisList = res.data;
|
|
||||||
emits('diagnosisSave', false);
|
emits('diagnosisSave', false);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
|
||||||
console.log('getTcmDiagnosis=======>', JSON.stringify(res.data.illness));
|
|
||||||
|
|
||||||
if (res.code == 200) {
|
// 西医数据就绪后再加载中医诊断并追加
|
||||||
if (res.data.illness.length > 0) {
|
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
||||||
diagnosisNetDatas.value = res.data.illness;
|
console.log('getTcmDiagnosis=======>', JSON.stringify(res.data.illness));
|
||||||
res.data.illness.forEach((item, index) => {
|
|
||||||
newList.push({
|
if (res.code == 200) {
|
||||||
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
|
if (res.data.illness.length > 0) {
|
||||||
ybNo: item.ybNo,
|
diagnosisNetDatas.value = res.data.illness;
|
||||||
medTypeCode: item.medTypeCode,
|
const newList = [];
|
||||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
res.data.illness.forEach((item, index) => {
|
||||||
diagnosisTime: new Date().toLocaleString('zh-CN')
|
newList.push({
|
||||||
|
conditionId: item.conditionId || '',
|
||||||
|
encounterDiagnosisId: item.encounterDiagnosisId || '',
|
||||||
|
syndromeGroupNo: item.syndromeGroupNo || res.data.symptom[index]?.syndromeGroupNo || '',
|
||||||
|
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
|
||||||
|
ybNo: item.ybNo,
|
||||||
|
definitionId: item.definitionId || '',
|
||||||
|
diagnosisSystem: '中医',
|
||||||
|
tcmSyndromeCode: res.data.symptom[index]?.ybNo || '',
|
||||||
|
tcmSyndromeName: res.data.symptom[index]?.name || '',
|
||||||
|
syndromeDefinitionId: res.data.symptom[index]?.definitionId || '',
|
||||||
|
diagSrtNo: item.diagSrtNo,
|
||||||
|
medTypeCode: item.medTypeCode,
|
||||||
|
maindiseFlag: item.maindiseFlag,
|
||||||
|
verificationStatusEnum: item.verificationStatusEnum,
|
||||||
|
diagnosisDesc: item.diagnosisDesc || '',
|
||||||
|
iptDiseTypeCode: item.iptDiseTypeCode,
|
||||||
|
showPopover: false,
|
||||||
|
diagnosisDoctor: item.diagnosisDoctor || props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||||
|
diagnosisTime: item.diagnosisTime || new Date().toLocaleString('zh-CN')
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// 将新数据添加到现有列表中
|
// 将新数据添加到现有列表现有列表
|
||||||
form.value.diagnosisList.push(...newList);
|
form.value.diagnosisList.push(...newList);
|
||||||
|
|
||||||
// 重新排序整个列表
|
// 重新排序整个列表
|
||||||
form.value.diagnosisList.sort((a, b) => {
|
form.value.diagnosisList.sort((a, b) => {
|
||||||
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
|
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
|
||||||
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
|
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
|
||||||
return aNo - bNo;
|
return aNo - bNo;
|
||||||
@@ -446,6 +559,8 @@ function getList() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
getTree();
|
getTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,6 +711,11 @@ function addDiagnosisItem() {
|
|||||||
form.value.diagnosisList.push({
|
form.value.diagnosisList.push({
|
||||||
showPopover: false,
|
showPopover: false,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
|
diagnosisSystem: '西医',
|
||||||
|
tcmSyndromeCode: '',
|
||||||
|
tcmSyndromeName: '',
|
||||||
|
syndromeDefinitionId: '',
|
||||||
|
syndromeGroupNo: '',
|
||||||
verificationStatusEnum: 4,
|
verificationStatusEnum: 4,
|
||||||
medTypeCode: undefined,
|
medTypeCode: undefined,
|
||||||
diagSrtNo: form.value.diagnosisList.length + 1,
|
diagSrtNo: form.value.diagnosisList.length + 1,
|
||||||
@@ -613,6 +733,48 @@ function addDiagnosisItem() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 诊断体系切换
|
||||||
|
function handleDiagnosisSystemChange(row) {
|
||||||
|
if (row.diagnosisSystem === '西医') {
|
||||||
|
row.tcmSyndromeCode = '';
|
||||||
|
row.tcmSyndromeName = '';
|
||||||
|
row.syndromeDefinitionId = '';
|
||||||
|
row.syndromeGroupNo = '';
|
||||||
|
}
|
||||||
|
row.name = '';
|
||||||
|
row.ybNo = '';
|
||||||
|
row.definitionId = '';
|
||||||
|
row.showPopover = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载中医证候选项(按诊断名称关联过滤)
|
||||||
|
function loadSyndromeOptions(conditionCode) {
|
||||||
|
const params = conditionCode ? { conditionCode } : {};
|
||||||
|
getTcmSyndrome(params).then((res) => {
|
||||||
|
if (res.data && res.data.records) {
|
||||||
|
syndromeOptions.value = res.data.records.map((item) => ({
|
||||||
|
value: item.ybNo,
|
||||||
|
label: item.name,
|
||||||
|
id: item.id,
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
syndromeOptions.value = [];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 中医证候选中赋值
|
||||||
|
function handleSyndromeSelect(val, row) {
|
||||||
|
if (val) {
|
||||||
|
const selected = syndromeOptions.value.find((item) => item.value === val);
|
||||||
|
row.tcmSyndromeName = selected ? selected.label : '';
|
||||||
|
row.syndromeDefinitionId = selected ? selected.id : '';
|
||||||
|
} else {
|
||||||
|
row.tcmSyndromeName = '';
|
||||||
|
row.syndromeDefinitionId = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 添加中医诊断
|
// 添加中医诊断
|
||||||
function handleAddTcmDiagonsis() {
|
function handleAddTcmDiagonsis() {
|
||||||
tcmDiagnosisListForEdit.value = form.value.diagnosisList.filter(
|
tcmDiagnosisListForEdit.value = form.value.diagnosisList.filter(
|
||||||
@@ -632,40 +794,27 @@ function handleAddTcmDiagonsis() {
|
|||||||
* 删除诊断
|
* 删除诊断
|
||||||
*/
|
*/
|
||||||
function handleDeleteDiagnosis(row, index) {
|
function handleDeleteDiagnosis(row, index) {
|
||||||
//中医诊断用-拼接 例如:疳气-表里俱实证
|
// 新行(未保存):直接从列表中移除
|
||||||
const nameArr = row.name?.split('-') || [];
|
if (!row.conditionId && !row.encounterDiagnosisId) {
|
||||||
|
form.value.diagnosisList.splice(index, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 已保存的中医诊断(name含'-'且syndromeGroupNo有值)
|
||||||
|
if (row.syndromeGroupNo) {
|
||||||
|
deleteTcmDiagnosis(row.syndromeGroupNo).then(() => {
|
||||||
|
getList();
|
||||||
|
getTree();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 已保存的西医诊断
|
||||||
if (row.conditionId) {
|
if (row.conditionId) {
|
||||||
if (nameArr.length > 1) {
|
delEncounterDiagnosis(row.conditionId).then(() => {
|
||||||
deleteTcmDiagnosis(row.syndromeGroupNo).then(() => {
|
getList();
|
||||||
getList();
|
getTree();
|
||||||
getTree();
|
});
|
||||||
});
|
|
||||||
} else {
|
|
||||||
delEncounterDiagnosis(row.conditionId).then(() => {
|
|
||||||
getList();
|
|
||||||
getTree();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('row============>', JSON.stringify(row));
|
|
||||||
console.log('item============>', index);
|
|
||||||
if (nameArr.length > 1) {
|
|
||||||
let obj = null;
|
|
||||||
for (let index = 0; index < diagnosisNetDatas.value.length; index++) {
|
|
||||||
const item = diagnosisNetDatas.value[index];
|
|
||||||
console.log('item.name============>', item.name);
|
|
||||||
console.log('row.name============>', row.name);
|
|
||||||
if (item.ybNo == row.ybNo) {
|
|
||||||
obj = item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deleteTcmDiagnosis(obj.syndromeGroupNo).then(() => {
|
|
||||||
getList();
|
|
||||||
getTree();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
form.value.diagnosisList.splice(index, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -723,6 +872,19 @@ function handleSaveDiagnosis() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验中医诊断证候完整性
|
||||||
|
for (let i = 0; i < form.value.diagnosisList.length; i++) {
|
||||||
|
const item = form.value.diagnosisList[i];
|
||||||
|
if (!item.name) {
|
||||||
|
ElMessage.warning(`第${i + 1}行诊断名称不能为空`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (item.diagnosisSystem === '中医' && !item.tcmSyndromeCode) {
|
||||||
|
ElMessage.error('中医诊断不完整,请录入对应的证候!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 设置保存标志,避免触发watch监听器
|
// 设置保存标志,避免触发watch监听器
|
||||||
isSaving.value = true;
|
isSaving.value = true;
|
||||||
|
|
||||||
@@ -735,29 +897,78 @@ function handleSaveDiagnosis() {
|
|||||||
|
|
||||||
// 步骤2:重新分配连续的序号(从1开始)
|
// 步骤2:重新分配连续的序号(从1开始)
|
||||||
sortedList.forEach((item, index) => {
|
sortedList.forEach((item, index) => {
|
||||||
item.diagSrtNo = index + 1; // 这里是关键!把”诊断排序”改成新顺序
|
item.diagSrtNo = index + 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
// 步骤3:提交排序后的数据
|
// 步骤3:拆分为西医诊断和中医诊断
|
||||||
saveDiagnosis({
|
const westernList = sortedList.filter((item) => item.diagnosisSystem !== '中医');
|
||||||
patientId: props.patientInfo.patientId,
|
const tcmList = sortedList.filter((item) => item.diagnosisSystem === '中医');
|
||||||
encounterId: props.patientInfo.encounterId,
|
|
||||||
diagnosisChildList: sortedList,
|
|
||||||
}).then((res) => {
|
|
||||||
if (res.code === 200) {
|
|
||||||
emits('diagnosisSave', false);
|
|
||||||
proxy.$modal.msgSuccess('诊断已保存');
|
|
||||||
|
|
||||||
// 保存成功后从服务器重新加载数据,确保前后端数据一致
|
const savePromises = [];
|
||||||
getList();
|
|
||||||
|
|
||||||
// 食源性疾病逻辑
|
// 保存西医诊断
|
||||||
isFoodDiseasesNew({ encounterId: props.patientInfo.encounterId }).then((res2) => {
|
if (westernList.length > 0) {
|
||||||
|
savePromises.push(
|
||||||
|
saveDiagnosis({
|
||||||
|
patientId: props.patientInfo.patientId,
|
||||||
|
encounterId: props.patientInfo.encounterId,
|
||||||
|
diagnosisChildList: westernList,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存中医诊断
|
||||||
|
tcmList.forEach((item) => {
|
||||||
|
const syndromeGroupNo = item.conditionId
|
||||||
|
? `${item.conditionId}-${item.tcmSyndromeCode || Date.now()}`
|
||||||
|
: `${Date.now()}-${item.tcmSyndromeCode || '0'}`;
|
||||||
|
savePromises.push(
|
||||||
|
saveTcmDiagnosis({
|
||||||
|
patientId: props.patientInfo.patientId,
|
||||||
|
encounterId: props.patientInfo.encounterId,
|
||||||
|
diagnosisChildList: [
|
||||||
|
// 病(illness)
|
||||||
|
{
|
||||||
|
conditionId: item.conditionId || null,
|
||||||
|
name: item.name,
|
||||||
|
ybNo: item.ybNo,
|
||||||
|
definitionId: item.definitionId || null,
|
||||||
|
diagSrtNo: item.diagSrtNo,
|
||||||
|
medTypeCode: item.medTypeCode,
|
||||||
|
maindiseFlag: item.maindiseFlag,
|
||||||
|
verificationStatusEnum: item.verificationStatusEnum,
|
||||||
|
diagnosisDesc: item.diagnosisDesc || '',
|
||||||
|
diagnosisDoctor: item.diagnosisDoctor || '',
|
||||||
|
diagnosisTime: item.diagnosisTime || '',
|
||||||
|
iptDiseTypeCode: item.iptDiseTypeCode,
|
||||||
|
syndromeGroupNo: syndromeGroupNo,
|
||||||
|
},
|
||||||
|
// 证(syndrome)
|
||||||
|
{
|
||||||
|
name: item.tcmSyndromeName,
|
||||||
|
ybNo: item.tcmSyndromeCode,
|
||||||
|
definitionId: item.syndromeDefinitionId || null,
|
||||||
|
diagSrtNo: null,
|
||||||
|
syndromeGroupNo: syndromeGroupNo,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
Promise.all(savePromises).then(() => {
|
||||||
|
emits('diagnosisSave', false);
|
||||||
|
proxy.$modal.msgSuccess('诊断已保存');
|
||||||
|
|
||||||
|
// 保存成功后从服务器重新加载数据,确保前后端数据一致
|
||||||
|
getList();
|
||||||
|
|
||||||
|
// 食源性疾病逻辑
|
||||||
|
isFoodDiseasesNew({ encounterId: props.patientInfo.encounterId }).then((res2) => {
|
||||||
if (res2.code === 20 && res2.data) {
|
if (res2.code === 20 && res2.data) {
|
||||||
window.open(res2.data, '_blank');
|
window.open(res2.data, '_blank');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
isSaving.value = false;
|
isSaving.value = false;
|
||||||
|
|||||||
@@ -28,38 +28,55 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {getDiagnosisDefinitionList} from '../api';
|
import {getDiagnosisDefinitionList, getTcmCondition} from '../api';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
diagnosisSearchkey: {
|
diagnosisSearchkey: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
diagnosisSystem: {
|
||||||
|
type: String,
|
||||||
|
default: '西医',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emit = defineEmits(['selectDiagnosis']);
|
const emit = defineEmits(['selectDiagnosis']);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
const queryParams = ref({
|
const queryParams = ref({
|
||||||
pageSize: 1000,
|
pageSize: 1000,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
// typeCode: 1,
|
|
||||||
});
|
});
|
||||||
const diagnosisDefinitionList = ref([]);
|
const diagnosisDefinitionList = ref([]);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.diagnosisSearchkey,
|
() => [props.diagnosisSearchkey, props.diagnosisSystem],
|
||||||
(newValue) => {
|
() => {
|
||||||
queryParams.value.searchKey = newValue;
|
|
||||||
getList();
|
getList();
|
||||||
},
|
},
|
||||||
{ immdiate: true }
|
{ immediate: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
function getList() {
|
function getList() {
|
||||||
getDiagnosisDefinitionList(queryParams.value).then((res) => {
|
if (props.diagnosisSystem === '中医') {
|
||||||
diagnosisDefinitionList.value = res.data.records;
|
getTcmCondition({ searchKey: props.diagnosisSearchkey || undefined }).then((res) => {
|
||||||
total.value = res.data.total;
|
if (res.data && res.data.records) {
|
||||||
});
|
diagnosisDefinitionList.value = res.data.records.map((item) => ({
|
||||||
|
name: item.name,
|
||||||
|
ybNo: item.ybNo,
|
||||||
|
typeName: '中医诊断',
|
||||||
|
id: item.id,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
total.value = res.data?.total || 0;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
queryParams.value.searchKey = props.diagnosisSearchkey || undefined;
|
||||||
|
getDiagnosisDefinitionList(queryParams.value).then((res) => {
|
||||||
|
diagnosisDefinitionList.value = res.data.records;
|
||||||
|
total.value = res.data.total;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clickRow(row) {
|
function clickRow(row) {
|
||||||
|
|||||||
Reference in New Issue
Block a user