+
+
+ @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" v-else />
-
-
+
-
@@ -340,32 +345,59 @@
@@ -444,6 +476,11 @@
@close="closeFusion" @fusion="handleFusion" />
+
+
+
@@ -479,7 +516,9 @@ import { getTools, getCustomizeStandardsTools, config } from './toolConfig'
import StudyList from './StudyList'
import Viewport from './Viewport'
import PetCtViewport from './PetCtViewport'
+import MPRViewport from './MPRViewport'
import VolumeViewport from './VolumeViewport'
+import Segmentations from './Segmentations'
import mRecisit from './mRecist/QuestionList'
import recisit from './Recist/QuestionList'
import customizeQuestionList from './customize/QuestionList'
@@ -491,6 +530,7 @@ import WL from '@/views/trials/trials-panel/reading/dicoms/components/WL'
import Others from '@/views/trials/trials-panel/reading/dicoms/components/Others'
import ClinicalData from '@/views/trials/trials-panel/reading/clinical-data'
import FusionForm from './FusionForm.vue'
+import SegmentForm from './SegmentForm.vue'
import colorMap from './colorMap.vue'
import RectangleROITool from './tools/RectangleROITool'
import ScaleOverlayTool from './tools/ScaleOverlayTool'
@@ -527,7 +567,10 @@ const {
VolumeRotateTool,
CrosshairsTool,
EllipticalROITool,
- synchronizers
+ synchronizers,
+ PlanarFreehandContourSegmentationTool,
+ BrushTool,
+ utilities: CStUtils,
// cursors
} = cornerstoneTools
const { createCameraPositionSynchronizer, createVOISynchronizer, createSlabThicknessSynchronizer } = synchronizers
@@ -562,7 +605,9 @@ export default {
StudyList,
Viewport,
PetCtViewport,
+ MPRViewport,
VolumeViewport,
+ Segmentations,
mRecisit,
recisit,
customizeQuestionList,
@@ -573,6 +618,7 @@ export default {
Others,
ClinicalData,
FusionForm,
+ SegmentForm,
colorMap,
downloadDicomAndNonedicom,
uploadDicomAndNonedicom,
@@ -687,6 +733,24 @@ export default {
SAGITTAL: {
imageNum: 0
},
+ },
+
+ segmentVisible: false,
+ segmentVisitInfo: {},
+ formWrapperActiveName: 'ecrf',
+ actionConfiguration: {
+ contourBidirectional: {
+ method: CStUtils.segmentation.segmentContourAction,
+ bindings: [
+ {
+ key: 'c',
+ },
+ ],
+ data: {
+ segmentData: new Map(),
+ segmentationId: null
+ },
+ },
}
}
},
@@ -694,8 +758,17 @@ export default {
gridStyle() {
return {
display: 'grid',
- gridTemplateRows: `repeat(${this.isMPR ? 2 : this.rows}, 1fr)`,
- gridTemplateColumns: `repeat(${this.isMPR ? 2 : this.cols}, 1fr)`,
+ gridTemplateRows: `repeat(${this.rows}, 1fr)`,
+ gridTemplateColumns: `repeat(${this.cols}, 1fr)`,
+ height: '100%',
+ width: '100%'
+ }
+ },
+ gridStyleMPR() {
+ return {
+ display: 'grid',
+ gridTemplateRows: `repeat(2, 1fr)`,
+ gridTemplateColumns: `repeat(2, 1fr)`,
height: '100%',
width: '100%'
}
@@ -712,11 +785,11 @@ export default {
return Array(this.rows * this.cols).fill(0)
},
viewportKey() {
- return this.isMPR ? 'viewport-volume' : this.isFusion ? 'viewport-fusion' : 'viewport'
+ return this.isMPR ? 'viewport-MPR' : this.isFusion ? 'viewport-fusion' : 'viewport'
},
openManuals() {
return !this.taskInfo.IsReadKeyFile && this.taskInfo.IsHaveKeyFile
- }
+ },
},
watch: {
openManuals: {
@@ -787,7 +860,7 @@ export default {
} else {
this.tools = getTools(this.criterionType)
}
-
+ console.log(toolsEvents, 'toolsEvents')
this.trialId = this.$route.query.trialId
this.readingTaskState = this.taskInfo.ReadingTaskState
if (!this.taskInfo.IsBaseLine && this.taskInfo.IsReadingTaskViewInOrder !== 0) {
@@ -816,6 +889,20 @@ export default {
this.getSystemInfoReading();
},
methods: {
+ resetQuestion(){
+ this.$refs[`ecrf_${this.lastViewportTaskId}`][0].getQuestions(false)
+ },
+ handleSegmentSave(obj) {
+ this.$refs[`ecrf_${this.lastViewportTaskId}`][0].handleSegmentSave(obj)
+ },
+ openSegmentForm(obj) {
+ let { visitInfo } = obj
+ this.segmentVisitInfo = visitInfo
+ this.segmentVisible = true
+ },
+ handleClick(tab, event) {
+ this.formWrapperActiveName = tab.name
+ },
setMPRInfo(obj) {
let { type, key, value } = obj
this.$set(this.MPRInfo[type], key, value)
@@ -1071,7 +1158,7 @@ export default {
}
let viewportIds = ['viewport-0', 'viewport-1', 'viewport-2', 'viewport-3']
const fusionViewportIds = ['viewport-fusion-0', 'viewport-fusion-1', 'viewport-fusion-2', 'viewport-fusion-3']
- const volumeViewportIds = ['viewport-volume-0', 'viewport-volume-1', 'viewport-volume-2']
+ const volumeViewportIds = ['viewport-MPR-0', 'viewport-MPR-1', 'viewport-MPR-2']
const element1 = this.$refs['viewport-0'][0].$el
const element2 = this.$refs['viewport-1'][0].$el
const element3 = this.$refs['viewport-2'][0].$el
@@ -1098,13 +1185,49 @@ export default {
element: element4
}
]
- if (this.criterionType === 0 && this.readingTool === 0) {
- const volumeElement1 = this.$refs['viewport-volume-0'][0].$el
- const volumeElement2 = this.$refs['viewport-volume-1'][0].$el
- const volumeElement3 = this.$refs['viewport-volume-2'][0].$el
+ if (this.readingTool === 3) {
+ viewportInputArray = [
+ {
+ viewportId: 'viewport-0',
+ type: ViewportType.ORTHOGRAPHIC,
+ element: element1,
+ defaultOptions: {
+ orientation: Enums.OrientationAxis.AXIAL
+ }
+ },
+ {
+ viewportId: 'viewport-1',
+ type: ViewportType.ORTHOGRAPHIC,
+ element: element2,
+ defaultOptions: {
+ orientation: Enums.OrientationAxis.AXIAL
+ }
+ },
+ {
+ viewportId: 'viewport-2',
+ type: ViewportType.ORTHOGRAPHIC,
+ element: element3,
+ defaultOptions: {
+ orientation: Enums.OrientationAxis.AXIAL
+ }
+ },
+ {
+ viewportId: 'viewport-3',
+ type: ViewportType.ORTHOGRAPHIC,
+ element: element4,
+ defaultOptions: {
+ orientation: Enums.OrientationAxis.AXIAL
+ }
+ }
+ ]
+ }
+ if ((this.criterionType === 0 && this.readingTool === 0) || this.readingTool === 3) {
+ const volumeElement1 = this.$refs['viewport-MPR-0'][0].$el
+ const volumeElement2 = this.$refs['viewport-MPR-1'][0].$el
+ const volumeElement3 = this.$refs['viewport-MPR-2'][0].$el
const arr = [
{
- viewportId: 'viewport-volume-0',
+ viewportId: 'viewport-MPR-0',
type: ViewportType.ORTHOGRAPHIC,
element: volumeElement1,
defaultOptions: {
@@ -1112,7 +1235,7 @@ export default {
}
},
{
- viewportId: 'viewport-volume-1',
+ viewportId: 'viewport-MPR-1',
type: ViewportType.ORTHOGRAPHIC,
element: volumeElement2,
defaultOptions: {
@@ -1120,7 +1243,7 @@ export default {
}
},
{
- viewportId: 'viewport-volume-2',
+ viewportId: 'viewport-MPR-2',
type: ViewportType.ORTHOGRAPHIC,
element: volumeElement3,
defaultOptions: {
@@ -1198,14 +1321,14 @@ export default {
cornerstoneTools.addTool(MIPJumpToClickTool)
cornerstoneTools.addTool(VolumeRotateTool)
cornerstoneTools.addTool(CrosshairsTool)
-
+ cornerstoneTools.addTool(PlanarFreehandContourSegmentationTool)
+ cornerstoneTools.addTool(BrushTool)
viewportIds.forEach((viewportId, i) => {
// const toolGroupId = `viewport-${i}`
let toolGroupId = viewportId
if (volumeViewportIds.includes(viewportId)) {
toolGroupId = this.volumeToolGroupId
}
-
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId) ? ToolGroupManager.getToolGroup(toolGroupId) : ToolGroupManager.createToolGroup(toolGroupId)
toolGroup.addViewport(viewportId, renderingEngineId)
toolGroup.addTool(StackScrollTool.toolName, {
@@ -1215,6 +1338,44 @@ export default {
toolGroup.addTool(PanTool.toolName)
toolGroup.addTool(ZoomTool.toolName)
+ toolGroup.addTool(BrushTool.toolName)
+ if (this.readingTool === 3 || toolGroupId === this.volumeToolGroupId) {
+ toolGroup.addToolInstance(
+ 'CircularBrush',
+ BrushTool.toolName,
+ {
+ activeStrategy: 'FILL_INSIDE_CIRCLE',
+ preview: {
+ previewColors: {}
+ }
+ }
+ );
+ toolGroup.addToolInstance(
+ 'CircularEraser',
+ BrushTool.toolName,
+ {
+ activeStrategy: 'ERASE_INSIDE_CIRCLE',
+ preview: {
+ previewColors: {}
+ }
+
+ }
+ )
+ toolGroup.addTool(PlanarFreehandContourSegmentationTool.toolName, {
+ cachedStats: true,
+ });
+ // toolGroup.setToolActive(PlanarFreehandContourSegmentationTool.toolName, {
+ // bindings: [
+ // {
+ // mouseButton: MouseBindings.Primary, // Left Click
+ // },
+ // {
+ // mouseButton: MouseBindings.Primary, // Shift + Left Click
+ // modifierKey: cornerstoneTools.Enums.KeyboardBindings.Shift,
+ // },
+ // ],
+ // });
+ }
if (volumeViewportIds.includes(viewportId)) {
toolGroup.addTool(WindowLevelTool.toolName, {
targetViewportIds: volumeViewportIds
@@ -1251,7 +1412,8 @@ export default {
// cachedStats: false
})
toolGroup.addTool(BidirectionalTool.toolName, {
- // cachedStats: true
+ // cachedStats: true,
+ actions: this.actionConfiguration,
getTextLines: this.getBidirectionalToolTextLines
})
toolGroup.addTool(CircleROITool.toolName, {
@@ -1308,9 +1470,6 @@ export default {
toolGroup.setToolActive(PanTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Auxiliary }]
})
- // toolGroup.setToolEnabled(ScaleOverlayTool.toolName);
- // toolGroup.setToolPassive(PanTool.toolName)
- // toolGroup.setToolPassive(ZoomTool.toolName)
toolGroup.setToolPassive(WindowLevelTool.toolName)
toolGroup.setToolPassive(WindowLevelRegionTool.toolName)
toolGroup.setToolPassive(PlanarRotateTool.toolName)
@@ -1326,6 +1485,7 @@ export default {
toolGroup.setToolPassive(FixedRadiusCircleROITool.toolName)
toolGroup.setToolPassive(AngleTool.toolName)
toolGroup.setToolPassive(CobbAngleTool.toolName)
+ if (this.readingTool === 3) toolGroup.setToolPassive(PlanarFreehandContourSegmentationTool.toolName)
} else {
toolGroup.setToolEnabled(ArrowAnnotateTool.toolName)
toolGroup.setToolEnabled(RectangleROITool.toolName)
@@ -1337,6 +1497,7 @@ export default {
toolGroup.setToolEnabled(FixedRadiusCircleROITool.toolName)
toolGroup.setToolEnabled(AngleTool.toolName)
toolGroup.setToolEnabled(CobbAngleTool.toolName)
+ if (this.readingTool === 3) toolGroup.setToolEnabled(PlanarFreehandContourSegmentationTool.toolName)
}
toolGroup.setToolPassive(EraserTool.toolName)
})
@@ -1346,7 +1507,7 @@ export default {
if (this.readingTool === 2) {
this.setUpSynchronizers()
}
- if (this.criterionType === 0 && this.readingTool === 0) {
+ if ((this.criterionType === 0 && this.readingTool === 0) || this.readingTool === 3) {
this.setUpSynchronizersMPR()
}
},
@@ -1500,7 +1661,6 @@ export default {
this.$refs[`ecrf_${this.lastViewportTaskId}`][0].setAnnotation({ annotation, toolName: annotation.metadata.toolName })
this.markedSeriesIds.push(series.Id)
}
-
this.setToolsPassive()
},
annotationModifiedListener(e) {
@@ -1516,6 +1676,7 @@ export default {
this.$refs[`ecrf_${this.lastViewportTaskId}`][0].modifyAnnotation({ annotation, toolName: annotation.metadata.toolName })
}
this.setToolsPassive()
+
},
annotationRemovedListener(e) {
const { annotation } = e.detail
@@ -1552,9 +1713,10 @@ export default {
if (!annotation) return
const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName)
if (i === -1) {
- this.setToolsPassive()
+ if (annotation.metadata.toolName !== PlanarFreehandContourSegmentationTool.toolName) this.setToolsPassive()
return
}
+ if (annotation.data.segmentation || annotation.data.segment) return
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series
if (series && series.TaskInfo.VisitTaskId && series.TaskInfo.VisitTaskId === this.taskInfo.VisitTaskId) {
@@ -1593,7 +1755,6 @@ export default {
// }
}
}
-
this.setToolsPassive()
},
validMarkName(markName) {
@@ -1639,9 +1800,10 @@ export default {
if (!annotation) return
const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName)
if (i === -1) {
- this.setToolsPassive()
+ if (annotation.metadata.toolName !== PlanarFreehandContourSegmentationTool.toolName) this.setToolsPassive()
return
}
+ if (annotation.data.segmentation || annotation.data.segment) return
if (!annotation.data.label) return
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series
@@ -1672,6 +1834,7 @@ export default {
// 临时标记
return
}
+ if (annotation.data.segmentation || annotation.data.segment) return
if (annotation.visitTaskId === this.taskInfo.VisitTaskId) {
const isBound = this.$refs[`ecrf_${annotation.visitTaskId}`][0].verifyAnnotationIsBound(annotation)
if (isBound && this.activeTool === 'Eraser') {
@@ -1724,6 +1887,9 @@ export default {
},
contentMouseup(e) {
console.log('contentMouseup')
+ if (this.$refs.Segmentations) {
+ this.$refs.Segmentations.contentMouseup()
+ }
if (this.curOperation.type === 'Modified') {
let annotation = this.curOperation.annotation
this.saveCustomAnnotation(annotation)
@@ -2270,6 +2436,7 @@ export default {
if (!obj.isCanActiveTool) {
if (this.activeTool === toolName) {
this.setToolsPassive()
+
}
this.tools[i].isDisabled = true
e.target.style.cursor = 'not-allowed'
@@ -2282,6 +2449,7 @@ export default {
// 旋转视口
setViewportRotate(value) {
this.setToolsPassive()
+
const renderingEngine = getRenderingEngine(renderingEngineId)
const viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
const viewport = renderingEngine.getViewport(viewportId)
@@ -2620,6 +2788,7 @@ export default {
this.cols = 1
this.activeViewportIndex = 0
this.setToolsPassive()
+
}
if (taskIndex === this.activeTaskIndex) return
if (!this.selectArr.includes(taskInfo.VisitTaskId)) {
@@ -2865,13 +3034,23 @@ export default {
const i = this.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
if (i === -1) return
const studyList = this.visitTaskList[i].StudyList
- let series = this.getMarkedSeries(studyList, obj.annotation, true)
+ let series = null
+ if (obj.segment) {
+ let study = studyList.find(item => item.StudyId === obj.segmentGroup.StudyId)
+ series = study.SeriesList.find(item => item.Id === obj.segmentGroup.SeriesId)
+ let sliceIndex = obj.segment.bidirectional.sliceIndex || 0
+ series.SliceIndex = series.InstanceCount - 1 - sliceIndex
+ series.segment = obj.segment
+ } else {
+ series = this.getMarkedSeries(studyList, obj.annotation, true)
+ }
+
if (series) {
if (this.isFusion && series.SeriesInstanceUid !== this.fusionSerieId.ct && series.SeriesInstanceUid !== this.fusionSerieId.pt) {
return await this.$confirm(this.$t('trials:reading:confirm:fusionPTOrCTInconsistent'))
}
this.activeViewportIndex = this.cells.length - 1
- if (obj.annotation.from === 'MPR') {
+ if (obj.annotation && obj.annotation.from === 'MPR') {
let viewPlaneNormal = obj.annotation?.metadata?.viewPlaneNormal.map(i => i == 0 ? 0 : i).join(',')
if (viewPlaneNormal === '0,0,-1') {
this.activeViewportIndex = 0
@@ -2906,7 +3085,7 @@ export default {
}
}
}
- this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(series, true)
+ this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(series, obj.segment ? false : true)
this.$refs[series.TaskInfo.VisitTaskId][0].setSeriesActive(series.StudyIndex, series.SeriesIndex)
}
},
@@ -3087,7 +3266,6 @@ export default {
if (obj.isActiveTarget && obj.SplitOrMergeType !== '1' && obj.SplitOrMergeType !== '3') {
this.setToolToTarget(obj)
}
-
resolve()
})
},
@@ -3097,6 +3275,7 @@ export default {
const toolName = obj.markTool
if (this.activeTool) {
this.setToolsPassive()
+
}
const toolGroupId = this.isMPR ? this.volumeToolGroupId : `${this.viewportKey}-${this.activeViewportIndex}`
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
@@ -3317,9 +3496,9 @@ export default {
syncColormap: false
})
let viewportIds = [
- `viewport-volume-0`,
- `viewport-volume-1`,
- `viewport-volume-2`
+ `viewport-MPR-0`,
+ `viewport-MPR-1`,
+ `viewport-MPR-2`
]
viewportIds.forEach((viewportId) => {
MPRVoiSynchronizer.add({
@@ -3331,9 +3510,9 @@ export default {
// Add viewports to VOI synchronizers
[
- `viewport-volume-0`,
- `viewport-volume-1`,
- `viewport-volume-2`
+ `viewport-MPR-0`,
+ `viewport-MPR-1`,
+ `viewport-MPR-2`
].forEach((viewportId) => {
synchronizer.add({
renderingEngineId: this.renderingEngineId,
@@ -3360,7 +3539,7 @@ export default {
return new Promise(async (resolve, reject) => {
if (this.isMPR) {
if (!data) return resolve(false)
- let viewportSeries = this.$refs[`viewport-volume-0`][0].series
+ let viewportSeries = this.$refs[`viewport-MPR-0`][0].series
if (data && viewportSeries.SeriesInstanceUid === data.SeriesInstanceUid) return resolve(true)
}
if (!data) {
@@ -3378,8 +3557,8 @@ export default {
if (!res) return false
}
this.isMPR = true
- this.rows = 3
- this.cols = 1
+ // this.rows = 3
+ // this.cols = 1
this.loading = true
this.loadingText = this.$t('trials:lugano:message:loadVolumes')
if (!data) this.activeViewportIndex = 0
@@ -3388,9 +3567,9 @@ export default {
await this.getVolume(series)
this.loading = false
this.loadingText = null
- this.$refs[`viewport-volume-0`][0].setSeriesInfo(Object.assign({ orientation: 'AXIAL', isLocation: data && this.activeViewportIndex === 0 }, series))
- this.$refs[`viewport-volume-1`][0].setSeriesInfo(Object.assign({ orientation: 'SAGITTAL', isLocation: data && this.activeViewportIndex === 1 }, series))
- this.$refs[`viewport-volume-2`][0].setSeriesInfo(Object.assign({ orientation: 'CORONAL', isLocation: data && this.activeViewportIndex === 2 }, 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-2`][0].setSeriesInfo(Object.assign({ orientation: 'CORONAL', isLocation: data && this.activeViewportIndex === 2 }, series))
resolve(false)
})
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue
new file mode 100644
index 00000000..99343aba
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue
@@ -0,0 +1,193 @@
+
+
+
+
+ handleChange(e, 'study')">
+
+
+
+
+
+ handleChange(e, 'series')">
+
+
+
+
+
+ handleChange(e, 'segmentGroup')">
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:confirm') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue
new file mode 100644
index 00000000..72c8da66
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue
@@ -0,0 +1,1649 @@
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:title:tools') }}
+
+
+
+
+ {{ $t('trials:reading:Segmentations:title:EraserConfig') }}
+
+
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:title:Segment') }}
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:button:addSegment') }}
+
+
+
+
+
{{ $t('trials:reading:Segmentations:title:Show:Fill&Outline') }}
+
+
+
+ {{ $t('trials:reading:Segmentations:title:Opacity') }}
+
+
+
+ {{ $t('trials:reading:Segmentations:title:Border') }}
+
+
+
+
+
+
+ {{
+ $t('trials:reading:Segmentations:title:InactiveSegmentationsShow')
+ }}
+
+
+ {{ $t('trials:reading:Segmentations:title:Opacity') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:button:addSegmentGroup') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:renameSegmentGroup') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:exportSegmentGroup') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:deleteSegmentGroup') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:button:addSegment') }}
+
+ i.segmentationId === segmentationId))" />
+
+
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:button:getBidirectional') }}
+
+
+
+ L:{{ Number(item.bidirectional.maxMajor).toFixed(2) }} mm
+ s:{{ Number(item.bidirectional.maxMinor).toFixed(2) }} mm
+
+
+
+
+
+
+
+
+ {{ k }}
+ {{ Number(item.stats[k].value).toFixed(2)
+ }}{{ item.stats[k].unit }}
+
+
+ {{ item.segmentIndex }}
+
+
+
changeColor(e, item)">
+
{{ item.SegmentLabel }}
+
+
+
+
+
+
+
+ {{ $t('trials:reading:Segmentations:button:renameSegmentGroup') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:deleteSegmentGroup') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:lockSegment') }}
+
+
+ {{ $t('trials:reading:Segmentations:button:unlockSegment') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("common:button:save") }}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue
index 1f14339d..3846018d 100644
--- a/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue
@@ -1,16 +1,10 @@
-
+
{{ taskInfo.SubjectCode }}
-
+
{{ visitTaskInfo.TaskBlindName }}
@@ -18,15 +12,14 @@
-