修改逻辑

This commit is contained in:
Euni4U 2025-03-18 15:48:41 +08:00
parent caeba8c1c3
commit c00c53a596
4 changed files with 168 additions and 93 deletions

View File

@ -103,5 +103,9 @@ export const PatientApi = {
//获取体检报告 //获取体检报告
getReportAll: async (medicalSn: string) => { getReportAll: async (medicalSn: string) => {
return await request.get({ url: `/inspect/patient/getReportAll?medicalSn=` + medicalSn }) return await request.get({ url: `/inspect/patient/getReportAll?medicalSn=` + medicalSn })
},
// 保存汇总结果
updatemedicalSn: async (data: PatientVO) => {
return await request.put({ url: `/inspect/patient/updatesummary`, data })
} }
} }

View File

@ -221,7 +221,7 @@ const openPdfInNewTab = (url) => {
</style> </style>
</head> </head>
<body> <body>
<iframe src="${url}"></iframe> <iframe src="${url}+#toolbar=0&navpanes=0&view=Fit"></iframe>
</body> </body>
</html> </html>
`) `)

View File

@ -405,7 +405,7 @@ const examTabs = ref([
]) ])
const currentTab = ref('general') const currentTab = ref('general')
const summaryRef = ref(null)
// //
const examItems = ref({}) const examItems = ref({})
@ -1551,9 +1551,11 @@ const validateAllResults = () => {
// //
const handleSaveAllResults = async () => { const handleSaveAllResults = async () => {
if (!checkEditPermission()) return if (!checkEditPermission()) return
// //
if (!validateAllResults()) return if (!validateAllResults()) return
// //
@ -1702,6 +1704,20 @@ const handleSaveAllResults = async () => {
} catch (error) { } catch (error) {
ElMessage.error(`保存失败: ${error.message || '请检查数据是否完整'}`) ElMessage.error(`保存失败: ${error.message || '请检查数据是否完整'}`)
} }
//
const result = await handleSummarySave()
if (!result) return
}
//
const handleSummarySave = async () => {
//
if (summaryRef.value) {
await summaryRef.value.saveSummary()
ElMessage.success('汇总数据保存成功')
} else {
throw new Error('未找到汇总组件')
}
} }
// refreshExamData // refreshExamData

View File

