diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/ATDManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/ATDManageAppMapper.xml index 274ba3c1..63956bc9 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/ATDManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/ATDManageAppMapper.xml @@ -224,7 +224,7 @@ SELECT - T1.id, - T1.active_flag, - T1.temp_flag, - T1."name" AS patientName, -- 患者姓名 - T1.name_json, - T1.bus_no AS patientNo, -- 病历号 - T1.gender_enum, -- 患者性别 - T1.birth_date, - T1.deceased_date, - T1.marital_status_enum, - T1.prfs_enum, - T1.phone, -- 患者手机号 - COALESCE(NULLIF(T1.address, ''), '') AS address, -- 处理空地址 - T1.address_province, - T1.address_city, - T1.address_district, - T1.address_street, - T1.address_json, - T1.nationality_code, - T1.id_card, - T1.py_str, - T1.wb_str, - T1.blood_abo, - T1.blood_rh, - T1.work_company, - T1.native_place, - T1.country_code, - T1.link_name, - T1.link_relation_code, - T1.link_telcom, - T1.link_jsons, - T1.tenant_id, - T2.bus_no AS hospitalNo, -- 住院号 - T2.id AS encounterId, -- 就诊ID - T2.priority_enum, -- 护理级别 - T2.status_enum, -- 患者状态 - T2.organization_id,-- 入院科室 - T2.start_time AS admissionDate, -- 入院日期 - T2.end_time AS dischargeDate, -- 出院日期 - T2.class_enum, -- 就诊类别 - Doctor.name AS responsibleDoctor, -- 责任医生 - Nurse.name AS responsibleNurse, -- 责任护士 - T6.type_code, -- 费别 - T7.status_enum AS surgeryStatusEnum, -- 手术状态 - T8.start_time AS surgeryStartTime, -- 手术开始时间 - T8.end_time AS surgeryEndTime, -- 手术结束时间 - T9.id AS encounterLocationId, -- 就诊位置ID - T9.location_id, -- 床位号 - T11."name" AS caty, -- 入院科室 - T12."name" AS mainDiagnosis -- 主要诊断 - FROM adm_patient AS T1 - LEFT JOIN adm_encounter T2 - ON T1.id = T2.patient_id -- 患者ID - AND T2.delete_flag = '0' - AND T2.class_enum = '1' -- 仅选择住院患者 - -- 获取责任医生 - LEFT JOIN ( - SELECT - encounter_id, - practitioner_id, - "name", - ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY practitioner_id) as rn - FROM ( - SELECT - T3.encounter_id, - T4."name", - T3.practitioner_id - FROM adm_encounter_participant T3 - LEFT JOIN adm_practitioner T4 - ON T3.practitioner_id = T4.id - AND T4.delete_flag = '0' - WHERE T3.type_code = '9' -- 责任医生类型 - AND T3.delete_flag = '0' - ) sub - ) Doctor ON T2.id = Doctor.encounter_id AND Doctor.rn = 1 - -- 获取责任护士 - LEFT JOIN ( - SELECT - encounter_id, - practitioner_id, - "name", - ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY practitioner_id) as rn - FROM ( - SELECT - T3.encounter_id, - T4."name", - T3.practitioner_id - FROM adm_encounter_participant T3 - LEFT JOIN adm_practitioner T4 - ON T3.practitioner_id = T4.id - AND T4.delete_flag = '0' - WHERE T3.type_code = '2' -- 责任护士类型 - AND T3.delete_flag = '0' - ) sub - ) Nurse ON T2.id = Nurse.encounter_id AND Nurse.rn = 1 - LEFT JOIN adm_encounter_diagnosis T5 - ON T2.id = T5.encounter_id -- 就诊ID - AND T5.maindise_flag = 1 - AND T5.delete_flag = '0' - LEFT JOIN adm_account T6 - ON T2.id = T6.encounter_id -- 就诊ID - AND T6.delete_flag = '0' - LEFT JOIN cli_procedure T7 - ON T1.id = T7.patient_id -- 患者ID - AND T7.delete_flag = '0' - LEFT JOIN cli_procedure_performer T8 - ON T7.id = T8.procedure_id -- 手术ID - AND T8.delete_flag = '0' - LEFT JOIN adm_encounter_location T9 - ON T2.id = T9.encounter_id -- 就诊ID - AND T9.form_enum = 8 - AND T9.delete_flag = '0' - LEFT JOIN adm_organization T11 - ON T2.organization_id = T11.id - AND T11.type_enum = 2 - AND T11.delete_flag = '0' - LEFT JOIN cli_condition_definition T12 - ON T5.condition_id = T12.id - AND T12.delete_flag = '0' - LEFT JOIN wor_service_request T13 - ON T2.id = T13.encounter_id - AND T7.base_service_req_id = T13.id - AND T13.delete_flag = '0' - LEFT JOIN wor_service_request_detail T14 - ON T13.id = T14.service_req_id - AND T14.type_code = '3' - AND T14.delete_flag = '0' - - T1.delete_flag = '0' - -- 患者ID - - AND T1.id = #{patientId} - + id, + active_flag, + temp_flag, + patientName, + name_json, + patientNo, + gender_enum, + birth_date, + deceased_date, + marital_status_enum, + prfs_enum, + phone, + address, + address_province, + address_city, + address_district, + address_street, + address_json, + nationality_code, + id_card, + py_str, + wb_str, + blood_abo, + blood_rh, + work_company, + native_place, + country_code, + link_name, + link_relation_code, + link_telcom, + link_jsons, + tenant_id, + hospitalNo, + encounterId, + priority_enum, + status_enum, + organization_id, + admissionDate, + dischargeDate, + class_enum, + responsibleDoctor, + responsibleNurse, + type_code, + surgeryStatusEnum, + surgeryStartTime, + surgeryEndTime, + encounterLocationId, + location_id, + caty, + mainDiagnosis + FROM ( + SELECT + patient_base.*, + ROW_NUMBER() OVER (PARTITION BY patient_base.id ORDER BY patient_base.encounterId) as rn + FROM ( + SELECT DISTINCT + T1.id, + T1.active_flag, + T1.temp_flag, + T1."name" AS patientName, -- 患者姓名 + T1.name_json, + T1.bus_no AS patientNo, -- 病历号 + T1.gender_enum, -- 患者性别 + T1.birth_date, + T1.deceased_date, + T1.marital_status_enum, + T1.prfs_enum, + T1.phone, -- 患者手机号 + COALESCE(NULLIF(T1.address, ''), '') AS address, -- 处理空地址 + T1.address_province, + T1.address_city, + T1.address_district, + T1.address_street, + T1.address_json, + T1.nationality_code, + T1.id_card, + T1.py_str, + T1.wb_str, + T1.blood_abo, + T1.blood_rh, + T1.work_company, + T1.native_place, + T1.country_code, + T1.link_name, + T1.link_relation_code, + T1.link_telcom, + T1.link_jsons, + T1.tenant_id, + T2.bus_no AS hospitalNo, -- 住院号 + T2.id AS encounterId, -- 就诊ID + T2.priority_enum, -- 护理级别 + T2.status_enum, -- 患者状态 + T2.organization_id,-- 入院科室 + T2.start_time AS admissionDate, -- 入院日期 + T2.end_time AS dischargeDate, -- 出院日期 + T2.class_enum, -- 就诊类别 + -- 获取责任医生(使用子查询确保只返回一个值) + (SELECT p."name" + FROM adm_encounter_participant ep + LEFT JOIN adm_practitioner p ON ep.practitioner_id = p.id AND p.delete_flag = '0' + WHERE ep.encounter_id = T2.id + AND ep.type_code = '9' + AND ep.delete_flag = '0' + ORDER BY ep.practitioner_id + LIMIT 1) AS responsibleDoctor, + -- 获取责任护士(使用子查询确保只返回一个值) + (SELECT p."name" + FROM adm_encounter_participant ep + LEFT JOIN adm_practitioner p ON ep.practitioner_id = p.id AND p.delete_flag = '0' + WHERE ep.encounter_id = T2.id + AND ep.type_code = '2' + AND ep.delete_flag = '0' + ORDER BY ep.practitioner_id + LIMIT 1) AS responsibleNurse, + T6.type_code, -- 费别 + T7.status_enum AS surgeryStatusEnum, -- 手术状态 + T8.start_time AS surgeryStartTime, -- 手术开始时间 + T8.end_time AS surgeryEndTime, -- 手术结束时间 + T9.id AS encounterLocationId, -- 就诊位置ID + T9.location_id, -- 床位号 + T11."name" AS caty, -- 入院科室 + T12."name" AS mainDiagnosis -- 主要诊断 + FROM adm_patient AS T1 + INNER JOIN adm_encounter T2 -- 改为INNER JOIN确保患者有就诊记录 + ON T1.id = T2.patient_id -- 患者ID + AND T2.delete_flag = '0' + AND T2.class_enum = '1' -- 仅选择住院患者 + LEFT JOIN adm_encounter_diagnosis T5 + ON T2.id = T5.encounter_id -- 就诊ID + AND T5.maindise_flag = 1 + AND T5.delete_flag = '0' + LEFT JOIN adm_account T6 + ON T2.id = T6.encounter_id -- 就诊ID + AND T6.delete_flag = '0' + LEFT JOIN ( + SELECT + patient_id, + status_enum, + id, + request_id, + ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY id DESC) as rn + FROM cli_procedure + WHERE delete_flag = '0' + ) T7 ON T1.id = T7.patient_id AND T7.rn = 1 + LEFT JOIN ( + SELECT + procedure_id, + start_time, + end_time, + ROW_NUMBER() OVER (PARTITION BY procedure_id ORDER BY id DESC) as rn + FROM cli_procedure_performer + WHERE delete_flag = '0' + ) T8 ON T7.id = T8.procedure_id AND T8.rn = 1 + LEFT JOIN adm_encounter_location T9 + ON T2.id = T9.encounter_id -- 就诊ID + AND T9.form_enum = 8 + AND T9.delete_flag = '0' + LEFT JOIN adm_organization T11 + ON T2.organization_id = T11.id + AND T11.type_enum = 2 + AND T11.delete_flag = '0' + LEFT JOIN cli_condition_definition T12 + ON T5.condition_id = T12.id + AND T12.delete_flag = '0' + WHERE T1.delete_flag = '0' + -- 患者ID + + AND T1.id = #{patientId} + - -- 在科 - - AND T9.status_enum = 2 - + -- 在科 + + AND T9.status_enum = 2 + - -- 待出院 - - AND T2.status_enum = 4 - + -- 待出院 + + AND T2.status_enum = 4 + - -- 危重 - - AND T2.priority_enum = 1 - + -- 危重 + + AND T2.priority_enum = 1 + - -- 手术 - - AND T14.type_code = '3' - - - -- 欠费 - - AND T6.balance_amount < 0 - - - -- 已出院 - - AND T2.status_enum = 5 - - - - AND ( - -- 住院号 - T2.bus_no = #{searchKey} - -- 患者姓名 - OR T1.name like concat('%', #{searchKey}, '%') - -- 责任医生 - OR Doctor.name like concat('%', #{searchKey}, '%') - -- 责任护士 - OR Nurse.name like concat('%', #{searchKey}, '%') + -- 手术 + + AND EXISTS ( + SELECT 1 + FROM wor_service_request_detail wsrd + INNER JOIN wor_service_request wsr ON wsrd.service_req_id = wsr.id + WHERE wsr.encounter_id = T2.id + AND wsrd.type_code = '3' + AND wsr.delete_flag = '0' + AND wsrd.delete_flag = '0' ) - - + - ORDER BY T9.location_id ASC + -- 欠费 + + AND T6.balance_amount < 0 + + + -- 已出院 + + AND T2.status_enum = 5 + + + + AND ( + -- 住院号 + T2.bus_no = #{searchKey} + -- 患者姓名 + OR T1.name like concat('%', #{searchKey}, '%') + -- 责任医生(在子查询中处理) + OR EXISTS ( + SELECT 1 + FROM adm_encounter_participant ep + LEFT JOIN adm_practitioner p ON ep.practitioner_id = p.id AND p.delete_flag = '0' + WHERE ep.encounter_id = T2.id + AND ep.type_code = '9' + AND ep.delete_flag = '0' + AND p."name" like concat('%', #{searchKey}, '%') + ) + -- 责任护士(在子查询中处理) + OR EXISTS ( + SELECT 1 + FROM adm_encounter_participant ep + LEFT JOIN adm_practitioner p ON ep.practitioner_id = p.id AND p.delete_flag = '0' + WHERE ep.encounter_id = T2.id + AND ep.type_code = '2' + AND ep.delete_flag = '0' + AND p."name" like concat('%', #{searchKey}, '%') + ) + ) + + ) patient_base + ) ranked_result + WHERE rn = 1 + ORDER BY location_id ASC diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inpatientmanage/VitalSignsAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inpatientmanage/VitalSignsAppMapper.xml index 9aed0bb4..225d6d1f 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inpatientmanage/VitalSignsAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inpatientmanage/VitalSignsAppMapper.xml @@ -46,7 +46,7 @@ AND T6.delete_flag = '0' LEFT JOIN wor_service_request T7 ON T1.encounter_id = T7.encounter_id - AND T5.base_service_req_id = T7.id + AND T5.request_id = T7.id AND T7.delete_flag = '0' LEFT JOIN wor_service_request_detail T8 ON T7.id = T8.service_req_id diff --git a/openhis-ui-vue3/src/views/basicmanage/implementDepartment/index.vue b/openhis-ui-vue3/src/views/basicmanage/implementDepartment/index.vue index ad3c574a..421bb342 100644 --- a/openhis-ui-vue3/src/views/basicmanage/implementDepartment/index.vue +++ b/openhis-ui-vue3/src/views/basicmanage/implementDepartment/index.vue @@ -236,24 +236,34 @@ const filterNode = (value, data) => { }; // 所有诊疗项目列表 const allImplementDepartmentList = ref([]); -function getAllImplementDepartment() { +async function getAllImplementDepartment() { loading.value = true; - getAllTreatmentList().then((res) => { + try { + const res = await getAllTreatmentList(); allImplementDepartmentList.value = res.data.map((item) => ({ value: item.activityDefinitionId, label: item.activityDefinitionName, })); - // 为所有现有行初始化过滤选项 - catagoryList.value.forEach(row => { - if (!row.hasOwnProperty('filteredOptions')) { - row.filteredOptions = allImplementDepartmentList.value.slice(0, 100); // 限制为前100个 - row.loading = false; - } - }); + // 为所有现有行初始化过滤选项(使用防抖处理,避免频繁更新) + if (catagoryList.value && catagoryList.value.length > 0) { + // 使用 setTimeout 将 DOM 更新推迟到下一个事件循环,避免阻塞 + setTimeout(() => { + catagoryList.value.forEach(row => { + if (!row.hasOwnProperty('filteredOptions')) { + row.filteredOptions = allImplementDepartmentList.value.slice(0, 100); // 限制为前100个 + row.loading = false; + } + }); + }, 0); + } loading.value = false; - }); + } catch (error) { + console.error('获取诊疗项目列表失败:', error); + loading.value = false; + proxy.$message.error('获取诊疗项目列表失败'); + } } /** 选择条数 */ @@ -269,16 +279,30 @@ function handleRemoteQuery(query, row) { row.loading = true; // 模拟异步延迟 setTimeout(() => { - // 过滤选项 - row.filteredOptions = allImplementDepartmentList.value.filter(item => { + // 确保数据已加载 + if (!allImplementDepartmentList.value || allImplementDepartmentList.value.length === 0) { + row.filteredOptions = []; + row.loading = false; + return; + } + + // 过滤选项,限制结果数量以提高性能 + const filtered = allImplementDepartmentList.value.filter(item => { return item.label.toLowerCase().includes(query.toLowerCase()) || item.value.toLowerCase().includes(query.toLowerCase()); }); + + // 限制返回结果数量,避免过多选项导致性能问题 + row.filteredOptions = filtered.slice(0, 100); // 限制为前100个匹配项 row.loading = false; }, 300); // 300ms 延迟,模拟网络请求 } else { // 如果查询为空,显示所有选项(但限制数量以提高性能) - row.filteredOptions = allImplementDepartmentList.value.slice(0, 100); // 限制为前100个 + if (allImplementDepartmentList.value && allImplementDepartmentList.value.length > 0) { + row.filteredOptions = allImplementDepartmentList.value.slice(0, 100); // 限制为前100个 + } else { + row.filteredOptions = []; + } } } @@ -288,6 +312,15 @@ function handleAddItem() { proxy.$message.warning('请先保存当前行后再新增!'); return; } + + // 确保 allImplementDepartmentList 已经初始化 + if (!allImplementDepartmentList.value || allImplementDepartmentList.value.length === 0) { + proxy.$message.warning('正在加载数据,请稍后再试!'); + // 如果数据还未加载完成,尝试重新加载 + getAllImplementDepartment(); + return; + } + const newRow = { startTime: '00:00:00', endTime: '23:59:59', @@ -411,26 +444,28 @@ function continueHandleNodeClick(node) { } /** 目录分类查询 */ -function getDiseaseTreatmentList() { +async function getDiseaseTreatmentList() { loading.value = true; - getDiseaseTreatmentInit().then(({ data }) => { - loading.value = false; + try { + const { data } = await getDiseaseTreatmentInit(); - //分类目录初始化获取 + // 分类目录初始化获取 catagoryDicts.value = data.diagnosisCategoryOptions.sort((a, b) => { return parseInt(a.value) - parseInt(b.value); }); - }); - // 诊疗目录分类查询下拉树结d构 - loading.value = true; - // 诊疗目录分类查询下拉树结d构 - getImplDepartList(); + } catch (error) { + console.error('获取疾病治疗初始化数据失败:', error); + proxy.$message.error('获取分类目录失败'); + } + + // 诊疗目录分类查询下拉树结构 + await getImplDepartList(); + loading.value = false; } // 诊疗目录分类查询下拉树结d构 -function getImplDepartList() { - loading.value = true; - getImplementDepartmentList().then((res) => { - loading.value = false; +async function getImplDepartList() { + try { + const res = await getImplementDepartmentList(); if (res.code === 200) { if (res.data.records.length > 0) { organization.value = res.data.records.map((res) => { @@ -444,13 +479,24 @@ function getImplDepartList() { organization.value = []; } } else { - this.$modal.msgError(res.code); + proxy.$modal.msgError(res.code); } - }); + } catch (error) { + console.error('获取实施部门列表失败:', error); + proxy.$message.error('获取科室信息失败'); + } } -onMounted(() => { - getAllImplementDepartment(); - getDiseaseTreatmentList(); +onMounted(async () => { + try { + // 并行加载数据,提高效率 + await Promise.all([ + getAllImplementDepartment(), + getDiseaseTreatmentList() + ]); + } catch (error) { + console.error('初始化数据加载失败:', error); + proxy.$message.error('数据加载失败,请稍后重试'); + } });