状态
This commit is contained in:
parent
342c33e265
commit
d05f0eb2ba
@ -754,128 +754,202 @@ const getpatientitemData = async (medicalSn) => {
|
|||||||
// 修改 loadPatientData 函数,确保正确加载已检查患者的医生和日期
|
// 修改 loadPatientData 函数,确保正确加载已检查患者的医生和日期
|
||||||
const loadPatientData = async (patient) => {
|
const loadPatientData = async (patient) => {
|
||||||
try {
|
try {
|
||||||
// 清除缓存
|
const loading = ElLoading.service({
|
||||||
patientDataCache.value.clear()
|
lock: true,
|
||||||
|
text: '加载中...',
|
||||||
|
background: 'rgba(255, 255, 255, 0.7)'
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
// 获取患者基本信息
|
// 获取患者基本信息
|
||||||
const patientInfo = await PatientApi.getPatient(patient.id)
|
const patientData = await PatientApi.getPatient(patient.id)
|
||||||
reportData.value = patientInfo
|
reportData.value = patientData
|
||||||
|
|
||||||
// 获取患者检查项目
|
// 重置检查医生和日期
|
||||||
|
inspectDoctor.value = ''
|
||||||
|
inspectTime.value = ''
|
||||||
|
|
||||||
|
// 检查患者状态,如果已检查则设置检查完成状态为true
|
||||||
|
isExamCompleted.value = patient.status === '1' || patient.status === 1
|
||||||
|
|
||||||
|
// 获取检查项目
|
||||||
const itemsRes = await PatientitemsApi.getPatientitemsPage({
|
const itemsRes = await PatientitemsApi.getPatientitemsPage({
|
||||||
medicalSn: patient.medicalSn,
|
medicalSn: patient.medicalSn,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 100
|
pageSize: 100
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 处理检查项目数据
|
||||||
if (itemsRes.list && itemsRes.list.length > 0) {
|
if (itemsRes.list && itemsRes.list.length > 0) {
|
||||||
// 按科室分类处理项目数据
|
// 按照类别分组
|
||||||
const categorizedItems = {}
|
const groupedItems = {}
|
||||||
itemsRes.list.forEach(item => {
|
|
||||||
const category = getCategoryByItemName(item.itemName)
|
|
||||||
if (!categorizedItems[category]) {
|
|
||||||
categorizedItems[category] = []
|
|
||||||
}
|
|
||||||
categorizedItems[category].push(processItemData(item))
|
|
||||||
})
|
|
||||||
|
|
||||||
// 更新检查项目数据
|
// 根据不同类型的检查项目,加载对应的小结
|
||||||
examItems.value = categorizedItems
|
const conclusions = {
|
||||||
|
general: { summary: '未见异常' },
|
||||||
// 处理超声检查数据
|
ultrasound: { finding: '未见异常', diagnosis: '未见异常' },
|
||||||
const ultrasoundItems = itemsRes.list.filter(item =>
|
ecg: { finding: '详见报告单', diagnosis: '详见报告单' },
|
||||||
item.itemName && (
|
blood: { summary: '' },
|
||||||
item.itemName.includes('超声') ||
|
urine: { summary: '' },
|
||||||
item.itemName.includes('彩超') ||
|
biochemical: { summary: '' }
|
||||||
item.itemName.includes('B超')
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (ultrasoundItems.length > 0) {
|
|
||||||
// 如果有超声检查数据,使用数据库中的值
|
|
||||||
const ultrasoundItem = ultrasoundItems[0]
|
|
||||||
conclusionData.value.ultrasound = {
|
|
||||||
finding: ultrasoundItem.examDescription || '未见异常',
|
|
||||||
diagnosis: ultrasoundItem.itemResult || '未见异常'
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 如果没有超声检查数据,使用默认值
|
|
||||||
conclusionData.value.ultrasound = {
|
|
||||||
finding: '未见异常',
|
|
||||||
diagnosis: '未见异常'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理血压和BMI判断
|
// 查找已检查的项目,获取检查医生和日期
|
||||||
const allItems = Object.values(examItems.value).flat()
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 用于存储异常信息
|
// 用于存储异常信息
|
||||||
let abnormalSummary = []
|
let abnormalSummary = []
|
||||||
|
|
||||||
// 处理BMI项目
|
itemsRes.list.forEach((item) => {
|
||||||
const bmiItem = allItems.find(item =>
|
// 处理项目分类
|
||||||
item.name && item.name.includes('体质指数') && item.name.includes('BMI') &&
|
const category = getCategoryByItemName(item.itemName || '')
|
||||||
item.value
|
|
||||||
)
|
|
||||||
|
|
||||||
if (bmiItem) {
|
if (!groupedItems[category]) {
|
||||||
const bmiValue = parseFloat(bmiItem.value)
|
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 (!isNaN(bmiValue)) {
|
||||||
if (bmiValue < 18.5) {
|
if (bmiValue < 18.5) {
|
||||||
bmiItem.note = '↓'
|
processedItem.note = '↓'
|
||||||
bmiItem.risk = '偏瘦'
|
processedItem.risk = '偏瘦'
|
||||||
bmiItem.status = 'danger'
|
processedItem.status = 'danger'
|
||||||
abnormalSummary.push('【BMI】' + bmiValue + ',偏瘦')
|
abnormalSummary.push('【BMI】' + bmiValue + ',偏瘦')
|
||||||
} else if (bmiValue >= 24) {
|
} else if (bmiValue >= 24) {
|
||||||
bmiItem.note = '↑'
|
processedItem.note = '↑'
|
||||||
bmiItem.risk = '超重'
|
processedItem.risk = '超重'
|
||||||
bmiItem.status = 'danger'
|
processedItem.status = 'danger'
|
||||||
abnormalSummary.push('【BMI】' + bmiValue + ',超重')
|
abnormalSummary.push('【BMI】' + bmiValue + ',超重')
|
||||||
} else {
|
} else {
|
||||||
bmiItem.note = '-'
|
processedItem.note = '-'
|
||||||
bmiItem.risk = '正常'
|
processedItem.risk = '正常'
|
||||||
bmiItem.status = ''
|
processedItem.status = ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理血压项目
|
// 处理血压项目
|
||||||
const bpItem = allItems.find(item =>
|
if (item.itemName && item.itemName.includes('血压') && item.itemResult) {
|
||||||
item.name && item.name.includes('血压') &&
|
const bpMatch = item.itemResult.match(/(\d+)\/(\d+)/)
|
||||||
item.value
|
|
||||||
)
|
|
||||||
|
|
||||||
if (bpItem) {
|
|
||||||
const bpMatch = bpItem.value.match(/(\d+)\/(\d+)/)
|
|
||||||
if (bpMatch) {
|
if (bpMatch) {
|
||||||
const systolic = parseInt(bpMatch[1]) // 收缩压
|
const systolic = parseInt(bpMatch[1]) // 收缩压
|
||||||
const diastolic = parseInt(bpMatch[2]) // 舒张压
|
const diastolic = parseInt(bpMatch[2]) // 舒张压
|
||||||
|
|
||||||
if (!isNaN(systolic) && !isNaN(diastolic)) {
|
if (!isNaN(systolic) && !isNaN(diastolic)) {
|
||||||
if (systolic >= 130 || diastolic >= 85) {
|
if (systolic >= 130 || diastolic >= 85) {
|
||||||
bpItem.note = '↑'
|
processedItem.note = '↑'
|
||||||
bpItem.risk = '血压偏高'
|
processedItem.risk = '血压偏高'
|
||||||
bpItem.status = 'danger'
|
processedItem.status = 'danger'
|
||||||
abnormalSummary.push('【血压】' + bpItem.value + ',偏高')
|
abnormalSummary.push('【血压】' + item.itemResult + ',偏高')
|
||||||
} else {
|
} else {
|
||||||
bpItem.note = '-'
|
processedItem.note = '-'
|
||||||
bpItem.risk = '正常'
|
processedItem.risk = '正常'
|
||||||
bpItem.status = ''
|
processedItem.status = ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// 如果患者状态是待检查且当前小结是"未见异常",则更新小结
|
// 如果患者状态是待检查且当前小结是"未见异常",则更新小结
|
||||||
if (patient.status !== '1' && patient.status !== 1 &&
|
if (patient.status !== '1' && patient.status !== 1 &&
|
||||||
conclusionData.value.general.summary === '未见异常' &&
|
conclusions.general.summary === '未见异常' &&
|
||||||
abnormalSummary.length > 0) {
|
abnormalSummary.length > 0) {
|
||||||
conclusionData.value.general.summary = abnormalSummary.join(';')
|
conclusions.general.summary = abnormalSummary.join(';')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
examItems.value = groupedItems
|
||||||
|
conclusionData.value = conclusions
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增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) {
|
} catch (error) {
|
||||||
console.error('加载患者数据失败:', error)
|
console.error('加载患者数据失败:', error)
|
||||||
message.error('加载患者数据失败')
|
ElMessage.error('加载患者数据失败')
|
||||||
|
} finally {
|
||||||
|
loading.close()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('加载患者数据失败:', error)
|
||||||
|
ElMessage.error('加载患者数据失败')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user