fix(hospitalization): 优化住院登记表单的默认值设置逻辑 bug#178

- 引入watch监听诊断类别字典变化,动态设置默认值
- 移除硬编码的medTypeCode初始值'21',改为从字典动态获取
- 修复科室选择逻辑,支持当前医生科室不在住院科室列表时的显示
- 为诊断类别添加验证逻辑,确保主诊断的medTypeCode在字典选项中
- 解决已选科室不在过滤列表中时无法正确显示的问题
- 添加科室树形结构递归查找功能,支持临时添加医生科室到选项列表
This commit is contained in:
2026-03-17 19:22:07 +08:00
parent 872a5308ef
commit 257ea42db7
2 changed files with 87 additions and 6 deletions

View File

@@ -200,6 +200,7 @@
</div>
</template>
<script setup>
import {watch} from 'vue';
import {
diagnosisInit,
getPractitionerWard,
@@ -219,6 +220,17 @@ const { in_way_code, admit_source_code, med_type } = proxy.useDict(
'med_type'
);
// 监听诊断类别字典加载,默认选择第一项
watch(
med_type,
(newVal) => {
if (newVal && newVal.length > 0 && !submitForm.medTypeCode) {
submitForm.medTypeCode = newVal[0].value;
}
},
{ immediate: true }
);
const emits = defineEmits([]);
const props = defineProps({
patientInfo: {
@@ -337,7 +349,7 @@ const submitForm = reactive({
startTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'), // 入院日期
priorityEnum: props.inHospitalInfo.priorityEnum, // 患者病情字典PatAdmCondition
ambDiagnosisName: props.inHospitalInfo.ambDiagnosisName,
medTypeCode: '21',
medTypeCode: '', // 从字典动态获取默认值
});
// /* 科室 病区 */
// watch(
@@ -445,6 +457,23 @@ function getInitOptions() {
// 过滤出与病区关联过的科室
organization.value = allOrgs.filter((org) => linkedOrgIds.has(org.id));
// Bug #178 Fix: 如果已选科室不在列表中,手动添加以确保正确显示
const selectedOrgId = props.inHospitalInfo?.inHospitalOrgId;
const selectedOrgName = props.inHospitalInfo?.inHospitalOrgName;
if (selectedOrgId && selectedOrgName) {
const exists = organization.value.some((org) => org.id === selectedOrgId);
if (!exists) {
// 将已选科室添加到列表中确保el-tree-select能正确显示名称
organization.value.unshift({
id: selectedOrgId,
name: selectedOrgName,
typeEnum: 2,
classEnum: '2',
children: []
});
}
}
});
// if (!props.noFile) {