This commit is contained in:
Euni4U 2025-04-15 10:30:50 +08:00
parent 342c33e265
commit d05f0eb2ba

View File

@ -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('加载患者数据失败')
}
}