diff --git a/openhis-ui-vue3/src/views/basicmanage/organization/index.vue b/openhis-ui-vue3/src/views/basicmanage/organization/index.vue index efc7257b..ef9e65ac 100644 --- a/openhis-ui-vue3/src/views/basicmanage/organization/index.vue +++ b/openhis-ui-vue3/src/views/basicmanage/organization/index.vue @@ -177,14 +177,34 @@ initOption(); // 使用系统标准字典获取方法 const { organization_class } = proxy.useDict('organization_class'); +// 统一的科室分类字典处理函数 +function processOrganizationClassDict(dictData) { + return dictData.map(item => ({ + value: String(item.value), // 将值转换为字符串类型,确保与表单值类型一致 + info: item.label // 使用dict_label的值作为显示文本 + })); +} + // 监听字典数据变化 watch(() => organization_class.value, (newVal) => { if (newVal && newVal.length > 0) { - // 转换为组件需要的格式(使用dict_label作为label) - classEnumOption.value = newVal.map(item => ({ - value: item.value, - info: item.label // 使用dict_label的值作为显示文本 - })); + // 转换为组件需要的格式 + classEnumOption.value = processOrganizationClassDict(newVal); + + // 同步更新表格中显示的科室分类文本,确保主界面显示与字典一致 + if (organization.value && organization.value.length > 0) { + organization.value = organization.value.map(item => { + // 保留原有显示文本作为基础 + const originalText = item.classEnum_dictText || ''; + // 获取字典中的对应文本 + const dictLabel = getDictLabel(item.classEnum); + // 只有在字典中找到匹配值时才替换,否则保留原有文本 + return { + ...item, + classEnum_dictText: dictLabel || originalText + }; + }); + } } }, { immediate: true }); @@ -192,9 +212,17 @@ function initOption() { if (orgTypeOption.value.length == 0) { initOrgTypeOption().then((res) => { orgTypeOption.value = res.data.organizationTypeOptions; - // 科室分类优先使用字典数据,如果没有再使用接口返回的数据 - if (!classEnumOption.value || classEnumOption.value.length === 0) { - classEnumOption.value = res.data.organizationClassOptions || []; + + // 优先使用系统标准字典数据,确保编辑和新增科室使用相同的分类字典 + if (organization_class.value && organization_class.value.length > 0) { + classEnumOption.value = processOrganizationClassDict(organization_class.value); + } else if (res.data.organizationClassOptions && res.data.organizationClassOptions.length > 0) { + // 只有在字典数据不存在时才使用接口返回的数据作为备选 + // 将接口返回的科室分类选项值也转换为字符串类型,保持一致性 + classEnumOption.value = res.data.organizationClassOptions.map(item => ({ + ...item, + value: String(item.value) + })); } }); } @@ -205,10 +233,41 @@ function reset() { orgRef.value.resetFields(); } +// 从字典数据中查找对应的值,处理类型转换 +function getDictLabel(value) { + if (!value || !organization_class.value || organization_class.value.length === 0) return ''; + + // 尝试进行类型转换比较,处理可能的字符串/数字不匹配问题 + const stringValue = String(value); + const dict = organization_class.value.find(item => { + // 比较转换后的字符串值 + return String(item.value) === stringValue; + }); + + return dict ? dict.label : ''; +} + function getPageList() { loading.value = false; getList(queryParams.value).then((res) => { - organization.value = res.data.records; + // 处理返回的科室数据,确保科室分类显示与系统标准字典一致 + const processedData = res.data.records.map(item => { + // 保留原有显示文本作为基础 + const originalText = item.classEnum_dictText || ''; + + // 如果系统标准字典存在,尝试使用字典中的文本覆盖原有文本 + if (organization_class.value && organization_class.value.length > 0) { + const dictLabel = getDictLabel(item.classEnum); + // 只有在字典中找到匹配值时才替换,否则保留原有文本 + return { + ...item, + classEnum_dictText: dictLabel || originalText + }; + } + return item; + }); + + organization.value = processedData; total.value = res.data.total; loading.value = false; }); @@ -233,7 +292,8 @@ function handelEdit(row) { form.value.ybNo = row.ybNo; form.value.ybName = row.ybName; form.value.typeEnum = row.typeEnum; - form.value.classEnum = row.classEnum; + // 确保科室分类值的类型正确,使其能正确匹配下拉选项中的值 + form.value.classEnum = row.classEnum !== undefined ? String(row.classEnum) : undefined; form.value.busNoParent = row.busNo.split('.').length > 1 ? row.busNo.split('.')[0] : undefined; }, 50); }