1
continuous-integration/drone/push Build is passing Details

main
caiyiling 2025-05-29 17:21:25 +08:00
parent f1b816fd85
commit 3f63c126ff
2 changed files with 156 additions and 148 deletions

View File

@ -1,6 +1,11 @@
<template> <template>
<div v-loading="loading" :element-loading-text="loadingText" element-loading-spinner="el-icon-loading" <div
element-loading-background="rgba(0, 0, 0, 0.8)" class="read-page-container"> v-loading="loading"
:element-loading-text="loadingText"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
class="read-page-container"
>
<!-- 检查列表 --> <!-- 检查列表 -->
<div class="left-panel"> <div class="left-panel">
<div class="task-container"> <div class="task-container">
@ -200,7 +205,7 @@
<svg-icon v-else icon-class="fitToImage" class="svg-icon" /> <svg-icon v-else icon-class="fitToImage" class="svg-icon" />
</div> </div>
<!--融合--> <!--融合-->
<div class="tool-item" :title="$t('trials:lugano:button:fusion')" @click.prevent="openFusion" v-if="readingTool === 2"> <div v-if="readingTool === 2" class="tool-item" :title="$t('trials:lugano:button:fusion')" @click.prevent="openFusion">
<svg-icon icon-class="fusion" class="svg-icon" /> <svg-icon icon-class="fusion" class="svg-icon" />
</div> </div>
<div <div
@ -279,9 +284,9 @@
<div <div
v-if="criterionType === 0" v-if="criterionType === 0"
:title="$t('trials:reading:button:more')" :title="$t('trials:reading:button:more')"
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '']"
@click.stop="showPanel($event)" @click.stop="showPanel($event)"
@mouseleave="toolMouseout" @mouseleave="toolMouseout"
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '']"
> >
<div class="dropdown"> <div class="dropdown">
<div <div
@ -292,10 +297,10 @@
<i class="el-icon-arrow-down" style="color:#fff;" /> <i class="el-icon-arrow-down" style="color:#fff;" />
</div> </div>
<div class="dropdown-content"> <div class="dropdown-content">
<ul style="width:100px;" v-if="readingTaskState < 2"> <ul v-if="readingTaskState < 2" style="width:100px;">
<li v-for="i in customizeStandards" :key="i.toolName" style="text-align:left;"> <li v-for="i in customizeStandards" :key="i.toolName" style="text-align:left;">
<a href="#" @click.prevent="setMoreToolActive(i.toolName)"> <a href="#" @click.prevent="setMoreToolActive(i.toolName)">
<svg-icon :icon-class="i.icon" class="svg-icon" style="margin-right: 5px;"/> <svg-icon :icon-class="i.icon" class="svg-icon" style="margin-right: 5px;" />
{{ $t(i.i18nKey) }} {{ $t(i.i18nKey) }}
</a> </a>
</li> </li>
@ -304,9 +309,9 @@
</div> </div>
</div> </div>
<!-- 伪彩 --> <!-- 伪彩 -->
<template v-if="readingTool === 2"> <template v-if="readingTool === 2">
<colorMap v-show="isFusion" ref="colorMap" @setColorMap="setColorMap" @voiChange="voiChange" /> <colorMap v-show="isFusion" ref="colorMap" @setColorMap="setColorMap" @voiChange="voiChange" />
</template> </template>
</div> </div>
<div> <div>
@ -338,7 +343,7 @@
<div class="content-wrapper"> <div class="content-wrapper">
<!-- viewports --> <!-- viewports -->
<div class="viewports-wrapper"> <div class="viewports-wrapper">
<div ref="container" class="grid-container" > <div ref="container" class="grid-container">
<div :class="[ 'viewports-box', isFusion ? 'viewports-box-down' : '' ]" :style="gridStyle"> <div :class="[ 'viewports-box', isFusion ? 'viewports-box-down' : '' ]" :style="gridStyle">
<div <div
v-for="(v, index) in cellsMax" v-for="(v, index) in cellsMax"
@ -362,7 +367,7 @@
/> />
</div> </div>
</div> </div>
<div :class="[ 'viewports-box', !isFusion ? 'viewports-box-down' : '' ]" v-if="readingTool === 2" :style="gridStyle"> <div v-if="readingTool === 2" :class="[ 'viewports-box', !isFusion ? 'viewports-box-down' : '' ]" :style="gridStyle">
<div <div
v-for="(v, index) in cellsMax" v-for="(v, index) in cellsMax"
v-show="index < cells.length" v-show="index < cells.length"
@ -523,9 +528,13 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog :visible.sync="fusionVisible" :close-on-click-modal="false" :title="$t('trials:lugano:button:record')" <el-dialog
width="850px" > :visible.sync="fusionVisible"
<FusionForm v-if="fusionVisible" :activeTaskIndex="activeTaskIndex" :taskList="visitTaskList" @close="closeFusion" @fusion="handleFusion" /> :close-on-click-modal="false"
:title="$t('trials:lugano:button:record')"
width="850px"
>
<FusionForm v-if="fusionVisible" :active-task-index="activeTaskIndex" :task-list="visitTaskList" @close="closeFusion" @fusion="handleFusion" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -591,7 +600,7 @@ const {
synchronizers synchronizers
// cursors // cursors
} = cornerstoneTools } = cornerstoneTools
const { createCameraPositionSynchronizer, createVOISynchronizer } = synchronizers; const { createCameraPositionSynchronizer, createVOISynchronizer } = synchronizers
const newStyles = { const newStyles = {
global: { global: {
color: 'rgb(255, 0, 0)', color: 'rgb(255, 0, 0)',
@ -619,12 +628,6 @@ annotation.config.style.setDefaultToolStyles(newStyles)
const { MouseBindings, Events: toolsEvents } = csToolsEnums const { MouseBindings, Events: toolsEvents } = csToolsEnums
export default { export default {
name: 'ReadPage', name: 'ReadPage',
props: {
readingTool: {
type: Number,
default: 2
}
},
components: { components: {
StudyList, StudyList,
Viewport, Viewport,
@ -641,6 +644,12 @@ export default {
FusionForm, FusionForm,
colorMap colorMap
}, },
props: {
readingTool: {
type: Number,
default: 2
}
},
data() { data() {
return { return {
loading: false, loading: false,
@ -710,7 +719,7 @@ export default {
studyList: [], studyList: [],
volumeData: {}, volumeData: {},
fusionSerieId: {}, fusionSerieId: {},
loadingText: null, loadingText: null
// resetAnnotation: false , // 使 // resetAnnotation: false , // 使
} }
}, },
@ -794,7 +803,7 @@ export default {
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
if (this.criterionType === 0) { if (this.criterionType === 0) {
this.tools = getCustomizeStandardsTools(this.taskInfo.ReadingToolList) this.tools = getCustomizeStandardsTools(this.taskInfo.ReadingToolList)
let toolNames = this.tools.map(i=>i.toolName) const toolNames = this.tools.map(i => i.toolName)
this.customizeStandards = config.customizeStandards.filter(item => !toolNames.includes(item.toolName)) this.customizeStandards = config.customizeStandards.filter(item => !toolNames.includes(item.toolName))
} else { } else {
this.tools = getTools(this.criterionType) this.tools = getTools(this.criterionType)
@ -1063,13 +1072,13 @@ export default {
} }
] ]
let viewportIds = ['viewport-0', 'viewport-1', 'viewport-2', 'viewport-3'] let viewportIds = ['viewport-0', 'viewport-1', 'viewport-2', 'viewport-3']
let fusionViewportIds = ["viewport-fusion-0", "viewport-fusion-1", "viewport-fusion-2", "viewport-fusion-3"] const fusionViewportIds = ['viewport-fusion-0', 'viewport-fusion-1', 'viewport-fusion-2', 'viewport-fusion-3']
if(this.readingTool === 2){ if (this.readingTool === 2) {
const fusionElement1 = this.$refs['viewport-fusion-0'][0].$el const fusionElement1 = this.$refs['viewport-fusion-0'][0].$el
const fusionElement2 = this.$refs['viewport-fusion-1'][0].$el const fusionElement2 = this.$refs['viewport-fusion-1'][0].$el
const fusionElement3 = this.$refs['viewport-fusion-2'][0].$el const fusionElement3 = this.$refs['viewport-fusion-2'][0].$el
const fusionElement4 = this.$refs['viewport-fusion-3'][0].$el const fusionElement4 = this.$refs['viewport-fusion-3'][0].$el
let arr = [ const arr = [
{ {
viewportId: 'viewport-fusion-0', viewportId: 'viewport-fusion-0',
type: ViewportType.ORTHOGRAPHIC, type: ViewportType.ORTHOGRAPHIC,
@ -1105,7 +1114,7 @@ export default {
} }
} }
] ]
viewportInputArray = [ ...viewportInputArray, ...arr ] viewportInputArray = [...viewportInputArray, ...arr]
viewportIds = viewportIds.concat(fusionViewportIds) viewportIds = viewportIds.concat(fusionViewportIds)
} }
renderingEngine.setViewports(viewportInputArray) renderingEngine.setViewports(viewportInputArray)
@ -1171,28 +1180,28 @@ export default {
toolGroup.addTool(CircleROITool.toolName, { toolGroup.addTool(CircleROITool.toolName, {
getTextLines: this.getCircleROIToolTextLines getTextLines: this.getCircleROIToolTextLines
}) })
if(toolGroupId === 'viewport-fusion-3'){ if (toolGroupId === 'viewport-fusion-3') {
toolGroup.addTool(VolumeRotateTool.toolName); toolGroup.addTool(VolumeRotateTool.toolName)
toolGroup.setToolActive(VolumeRotateTool.toolName, { toolGroup.setToolActive(VolumeRotateTool.toolName, {
bindings: [ bindings: [
{ {
mouseButton: MouseBindings.Wheel, // mouse wheel mouseButton: MouseBindings.Wheel // mouse wheel
}, }
], ]
}); })
toolGroup.addTool(MIPJumpToClickTool.toolName, { toolGroup.addTool(MIPJumpToClickTool.toolName, {
targetViewportIds: fusionViewportIds, targetViewportIds: fusionViewportIds
}); })
// Set the initial state of the tools, here we set one tool active on left click. // Set the initial state of the tools, here we set one tool active on left click.
// This means left click will draw that tool. // This means left click will draw that tool.
toolGroup.setToolActive(MIPJumpToClickTool.toolName, { toolGroup.setToolActive(MIPJumpToClickTool.toolName, {
bindings: [ bindings: [
{ {
mouseButton: MouseBindings.Primary, // Left Click mouseButton: MouseBindings.Primary // Left Click
}, }
], ]
}); })
} }
toolGroup.setToolActive(StackScrollTool.toolName, { toolGroup.setToolActive(StackScrollTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Wheel }] bindings: [{ mouseButton: MouseBindings.Wheel }]
@ -1230,7 +1239,7 @@ export default {
eventTarget.addEventListener('cornerstoneimageloadprogress', this.imageLoadProgress) eventTarget.addEventListener('cornerstoneimageloadprogress', this.imageLoadProgress)
console.log(Events, toolsEvents) console.log(Events, toolsEvents)
if ( this.readingTool === 2 ) { if (this.readingTool === 2) {
this.setUpSynchronizers() this.setUpSynchronizers()
} }
}, },
@ -1332,7 +1341,7 @@ export default {
toolsEvents.ANNOTATION_SELECTION_CHANGE, toolsEvents.ANNOTATION_SELECTION_CHANGE,
this.criterionType === 0 ? this.customAnnotationSelectionChangeListener : this.annotationSelectionChangeListener this.criterionType === 0 ? this.customAnnotationSelectionChangeListener : this.annotationSelectionChangeListener
) )
// eventTarget.addEventListener( // eventTarget.addEventListener(
// toolsEvents.ANNOTATION_ADDED, // toolsEvents.ANNOTATION_ADDED,
// this.annotationAddedListener // this.annotationAddedListener
@ -1434,9 +1443,8 @@ export default {
this.saveCustomAnnotation(annotation) this.saveCustomAnnotation(annotation)
this.$refs[`ecrf_${series.TaskInfo.VisitTaskId}`][0].bindAnnotationToQuestion(annotation) this.$refs[`ecrf_${series.TaskInfo.VisitTaskId}`][0].bindAnnotationToQuestion(annotation)
} }
} }
this.setToolsPassive() this.setToolsPassive()
}, },
validMarkName(markName) { validMarkName(markName) {
@ -1482,23 +1490,27 @@ export default {
}, },
async customAnnotationRemovedListener(e) { async customAnnotationRemovedListener(e) {
const { annotation } = e.detail const { annotation } = e.detail
try{ try {
// if ( this.resetAnnotation && this.isFusion ) return false // if ( this.resetAnnotation && this.isFusion ) return false
if (!annotation) return false if (!annotation) return false
if (this.readingTaskState === 2) throw 'annotation Not allowed to operate' if (this.readingTaskState === 2) {
const errorMsg = { message: 'annotation Not allowed to operate' }
throw errorMsg
}
const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName) const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName)
if (i === -1) { if (i === -1) {
// //
return return
} }
if (annotation.visitTaskId === this.taskInfo.VisitTaskId) { if (annotation.visitTaskId === this.taskInfo.VisitTaskId) {
let isBound = this.$refs[`ecrf_${annotation.visitTaskId}`][0].verifyAnnotationIsBound(annotation) const isBound = this.$refs[`ecrf_${annotation.visitTaskId}`][0].verifyAnnotationIsBound(annotation)
if (isBound) { if (isBound) {
this.$alert('该标记已与问题进行绑定,不允许删除!') this.$alert('该标记已与问题进行绑定,不允许删除!')
throw 'annotation Not allowed to operate' const errorMsg = { message: 'annotation Not allowed to operate' }
throw errorMsg
} }
} }
if (annotation.visitTaskId === this.taskInfo.VisitTaskId && annotation.seriesId) { if (annotation.visitTaskId === this.taskInfo.VisitTaskId && annotation.seriesId) {
if (this.activeTool === 'Eraser') { if (this.activeTool === 'Eraser') {
await this.$confirm( await this.$confirm(
@ -1521,7 +1533,8 @@ export default {
viewport.render() viewport.render()
} }
} else { } else {
throw 'annotation Not allowed to operate' const errorMsg = { message: 'annotation Not allowed to operate' }
throw errorMsg
} }
} catch (e) { } catch (e) {
cornerstoneTools.annotation.state.addAnnotation(annotation) cornerstoneTools.annotation.state.addAnnotation(annotation)
@ -1545,7 +1558,7 @@ export default {
}, },
customAnnotationSelectionChangeListener(e) { customAnnotationSelectionChangeListener(e) {
if (this.readingTaskState === 2) return if (this.readingTaskState === 2) return
const {detail} = e const { detail } = e
const annotations = cornerstoneTools.annotation.state.getAllAnnotations() const annotations = cornerstoneTools.annotation.state.getAllAnnotations()
const i = annotations.findIndex(i => i.annotationUID === detail.selection[0]) const i = annotations.findIndex(i => i.annotationUID === detail.selection[0])
if (i > -1) { if (i > -1) {
@ -2073,8 +2086,8 @@ export default {
const renderingEngine = getRenderingEngine(renderingEngineId) const renderingEngine = getRenderingEngine(renderingEngineId)
const viewport = renderingEngine.getViewport(`${this.viewportKey}-${this.activeViewportIndex}`) const viewport = renderingEngine.getViewport(`${this.viewportKey}-${this.activeViewportIndex}`)
const { invert } = viewport.getProperties() const { invert } = viewport.getProperties()
if ( this.isFusion ) { if (this.isFusion) {
viewport.setProperties({ invert: !invert }, this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId ) viewport.setProperties({ invert: !invert }, this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId)
} }
viewport.setProperties({ invert: !invert }) viewport.setProperties({ invert: !invert })
viewport.render() viewport.render()
@ -2218,18 +2231,18 @@ export default {
toggleFullScreen(e, index) { toggleFullScreen(e, index) {
this.fullScreenIndex = this.fullScreenIndex === index ? null : index this.fullScreenIndex = this.fullScreenIndex === index ? null : index
this.activeViewportIndex = index this.activeViewportIndex = index
if ( this.isFusion ) { if (this.isFusion) {
let viewportIds = [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`] const viewportIds = [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`]
viewportIds.forEach(id=>{ viewportIds.forEach(id => {
let index = this.$refs[id][0].series.SliceIndex const index = this.$refs[id][0].series.SliceIndex
this.$refs[id][0].setFullScreen(index) this.$refs[id][0].setFullScreen(index)
}) })
} }
}, },
async toggleTask(taskInfo, taskIndex) { async toggleTask(taskInfo, taskIndex) {
if(this.isFusion){ if (this.isFusion) {
let 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
this.isFusion = false this.isFusion = false
this.fullScreenIndex = null this.fullScreenIndex = null
this.setToolsPassive() this.setToolsPassive()
@ -2299,9 +2312,9 @@ export default {
this.setToolsPassive() this.setToolsPassive()
}, },
async activeSeries(obj) { async activeSeries(obj) {
if(this.isFusion){ if (this.isFusion) {
let 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
this.isFusion = false this.isFusion = false
this.setToolsPassive() this.setToolsPassive()
this.rows = 1 this.rows = 1
@ -2461,7 +2474,7 @@ export default {
const i = this.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) const i = this.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
if (i === -1) return if (i === -1) return
const studyList = this.visitTaskList[i].StudyList const studyList = this.visitTaskList[i].StudyList
let series = this.getMarkedSeries(studyList, obj.annotation) const series = this.getMarkedSeries(studyList, obj.annotation)
if (series) { if (series) {
this.$refs[`${this.viewportKey}-${this.cells.length - 1}`][0].setSeriesInfo(series, true) this.$refs[`${this.viewportKey}-${this.cells.length - 1}`][0].setSeriesInfo(series, true)
this.activeViewportIndex = i this.activeViewportIndex = i
@ -2693,7 +2706,7 @@ export default {
} }
}, },
showPanel(e, toolName) { showPanel(e, toolName) {
if(toolName === 'layout' && this.isFusion) return false if (toolName === 'layout' && this.isFusion) return false
e.currentTarget.firstChild.lastChild.style.display = 'block' e.currentTarget.firstChild.lastChild.style.display = 'block'
}, },
toolMouseout(e) { toolMouseout(e) {
@ -2710,67 +2723,67 @@ export default {
}, },
// //
setUpSynchronizers() { setUpSynchronizers() {
let axialCameraPositionSynchronizer = createCameraPositionSynchronizer( const axialCameraPositionSynchronizer = createCameraPositionSynchronizer(
'AXIAL_CAMERA_SYNCHRONIZER_ID' 'AXIAL_CAMERA_SYNCHRONIZER_ID'
); )
let ctVoiSynchronizer = createVOISynchronizer('CT_VOI_SYNCHRONIZER_ID', { const ctVoiSynchronizer = createVOISynchronizer('CT_VOI_SYNCHRONIZER_ID', {
syncInvertState: false, syncInvertState: false,
syncColormap: false, syncColormap: false
}); })
let ptVoiSynchronizer = createVOISynchronizer('PT_VOI_SYNCHRONIZER_ID', { const ptVoiSynchronizer = createVOISynchronizer('PT_VOI_SYNCHRONIZER_ID', {
syncInvertState: false, syncInvertState: false,
syncColormap: false, syncColormap: false
}); })
let fusionVoiSynchronizer = createVOISynchronizer('FUSION_VOI_SYNCHRONIZER_ID', { const fusionVoiSynchronizer = createVOISynchronizer('FUSION_VOI_SYNCHRONIZER_ID', {
syncInvertState: false, syncInvertState: false,
syncColormap: false, syncColormap: false
}); });
[ [
`viewport-fusion-0`, `viewport-fusion-0`,
`viewport-fusion-1`, `viewport-fusion-1`,
`viewport-fusion-2`, `viewport-fusion-2`
].forEach((viewportId) => { ].forEach((viewportId) => {
axialCameraPositionSynchronizer.add({ axialCameraPositionSynchronizer.add({
renderingEngineId: this.renderingEngineId, renderingEngineId: this.renderingEngineId,
viewportId, viewportId
}); })
}); });
[ [
`viewport-fusion-0`, `viewport-fusion-0`
].forEach((viewportId) => { ].forEach((viewportId) => {
ctVoiSynchronizer.add({ ctVoiSynchronizer.add({
renderingEngineId: this.renderingEngineId, renderingEngineId: this.renderingEngineId,
viewportId, viewportId
}); })
}); });
[ [
`viewport-fusion-3`, `viewport-fusion-3`,
`viewport-fusion-1`, `viewport-fusion-1`
].forEach((viewportId) => { ].forEach((viewportId) => {
ptVoiSynchronizer.add({ ptVoiSynchronizer.add({
renderingEngineId: this.renderingEngineId, renderingEngineId: this.renderingEngineId,
viewportId, viewportId
}); })
}); });
[ [
`viewport-fusion-2`, `viewport-fusion-2`
].forEach((viewportId) => { ].forEach((viewportId) => {
fusionVoiSynchronizer.add({ fusionVoiSynchronizer.add({
renderingEngineId, renderingEngineId,
viewportId, viewportId
}); })
ctVoiSynchronizer.addTarget({ ctVoiSynchronizer.addTarget({
renderingEngineId, renderingEngineId,
viewportId, viewportId
}); })
ptVoiSynchronizer.addTarget({ ptVoiSynchronizer.addTarget({
renderingEngineId, renderingEngineId,
viewportId, viewportId
}); })
}); })
}, },
setColorMap(rgbPresetName) { setColorMap(rgbPresetName) {
let fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`] const fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`]
fusionViewportIds.forEach(id => { fusionViewportIds.forEach(id => {
this.$refs[id][0].setPreset(rgbPresetName) this.$refs[id][0].setPreset(rgbPresetName)
this.$refs[id][0].renderColorBar(rgbPresetName) this.$refs[id][0].renderColorBar(rgbPresetName)
@ -2778,25 +2791,25 @@ export default {
}) })
}, },
voiChange(v) { voiChange(v) {
let fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`] const fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`]
fusionViewportIds.forEach(id => { fusionViewportIds.forEach(id => {
this.$refs[id][0].voiChange(v) this.$refs[id][0].voiChange(v)
}) })
}, },
async handleFusion(data) { async handleFusion(data) {
try{ try {
this.fusionVisible = false this.fusionVisible = false
this.isFusion = true this.isFusion = true
this.rows = 2; this.rows = 2
this.cols = 2 this.cols = 2
let { ct, pt } = data const { ct, pt } = data
this.loading = true this.loading = true
this.loadingText = this.$t('trials:lugano:message:loadVolumes') this.loadingText = this.$t('trials:lugano:message:loadVolumes')
// this.resetAnnotation = true // this.resetAnnotation = true
// console.log(cornerstoneTools.annotation.state.getAllAnnotations(),'cornerstoneTools.annotation.state') // console.log(cornerstoneTools.annotation.state.getAllAnnotations(),'cornerstoneTools.annotation.state')
// cornerstoneTools.annotation.state.removeAllAnnotations() // cornerstoneTools.annotation.state.removeAllAnnotations()
this.renderedTaskIds = [] this.renderedTaskIds = []
if ( this.verifyFusionData(ct, pt) ) { if (this.verifyFusionData(ct, pt)) {
this.loading = false this.loading = false
this.loadingText = null this.loadingText = null
this.$refs[`viewport-0`][0].setSeriesInfo(ct) this.$refs[`viewport-0`][0].setSeriesInfo(ct)
@ -2806,10 +2819,10 @@ export default {
// this.resetAnnotation = false // this.resetAnnotation = false
return true return true
} }
if (!this.fusionSerieId.ct || this.fusionSerieId.ct !== ct.SeriesInstanceUid ) { if (!this.fusionSerieId.ct || this.fusionSerieId.ct !== ct.SeriesInstanceUid) {
this.fusionSerieId.ct = ct.SeriesInstanceUid this.fusionSerieId.ct = ct.SeriesInstanceUid
} }
if (!this.fusionSerieId.pt || this.fusionSerieId.pt !== pt.SeriesInstanceUid ) { if (!this.fusionSerieId.pt || this.fusionSerieId.pt !== pt.SeriesInstanceUid) {
this.fusionSerieId.pt = pt.SeriesInstanceUid this.fusionSerieId.pt = pt.SeriesInstanceUid
} }
await this.getVolume(pt) await this.getVolume(pt)
@ -2817,22 +2830,22 @@ export default {
await this.getVolume(pt, true) await this.getVolume(pt, true)
this.loading = false this.loading = false
this.loadingText = null this.loadingText = null
let ctData = { const ctData = {
data: ct, data: ct,
volumeId: this.volumeData[ct.SeriesInstanceUid].volumeId, volumeId: this.volumeData[ct.SeriesInstanceUid].volumeId
} }
let ptData = { const ptData = {
data: pt, data: pt,
volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId, volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
volume: this.volumeData[pt.SeriesInstanceUid].volume, volume: this.volumeData[pt.SeriesInstanceUid].volume
} }
let fusionData = { const fusionData = {
ct, ct,
data: pt, data: pt,
volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId, volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
ctVolumeId: this.volumeData[ct.SeriesInstanceUid].volumeId, ctVolumeId: this.volumeData[ct.SeriesInstanceUid].volumeId,
ptVolumeId: this.volumeData[pt.SeriesInstanceUid].volumeId, ptVolumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
fusionVolumeId: this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId, fusionVolumeId: this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId
} }
this.$refs[`viewport-0`][0].setSeriesInfo(ct) this.$refs[`viewport-0`][0].setSeriesInfo(ct)
this.$refs[`viewport-1`][0].setSeriesInfo(pt) this.$refs[`viewport-1`][0].setSeriesInfo(pt)
@ -2840,36 +2853,36 @@ export default {
this.$refs[`viewport-3`][0].setSeriesInfo(pt) this.$refs[`viewport-3`][0].setSeriesInfo(pt)
this.$refs[`viewport-fusion-0`][0].setSeriesInfo(ctData) this.$refs[`viewport-fusion-0`][0].setSeriesInfo(ctData)
this.$refs[`viewport-fusion-1`][0].setSeriesInfo(ptData, { colorMap: true}) this.$refs[`viewport-fusion-1`][0].setSeriesInfo(ptData, { colorMap: true })
this.$refs[`viewport-fusion-2`][0].setSeriesInfo(fusionData, { isFusion: true, colorMap: true }) this.$refs[`viewport-fusion-2`][0].setSeriesInfo(fusionData, { isFusion: true, colorMap: true })
this.$refs[`viewport-fusion-3`][0].setSeriesInfo(ptData, { isMip: true, colorMap: true }) this.$refs[`viewport-fusion-3`][0].setSeriesInfo(ptData, { isMip: true, colorMap: true })
// this.resetAnnotation = false // this.resetAnnotation = false
this.$nextTick(() => { this.$nextTick(() => {
this.$refs[`colorMap`].init() this.$refs[`colorMap`].init()
}) })
}catch(err){ } catch (err) {
console.log(err) console.log(err)
this.loading = false this.loading = false
this.loadingText = null this.loadingText = null
} }
}, },
verifyFusionData(ct, pt) { verifyFusionData(ct, pt) {
if (this.fusionSerieId.ct === ct.SeriesInstanceUid && this.fusionSerieId.pt === pt.SeriesInstanceUid && cache.getVolume(this.volumeData[ct.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[pt.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId) ) { if (this.fusionSerieId.ct === ct.SeriesInstanceUid && this.fusionSerieId.pt === pt.SeriesInstanceUid && cache.getVolume(this.volumeData[ct.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[pt.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId)) {
return true return true
} }
return false return false
}, },
async getVolume(serie, isFusion = false ) { async getVolume(serie, isFusion = false) {
return new Promise(async res => { return new Promise(async res => {
let volumeId = null, volume = null let volumeId = null; let volume = null
let key = isFusion ? `fusion_${serie.SeriesInstanceUid}` : serie.SeriesInstanceUid const key = isFusion ? `fusion_${serie.SeriesInstanceUid}` : serie.SeriesInstanceUid
if(!this.volumeData[key] || !cache.getVolume(this.volumeData[key].volumeId)) { if (!this.volumeData[key] || !cache.getVolume(this.volumeData[key].volumeId)) {
if ( serie.Modality === 'PT' && !isFusion ) { if (serie.Modality === 'PT' && !isFusion) {
serie.ImageIds.forEach(async id => { serie.ImageIds.forEach(async id => {
const imageLoadObject = cache.getImage(id); const imageLoadObject = cache.getImage(id)
if (imageLoadObject) { if (imageLoadObject) {
await new Promise(res => { await new Promise(res => {
cache.removeImageLoadObject(id, {force:true}); // cache.removeImageLoadObject(id, { force: true }) //
res() res()
}) })
} }
@ -2895,11 +2908,11 @@ export default {
this.$refs.colorMap.upperRangeChange(upper) this.$refs.colorMap.upperRangeChange(upper)
}, },
openFusion() { openFusion() {
this.fusionVisible = true this.fusionVisible = true
}, },
closeFusion() { closeFusion() {
this.fusionVisible = false this.fusionVisible = false
}, }
} }
} }
</script> </script>

View File

@ -32,8 +32,8 @@
:reading-task-state="readingTaskState" :reading-task-state="readingTaskState"
:criterion-id="criterionId" :criterion-id="criterionId"
:calculation-list="calculationList" :calculation-list="calculationList"
:questionMarkInfoList="questionMarkInfoList" :question-mark-info-list="questionMarkInfoList"
:questionsMarkStatus="questionsMarkStatus" :questions-mark-status="questionsMarkStatus"
:is-baseline="isBaseLineTask" :is-baseline="isBaseLineTask"
@resetFormItemData="resetFormItemData" @resetFormItemData="resetFormItemData"
@setFormItemData="setFormItemData" @setFormItemData="setFormItemData"
@ -97,7 +97,7 @@ export default {
readingTaskState: { readingTaskState: {
type: Number, type: Number,
required: true required: true
}, }
}, },
data() { data() {
return { return {
@ -166,7 +166,7 @@ export default {
}) })
this.questions = res.Result.SinglePage this.questions = res.Result.SinglePage
this.questionsMarkStatus = {} this.questionsMarkStatus = {}
this.questionMarkInfoList = res.OtherInfo.QuestionMarkInfoList.map(i=>{ this.questionMarkInfoList = res.OtherInfo.QuestionMarkInfoList.map(i => {
if (i.QuestionId && i.MeasureData) { if (i.QuestionId && i.MeasureData) {
this.$set(this.questionsMarkStatus, i.QuestionId, 2) this.$set(this.questionsMarkStatus, i.QuestionId, 2)
} }
@ -348,7 +348,7 @@ export default {
}) })
}, },
verifyAnnotationIsBound(annotation) { verifyAnnotationIsBound(annotation) {
let i = this.questionMarkInfoList.findIndex(i=>i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID) const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
return i > -1 return i > -1
}, },
async operateImageMarker(obj) { async operateImageMarker(obj) {
@ -359,19 +359,18 @@ export default {
} else if (obj.operateStateEnum === 2) { } else if (obj.operateStateEnum === 2) {
// //
let i = this.questionMarkInfoList.findIndex(i=>i.QuestionId === obj.question.Id) const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
if (i > -1) { if (i > -1) {
let annotation = this.questionMarkInfoList[i].MeasureData const annotation = this.questionMarkInfoList[i].MeasureData
this.$emit('viewCustomAnnotationSeries', {visitTaskId: this.visitTaskId, annotation}) this.$emit('viewCustomAnnotationSeries', { visitTaskId: this.visitTaskId, annotation })
} }
} else if (obj.operateStateEnum === 3) { } else if (obj.operateStateEnum === 3) {
// //
// this.$set(this.questionsMarkStatus, obj.question.Id, 1) // this.$set(this.questionsMarkStatus, obj.question.Id, 1)
} else if (obj.operateStateEnum === 4) { } else if (obj.operateStateEnum === 4) {
// //
this.$set(this.questionForm, obj.question.Id, '') this.$set(this.questionForm, obj.question.Id, '')
let i = this.questionMarkInfoList.findIndex(i=>i.QuestionId === obj.question.Id) const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
if (i > -1) { if (i > -1) {
this.questionMarkInfoList.splice(i, 1) this.questionMarkInfoList.splice(i, 1)
} }
@ -380,16 +379,16 @@ export default {
// //
this.loading = true this.loading = true
try { try {
let answers = [] const answers = []
answers.push({ id: obj.question.Id, answer: this.questionForm[obj.question.Id] }) answers.push({ id: obj.question.Id, answer: this.questionForm[obj.question.Id] })
let markInfo = [] const markInfo = []
let i = this.questionMarkInfoList.findIndex(i=>i.QuestionId === this.operateQuestionId) const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === this.operateQuestionId)
if (i > -1) { if (i > -1) {
let obj = Object.assign({}, this.questionMarkInfoList[i]) const obj = Object.assign({}, this.questionMarkInfoList[i])
obj.MeasureData = obj.MeasureData ? JSON.stringify(obj.MeasureData) : '' obj.MeasureData = obj.MeasureData ? JSON.stringify(obj.MeasureData) : ''
markInfo.push(obj) markInfo.push(obj)
} }
let params = { const params = {
visitTaskId: this.visitTaskId, visitTaskId: this.visitTaskId,
answers: answers, answers: answers,
questionMarkInfoList: markInfo questionMarkInfoList: markInfo
@ -402,9 +401,7 @@ export default {
console.log(e) console.log(e)
this.loading = false this.loading = false
} }
} }
}, },
async bindAnnotationToQuestion(annotation) { async bindAnnotationToQuestion(annotation) {
try { try {
@ -420,13 +417,12 @@ export default {
distinguishCancelAndClose: true distinguishCancelAndClose: true
}) })
if (confirm !== 'confirm') return if (confirm !== 'confirm') return
} }
console.log('bindAnnotationToQuestion', annotation) console.log('bindAnnotationToQuestion', annotation)
let i = this.questionMarkInfoList.findIndex(i=>i.QuestionId === this.operateQuestionId) const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === this.operateQuestionId)
if (i === -1) { if (i === -1) {
let markInfo = { const markInfo = {
QuestionId: this.operateQuestionId, QuestionId: this.operateQuestionId,
InstanceId: annotation.instanceId, InstanceId: annotation.instanceId,
SeriesId: annotation.seriesId, SeriesId: annotation.seriesId,
@ -448,14 +444,13 @@ export default {
} }
this.setAnswerToQuestion(annotation, this.operateQuestionId) this.setAnswerToQuestion(annotation, this.operateQuestionId)
this.$set(this.questionsMarkStatus, this.operateQuestionId, 1) this.$set(this.questionsMarkStatus, this.operateQuestionId, 1)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
}, },
updateAnnotationToQuestion(annotation) { updateAnnotationToQuestion(annotation) {
console.log('updateAnnotationToQuestion', annotation) console.log('updateAnnotationToQuestion', annotation)
let i = this.questionMarkInfoList.findIndex(i=>i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID) const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
if (i === -1) return if (i === -1) return
this.questionMarkInfoList[i].measureData = annotation this.questionMarkInfoList[i].measureData = annotation
this.setAnswerToQuestion(annotation, this.questionMarkInfoList[i].QuestionId) this.setAnswerToQuestion(annotation, this.questionMarkInfoList[i].QuestionId)
@ -468,7 +463,7 @@ export default {
let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
this.$set(this.questionForm, questionId, length) this.$set(this.questionForm, questionId, length)
} else if (obj.toolName === 'Bidirectional') { } else if (annotation.metadata.toolName === 'Bidirectional') {
// let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length // let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
// length = length ? parseFloat(length).toFixed(this.digitPlaces) : length // length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
let short = annotation.data.cachedStats[`imageId:${referencedImageId}`].width let short = annotation.data.cachedStats[`imageId:${referencedImageId}`].width
@ -494,7 +489,7 @@ export default {
await this.getQuestionCalculateRelation() await this.getQuestionCalculateRelation()
await this.getQuestions() await this.getQuestions()
this.$emit('resetAnnotations', this.visitTaskId) this.$emit('resetAnnotations', this.visitTaskId)
this.$nextTick(()=>{ this.$nextTick(() => {
this.rerender = true this.rerender = true
}) })
} }
@ -503,7 +498,7 @@ export default {
loading.close() loading.close()
console.log(e) console.log(e)
} }
}, }
} }
} }
</script> </script>
@ -584,6 +579,6 @@ export default {
// .ecrf-list-container{ // .ecrf-list-container{
// min-height:400px; // min-height:400px;
// color: #ddd; // color: #ddd;
// } // }
</style> </style>