多帧图像预览更改;数据同步检查列表补充排序字段
continuous-integration/drone/push Build is passing Details

main
caiyiling 2026-05-26 09:40:04 +08:00
parent 31d0872653
commit a30fd58d79
3 changed files with 155 additions and 33 deletions

View File

@ -53,6 +53,7 @@
<div class="frame_list">
<div v-for="(instance, idx) in item.instanceInfoList" :key="instance.Id"
class="frame_content"
:class="{ 'frame_content_active': activeInstanceId === instance.Id }"
:style="{ 'margin-bottom': idx < item.instanceInfoList.length - 1 ? '5px' : '0px' }"
@click="showMultiFrames(item, index, instance)">
<div>
@ -72,17 +73,17 @@
</div>
</div>
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;"
@click="popperClick(seriesList, item)" />
@click.stop="popperClick(seriesList, item)" />
</el-popover>
</div>
</div>
<div v-show="item.instanceCount" style="padding: 1px;">
<div v-if="item.instanceCount" style="padding: 1px;">
{{ item.modality }}: {{ item.instanceCount }} image
</div>
<div v-show="!item.keySeries && item.sliceThickness" style="padding: 1px;">
<div v-if="!item.keySeries && item.sliceThickness" style="padding: 1px;">
T: {{ parseFloat(item.sliceThickness).toFixed(2) }}
</div>
<div v-show="!item.keySeries && item.description"
<div v-if="!item.keySeries && item.description"
style="width: 120px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding: 1x;">
{{ item.description }}
</div>
@ -203,7 +204,8 @@ export default {
isReading: null,
activeSeriesId: null,
isPacs: false,
isComparison: false
isComparison: false,
activeInstanceId: null
}
},
created: function () {
@ -536,6 +538,7 @@ export default {
showSeriesImage(e, seriesIndex, series) {
if (this.isComparison) return false
this.activeSeriesId = series.seriesId
this.activeInstanceId = null
workSpeedclose(true)
// if (seriesIndex === this.currentSeriesIndex) return
const element = e.currentTarget
@ -584,6 +587,7 @@ export default {
},
showMultiFrames(series, seriesIndex, instanceInfo) {
this.currentSeriesIndex = seriesIndex
this.activeInstanceId = instanceInfo.Id
const imageIds = []
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
@ -1193,6 +1197,10 @@ export default {
border-color: #213a54 !important;
background-color: #213a54;
}
.frame_content_active {
border-color: #213a54 !important;
background-color: #213a54;
}
/* .viewerRightSidePanel {
width: 300px;

View File

@ -19,25 +19,26 @@
<el-collapse-item v-for="(study, index) in studyList" :key="`${study.StudyId}`"
:name="`${study.StudyId}`">
<template slot="title">
<div class="text-desc">
{{ study.StudyCode }}
</div>
<div class="collapse-title-wrapper">
<div class="text-desc">
{{ study.StudyCode }}
</div>
<!-- <div v-show="study.Description" class="text-desc">
{{ study.Description }}
</div> -->
<el-tooltip v-show="study.Description" class="item" effect="dark" :content="study.Description"
<!-- <el-tooltip v-show="study.Description" class="item" effect="dark" :content="study.Description"
placement="bottom">
<div v-show="study.Description"
<div v-if="study.Description"
style="width: 50px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding: 1x;">
{{ study.Description }}
</div>
</el-tooltip>
<div v-show="study.SeriesCount" class="text-desc">
{{ study.Modalities }} : {{ study.SeriesCount }} Series
</el-tooltip> -->
<div v-if="study.SeriesCount" class="text-desc collapse-title-extra">
{{ study.Modalities }} : {{ study.SeriesCount }} Series
</div>
</div>
</template>
<div v-show="study.Description" class="text-desc" style="background-color: #1f1f1f;">
<div v-if="study.Description" class="text-desc" style="background-color: #1f1f1f;">
{{ study.Description }}
</div>
<div v-for="(series, i) in study.SeriesList" :key="i"
@ -65,6 +66,7 @@
<div class="frame_list">
<div v-for="(instance, idx) in series.instanceInfoList" :key="instance.Id"
class="frame_content"
:class="{ 'frame_content_active': activeInstanceId === instance.Id }"
:style="{ 'margin-bottom': idx < series.instanceInfoList.length - 1 ? '5px' : '0px' }"
@click="showMultiFrames(index, series, i, instance)">
<!-- <div>
@ -97,7 +99,7 @@
</div>
<i slot="reference" class="el-icon-connection"
style="font-size: 15px;cursor: pointer;"
@click="popperClick(studyList, series)" />
@click.stop="popperClick(studyList, series)" />
</el-popover>
</div>
@ -166,16 +168,17 @@
<el-collapse-item :key="`${study.StudyId}`" :name="`${study.StudyId}`"
v-if="study.VisitName === item.VisitName">
<template slot="title">
<div class="text-desc">
{{ study.StudyCode }}
</div>
<div class="collapse-title-wrapper">
<div class="text-desc">
{{ study.StudyCode }}
</div>
<!-- <div v-show="study.Description" class="text-desc">
{{ study.Description }}
</div> -->
<div v-show="study.SeriesCount" class="text-desc">
{{ study.Modalities }} : {{ study.SeriesCount }} Series
<div v-show="study.SeriesCount" class="text-desc collapse-title-extra">
{{ study.Modalities }} : {{ study.SeriesCount }} Series
</div>
</div>
</template>
<div v-show="study.Description" class="text-desc" style="background-color: #1f1f1f;">
@ -207,6 +210,7 @@
<div class="frame_list">
<div v-for="(instance, idx) in seriesItem.instanceInfoList"
:key="instance.Id" class="frame_content"
:class="{ 'frame_content_active': activeInstanceId === instance.Id }"
:style="{ 'margin-bottom': idx < seriesItem.instanceInfoList.length - 1 ? '5px' : '0px' }"
@click="showMultiFrames(studyIndex, seriesItem, index, instance)">
<div>
@ -327,7 +331,8 @@ export default {
isFromCRCUpload: false,
visitTaskId: null,
page: '',
activeSeriesId: null
activeSeriesId: null,
activeInstanceId: null
}
},
mounted() {
@ -522,6 +527,7 @@ export default {
},
showSeriesImage(e, studyIndex, seriesIndex, series) {
this.activeSeriesId = series.seriesId
this.activeInstanceId = null
workSpeedclose(true)
const element = e.currentTarget
const elements = document.querySelectorAll('[series-type]')
@ -563,6 +569,7 @@ export default {
},
showMultiFrames(studyIndex, series, seriesIndex, instanceInfo) {
this.currentSeriesIndex = seriesIndex
this.activeInstanceId = instanceInfo.Id
const imageIds = []
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
@ -886,6 +893,7 @@ export default {
},
showRelationSeriesImage(e, series, studyIndex, index) {
this.activeSeriesId = series.seriesId
this.activeInstanceId = null
workSpeedclose(true)
this.currentRelationIndex = index
const element = e.currentTarget
@ -1105,6 +1113,7 @@ export default {
padding: 0;
margin-right: 2px;
color: #D0D0D0;
overflow-x: hidden;
overflow-y: auto;
}
@ -1113,6 +1122,8 @@ export default {
word-break: break-all;
display: table;
width: 100%;
box-sizing: border-box;
overflow-x: hidden;
border: 1px solid #3e3f3a;
}
@ -1219,12 +1230,24 @@ export default {
.viewerContainer .el-collapse {
border: none;
width: 100%;
min-width: 0;
box-sizing: border-box;
overflow-x: hidden;
}
.viewerContainer .el-collapse-item {
background-color: #585453 !important;
color: #ddd;
width: 100%;
min-width: 0;
box-sizing: border-box;
}
.viewerContainer .el-collapse-item__wrap {
width: 100%;
min-width: 0;
box-sizing: border-box;
}
.viewerContainer .el-collapse-item__content {
@ -1237,9 +1260,42 @@ export default {
background-color: #585453 !important;
color: #ddd;
border-bottom-color: #5a5a5a;
width: 100%;
min-width: 0;
box-sizing: border-box;
padding-left: 5px;
height: 40px;
height: auto;
min-height: 30px;
line-height: 20px;
align-items: flex-start;
padding-top: 4px;
padding-bottom: 4px;
}
.viewerContainer .collapse-title-wrapper {
display: flex;
flex: 1;
min-width: 0;
flex-wrap: wrap;
align-items: center;
column-gap: 6px;
row-gap: 2px;
line-height: 16px;
padding-right: 8px;
}
.viewerContainer .collapse-title-wrapper .text-desc {
flex: 0 1 auto;
min-width: 0;
max-width: 100%;
white-space: normal;
word-break: break-word;
overflow-wrap: anywhere;
}
.viewerContainer .collapse-title-wrapper .collapse-title-extra {
flex: 0 1 auto;
text-align: left;
}
.instance_frame_wrapper {
@ -1282,6 +1338,10 @@ export default {
border-color: #213a54 !important;
background-color: #213a54;
}
.frame_content_active {
border-color: #213a54 !important;
background-color: #213a54;
}
/* .viewerRightSidePanel {
width: 300px;

View File

@ -90,15 +90,69 @@
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 60 }" height="100" :data="list"
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
<el-table-column type="index" width="50" />
<el-table-column :label="$t('trials:data-sync:studyList:subjectCode')" prop="SubjectCode" min-width="90" show-overflow-tooltip sortable="custom"/>
<el-table-column :label="$t('trials:data-sync:studyList:visitName')" prop="VisitName" min-width="90" show-overflow-tooltip sortable="custom"/>
<el-table-column :label="$t('trials:data-sync:studyList:studyCode')" prop="StudyCode" min-width="90" show-overflow-tooltip sortable="custom"/>
<el-table-column :label="$t('trials:data-sync:studyList:fileCount')" prop="FileCount" min-width="90" show-overflow-tooltip/>
<el-table-column :label="$t('trials:data-sync:studyList:uploadRegion')" prop="UploadRegion" min-width="60" show-overflow-tooltip />
<el-table-column :label="$t('trials:data-sync:studyList:createTime')" prop="CreateTime" min-width="90" show-overflow-tooltip />
<el-table-column :label="$t('trials:data-sync:studyList:targetRegion')" prop="TargetRegion" min-width="60" show-overflow-tooltip />
<el-table-column :label="$t('trials:data-sync:studyList:syncFinishedTime')" prop="SyncFinishedTime" min-width="90" show-overflow-tooltip/>
<el-table-column :label="$t('trials:data-sync:studyList:isSync')" prop="IsSync" min-width="90" show-overflow-tooltip sortable="custom">
<el-table-column
:label="$t('trials:data-sync:studyList:subjectCode')"
prop="SubjectCode"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:visitName')"
prop="VisitName"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:studyCode')"
prop="StudyCode"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:fileCount')"
prop="FileCount"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:uploadRegion')"
prop="UploadRegion"
min-width="60"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:createTime')"
prop="CreateTime"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:targetRegion')"
prop="TargetRegion"
min-width="60"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:syncFinishedTime')"
prop="SyncFinishedTime"
min-width="90"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('trials:data-sync:studyList:isSync')"
prop="IsSync"
min-width="90"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsSync" type="success">
{{ $fd('YesOrNo', scope.row.IsSync) }}