【dicom分割】MPR横截面的普通标记绑定保存时会提示是否切换至二维视图
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2026-08-06 15:16:31 +08:00
parent 653faaf4ba
commit 8315bcf59f
2 changed files with 22 additions and 15 deletions

View File

@ -3723,7 +3723,7 @@ export default {
}) })
this.setToolsPassive() this.setToolsPassive()
}, },
async activeSeries(obj) { async activeSeries(obj, isSave = false) {
if (this.readingTool === 3) { if (this.readingTool === 3) {
let res = await this.changeScreenSave() let res = await this.changeScreenSave()
if (!res) return false if (!res) return false
@ -3735,6 +3735,7 @@ export default {
if (!confirm) return false if (!confirm) return false
this.$refs[`ecrf_${this.taskInfo.VisitTaskId}`][0].removeAllNoSaveAnnotation() this.$refs[`ecrf_${this.taskInfo.VisitTaskId}`][0].removeAllNoSaveAnnotation()
} else { } else {
if (isSave) return false
const confirm = await this.$confirm(this.$t('trials:reading:confirm:changeStack')) const confirm = await this.$confirm(this.$t('trials:reading:confirm:changeStack'))
if (!confirm) return false if (!confirm) return false
} }
@ -4022,7 +4023,7 @@ export default {
} }
let res = await this.openMPRViewport(series) let res = await this.openMPRViewport(series)
if (!res) { if (!res) {
this.$refs[series.TaskInfo.VisitTaskId][0].setSeriesActive(series.StudyIndex, series.SeriesIndex) this.$refs[series.TaskInfo.VisitTaskId][0].setSeriesActive(series.StudyIndex, series.SeriesIndex, true)
setTimeout(async () => { setTimeout(async () => {
const divForDownloadViewport = document.querySelector( const divForDownloadViewport = document.querySelector(
`div[data-viewport-uid="${this.viewportKey}-${this.activeViewportIndex}"]` `div[data-viewport-uid="${this.viewportKey}-${this.activeViewportIndex}"]`
@ -4534,7 +4535,7 @@ export default {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
this.setToolsPassive() this.setToolsPassive()
if (this.isMPR) { if (this.isMPR) {
this.activeSeries(this.$refs[`viewport-MPR-0`][0].series) this.activeSeries(this.$refs[`viewport-MPR-0`][0].series, true)
resolve(false) resolve(false)
if (!data) return resolve(false) if (!data) return resolve(false)
let viewportSeries = this.$refs[`viewport-MPR-0`][0].series let viewportSeries = this.$refs[`viewport-MPR-0`][0].series

View File

@ -14,7 +14,7 @@
<div class="ps"> <div class="ps">
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item v-for="(study, index) in studyList" :key="`${study.StudyId}`" :name="`${study.StudyId}`"> <el-collapse-item v-for="(study, index) in studyList" :key="`${study.StudyId}`" :name="`${study.StudyId}`">
<template slot="title"> <template slot="title">
<div v-if="!study.IsCriticalSequence" class="dicom-desc"> <div v-if="!study.IsCriticalSequence" class="dicom-desc">
<div style="text-overflow: ellipsis;overflow: hidden;"> <div style="text-overflow: ellipsis;overflow: hidden;">
@ -24,7 +24,8 @@
</div> </div>
<div> <div>
<span class="study-meta-line" :title="study.Modalities"> <span class="study-meta-line" :title="study.Modalities">
<span v-if="taskInfo && taskInfo.IsReadingTaskViewInOrder !== 0" class="study-code" :title="study.StudyCode">{{ study.StudyCode }}</span> <span v-if="taskInfo && taskInfo.IsReadingTaskViewInOrder !== 0" class="study-code"
:title="study.StudyCode">{{ study.StudyCode }}</span>
<span class="study-modality">{{ `${study.Modalities}(${study.SeriesCount})` }}</span> <span class="study-modality">{{ `${study.Modalities}(${study.SeriesCount})` }}</span>
<span class="patient-info" v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(study.Modalities)"> <span class="patient-info" v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(study.Modalities)">
<el-popover placement="right-start" trigger="hover" popper-class="patient-info-popper"> <el-popover placement="right-start" trigger="hover" popper-class="patient-info-popper">
@ -81,8 +82,7 @@
style="position: absolute;right: 0;top: 0;"> style="position: absolute;right: 0;top: 0;">
<el-popover placement="right" trigger="hover" popper-class="instance_frame_wrapper"> <el-popover placement="right" trigger="hover" popper-class="instance_frame_wrapper">
<div class="frame_list"> <div class="frame_list">
<div v-for="(instance, idx) in series.InstanceInfoList" :key="instance.Id" <div v-for="(instance, idx) in series.InstanceInfoList" :key="instance.Id" class="frame_content"
class="frame_content"
:class="{ 'frame_content_active': activeInstanceId === instance.Id }" :class="{ 'frame_content_active': activeInstanceId === instance.Id }"
:style="{ 'margin-bottom': idx < series.InstanceInfoList.length - 1 ? '5px' : '0px' }" :style="{ 'margin-bottom': idx < series.InstanceInfoList.length - 1 ? '5px' : '0px' }"
@click.stop="showMultiFrames(index, series, i, instance)"> @click.stop="showMultiFrames(index, series, i, instance)">
@ -130,7 +130,7 @@
</div> </div>
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
@ -205,18 +205,19 @@ export default {
this.activeStudyIndex = studyIndex this.activeStudyIndex = studyIndex
this.activeSeriesIndex = seriesIndex this.activeSeriesIndex = seriesIndex
this.activeInstanceId = null this.activeInstanceId = null
}, },
activeStudy(id) { activeStudy(id) {
console.log('activeStudy') console.log('activeStudy')
if (this.activeNames.indexOf(id) > -1) return if (this.activeNames.indexOf(id) > -1) return
this.activeNames.push(id) this.activeNames.push(id)
}, },
setSeriesActive(studyIndex, seriesIndex) { setSeriesActive(studyIndex, seriesIndex, isSave = false) {
this.activeStudyIndex = studyIndex this.activeStudyIndex = studyIndex
this.activeSeriesIndex = seriesIndex this.activeSeriesIndex = seriesIndex
const studyId = this.studyList[studyIndex].StudyId const studyId = this.studyList[studyIndex].StudyId
if (!studyId) return if (!studyId) return
this.activeStudy(studyId) this.activeStudy(studyId)
if (isSave) return false
DicomEvent.$emit('activeSeries', this.studyList[studyIndex].SeriesList[this.activeSeriesIndex]) DicomEvent.$emit('activeSeries', this.studyList[studyIndex].SeriesList[this.activeSeriesIndex])
}, },
showMultiFrames(studyIndex, series, seriesIndex, instance) { showMultiFrames(studyIndex, series, seriesIndex, instance) {
@ -482,25 +483,29 @@ export default {
<style lang="scss"> <style lang="scss">
.study-wrapper { .study-wrapper {
.instance_frame_wrapper{ .instance_frame_wrapper {
min-width: 120px; min-width: 120px;
background-color: #2c2c2c; background-color: #2c2c2c;
border: 1px solid #2c2c2c; border: 1px solid #2c2c2c;
padding: 5px; padding: 5px;
} }
.frame_list{
.frame_list {
max-height: 500px; max-height: 500px;
overflow-y: auto; overflow-y: auto;
} }
.instance_frame_wrapper ::-webkit-scrollbar { .instance_frame_wrapper ::-webkit-scrollbar {
width: 7px; width: 7px;
height: 7px; height: 7px;
} }
.instance_frame_wrapper ::-webkit-scrollbar-thumb {
.instance_frame_wrapper ::-webkit-scrollbar-thumb {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;
} }
.frame_content{
.frame_content {
height: 50px; height: 50px;
padding: 5px; padding: 5px;
display: flex; display: flex;
@ -509,6 +514,7 @@ export default {
font-size: 12px; font-size: 12px;
border: 1px solid #404040; border: 1px solid #404040;
} }
.frame_content:hover { .frame_content:hover {
/* font-weight: bold; */ /* font-weight: bold; */
/* box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); */ /* box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); */
@ -517,10 +523,10 @@ export default {
border-color: #213a54 !important; border-color: #213a54 !important;
background-color: #213a54; background-color: #213a54;
} }
.frame_content_active { .frame_content_active {
border-color: #213a54 !important; border-color: #213a54 !important;
background-color: #213a54; background-color: #213a54;
} }
} }
</style> </style>