@ -22,6 +22,7 @@
class="summary-textarea" class="summary-textarea"
v-model="editableSummary" v-model="editableSummary"
placeholder="请输入体检汇总内容" placeholder="请输入体检汇总内容"
:readonly="isReadOnly"
></textarea> ></textarea>
</div> </div>
</div> </div>
@ -66,55 +67,67 @@ const summaryData = ref({
// //
const editableSummary = ref('') const editableSummary = ref('')
//
const isReadOnly = ref(false)
//
const checkPatientStatus = () => {
if (props.patient && props.patient.status) {
// 2
isReadOnly.value = props.patient.status === 2
console.log('患者状态:', props.patient.status, '只读模式:', isReadOnly.value)
}
}
// //
const formatSummaryData = () => { const formatSummaryData = () => {
let result = ''; let result = ''
// //
if (summaryData.value.general?.summary) { if (summaryData.value.general?.summary) {
result += '【一般检查】\n' + summaryData.value.general.summary + '\n\n'; result += '【一般检查】\n' + summaryData.value.general.summary + '\n\n'
} }
// //
if (summaryData.value.ultrasound?.finding || summaryData.value.ultrasound?.diagnosis) { if (summaryData.value.ultrasound?.finding || summaryData.value.ultrasound?.diagnosis) {
result += '【超声】\n'; result += '【超声】\n'
if (summaryData.value.ultrasound.finding) { if (summaryData.value.ultrasound.finding) {
result += '检查所见:' + summaryData.value.ultrasound.finding + '\n'; result += '检查所见:' + summaryData.value.ultrasound.finding + '\n'
} }
if (summaryData.value.ultrasound.diagnosis) { if (summaryData.value.ultrasound.diagnosis) {
result += '检查结果:' + summaryData.value.ultrasound.diagnosis + '\n'; result += '检查结果:' + summaryData.value.ultrasound.diagnosis + '\n'
} }
result += '\n'; result += '\n'
} }
// //
if (summaryData.value.ecg?.finding || summaryData.value.ecg?.diagnosis) { if (summaryData.value.ecg?.finding || summaryData.value.ecg?.diagnosis) {
result += '【心电图】\n'; result += '【心电图】\n'
if (summaryData.value.ecg.finding) { if (summaryData.value.ecg.finding) {
result += '检查所见:' + summaryData.value.ecg.finding + '\n'; result += '检查所见:' + summaryData.value.ecg.finding + '\n'
} }
if (summaryData.value.ecg.diagnosis) { if (summaryData.value.ecg.diagnosis) {
result += '检查结果:' + summaryData.value.ecg.diagnosis + '\n'; result += '检查结果:' + summaryData.value.ecg.diagnosis + '\n'
} }
result += '\n'; result += '\n'
} }
// //
if (summaryData.value.blood?.summary) { if (summaryData.value.blood?.summary) {
result += '【血常规】\n' + summaryData.value.blood.summary + '\n\n'; result += '【血常规】\n' + summaryData.value.blood.summary + '\n\n'
} }
// 尿 // 尿
if (summaryData.value.urine?.summary) { if (summaryData.value.urine?.summary) {
result += '【尿常规】\n' + summaryData.value.urine.summary + '\n\n'; result += '【尿常规】\n' + summaryData.value.urine.summary + '\n\n'
} }
// //
if (summaryData.value.biochemical?.summary) { if (summaryData.value.biochemical?.summary) {
result += '【生化】\n' + summaryData.value.biochemical.summary + '\n\n'; result += '【生化】\n' + summaryData.value.biochemical.summary + '\n\n'
} }
return result; return result
} }
// DOM // DOM
@ -126,11 +139,7 @@ const getDataFromDOM = () => {
// //
const selectors = { const selectors = {
general: [ general: ['[data-tab="general"] .summary-textarea', '#体检小结', '[placeholder*="体检小结"]'],
'[data-tab="general"] .summary-textarea',
'#体检小结',
'[placeholder*="体检小结"]'
],
ultrasoundFinding: [ ultrasoundFinding: [
'[data-tab="ultrasound"] .findings-textarea', '[data-tab="ultrasound"] .findings-textarea',
'[data-tab="ultrasound-finding"]' '[data-tab="ultrasound-finding"]'
@ -139,14 +148,8 @@ const getDataFromDOM = () => {
'[data-tab="ultrasound"] .diagnosis-textarea', '[data-tab="ultrasound"] .diagnosis-textarea',
'[data-tab="ultrasound-diagnosis"]' '[data-tab="ultrasound-diagnosis"]'
], ],
ecgFinding: [ ecgFinding: ['[data-tab="ecg"] .findings-textarea', '[data-tab="ecg-finding"]'],
'[data-tab="ecg"] .findings-textarea', ecgDiagnosis: ['[data-tab="ecg"] .diagnosis-textarea', '[data-tab="ecg-diagnosis"]'],
'[data-tab="ecg-finding"]'
],
ecgDiagnosis: [
'[data-tab="ecg"] .diagnosis-textarea',
'[data-tab="ecg-diagnosis"]'
],
blood: ['[data-tab="blood"] .summary-textarea'], blood: ['[data-tab="blood"] .summary-textarea'],
urine: ['[data-tab="urine"] .summary-textarea'], urine: ['[data-tab="urine"] .summary-textarea'],
biochemical: ['[data-tab="biochemical"] .summary-textarea'] biochemical: ['[data-tab="biochemical"] .summary-textarea']
@ -187,7 +190,8 @@ const getDataFromDOM = () => {
// //
if (!generalSummary) { if (!generalSummary) {
console.log('尝试从体检小结文本框获取数据...') console.log('尝试从体检小结文本框获取数据...')
const generalTextarea = parentDoc.querySelector('#体检小结') || const generalTextarea =
parentDoc.querySelector('#体检小结') ||
parentDoc.querySelector('.体检小结') || parentDoc.querySelector('.体检小结') ||
parentDoc.querySelector('[placeholder*="体检小结"]') parentDoc.querySelector('[placeholder*="体检小结"]')
@ -240,6 +244,9 @@ const loadPatientItems = async () => {
console.log('当前患者信息:', props.patient) console.log('当前患者信息:', props.patient)
//
checkPatientStatus()
// 使propsconclusionData // 使propsconclusionData
if (props.conclusionData) { if (props.conclusionData) {
console.log('从props获取conclusionData:', props.conclusionData) console.log('从props获取conclusionData:', props.conclusionData)
@ -311,11 +318,16 @@ const loadPatientItems = async () => {
} }
} }
const saving = ref(false)
// PatientApisummaryResult // PatientApisummaryResult
const saveSummary = async () => { const saveSummary = async () => {
if (!editableSummary.value) {
ElMessage.warning('体检汇总内容为空,请检查汇总内容')
return false
}
if (!props.patient || !props.patient.medicalSn) { if (!props.patient || !props.patient.medicalSn) {
ElMessage.warning('患者信息不完整,无法保存汇总数据') ElMessage.warning('患者信息不完整,无法保存汇总数据')
return return false
} }
try { try {
@ -330,35 +342,72 @@ const saveSummary = async () => {
console.log('保存汇总数据:', saveData) console.log('保存汇总数据:', saveData)
// API // API
const response = await PatientApi.updateSummaryResult(saveData) const response = await PatientApi.updatemedicalSn(saveData)
if (response && response.code === 200) { if (response && response.code === 200) {
ElMessage.success('体检汇总保存成功') ElMessage.success('体检汇总保存成功')
// //
emit('save-summary', editableSummary.value) await queryPatientData()
// //
if (window.parent && typeof window.parent.handleSaveAllResults === 'function') { checkPatientStatus()
try {
window.parent.handleSaveAllResults() return true
} catch (err) {
console.log('调用父窗口保存方法失败:', err)
}
}
} else {
ElMessage.error('保存失败: ' + (response?.message || '未知错误'))
} }
return false
} catch (error) { } catch (error) {
console.error('保存汇总数据失败:', error) console.error('保存汇总数据失败:', error)
ElMessage.error('保存汇总数据失败: ' + error.message) ElMessage.error('保存汇总数据失败: ' + error.message)
return false
} finally { } finally {
saving.value = false saving.value = false
} }
} }
// onMounted //
// loadPatientItems const queryPatientData = async () => {
if (!props.patient || !props.patient.medicalSn) {
return
}
try {
const response = await PatientApi.getByMedicalSn(props.patient.medicalSn)
if (response && response.code === 200 && response.data) {
console.log('查询到的患者数据:', response.data)
//
if (response.data.summaryResult) {
editableSummary.value = response.data.summaryResult
}
//
if (response.data.status) {
isReadOnly.value = response.data.status === 2
console.log('更新后的患者状态:', response.data.status, '只读模式:', isReadOnly.value)
}
}
} catch (error) {
console.error('查询患者数据失败:', error)
}
}
//
onMounted(() => {
loadPatientItems()
checkPatientStatus()
})
//
watch(() => props.patient, (newVal) => {
if (newVal && newVal.medicalSn) {
loadPatientItems()
checkPatientStatus()
}
}, { deep: true })
//
defineExpose({ saveSummary })
</script> </script>
<style scoped> <style scoped>
@ -428,4 +477,10 @@ const saveSummary = async () => {
.refresh-button { .refresh-button {
margin-left: 10px; margin-left: 10px;
} }
.summary-textarea[readonly] {
background-color: #f5f7fa;
cursor: not-allowed;
opacity: 0.9;
}
</style> </style>