修改心电图显示,多张

This commit is contained in:
Flow 2025-08-26 14:24:11 +08:00
parent 427996cdfb
commit 91fe36aa57

View File

@ -101,14 +101,59 @@
</el-tab-pane>
<el-tab-pane label="心电图" name="ecg">
<div class="ecg-image-container">
<template v-if="selectedPersonData && selectedPersonData.ecgimageurl">
<el-image
:src="selectedPersonData.ecgimageurl"
:preview-src-list="[selectedPersonData.ecgimageurl]"
fit="contain"
class="ecg-image"
:preview-teleported="true"
/>
<template v-if="ecgImages && ecgImages.length > 0">
<!-- 心电图分页导航 -->
<div class="ecg-pagination-header" v-if="ecgImages.length > 1">
<div class="ecg-pagination-info">
{{ currentEcgIndex + 1 }} {{ ecgImages.length }}
</div>
<div class="ecg-pagination-controls">
<el-button
type="primary"
:icon="'el-icon-arrow-left'"
circle
size="small"
:disabled="currentEcgIndex <= 0"
@click="prevEcgImage"
/>
<el-button
type="primary"
:icon="'el-icon-arrow-right'"
circle
size="small"
:disabled="currentEcgIndex >= ecgImages.length - 1"
@click="nextEcgImage"
/>
</div>
</div>
<!-- 心电图显示 -->
<div class="ecg-image-display">
<el-image
:src="ecgImages[currentEcgIndex]"
:preview-src-list="ecgImages"
:initial-index="currentEcgIndex"
fit="contain"
class="ecg-image"
:preview-teleported="true"
/>
</div>
<!-- 心电图缩略图导航 -->
<div class="ecg-thumbnails" v-if="ecgImages.length > 1">
<div
v-for="(image, index) in ecgImages"
:key="index"
class="ecg-thumbnail"
:class="{ 'active': index === currentEcgIndex }"
@click="goToEcgImage(index)"
>
<el-image
:src="image"
fit="cover"
class="thumbnail-image"
/>
<div class="thumbnail-index">{{ index + 1 }}</div>
</div>
</div>
</template>
<template v-else>
<el-empty description="暂无心电图" />
@ -236,6 +281,8 @@ export default {
timeList: [], //
activeTime: '', //
dateFilter: null, //
currentEcgIndex: 0, //
ecgImages: [], //
}
},
computed: {
@ -269,6 +316,8 @@ export default {
this.timeList = []
this.dateFilter = null //
this.doctorMessage = '' //
this.currentEcgIndex = 0 //
this.ecgImages = [] //
//
this.dialogVisible = true
@ -298,6 +347,8 @@ export default {
this.selectedPersonData = null
this.hasData = false
this.activeTime = ''
this.currentEcgIndex = 0 //
this.ecgImages = [] //
},
async loadPersonData() {
try {
@ -315,6 +366,8 @@ export default {
const response = await EcgdataApi.getEcgdataByTime(selectedTime.collecttime, this.selectedPerson.userid)
this.selectedPersonData = response
this.hasData = !!this.selectedPersonData
//
this.processEcgImages()
} catch (error) {
console.error('获取指定时间的心电数据失败:', error)
this.$message.error('获取数据失败')
@ -329,6 +382,8 @@ export default {
this.activeTime = ''
this.selectedPersonData = null
this.hasData = false
this.currentEcgIndex = 0 //
this.ecgImages = [] //
},
//
async sendDoctorNotification() {
@ -500,6 +555,45 @@ export default {
return { times, values }
},
//
processEcgImages() {
this.currentEcgIndex = 0
this.ecgImages = []
if (this.selectedPersonData && this.selectedPersonData.ecgimageurls) {
// URL
if (Array.isArray(this.selectedPersonData.ecgimageurls)) {
this.ecgImages = this.selectedPersonData.ecgimageurls.filter(url => url && url.trim())
}
} else if (this.selectedPersonData && this.selectedPersonData.ecgimageurl) {
// ecgimageurl
if (Array.isArray(this.selectedPersonData.ecgimageurl)) {
this.ecgImages = this.selectedPersonData.ecgimageurl.filter(url => url && url.trim())
} else if (typeof this.selectedPersonData.ecgimageurl === 'string') {
// URL
const urls = this.selectedPersonData.ecgimageurl.split(',').map(url => url.trim()).filter(url => url)
this.ecgImages = urls.length > 0 ? urls : [this.selectedPersonData.ecgimageurl]
}
}
},
//
prevEcgImage() {
if (this.currentEcgIndex > 0) {
this.currentEcgIndex--
}
},
//
nextEcgImage() {
if (this.currentEcgIndex < this.ecgImages.length - 1) {
this.currentEcgIndex++
}
},
//
goToEcgImage(index) {
if (index >= 0 && index < this.ecgImages.length) {
this.currentEcgIndex = index
}
},
}
}
</script>
@ -662,9 +756,38 @@ export default {
.ecg-image-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 300px;
gap: 15px;
}
.ecg-pagination-header {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
padding: 0 20px;
margin-bottom: 10px;
}
.ecg-pagination-info {
font-size: 14px;
color: #606266;
font-weight: 500;
}
.ecg-pagination-controls {
display: flex;
gap: 8px;
}
.ecg-image-display {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
}
.ecg-image {
@ -672,6 +795,62 @@ export default {
max-height: 400px;
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
cursor: pointer;
transition: transform 0.2s ease;
}
.ecg-image:hover {
transform: scale(1.02);
}
.ecg-thumbnails {
display: flex;
justify-content: center;
gap: 10px;
margin-top: 15px;
flex-wrap: wrap;
max-width: 100%;
padding: 0 20px;
}
.ecg-thumbnail {
position: relative;
width: 80px;
height: 60px;
border-radius: 6px;
overflow: hidden;
cursor: pointer;
border: 2px solid transparent;
transition: all 0.3s ease;
}
.ecg-thumbnail:hover {
border-color: #409EFF;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(64, 158, 255, 0.3);
}
.ecg-thumbnail.active {
border-color: #409EFF;
box-shadow: 0 2px 8px rgba(64, 158, 255, 0.4);
}
.thumbnail-image {
width: 100%;
height: 100%;
}
.thumbnail-index {
position: absolute;
top: 2px;
right: 2px;
background: rgba(0, 0, 0, 0.7);
color: white;
font-size: 12px;
padding: 2px 4px;
border-radius: 3px;
min-width: 16px;
text-align: center;
}
.no-ecg-image {