feat(organization): 支持科室分类多选功能
- 修改前端界面组件支持科室分类多选下拉框 - 更新后端接口参数类型从Integer改为String以支持多选值 - 实现FIND_IN_SET查询方式处理多选分类条件 - 添加parseClassEnumValues函数处理字符串或数组格式转换 - 在医院住院对话框中扩展筛选条件支持多选分类 - 优化错误信息显示逻辑提供更详细的错误提示 - 在患者列表组件中添加入院日期和主治医生信息展示 - 修复多个服务调用中科室分类参数传递的数据类型问题
This commit is contained in:
@@ -257,8 +257,11 @@ function openDialog() {
|
||||
const flattenTree = (nodes) => {
|
||||
let result = [];
|
||||
nodes.forEach(node => {
|
||||
// 检查当前节点是否符合条件
|
||||
if (node && node.typeEnum === 2 && node.classEnum === 2) {
|
||||
// 检查当前节点是否符合条件 - 扩展筛选条件
|
||||
if (node &&
|
||||
node.typeEnum === 2 && // 科室类型
|
||||
checkClassEnumValue(node.classEnum, 2) && // 住院类别(支持多选)
|
||||
node.activeFlag !== 0) { // 活跃状态(非停用)
|
||||
result.push(node);
|
||||
}
|
||||
// 递归处理子节点
|
||||
@@ -288,7 +291,9 @@ function openDialog() {
|
||||
}).catch(error => {
|
||||
console.error('获取组织机构数据失败:', error);
|
||||
organization.value = [];
|
||||
proxy.$modal.msgError('获取组织机构数据失败,请稍后重试');
|
||||
// 显示详细的错误信息
|
||||
const errorMessage = error.message || error.msg || '获取组织机构数据失败,请稍后重试';
|
||||
proxy.$modal.msgError(errorMessage);
|
||||
});
|
||||
|
||||
// 获取初始化数据
|
||||
@@ -338,7 +343,9 @@ function handleNodeClick(orgInfo) {
|
||||
console.error('获取病区列表失败:', error);
|
||||
wardListOptions.value = [];
|
||||
submitForm.wardLocationId = undefined;
|
||||
proxy.$modal.msgError('获取病区列表失败,请稍后重试');
|
||||
// 显示详细的错误信息
|
||||
const errorMessage = error.message || error.msg || '获取病区列表失败,请稍后重试';
|
||||
proxy.$modal.msgError(errorMessage);
|
||||
});
|
||||
} else {
|
||||
wardListOptions.value = [];
|
||||
@@ -402,13 +409,22 @@ function submit() {
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('提交出错:', error);
|
||||
let errorMsg = '提交请求失败';
|
||||
// 构建详细的错误信息
|
||||
let errorMsg = '办理住院过程中发生错误';
|
||||
if (error.response) {
|
||||
errorMsg += ` (${error.response.status}): ${error.response.data.message || error.response.statusText}`;
|
||||
// 如果后端返回了具体错误信息,优先使用
|
||||
if (error.response.data && error.response.data.message) {
|
||||
errorMsg = error.response.data.message;
|
||||
} else if (error.response.data) {
|
||||
// 如果响应体中有其他可读信息
|
||||
errorMsg = typeof error.response.data === 'string' ? error.response.data : `${errorMsg} (${error.response.status})`;
|
||||
} else {
|
||||
errorMsg = `${errorMsg} (${error.response.status}): ${error.response.statusText}`;
|
||||
}
|
||||
} else if (error.request) {
|
||||
errorMsg += ': 网络请求失败,请检查网络连接';
|
||||
errorMsg = '网络请求失败,请检查网络连接';
|
||||
} else {
|
||||
errorMsg += `: ${error.message}`;
|
||||
errorMsg = error.message || errorMsg;
|
||||
}
|
||||
proxy.$modal.msgError(errorMsg);
|
||||
}).finally(() => {
|
||||
@@ -424,6 +440,20 @@ function submit() {
|
||||
function close() {
|
||||
emit('close');
|
||||
}
|
||||
|
||||
// 检查classEnum值是否包含指定值(支持多选)
|
||||
function checkClassEnumValue(classEnum, targetValue) {
|
||||
if (!classEnum) return false;
|
||||
|
||||
// 如果是字符串且包含逗号,说明是多选值
|
||||
if (typeof classEnum === 'string' && classEnum.includes(',')) {
|
||||
const values = classEnum.split(',').map(v => v.trim());
|
||||
return values.some(v => v == targetValue);
|
||||
}
|
||||
|
||||
// 单个值的情况
|
||||
return classEnum == targetValue;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -225,7 +225,7 @@ import {formatDate, formatDateStr} from '@/utils/index';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import {nextTick} from 'vue';
|
||||
import {updatePatientInfo} from './components/store/patient.js';
|
||||
import {ElMessage} from 'element-plus';
|
||||
import {ElMessage, ElMessageBox} from 'element-plus';
|
||||
|
||||
// // 监听路由离开事件
|
||||
// onBeforeRouteLeave((to, from, next) => {
|
||||
@@ -707,9 +707,12 @@ const onHospitalization = async () => {
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('办理住院检查过程中发生错误:', error);
|
||||
// 显示详细的错误信息
|
||||
const errorMessage = error.message || error.msg || '办理住院过程中发生错误,请稍后重试!';
|
||||
ElMessage({
|
||||
type: 'error',
|
||||
message: '办理住院过程中发生错误,请稍后重试!',
|
||||
message: errorMessage,
|
||||
duration: 5000 // 增加显示时长以便用户阅读
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user