diff --git a/src/views/Department-entry/Medical-examination-vehicle.vue b/src/views/Department-entry/Medical-examination-vehicle.vue index 7e65e0d..5a8e1d7 100644 --- a/src/views/Department-entry/Medical-examination-vehicle.vue +++ b/src/views/Department-entry/Medical-examination-vehicle.vue @@ -754,128 +754,202 @@ const getpatientitemData = async (medicalSn) => { // 修改 loadPatientData 函数,确保正确加载已检查患者的医生和日期 const loadPatientData = async (patient) => { try { - // 清除缓存 - patientDataCache.value.clear() - - // 获取患者基本信息 - const patientInfo = await PatientApi.getPatient(patient.id) - reportData.value = patientInfo - - // 获取患者检查项目 - const itemsRes = await PatientitemsApi.getPatientitemsPage({ - medicalSn: patient.medicalSn, - pageNo: 1, - pageSize: 100 + const loading = ElLoading.service({ + lock: true, + text: '加载中...', + background: 'rgba(255, 255, 255, 0.7)' }) - - if (itemsRes.list && itemsRes.list.length > 0) { - // 按科室分类处理项目数据 - const categorizedItems = {} - itemsRes.list.forEach(item => { - const category = getCategoryByItemName(item.itemName) - if (!categorizedItems[category]) { - categorizedItems[category] = [] - } - categorizedItems[category].push(processItemData(item)) + + try { + // 获取患者基本信息 + const patientData = await PatientApi.getPatient(patient.id) + reportData.value = patientData + + // 重置检查医生和日期 + inspectDoctor.value = '' + inspectTime.value = '' + + // 检查患者状态,如果已检查则设置检查完成状态为true + isExamCompleted.value = patient.status === '1' || patient.status === 1 + + // 获取检查项目 + const itemsRes = await PatientitemsApi.getPatientitemsPage({ + medicalSn: patient.medicalSn, + pageNo: 1, + pageSize: 100 }) - - // 更新检查项目数据 - examItems.value = categorizedItems - - // 处理超声检查数据 - const ultrasoundItems = itemsRes.list.filter(item => - item.itemName && ( - item.itemName.includes('超声') || - item.itemName.includes('彩超') || - item.itemName.includes('B超') - ) - ) - - if (ultrasoundItems.length > 0) { - // 如果有超声检查数据,使用数据库中的值 - const ultrasoundItem = ultrasoundItems[0] - conclusionData.value.ultrasound = { - finding: ultrasoundItem.examDescription || '未见异常', - diagnosis: ultrasoundItem.itemResult || '未见异常' + + // 处理检查项目数据 + if (itemsRes.list && itemsRes.list.length > 0) { + // 按照类别分组 + const groupedItems = {} + + // 根据不同类型的检查项目,加载对应的小结 + const conclusions = { + general: { summary: '未见异常' }, + ultrasound: { finding: '未见异常', diagnosis: '未见异常' }, + ecg: { finding: '详见报告单', diagnosis: '详见报告单' }, + blood: { summary: '' }, + urine: { summary: '' }, + biochemical: { summary: '' } } - } else { - // 如果没有超声检查数据,使用默认值 - conclusionData.value.ultrasound = { - finding: '未见异常', - diagnosis: '未见异常' - } - } - - // 处理血压和BMI判断 - const allItems = Object.values(examItems.value).flat() - - // 用于存储异常信息 - let abnormalSummary = [] - - // 处理BMI项目 - const bmiItem = allItems.find(item => - item.name && item.name.includes('体质指数') && item.name.includes('BMI') && - item.value - ) - - if (bmiItem) { - const bmiValue = parseFloat(bmiItem.value) - if (!isNaN(bmiValue)) { - if (bmiValue < 18.5) { - bmiItem.note = '↓' - bmiItem.risk = '偏瘦' - bmiItem.status = 'danger' - abnormalSummary.push('【BMI】' + bmiValue + ',偏瘦') - } else if (bmiValue >= 24) { - bmiItem.note = '↑' - bmiItem.risk = '超重' - bmiItem.status = 'danger' - abnormalSummary.push('【BMI】' + bmiValue + ',超重') - } else { - bmiItem.note = '-' - bmiItem.risk = '正常' - bmiItem.status = '' + + // 查找已检查的项目,获取检查医生和日期 + const checkedItems = itemsRes.list.filter((item) => item.itemStatus === '1') + + if (checkedItems.length > 0) { + // 使用第一个已检查项目的检查医生和日期 + const firstCheckedItem = checkedItems[0] + + // 设置检查医生 + if (firstCheckedItem.inspectdoctor) { + inspectDoctor.value = firstCheckedItem.inspectdoctor + } + + // 格式化检查时间 + if (firstCheckedItem.inspecttime) { + const inspectDate = new Date(Number(firstCheckedItem.inspecttime)) + inspectTime.value = formatDate(inspectDate) } } - } - - // 处理血压项目 - const bpItem = allItems.find(item => - item.name && item.name.includes('血压') && - item.value - ) - - if (bpItem) { - const bpMatch = bpItem.value.match(/(\d+)\/(\d+)/) - if (bpMatch) { - const systolic = parseInt(bpMatch[1]) // 收缩压 - const diastolic = parseInt(bpMatch[2]) // 舒张压 - - if (!isNaN(systolic) && !isNaN(diastolic)) { - if (systolic >= 130 || diastolic >= 85) { - bpItem.note = '↑' - bpItem.risk = '血压偏高' - bpItem.status = 'danger' - abnormalSummary.push('【血压】' + bpItem.value + ',偏高') - } else { - bpItem.note = '-' - bpItem.risk = '正常' - bpItem.status = '' + + // 用于存储异常信息 + let abnormalSummary = [] + + itemsRes.list.forEach((item) => { + // 处理项目分类 + const category = getCategoryByItemName(item.itemName || '') + + if (!groupedItems[category]) { + groupedItems[category] = [] + } + + // 处理项目数据 + const processedItem = processItemData(item) + groupedItems[category].push(processedItem) + + // 处理小结数据 + processConclusion(item, category, conclusions) + + // 处理BMI项目 + if (item.itemName && item.itemName.includes('体质指数') && item.itemName.includes('BMI') && item.itemResult) { + const bmiValue = parseFloat(item.itemResult) + if (!isNaN(bmiValue)) { + if (bmiValue < 18.5) { + processedItem.note = '↓' + processedItem.risk = '偏瘦' + processedItem.status = 'danger' + abnormalSummary.push('【BMI】' + bmiValue + ',偏瘦') + } else if (bmiValue >= 24) { + processedItem.note = '↑' + processedItem.risk = '超重' + processedItem.status = 'danger' + abnormalSummary.push('【BMI】' + bmiValue + ',超重') + } else { + processedItem.note = '-' + processedItem.risk = '正常' + processedItem.status = '' + } } } + + // 处理血压项目 + if (item.itemName && item.itemName.includes('血压') && item.itemResult) { + const bpMatch = item.itemResult.match(/(\d+)\/(\d+)/) + if (bpMatch) { + const systolic = parseInt(bpMatch[1]) // 收缩压 + const diastolic = parseInt(bpMatch[2]) // 舒张压 + + if (!isNaN(systolic) && !isNaN(diastolic)) { + if (systolic >= 130 || diastolic >= 85) { + processedItem.note = '↑' + processedItem.risk = '血压偏高' + processedItem.status = 'danger' + abnormalSummary.push('【血压】' + item.itemResult + ',偏高') + } else { + processedItem.note = '-' + processedItem.risk = '正常' + processedItem.status = '' + } + } + } + } + }) + + // 如果患者状态是待检查且当前小结是"未见异常",则更新小结 + if (patient.status !== '1' && patient.status !== 1 && + conclusions.general.summary === '未见异常' && + abnormalSummary.length > 0) { + conclusions.general.summary = abnormalSummary.join(';') } + + examItems.value = groupedItems + conclusionData.value = conclusions } - - // 如果患者状态是待检查且当前小结是"未见异常",则更新小结 - if (patient.status !== '1' && patient.status !== 1 && - conclusionData.value.general.summary === '未见异常' && - abnormalSummary.length > 0) { - conclusionData.value.general.summary = abnormalSummary.join(';') + + // 新增PACS数据获取 + try { + // 直接获取所有PACS数据 + const res = await PacsDataApi.getPacsDataDetail(patient.medicalSn) + + if (res && res.length > 0) { + // 按type分组处理数据 + const typeGroups = {} + + // 遍历所有返回的数据,按type分组 + res.forEach((item) => { + if (item.type && item.item) { + if (!typeGroups[item.type]) { + typeGroups[item.type] = [] + } + typeGroups[item.type].push(item.item) + } + }) + // 处理不同类型的数据到对应标签页 + // 类型映射关系 + const typeToTabMapping = { + cbc: 'blood', // 血常规 + rt: 'urine', // 尿常规 + bt: 'biochemical' // 生化 + } + + // 遍历所有类型组 + Object.entries(typeGroups).forEach(([type, items]) => { + // 转换为小写以便匹配 + const lowerType = type.toLowerCase() + // 获取对应的标签页 + const tabKey = typeToTabMapping[lowerType] + + if (tabKey) { + // 将该类型的所有项目合并 + const combinedData = items.join(';') + // 其他类型直接赋值到summary + conclusionData.value[tabKey].summary = combinedData + // 更新对应检查项目 + if (examItems.value[tabKey]) { + examItems.value[tabKey].forEach((item) => { + // 根据项目名称匹配 + if (item.name.toLowerCase().includes(tabKey)) { + item.value = combinedData + item.itemStatus = '1' // 设置为已检查状态 + } + }) + } + } + }) + } + } catch (error) { + console.error('获取PACS数据失败:', error) } + } catch (error) { + console.error('加载患者数据失败:', error) + ElMessage.error('加载患者数据失败') + } finally { + loading.close() } } catch (error) { console.error('加载患者数据失败:', error) - message.error('加载患者数据失败') + ElMessage.error('加载患者数据失败') } }