Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
741c723bab
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1777014169186" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4736" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1024 739.560727V1024H739.560727v-84.898909h199.540364v-199.540364H1024z m-939.101091 0v199.540364h199.540364V1024H0V739.560727h84.898909zM824.878545 199.121455v625.75709H199.121455V199.121455h625.75709z m-85.317818 85.317818H284.439273v455.121454h455.121454V284.439273zM1024 0v284.439273h-84.898909V84.898909h-199.540364V0H1024zM284.439273 0v84.898909H84.898909v199.540364H0V0h284.439273z" fill="#e6e6e6" p-id="4737"></path></svg>
|
||||||
|
After Width: | Height: | Size: 764 B |
|
|
@ -512,7 +512,7 @@ export default {
|
||||||
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||||
const viewport = renderingEngine.getViewport(this.viewportId)
|
const viewport = renderingEngine.getViewport(this.viewportId)
|
||||||
const currentImageIdIndex = viewport.getCurrentImageIdIndex()
|
const currentImageIdIndex = viewport.getCurrentImageIdIndex()
|
||||||
const numImages = viewport.getImageIds().length
|
const numImages = this.imageInfo.total
|
||||||
let newImageIdIndex = null
|
let newImageIdIndex = null
|
||||||
if (type === 0) {
|
if (type === 0) {
|
||||||
newImageIdIndex = 0
|
newImageIdIndex = 0
|
||||||
|
|
@ -628,6 +628,7 @@ export default {
|
||||||
let volume = cache.getVolume(this.volumeId)
|
let volume = cache.getVolume(this.volumeId)
|
||||||
// console.log(volume, 'volume')
|
// console.log(volume, 'volume')
|
||||||
if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex)
|
if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex)
|
||||||
|
console.log(this.series.orientation, this.series.curIndex)
|
||||||
let index = this.series.orientation === 'AXIAL' ? Math.ceil((volume._imageIds.length - 1) / 2) - 1 : Math.ceil((volume.dimensions[0]) / 2) - 1
|
let index = this.series.orientation === 'AXIAL' ? Math.ceil((volume._imageIds.length - 1) / 2) - 1 : Math.ceil((volume.dimensions[0]) / 2) - 1
|
||||||
this.setFullScreen(index)
|
this.setFullScreen(index)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
||||||
|
|
@ -162,9 +162,14 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- MPR -->
|
<!-- MPR -->
|
||||||
<div class="tool-item" :title="`${$t('trials:reading:button:mpr')}`" @click.prevent="openMPRViewport()"
|
<div class="tool-item" :title="`${$t('trials:reading:button:mpr')}`" @click.prevent="openMPRViewport()"
|
||||||
v-if="(criterionType === 0 && readingTool === 0) || this.readingTool === 3">
|
v-if="((criterionType === 0 && readingTool === 0) || this.readingTool === 3) && !isMPR">
|
||||||
<svg-icon icon-class="mpr" class="svg-icon" style="transform: rotate(180deg);" />
|
<svg-icon icon-class="mpr" class="svg-icon" style="transform: rotate(180deg);" />
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 退出MPR -->
|
||||||
|
<div class="tool-item" :title="`${$t('trials:reading:button:exit_mpr')}`" @click.prevent="openMPRViewport()"
|
||||||
|
v-if="((criterionType === 0 && readingTool === 0) || this.readingTool === 3) && isMPR">
|
||||||
|
<svg-icon icon-class="exit_mpr" class="svg-icon" style="transform: rotate(180deg);" />
|
||||||
|
</div>
|
||||||
<!-- 直方图 -->
|
<!-- 直方图 -->
|
||||||
<div class="tool-item" :title="`${$t('trials:reading:button:histogram')}`" @click.prevent="openHistogram"
|
<div class="tool-item" :title="`${$t('trials:reading:button:histogram')}`" @click.prevent="openHistogram"
|
||||||
v-if="this.readingTool === 3">
|
v-if="this.readingTool === 3">
|
||||||
|
|
@ -1019,6 +1024,15 @@ export default {
|
||||||
// this.$refs.surfaceViewport.setSeriesInfo(obj)
|
// this.$refs.surfaceViewport.setSeriesInfo(obj)
|
||||||
},
|
},
|
||||||
async openHistogram() {
|
async openHistogram() {
|
||||||
|
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||||
|
let viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
|
const viewport = renderingEngine.getViewport(viewportId)
|
||||||
|
let imageIds = viewport.getImageIds(this.$refs[viewportId][0].volumeId)
|
||||||
|
let imageId = imageIds[0]
|
||||||
|
const imagePixelModule = metaData.get('imagePixelModule', imageId);
|
||||||
|
const photometricInterpretation = imagePixelModule?.photometricInterpretation;
|
||||||
|
console.log(photometricInterpretation, 'photometricInterpretation')
|
||||||
|
if (photometricInterpretation && photometricInterpretation !== 'MONOCHROME1' && photometricInterpretation !== 'MONOCHROME2') return this.$confirm(this.$t('trials:histogram:confirm:photometricInterpretationNotSupported'))
|
||||||
this.histogramVisible = true
|
this.histogramVisible = true
|
||||||
this.setToolsPassive()
|
this.setToolsPassive()
|
||||||
this.$refs.histogram.init()
|
this.$refs.histogram.init()
|
||||||
|
|
@ -4100,7 +4114,10 @@ export default {
|
||||||
},
|
},
|
||||||
async openMPRViewport(data = null) {
|
async openMPRViewport(data = null) {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
|
this.setToolsPassive()
|
||||||
if (this.isMPR) {
|
if (this.isMPR) {
|
||||||
|
this.activeSeries(this.$refs[`viewport-MPR-0`][0].series)
|
||||||
|
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
|
||||||
if (data && viewportSeries.SeriesInstanceUid === data.SeriesInstanceUid) return resolve(true)
|
if (data && viewportSeries.SeriesInstanceUid === data.SeriesInstanceUid) return resolve(true)
|
||||||
|
|
@ -4132,9 +4149,12 @@ export default {
|
||||||
await this.getVolume(series)
|
await this.getVolume(series)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.loadingText = null
|
this.loadingText = null
|
||||||
|
delete series.orientation
|
||||||
|
delete series.isLocation
|
||||||
this.$refs[`viewport-MPR-0`][0].setSeriesInfo(Object.assign({ orientation: 'AXIAL', isLocation: data && this.activeViewportIndex === 0 }, series))
|
this.$refs[`viewport-MPR-0`][0].setSeriesInfo(Object.assign({ orientation: 'AXIAL', isLocation: data && this.activeViewportIndex === 0 }, series))
|
||||||
this.$refs[`viewport-MPR-1`][0].setSeriesInfo(Object.assign({ orientation: 'SAGITTAL', isLocation: data && this.activeViewportIndex === 1 }, series))
|
this.$refs[`viewport-MPR-1`][0].setSeriesInfo(Object.assign({ orientation: 'SAGITTAL', isLocation: data && this.activeViewportIndex === 1 }, series))
|
||||||
this.$refs[`viewport-MPR-2`][0].setSeriesInfo(Object.assign({ orientation: 'CORONAL', isLocation: data && this.activeViewportIndex === 2 }, series))
|
this.$refs[`viewport-MPR-2`][0].setSeriesInfo(Object.assign({ orientation: 'CORONAL', isLocation: data && this.activeViewportIndex === 2 }, series))
|
||||||
|
this.setToolActive('Crosshairs')
|
||||||
resolve(false)
|
resolve(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="Segmentations" v-loading="loading">
|
<div class="Segmentations" v-loading="loading">
|
||||||
|
<h3 style="color: #fff;margin: 0;padding: 15px 10px;">
|
||||||
|
<span>{{ series.TaskInfo.SubjectCode }} </span>
|
||||||
|
<span style="margin-left:5px;">{{ series.TaskInfo.TaskBlindName }}</span>
|
||||||
|
</h3>
|
||||||
<el-collapse v-model="activeNames">
|
<el-collapse v-model="activeNames">
|
||||||
<el-collapse-item name="tools">
|
<el-collapse-item name="tools">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
|
|
@ -8,24 +12,24 @@
|
||||||
<div class="tool-frame">
|
<div class="tool-frame">
|
||||||
<div :title="$t('trials:Segmentations:tools:contour')"
|
<div :title="$t('trials:Segmentations:tools:contour')"
|
||||||
:class="['tool-item', activeTool === 'LabelMapEditWithContour' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
:class="['tool-item', activeTool === 'LabelMapEditWithContour' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
||||||
:style="{ cursor: segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
:style="{ cursor: isMPR || segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
||||||
@click.prevent="setToolActive('LabelMapEditWithContour')">
|
@click.prevent="setToolActive('LabelMapEditWithContour')">
|
||||||
<svg-icon icon-class="contour" class="svg-icon" />
|
<svg-icon icon-class="contour" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
<div :title="$t('trials:Segmentations:tools:thresholecircle')"
|
<div :title="$t('trials:Segmentations:tools:thresholecircle')"
|
||||||
:class="['tool-item', ThresholdTools.includes(activeTool) && segmentList.length > 0 ? 'tool-item-active' : '']"
|
:class="['tool-item', ThresholdTools.includes(activeTool) && segmentList.length > 0 ? 'tool-item-active' : '']"
|
||||||
:style="{ cursor: segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
:style="{ cursor: isMPR || segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
||||||
@click.prevent="initThreshold">
|
@click.prevent="initThreshold">
|
||||||
<svg-icon icon-class="thresholecircle" class="svg-icon" />
|
<svg-icon icon-class="thresholecircle" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
<div :title="$t('trials:Segmentations:tools:circularbrush')"
|
<div :title="$t('trials:Segmentations:tools:circularbrush')"
|
||||||
:class="['tool-item', activeTool === 'CircularBrush' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
:class="['tool-item', activeTool === 'CircularBrush' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
||||||
:style="{ cursor: segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
:style="{ cursor: isMPR || segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
||||||
@click.prevent="setToolActive('CircularBrush')">
|
@click.prevent="setToolActive('CircularBrush')">
|
||||||
<svg-icon icon-class="circularbrush" class="svg-icon" />
|
<svg-icon icon-class="circularbrush" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
<div :class="['tool-item', activeTool === 'CircularEraser' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
<div :class="['tool-item', activeTool === 'CircularEraser' && segmentList.length > 0 ? 'tool-item-active' : '']"
|
||||||
:style="{ cursor: segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
:style="{ cursor: isMPR || segmentList.length <= 0 || (curSegment && curSegment.lock) || ['viewport-MPR-1', 'viewport-MPR-2'].includes(`${viewportKey}-${activeViewportIndex}`) ? 'not-allowed' : 'pointer' }"
|
||||||
:title="$t('trials:Segmentations:tools:Eraser')"
|
:title="$t('trials:Segmentations:tools:Eraser')"
|
||||||
@click.prevent="setToolActive('CircularEraser')">
|
@click.prevent="setToolActive('CircularEraser')">
|
||||||
<svg-icon icon-class="clear" class="svg-icon" />
|
<svg-icon icon-class="clear" class="svg-icon" />
|
||||||
|
|
@ -202,7 +206,8 @@
|
||||||
<template v-if="item.stats">
|
<template v-if="item.stats">
|
||||||
<div v-for="k in statsKey" :key="k" class="statsBox">
|
<div v-for="k in statsKey" :key="k" class="statsBox">
|
||||||
<span>{{ k }}</span>
|
<span>{{ k }}</span>
|
||||||
<span v-if="item.stats[k]">{{ JSON.stringify(item.stats[k].value) !== 'null' ?
|
<span v-if="item.stats[k]">{{ JSON.stringify(item.stats[k].value) !== 'null'
|
||||||
|
?
|
||||||
Number(item.stats[k].value).toFixed(2) : null
|
Number(item.stats[k].value).toFixed(2) : null
|
||||||
}}<i>{{ item.stats[k].unit }}</i></span>
|
}}<i>{{ item.stats[k].unit }}</i></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -494,11 +499,11 @@ export default {
|
||||||
this.popoverId = `popover-${item.segmentationId}_${item.segmentIndex}`
|
this.popoverId = `popover-${item.segmentationId}_${item.segmentIndex}`
|
||||||
},
|
},
|
||||||
initThreshold() {
|
initThreshold() {
|
||||||
|
if (this.isMPR) return false
|
||||||
if (!this.ThresholdTools.includes(this.activeTool)) {
|
if (!this.ThresholdTools.includes(this.activeTool)) {
|
||||||
this.setToolActive(this.ThresholdTools[0])
|
this.setToolActive(this.ThresholdTools[0])
|
||||||
this.thresholdType = this.ThresholdTools[0]
|
this.thresholdType = this.ThresholdTools[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
createSegmentConfiguration(segmentIndex, segmentationId, otherSegments) {
|
createSegmentConfiguration(segmentIndex, segmentationId, otherSegments) {
|
||||||
const containedSegmentIndices = otherSegments
|
const containedSegmentIndices = otherSegments
|
||||||
|
|
@ -618,6 +623,7 @@ export default {
|
||||||
// if (!this.series.TaskInfo || this.series.TaskInfo.VisitTaskId !== this.visitInfo.VisitTaskId) return false
|
// if (!this.series.TaskInfo || this.series.TaskInfo.VisitTaskId !== this.visitInfo.VisitTaskId) return false
|
||||||
if (this.segmentList.length <= 0) return false
|
if (this.segmentList.length <= 0) return false
|
||||||
if (this.curSegment.lock) return false
|
if (this.curSegment.lock) return false
|
||||||
|
if (this.isMPR) return false
|
||||||
if (this.histogramVisible && !this.ThresholdTools.includes(toolName)) return false
|
if (this.histogramVisible && !this.ThresholdTools.includes(toolName)) return false
|
||||||
if (['viewport-MPR-1', 'viewport-MPR-2'].includes(`${this.viewportKey}-${this.activeViewportIndex}`)) return false
|
if (['viewport-MPR-1', 'viewport-MPR-2'].includes(`${this.viewportKey}-${this.activeViewportIndex}`)) return false
|
||||||
const toolGroupId = this.isMPR ? this.volumeToolGroupId : `${this.viewportKey}-${this.activeViewportIndex}`
|
const toolGroupId = this.isMPR ? this.volumeToolGroupId : `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
|
|
|
||||||
|
|
@ -386,6 +386,7 @@ export default {
|
||||||
const { detail } = e
|
const { detail } = e
|
||||||
delete this.series.segment
|
delete this.series.segment
|
||||||
this.series.SliceIndex = detail.imageIndex
|
this.series.SliceIndex = detail.imageIndex
|
||||||
|
console.log(detail.imageIndex, 'idenx')
|
||||||
this.sliderInfo.height = detail.imageIndex * 100 / detail.numberOfSlices
|
this.sliderInfo.height = detail.imageIndex * 100 / detail.numberOfSlices
|
||||||
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||||
const viewport = renderingEngine.getViewport(this.viewportId)
|
const viewport = renderingEngine.getViewport(this.viewportId)
|
||||||
|
|
@ -441,7 +442,7 @@ export default {
|
||||||
)
|
)
|
||||||
csUtils.jumpToSlice(viewport.element, { imageIndex: index })
|
csUtils.jumpToSlice(viewport.element, { imageIndex: index })
|
||||||
viewport.render()
|
viewport.render()
|
||||||
})
|
}, 100)
|
||||||
},
|
},
|
||||||
voiModified(e) {
|
voiModified(e) {
|
||||||
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,14 @@
|
||||||
@click.prevent="setToolActive('histogram_PlanarFreehandROI')">
|
@click.prevent="setToolActive('histogram_PlanarFreehandROI')">
|
||||||
<svg-icon icon-class="polygon" class="svg-icon" />
|
<svg-icon icon-class="polygon" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
|
<div :class="['tool-item']" :title="$t('trials:histogram:button:bgopen')"
|
||||||
|
@click.prevent="showDefaultData(false)" v-if="isNeedDefault">
|
||||||
|
<svg-icon icon-class="eye-open" class="svg-icon" />
|
||||||
|
</div>
|
||||||
|
<div :class="['tool-item']" :title="$t('trials:histogram:button:bgclose')"
|
||||||
|
@click.prevent="showDefaultData(true)" v-else>
|
||||||
|
<svg-icon icon-class="eye" class="svg-icon" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="title">{{ $t("trials:histogram:title:histogram") }}</div>
|
<div class="title">{{ $t("trials:histogram:title:histogram") }}</div>
|
||||||
<i class="el-icon-circle-close closeBtn" @click.stop="close"></i>
|
<i class="el-icon-circle-close closeBtn" @click.stop="close"></i>
|
||||||
|
|
@ -115,13 +123,18 @@ export default {
|
||||||
'#fb628b',
|
'#fb628b',
|
||||||
],
|
],
|
||||||
colors: [],
|
colors: [],
|
||||||
seriesData: {}
|
seriesData: {},
|
||||||
|
isNeedDefault: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
// this.initChart()
|
// this.initChart()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
async showDefaultData(f) {
|
||||||
|
this.isNeedDefault = f
|
||||||
|
this.initChart()
|
||||||
|
},
|
||||||
setToolActive(toolName) {
|
setToolActive(toolName) {
|
||||||
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
||||||
|
|
@ -206,8 +219,9 @@ export default {
|
||||||
}
|
}
|
||||||
let seriesData = []
|
let seriesData = []
|
||||||
Object.keys(this.seriesData).forEach(key => {
|
Object.keys(this.seriesData).forEach(key => {
|
||||||
seriesData.push(this.seriesData[key])
|
if (key !== 'default' || this.isNeedDefault) seriesData.push(this.seriesData[key])
|
||||||
})
|
})
|
||||||
|
this.chart.clear();
|
||||||
const option = {
|
const option = {
|
||||||
useUTC: true,
|
useUTC: true,
|
||||||
title: {
|
title: {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue