Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
74f3852ecc
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="container" style="width:100%;height:100%" class="dicom-container">
|
<div ref="container" style="width:100%;height:100%" class="dicom-container">
|
||||||
<!-- 访视阅片 -->
|
<!-- 访视阅片 -->
|
||||||
<div v-if="readingCategory=== 1 && (CriterionType === 7 || CriterionType === 1 )" class="reading-wrapper">
|
<div v-if="readingCategory=== 1 && (CriterionType === 7 || ((CriterionType === 1 || CriterionType === 0) && readingVersionEnum === 1)) " class="reading-wrapper">
|
||||||
<VisitReview />
|
<VisitReview />
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="(isReadingTaskViewInOrder === 1 || ((isReadingTaskViewInOrder !== 1) && isShow)) && readingCategory=== 1 && CriterionType !== 0" class="reading-wrapper">
|
<div v-else-if="(isReadingTaskViewInOrder === 1 || ((isReadingTaskViewInOrder !== 1) && isShow)) && readingCategory=== 1 && CriterionType !== 0" class="reading-wrapper">
|
||||||
|
@ -234,7 +234,8 @@ export default {
|
||||||
isFullscreen: false,
|
isFullscreen: false,
|
||||||
tipVisible: false,
|
tipVisible: false,
|
||||||
closeCDVisible: false,
|
closeCDVisible: false,
|
||||||
cdVisitTaskId: ''
|
cdVisitTaskId: '',
|
||||||
|
readingVersionEnum: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -346,6 +347,7 @@ export default {
|
||||||
localStorage.setItem('IsExistUnprocessedFeedback', res.Result.IsExistUnprocessedFeedback)
|
localStorage.setItem('IsExistUnprocessedFeedback', res.Result.IsExistUnprocessedFeedback)
|
||||||
localStorage.setItem('taskInfo', JSON.stringify(res.Result))
|
localStorage.setItem('taskInfo', JSON.stringify(res.Result))
|
||||||
this.readingCategory = res.Result.ReadingCategory
|
this.readingCategory = res.Result.ReadingCategory
|
||||||
|
this.readingVersionEnum = res.Result.ReadingVersionEnum
|
||||||
this.questionFormChangeState = false
|
this.questionFormChangeState = false
|
||||||
this.questionFormChangeNum = 0
|
this.questionFormChangeNum = 0
|
||||||
if (this.isExistsClinicalData && this.isNeedReadClinicalData && !this.isReadClinicalData) {
|
if (this.isExistsClinicalData && this.isNeedReadClinicalData && !this.isReadClinicalData) {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
v-if="selectArr.includes(s.VisitTaskId) && s.StudyList.length > 0"
|
v-if="selectArr.includes(s.VisitTaskId) && s.StudyList.length > 0"
|
||||||
:ref="s.VisitTaskId"
|
:ref="s.VisitTaskId"
|
||||||
:visit-task-info="s"
|
:visit-task-info="s"
|
||||||
:markedSeriesIds="markedSeriesIds"
|
:marked-series-ids="markedSeriesIds"
|
||||||
@activeSeries="activeSeries"
|
@activeSeries="activeSeries"
|
||||||
@showMultiFrame="showMultiFrame"
|
@showMultiFrame="showMultiFrame"
|
||||||
/>
|
/>
|
||||||
|
@ -366,9 +366,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 自定义调窗 -->
|
<!-- 自定义调窗 -->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-if="customWwc.visible"
|
v-if="customWwc.visible"
|
||||||
|
@ -473,7 +473,7 @@ import {
|
||||||
import * as cornerstoneTools from '@cornerstonejs/tools'
|
import * as cornerstoneTools from '@cornerstonejs/tools'
|
||||||
import initLibraries from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/initLibraries'
|
import initLibraries from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/initLibraries'
|
||||||
import html2canvas from 'html2canvas'
|
import html2canvas from 'html2canvas'
|
||||||
import { getTools } from './toolConfig'
|
import { getTools, getCustomizeStandardsTools } from './toolConfig'
|
||||||
import StudyList from './StudyList'
|
import StudyList from './StudyList'
|
||||||
import Viewport from './Viewport'
|
import Viewport from './Viewport'
|
||||||
import mRecisit from './mRecist/QuestionList'
|
import mRecisit from './mRecist/QuestionList'
|
||||||
|
@ -687,34 +687,11 @@ export default {
|
||||||
const digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
const digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
||||||
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
|
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
|
||||||
if (this.criterionType === 0) {
|
if (this.criterionType === 0) {
|
||||||
this.tools = [{
|
this.tools = getCustomizeStandardsTools(this.taskInfo.ReadingToolList)
|
||||||
"name": "直径测量工具",
|
|
||||||
"icon": "length",
|
|
||||||
"toolName": "Length",
|
|
||||||
"i18nKey": "trials:reading:button:length",
|
|
||||||
"isDisabled": false,
|
|
||||||
"disabledReason": ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "矩形工具",
|
|
||||||
"icon": "rectangle",
|
|
||||||
"toolName": "RectangleROI",
|
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
|
||||||
"isDisabled": false,
|
|
||||||
"disabledReason": ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "箭头工具",
|
|
||||||
"icon": "arrow",
|
|
||||||
"toolName": "ArrowAnnotate",
|
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
|
||||||
"isDisabled": false,
|
|
||||||
"disabledReason": ''
|
|
||||||
}]
|
|
||||||
} else {
|
} else {
|
||||||
this.tools = getTools(this.criterionType)
|
this.tools = getTools(this.criterionType)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.trialId = this.$route.query.trialId
|
this.trialId = this.$route.query.trialId
|
||||||
this.readingTaskState = this.taskInfo.ReadingTaskState
|
this.readingTaskState = this.taskInfo.ReadingTaskState
|
||||||
if (!this.taskInfo.IsBaseLine && this.taskInfo.IsReadingTaskViewInOrder !== 0) {
|
if (!this.taskInfo.IsBaseLine && this.taskInfo.IsReadingTaskViewInOrder !== 0) {
|
||||||
|
@ -765,14 +742,14 @@ export default {
|
||||||
}
|
}
|
||||||
if (item.IsCurrentTask) {
|
if (item.IsCurrentTask) {
|
||||||
this.markedSeriesIds = []
|
this.markedSeriesIds = []
|
||||||
annotations.map(i=> {
|
annotations.map(i => {
|
||||||
if (i.MeasureData && i.MeasureData.seriesId) {
|
if (i.MeasureData && i.MeasureData.seriesId) {
|
||||||
this.markedSeriesIds.push(i.MeasureData.seriesId)
|
this.markedSeriesIds.push(i.MeasureData.seriesId)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.visitTaskList.push({
|
this.visitTaskList.push({
|
||||||
...item,
|
...item,
|
||||||
StudyList: studyList,
|
StudyList: studyList,
|
||||||
|
@ -806,7 +783,7 @@ export default {
|
||||||
let keySeriesIndex = -1
|
let keySeriesIndex = -1
|
||||||
// const arr = [res1.Result[0]]
|
// const arr = [res1.Result[0]]
|
||||||
const arr = res1.Result
|
const arr = res1.Result
|
||||||
arr.forEach((study, studyIndex) => {
|
arr.forEach((study, studyIndex) => {
|
||||||
study.SeriesList.forEach((series, seriesIndex) => {
|
study.SeriesList.forEach((series, seriesIndex) => {
|
||||||
const imageIds = []
|
const imageIds = []
|
||||||
const stack = []
|
const stack = []
|
||||||
|
@ -862,7 +839,7 @@ export default {
|
||||||
// 获取标注信息
|
// 获取标注信息
|
||||||
let res2 = null
|
let res2 = null
|
||||||
if (this.criterionType === 0) {
|
if (this.criterionType === 0) {
|
||||||
res2 = await getCustomTag({visitTaskId: taskId})
|
res2 = await getCustomTag({ visitTaskId: taskId })
|
||||||
} else {
|
} else {
|
||||||
res2 = await getTableAnswerRowInfoList(taskId)
|
res2 = await getTableAnswerRowInfoList(taskId)
|
||||||
}
|
}
|
||||||
|
@ -939,7 +916,7 @@ export default {
|
||||||
// 初始化加载器
|
// 初始化加载器
|
||||||
async initLoader() {
|
async initLoader() {
|
||||||
await initLibraries()
|
await initLibraries()
|
||||||
cache.setMaxCacheSize(6 * 1024 * 1024 * 1024);
|
cache.setMaxCacheSize(6 * 1024 * 1024 * 1024)
|
||||||
let renderingEngine = getRenderingEngine(renderingEngineId)
|
let renderingEngine = getRenderingEngine(renderingEngineId)
|
||||||
if (!renderingEngine) {
|
if (!renderingEngine) {
|
||||||
renderingEngine = new RenderingEngine(renderingEngineId)
|
renderingEngine = new RenderingEngine(renderingEngineId)
|
||||||
|
@ -1129,6 +1106,7 @@ export default {
|
||||||
// })
|
// })
|
||||||
},
|
},
|
||||||
renderAnnotations(series) {
|
renderAnnotations(series) {
|
||||||
|
console.log('renderAnnotations')
|
||||||
const taskId = series.TaskInfo.VisitTaskId
|
const taskId = series.TaskInfo.VisitTaskId
|
||||||
if (!taskId || this.renderedTaskIds.includes(taskId)) return
|
if (!taskId || this.renderedTaskIds.includes(taskId)) return
|
||||||
this.renderedTaskIds.push(taskId)
|
this.renderedTaskIds.push(taskId)
|
||||||
|
@ -1179,9 +1157,9 @@ export default {
|
||||||
console.log(arr)
|
console.log(arr)
|
||||||
},
|
},
|
||||||
annotationAddedListener(e) {
|
annotationAddedListener(e) {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
annotationCompletedListener(e) {
|
annotationCompletedListener(e) {
|
||||||
console.log('Completed')
|
console.log('Completed')
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
|
@ -1199,12 +1177,12 @@ export default {
|
||||||
annotation.sliceThickness = series.SliceThickness
|
annotation.sliceThickness = series.SliceThickness
|
||||||
annotation.numberOfFrames = isNaN(parseInt(params.frame)) ? null : parseInt(params.frame)
|
annotation.numberOfFrames = isNaN(parseInt(params.frame)) ? null : parseInt(params.frame)
|
||||||
annotation.markTool = annotation.metadata.toolName
|
annotation.markTool = annotation.metadata.toolName
|
||||||
|
|
||||||
// this.$refs['ecrf'].setAnnotation({ annotation, toolName: annotation.metadata.toolName })
|
// this.$refs['ecrf'].setAnnotation({ annotation, toolName: annotation.metadata.toolName })
|
||||||
this.$refs[`ecrf_${this.lastViewportTaskId}`][0].setAnnotation({ annotation, toolName: annotation.metadata.toolName })
|
this.$refs[`ecrf_${this.lastViewportTaskId}`][0].setAnnotation({ annotation, toolName: annotation.metadata.toolName })
|
||||||
this.markedSeriesIds.push(series.Id)
|
this.markedSeriesIds.push(series.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setToolsPassive()
|
this.setToolsPassive()
|
||||||
},
|
},
|
||||||
annotationModifiedListener(e) {
|
annotationModifiedListener(e) {
|
||||||
|
@ -1249,22 +1227,21 @@ export default {
|
||||||
annotation.numberOfFrames = isNaN(parseInt(params.frame)) ? null : parseInt(params.frame)
|
annotation.numberOfFrames = isNaN(parseInt(params.frame)) ? null : parseInt(params.frame)
|
||||||
annotation.markTool = annotation.metadata.toolName
|
annotation.markTool = annotation.metadata.toolName
|
||||||
this.markedSeriesIds.push(series.Id)
|
this.markedSeriesIds.push(series.Id)
|
||||||
let markName = await this.customPrompt()
|
const markName = await this.customPrompt()
|
||||||
if (markName) {
|
if (markName) {
|
||||||
annotation.data.label = markName
|
annotation.data.label = markName
|
||||||
this.saveCustomAnnotation(annotation)
|
this.saveCustomAnnotation(annotation)
|
||||||
} else {
|
} else {
|
||||||
this.removeAnnotation(annotation)
|
this.removeAnnotation(annotation)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setToolsPassive()
|
this.setToolsPassive()
|
||||||
},
|
},
|
||||||
async saveCustomAnnotation(annotation) {
|
async saveCustomAnnotation(annotation) {
|
||||||
try {
|
try {
|
||||||
let measureData = Object.assign({}, annotation)
|
const measureData = Object.assign({}, annotation)
|
||||||
let params = {}
|
const params = {}
|
||||||
params.VisitTaskId = annotation.visitTaskId
|
params.VisitTaskId = annotation.visitTaskId
|
||||||
params.StudyId = annotation.studyId
|
params.StudyId = annotation.studyId
|
||||||
params.SeriesId = annotation.seriesId
|
params.SeriesId = annotation.seriesId
|
||||||
|
@ -1272,10 +1249,10 @@ export default {
|
||||||
params.Id = annotation.id ? annotation.id : ''
|
params.Id = annotation.id ? annotation.id : ''
|
||||||
params.MeasureData = JSON.stringify(measureData)
|
params.MeasureData = JSON.stringify(measureData)
|
||||||
params.NumberOfFrames = annotation.numberOfFrames
|
params.NumberOfFrames = annotation.numberOfFrames
|
||||||
let res = await submitCustomTag(params)
|
const res = await submitCustomTag(params)
|
||||||
annotation.id = res.Result
|
annotation.id = res.Result
|
||||||
console.log(res)
|
console.log(res)
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1320,7 +1297,7 @@ export default {
|
||||||
// 获取标注信息
|
// 获取标注信息
|
||||||
let res = null
|
let res = null
|
||||||
if (this.criterionType === 0) {
|
if (this.criterionType === 0) {
|
||||||
res = await getCustomTag({visitTaskId: visitTaskId})
|
res = await getCustomTag({ visitTaskId: visitTaskId })
|
||||||
} else {
|
} else {
|
||||||
res = await getTableAnswerRowInfoList(visitTaskId)
|
res = await getTableAnswerRowInfoList(visitTaskId)
|
||||||
}
|
}
|
||||||
|
@ -1346,7 +1323,7 @@ export default {
|
||||||
// 获取标注信息
|
// 获取标注信息
|
||||||
let res = null
|
let res = null
|
||||||
if (this.criterionType === 0) {
|
if (this.criterionType === 0) {
|
||||||
res = await getCustomTag({visitTaskId: visitTaskId})
|
res = await getCustomTag({ visitTaskId: visitTaskId })
|
||||||
} else {
|
} else {
|
||||||
res = await getTableAnswerRowInfoList(visitTaskId)
|
res = await getTableAnswerRowInfoList(visitTaskId)
|
||||||
}
|
}
|
||||||
|
@ -1367,6 +1344,13 @@ export default {
|
||||||
cornerstoneTools.annotation.state.removeAnnotation(i.annotationUID)
|
cornerstoneTools.annotation.state.removeAnnotation(i.annotationUID)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
annotations.map(i => {
|
||||||
|
if (i.MeasureData) {
|
||||||
|
const annotation = i.MeasureData
|
||||||
|
cornerstoneTools.annotation.state.addAnnotation(annotation)
|
||||||
|
this.markedSeriesIds.push(annotation.seriesId)
|
||||||
|
}
|
||||||
|
})
|
||||||
const renderingEngine = getRenderingEngine(renderingEngineId)
|
const renderingEngine = getRenderingEngine(renderingEngineId)
|
||||||
for (let i = 0; i < this.cells.length; i++) {
|
for (let i = 0; i < this.cells.length; i++) {
|
||||||
const viewportId = `viewport-${i}`
|
const viewportId = `viewport-${i}`
|
||||||
|
@ -1380,6 +1364,7 @@ export default {
|
||||||
if (idx === -1) return
|
if (idx === -1) return
|
||||||
if (annotations[idx].metadata.toolName === 'ArrowAnnotate') {
|
if (annotations[idx].metadata.toolName === 'ArrowAnnotate') {
|
||||||
annotations[idx].data.text = obj.name
|
annotations[idx].data.text = obj.name
|
||||||
|
annotations[idx].data.label = obj.name
|
||||||
} else {
|
} else {
|
||||||
annotations[idx].data.label = obj.name
|
annotations[idx].data.label = obj.name
|
||||||
}
|
}
|
||||||
|
@ -1795,9 +1780,9 @@ export default {
|
||||||
bindHotKey() {
|
bindHotKey() {
|
||||||
const container = this.$refs['container']
|
const container = this.$refs['container']
|
||||||
container.addEventListener('keydown', event => {
|
container.addEventListener('keydown', event => {
|
||||||
let idx = this.hotKeyList.findIndex(i => i.code === event.code && i.ctrlKey === event.ctrlKey && i.shiftKey === event.shiftKey && i.altKey === event.altKey)
|
const idx = this.hotKeyList.findIndex(i => i.code === event.code && i.ctrlKey === event.ctrlKey && i.shiftKey === event.shiftKey && i.altKey === event.altKey)
|
||||||
if (idx === -1) return
|
if (idx === -1) return
|
||||||
let shortcutKeyEnum = this.hotKeyList[idx].shortcutKeyEnum
|
const shortcutKeyEnum = this.hotKeyList[idx].shortcutKeyEnum
|
||||||
|
|
||||||
if (shortcutKeyEnum === 1) {
|
if (shortcutKeyEnum === 1) {
|
||||||
// 前一图像视口
|
// 前一图像视口
|
||||||
|
@ -1890,7 +1875,6 @@ export default {
|
||||||
fitToType(forceFitToWindow) {
|
fitToType(forceFitToWindow) {
|
||||||
this.forceFitToWindow = !forceFitToWindow
|
this.forceFitToWindow = !forceFitToWindow
|
||||||
this.$refs[`viewport-${this.activeViewportIndex}`][0].resize(forceFitToWindow)
|
this.$refs[`viewport-${this.activeViewportIndex}`][0].resize(forceFitToWindow)
|
||||||
|
|
||||||
},
|
},
|
||||||
// 切换全屏
|
// 切换全屏
|
||||||
toggleFullScreen(e, index) {
|
toggleFullScreen(e, index) {
|
||||||
|
@ -2596,7 +2580,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.personal_config {
|
.personal_config {
|
||||||
::v-deep .el-tabs__content{
|
::v-deep .el-tabs__content{
|
||||||
height: 450px;
|
height: 450px;
|
||||||
|
|
|
@ -1306,11 +1306,10 @@ export default {
|
||||||
this.activeName = ''
|
this.activeName = ''
|
||||||
}
|
}
|
||||||
loading.close()
|
loading.close()
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
loading.close()
|
loading.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
// 上传截图
|
// 上传截图
|
||||||
async uploadScreenshots(fileName, file) {
|
async uploadScreenshots(fileName, file) {
|
||||||
|
@ -1377,9 +1376,6 @@ export default {
|
||||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'IsLymphNodes', i.val)
|
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'IsLymphNodes', i.val)
|
||||||
} else if (i.questionMark === 5) {
|
} else if (i.questionMark === 5) {
|
||||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionOrgan', i.val)
|
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionOrgan', i.val)
|
||||||
if (innerForm.LesionType === 2) {
|
|
||||||
this.setNewTargetState(obj.tableId, obj.rowIndex)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1622,9 +1618,17 @@ export default {
|
||||||
let lesionLength = null
|
let lesionLength = null
|
||||||
let lesionShort = null
|
let lesionShort = null
|
||||||
if (innerForm.MeasureData) {
|
if (innerForm.MeasureData) {
|
||||||
// 有标记时保留标记(标记需要修改标注名称)、短径、长径的值
|
if (innerForm.MeasureData.metadata.toolName === 'Length') {
|
||||||
lesionLength = innerForm.LesionLength ? innerForm.LesionLength : null
|
const referencedImageId = innerForm.MeasureData.metadata.referencedImageId
|
||||||
lesionShort = innerForm.LesionShort ? innerForm.LesionShort : null
|
const length = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||||
|
lesionLength = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
|
} else if (innerForm.MeasureData.metadata.toolName === 'Bidirectional') {
|
||||||
|
const referencedImageId = innerForm.MeasureData.metadata.referencedImageId
|
||||||
|
const length = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||||
|
lesionLength = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
|
const short = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].width
|
||||||
|
lesionShort = short ? parseFloat(short).toFixed(this.digitPlaces) : short
|
||||||
|
}
|
||||||
this.$emit('setMarkName', {
|
this.$emit('setMarkName', {
|
||||||
annotationUID: innerForm.MeasureData.annotationUID,
|
annotationUID: innerForm.MeasureData.annotationUID,
|
||||||
name: answer.LesionName
|
name: answer.LesionName
|
||||||
|
|
|
@ -110,10 +110,10 @@ import {
|
||||||
utilities as csUtils
|
utilities as csUtils
|
||||||
} from '@cornerstonejs/core'
|
} from '@cornerstonejs/core'
|
||||||
import * as cornerstoneTools from '@cornerstonejs/tools'
|
import * as cornerstoneTools from '@cornerstonejs/tools'
|
||||||
import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';
|
import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'
|
||||||
const {
|
// const {
|
||||||
ToolGroupManager
|
// ToolGroupManager
|
||||||
} = cornerstoneTools
|
// } = cornerstoneTools
|
||||||
import { vec3 } from 'gl-matrix'
|
import { vec3 } from 'gl-matrix'
|
||||||
export default {
|
export default {
|
||||||
name: 'ImageViewport',
|
name: 'ImageViewport',
|
||||||
|
@ -312,7 +312,7 @@ export default {
|
||||||
newImageIdIndex = numImages - 1
|
newImageIdIndex = numImages - 1
|
||||||
}
|
}
|
||||||
// viewport.setImageIdIndex(newImageIdIndex)
|
// viewport.setImageIdIndex(newImageIdIndex)
|
||||||
csUtils.jumpToSlice(viewport.element, {imageIndex: newImageIdIndex})
|
csUtils.jumpToSlice(viewport.element, { imageIndex: newImageIdIndex })
|
||||||
cornerstoneTools.utilities.cine.stopClip(viewport.element)
|
cornerstoneTools.utilities.cine.stopClip(viewport.element)
|
||||||
},
|
},
|
||||||
setZoom(ratio) {
|
setZoom(ratio) {
|
||||||
|
@ -338,7 +338,6 @@ export default {
|
||||||
viewport.setZoom(1)
|
viewport.setZoom(1)
|
||||||
viewport.render()
|
viewport.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
async prefetchMetadataInformation(imageIdsToPrefetch) {
|
async prefetchMetadataInformation(imageIdsToPrefetch) {
|
||||||
let taskPromises = []
|
let taskPromises = []
|
||||||
|
@ -363,10 +362,9 @@ export default {
|
||||||
await viewport.setStack(this.series.Stack, obj.SliceIndex)
|
await viewport.setStack(this.series.Stack, obj.SliceIndex)
|
||||||
// cornerstoneTools.utilities.stackContextPrefetch.enable(viewport.element)
|
// cornerstoneTools.utilities.stackContextPrefetch.enable(viewport.element)
|
||||||
viewport.render()
|
viewport.render()
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
cornerstoneToolsMouseMove(e) {
|
cornerstoneToolsMouseMove(e) {
|
||||||
const { currentPoints } = e.detail
|
const { currentPoints } = e.detail
|
||||||
|
@ -408,7 +406,7 @@ export default {
|
||||||
this.viewportId
|
this.viewportId
|
||||||
)
|
)
|
||||||
// viewport.setImageIdIndex(sliceIdx)
|
// viewport.setImageIdIndex(sliceIdx)
|
||||||
csUtils.jumpToSlice(viewport.element, {imageIndex: sliceIdx})
|
csUtils.jumpToSlice(viewport.element, { imageIndex: sliceIdx })
|
||||||
viewport.render()
|
viewport.render()
|
||||||
},
|
},
|
||||||
sliderMouseup(e) {
|
sliderMouseup(e) {
|
||||||
|
@ -438,7 +436,7 @@ export default {
|
||||||
this.viewportId
|
this.viewportId
|
||||||
)
|
)
|
||||||
// viewport.setImageIdIndex(sliceIdx)
|
// viewport.setImageIdIndex(sliceIdx)
|
||||||
csUtils.jumpToSlice(viewport.element, {imageIndex: sliceIdx})
|
csUtils.jumpToSlice(viewport.element, { imageIndex: sliceIdx })
|
||||||
viewport.render()
|
viewport.render()
|
||||||
},
|
},
|
||||||
sliderMouseleave(e) {
|
sliderMouseleave(e) {
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
:label="$t('trials:reading:tabTitle:review')"
|
:label="$t('trials:reading:tabTitle:review')"
|
||||||
name="read"
|
name="read"
|
||||||
>
|
>
|
||||||
<read-page ref="readPage"/>
|
<read-page ref="readPage" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- 报告 -->
|
<!-- 报告 -->
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
|
@ -17,12 +17,12 @@
|
||||||
:label="$t('trials:reading:tabTitle:report')"
|
:label="$t('trials:reading:tabTitle:report')"
|
||||||
name="report"
|
name="report"
|
||||||
>
|
>
|
||||||
<report-page
|
<report-page
|
||||||
v-if="activeName === 'report' && taskInfo.CriterionType !== 0"
|
v-if="activeName === 'report' && taskInfo.CriterionType !== 0"
|
||||||
@setReadingTaskState="setReadingTaskState"
|
@setReadingTaskState="setReadingTaskState"
|
||||||
/>
|
/>
|
||||||
<customize-report-page
|
<customize-report-page
|
||||||
v-if="activeName === 'report' && taskInfo.CriterionType === 0"
|
v-if="activeName === 'report' && taskInfo.CriterionType === 0"
|
||||||
@setReadingTaskState="setReadingTaskState"
|
@setReadingTaskState="setReadingTaskState"
|
||||||
/>
|
/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
|
@ -832,9 +832,27 @@ export default {
|
||||||
async saveLesion(table, rowIndex) {
|
async saveLesion(table, rowIndex) {
|
||||||
const valid = await this.$refs[`${table.Id}_${rowIndex}`][0].validate()
|
const valid = await this.$refs[`${table.Id}_${rowIndex}`][0].validate()
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
const loading = this.$loading({ fullscreen: true })
|
let loading = null
|
||||||
try {
|
try {
|
||||||
const innerForm = this.innerFormData[`${table.Id}_${rowIndex}`]
|
const innerForm = this.innerFormData[`${table.Id}_${rowIndex}`]
|
||||||
|
if (table.LesionType === 0 && this.isBaseLineTask && !innerForm.IsLymphNodes && !innerForm.IntrahepaticLesion) {
|
||||||
|
const arr = Object.values(this.innerFormData).filter(
|
||||||
|
obj => !obj.IntrahepaticLesion && (obj.LesionOrgan === '肝脏' || obj.LesionOrgan === 'Liver') && obj.LesionType === 0 && obj.SaveTypeEnum === 2
|
||||||
|
)
|
||||||
|
|
||||||
|
if (arr.length === 0) {
|
||||||
|
const confirm = await this.$confirm(
|
||||||
|
this.$t('trials:mRecist:warnning:msg7'),
|
||||||
|
{
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (confirm !== 'confirm') return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loading = this.$loading({ fullscreen: true })
|
||||||
const measureData = innerForm.MeasureData
|
const measureData = innerForm.MeasureData
|
||||||
const lesionState = innerForm.LesionState
|
const lesionState = innerForm.LesionState
|
||||||
let lesionLength = innerForm.LesionLength
|
let lesionLength = innerForm.LesionLength
|
||||||
|
@ -842,6 +860,7 @@ export default {
|
||||||
const lymphNodes = innerForm.IsLymphNodes
|
const lymphNodes = innerForm.IsLymphNodes
|
||||||
const lesionType = table.LesionType
|
const lesionType = table.LesionType
|
||||||
const lesionPart = innerForm.LesionPart
|
const lesionPart = innerForm.LesionPart
|
||||||
|
const intrahepaticLesion = innerForm.IntrahepaticLesion
|
||||||
if (this.isBaseLineTask) {
|
if (this.isBaseLineTask) {
|
||||||
// 基线
|
// 基线
|
||||||
// 靶病灶且状态为存在(0)
|
// 靶病灶且状态为存在(0)
|
||||||
|
@ -1174,6 +1193,16 @@ export default {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
|
if (intrahepaticLesion && !(measureData && measureData.markTool === 'Length')) {
|
||||||
|
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具添加标记!
|
||||||
|
this.$confirm(this.$t('trials:mRecist:warnning:msg6'), {
|
||||||
|
type: 'warning',
|
||||||
|
showCancelButton: false,
|
||||||
|
callback: action => {}
|
||||||
|
})
|
||||||
|
loading.close()
|
||||||
|
return
|
||||||
|
}
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!
|
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||||
|
@ -1212,6 +1241,16 @@ export default {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (innerForm.IntrahepaticLesion && !(measureData && (measureData.markTool === 'Length'))) {
|
||||||
|
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具添加标记!`
|
||||||
|
this.$confirm(this.$t('trials:mRecist:warnning:msg6'), {
|
||||||
|
type: 'warning',
|
||||||
|
showCancelButton: false,
|
||||||
|
callback: action => {}
|
||||||
|
})
|
||||||
|
loading.close()
|
||||||
|
return
|
||||||
|
}
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!`
|
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!`
|
||||||
|
@ -1356,7 +1395,9 @@ export default {
|
||||||
loading.close()
|
loading.close()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
loading.close()
|
if (loading) {
|
||||||
|
loading.close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 上传截图
|
// 上传截图
|
||||||
|
@ -1704,9 +1745,17 @@ export default {
|
||||||
let lesionLength = null
|
let lesionLength = null
|
||||||
let lesionShort = null
|
let lesionShort = null
|
||||||
if (innerForm.MeasureData) {
|
if (innerForm.MeasureData) {
|
||||||
// 有标记时保留标记(标记需要修改标注名称)、短径、长径的值
|
if (innerForm.MeasureData.metadata.toolName === 'Length') {
|
||||||
lesionLength = innerForm.LesionLength ? innerForm.LesionLength : null
|
const referencedImageId = innerForm.MeasureData.metadata.referencedImageId
|
||||||
lesionShort = innerForm.LesionShort ? innerForm.LesionShort : null
|
const length = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||||
|
lesionLength = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
|
} else if (innerForm.MeasureData.metadata.toolName === 'Bidirectional') {
|
||||||
|
const referencedImageId = innerForm.MeasureData.metadata.referencedImageId
|
||||||
|
const length = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||||
|
lesionLength = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
|
const short = innerForm.MeasureData.data.cachedStats[`imageId:${referencedImageId}`].width
|
||||||
|
lesionShort = short ? parseFloat(short).toFixed(this.digitPlaces) : short
|
||||||
|
}
|
||||||
this.$emit('setMarkName', {
|
this.$emit('setMarkName', {
|
||||||
annotationUID: innerForm.MeasureData.annotationUID,
|
annotationUID: innerForm.MeasureData.annotationUID,
|
||||||
name: answer.LesionName
|
name: answer.LesionName
|
||||||
|
@ -1816,6 +1865,7 @@ export default {
|
||||||
const rowIndex = this.activeName.split('_')[1]
|
const rowIndex = this.activeName.split('_')[1]
|
||||||
const innerForm = this.innerFormData[`${tableId}_${rowIndex}`]
|
const innerForm = this.innerFormData[`${tableId}_${rowIndex}`]
|
||||||
const isLymphNodes = innerForm.IsLymphNodes
|
const isLymphNodes = innerForm.IsLymphNodes
|
||||||
|
const intrahepaticLesion = innerForm.IntrahepaticLesion
|
||||||
if (!innerForm.MeasureData) {
|
if (!innerForm.MeasureData) {
|
||||||
if (this.isBaseLineTask) {
|
if (this.isBaseLineTask) {
|
||||||
if (innerForm.LesionType === 0 && isLymphNodes === 1 && toolName !== 'Bidirectional') {
|
if (innerForm.LesionType === 0 && isLymphNodes === 1 && toolName !== 'Bidirectional') {
|
||||||
|
@ -1851,6 +1901,10 @@ export default {
|
||||||
} else if (innerForm.LesionType === 2 && isLymphNodes === 1 && toolName !== 'Bidirectional' && toolName !== 'ArrowAnnotate') {
|
} else if (innerForm.LesionType === 2 && isLymphNodes === 1 && toolName !== 'Bidirectional' && toolName !== 'ArrowAnnotate') {
|
||||||
// 淋巴结新病灶需使用长短径测量工具或箭头工具
|
// 淋巴结新病灶需使用长短径测量工具或箭头工具
|
||||||
return { isCanActiveTool: false, reason: this.$t('trials:reading:warnning:msg12') }
|
return { isCanActiveTool: false, reason: this.$t('trials:reading:warnning:msg12') }
|
||||||
|
} else if (innerForm.LesionType === 2 && isLymphNodes === 0 && toolName !== 'Length' && intrahepaticLesion) {
|
||||||
|
// 非淋巴结新病灶且是典型肝内病灶需使用直径测量工具
|
||||||
|
// 请使用直径测量工具进行非淋巴结新病灶的标记。
|
||||||
|
return { isCanActiveTool: false, reason: this.$t('trials:mRecist:warnning:msg5') }
|
||||||
} else if (innerForm.LesionType === 2 && isLymphNodes === 0 && toolName !== 'Length' && toolName !== 'ArrowAnnotate') {
|
} else if (innerForm.LesionType === 2 && isLymphNodes === 0 && toolName !== 'Length' && toolName !== 'ArrowAnnotate') {
|
||||||
// 非淋巴结新病灶需使用直径测量工具或箭头工具
|
// 非淋巴结新病灶需使用直径测量工具或箭头工具
|
||||||
return { isCanActiveTool: false, reason: this.$t('trials:reading:warnning:msg13') }
|
return { isCanActiveTool: false, reason: this.$t('trials:reading:warnning:msg13') }
|
||||||
|
|
|
@ -1,237 +1,275 @@
|
||||||
const config = {
|
const config = {
|
||||||
"standards": [
|
'standards': [
|
||||||
{
|
{
|
||||||
"type": 1,
|
'type': 1,
|
||||||
"name": "RECIST 1.1",
|
'name': 'RECIST 1.1',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "直径测量工具",
|
'name': '直径测量工具',
|
||||||
"icon": "length",
|
'icon': 'length',
|
||||||
"toolName": "Length",
|
'toolName': 'Length',
|
||||||
"i18nKey": "trials:reading:button:length",
|
'i18nKey': 'trials:reading:button:length',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "长短径测量工具",
|
'name': '长短径测量工具',
|
||||||
"icon": "bidirection",
|
'icon': 'bidirection',
|
||||||
"toolName": "Bidirectional",
|
'toolName': 'Bidirectional',
|
||||||
"i18nKey": "trials:reading:button:bidirectional",
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 2,
|
'type': 2,
|
||||||
"name": "Lugano 2014",
|
'name': 'Lugano 2014',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "直径测量工具",
|
'name': '直径测量工具',
|
||||||
"icon": "length",
|
'icon': 'length',
|
||||||
"toolName": "Length",
|
'toolName': 'Length',
|
||||||
"i18nKey": "trials:reading:button:length",
|
'i18nKey': 'trials:reading:button:length',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "长短径测量工具",
|
'name': '长短径测量工具',
|
||||||
"icon": "bidirection",
|
'icon': 'bidirection',
|
||||||
"toolName": "Bidirectional",
|
'toolName': 'Bidirectional',
|
||||||
"i18nKey": "trials:reading:button:bidirectional",
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 3,
|
'type': 3,
|
||||||
"name": "iRECIST",
|
'name': 'iRECIST',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "直径测量工具",
|
'name': '直径测量工具',
|
||||||
"icon": "length",
|
'icon': 'length',
|
||||||
"toolName": "Length",
|
'toolName': 'Length',
|
||||||
"i18nKey": "trials:reading:button:length",
|
'i18nKey': 'trials:reading:button:length',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "长短径测量工具",
|
'name': '长短径测量工具',
|
||||||
"icon": "bidirection",
|
'icon': 'bidirection',
|
||||||
"toolName": "Bidirectional",
|
'toolName': 'Bidirectional',
|
||||||
"i18nKey": "trials:reading:button:bidirectional",
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 7,
|
'type': 7,
|
||||||
"name": "mRECIST HCC",
|
'name': 'mRECIST HCC',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "直径测量工具",
|
'name': '直径测量工具',
|
||||||
"icon": "length",
|
'icon': 'length',
|
||||||
"toolName": "Length",
|
'toolName': 'Length',
|
||||||
"i18nKey": "trials:reading:button:length",
|
'i18nKey': 'trials:reading:button:length',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "长短径测量工具",
|
'name': '长短径测量工具',
|
||||||
"icon": "bidirection",
|
'icon': 'bidirection',
|
||||||
"toolName": "Bidirectional",
|
'toolName': 'Bidirectional',
|
||||||
"i18nKey": "trials:reading:button:bidirectional",
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 10,
|
'type': 10,
|
||||||
"name": "PCWG3",
|
'name': 'PCWG3',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 17,
|
'type': 17,
|
||||||
"name": "PCWG3",
|
'name': 'PCWG3',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "直径测量工具",
|
'name': '直径测量工具',
|
||||||
"icon": "length",
|
'icon': 'length',
|
||||||
"toolName": "Length",
|
'toolName': 'Length',
|
||||||
"i18nKey": "trials:reading:button:length",
|
'i18nKey': 'trials:reading:button:length',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "矩形工具",
|
'name': '矩形工具',
|
||||||
"icon": "rectangle",
|
'icon': 'rectangle',
|
||||||
"toolName": "RectangleROI",
|
'toolName': 'RectangleROI',
|
||||||
"i18nKey": "trials:reading:button:rectangle",
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "箭头工具",
|
'name': '箭头工具',
|
||||||
"icon": "arrow",
|
'icon': 'arrow',
|
||||||
"toolName": "ArrowAnnotate",
|
'toolName': 'ArrowAnnotate',
|
||||||
"i18nKey": "trials:reading:button:arrowAnnotate",
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 19,
|
'type': 19,
|
||||||
"name": "IVUS定量评估",
|
'name': 'IVUS定量评估',
|
||||||
"tools": []
|
'tools': []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 20,
|
'type': 20,
|
||||||
"name": "OCT定量评估",
|
'name': 'OCT定量评估',
|
||||||
"tools": []
|
'tools': []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 21,
|
'type': 21,
|
||||||
"name": "MRI-PDFF",
|
'name': 'MRI-PDFF',
|
||||||
"tools": [
|
'tools': [
|
||||||
{
|
{
|
||||||
"name": "圆形测量",
|
'name': '圆形测量',
|
||||||
"icon": "oval",
|
'icon': 'oval',
|
||||||
"toolName": "Probe",
|
'toolName': 'Probe',
|
||||||
"i18nKey": "trials:reading:button:circle",
|
'i18nKey': 'trials:reading:button:circle',
|
||||||
"isDisabled": false,
|
'isDisabled': false,
|
||||||
"disabledReason": ''
|
'disabledReason': ''
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
'customizeStandards': [
|
||||||
|
{
|
||||||
|
'name': '直径测量工具',
|
||||||
|
'icon': 'length',
|
||||||
|
'toolName': 'Length',
|
||||||
|
'i18nKey': 'trials:reading:button:length',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': '长短径测量工具',
|
||||||
|
'icon': 'bidirection',
|
||||||
|
'toolName': 'Bidirectional',
|
||||||
|
'i18nKey': 'trials:reading:button:bidirectional',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': '矩形工具',
|
||||||
|
'icon': 'rectangle',
|
||||||
|
'toolName': 'RectangleROI',
|
||||||
|
'i18nKey': 'trials:reading:button:rectangle',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': '箭头工具',
|
||||||
|
'icon': 'arrow',
|
||||||
|
'toolName': 'ArrowAnnotate',
|
||||||
|
'i18nKey': 'trials:reading:button:arrowAnnotate',
|
||||||
|
'isDisabled': false,
|
||||||
|
'disabledReason': ''
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
const getTools = (criterionType) => {
|
const getTools = (criterionType) => {
|
||||||
const standard = config.standards.find(s => s.type === criterionType);
|
const standard = config.standards.find(s => s.type === criterionType)
|
||||||
return standard?.tools || [];
|
return standard?.tools || []
|
||||||
};
|
}
|
||||||
export {config, getTools}
|
const getCustomizeStandardsTools = (toolNames) => {
|
||||||
|
const filteredTools = config.customizeStandards.filter(item => toolNames.includes(item.toolName))
|
||||||
|
return filteredTools || []
|
||||||
|
}
|
||||||
|
export { config, getTools, getCustomizeStandardsTools }
|
||||||
|
|
|
@ -64,6 +64,28 @@
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- 测量工具 -->
|
||||||
|
<el-form-item
|
||||||
|
v-if="CriterionType === 0 && form.ReadingTool === 0 && form.ReadingTaskViewEnum === 1"
|
||||||
|
:label="$t('trials:readingUnit:readingRules:title:measureTool')"
|
||||||
|
>
|
||||||
|
<el-checkbox-group
|
||||||
|
v-model="form.ReadingToolList"
|
||||||
|
:disabled="
|
||||||
|
isConfirm ||
|
||||||
|
!hasPermi(['trials:trials-panel:setting:reading-unit:edit'])
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<el-checkbox
|
||||||
|
v-for="tool in tools"
|
||||||
|
:key="tool.toolName"
|
||||||
|
:label="tool.toolName"
|
||||||
|
name="ReadingToolList"
|
||||||
|
>
|
||||||
|
{{ $t(`${tool.i18nKey}`) }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
</el-form-item>
|
||||||
<!--检查类型筛选-->
|
<!--检查类型筛选-->
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="$t('trials:processCfg:form:IsImageFilter')"
|
:label="$t('trials:processCfg:form:IsImageFilter')"
|
||||||
|
@ -593,6 +615,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getCriterionReadingInfo, setCriterionReadingInfo } from '@/api/trials'
|
import { getCriterionReadingInfo, setCriterionReadingInfo } from '@/api/trials'
|
||||||
|
import { config } from '@/views/trials/trials-panel/reading/dicoms3D/components/toolConfig'
|
||||||
export default {
|
export default {
|
||||||
name: 'ReadingRules',
|
name: 'ReadingRules',
|
||||||
props: {
|
props: {
|
||||||
|
@ -614,6 +637,8 @@ export default {
|
||||||
TrialId: '',
|
TrialId: '',
|
||||||
ImagePlatform: null,
|
ImagePlatform: null,
|
||||||
ReadingTool: 0,
|
ReadingTool: 0,
|
||||||
|
ReadingVersionEnum: null,
|
||||||
|
ReadingToolList: [],
|
||||||
ReadingTaskViewEnum: null,
|
ReadingTaskViewEnum: null,
|
||||||
IsImageLabeled: null,
|
IsImageLabeled: null,
|
||||||
IsReadingShowSubjectInfo: null,
|
IsReadingShowSubjectInfo: null,
|
||||||
|
@ -807,9 +832,14 @@ export default {
|
||||||
modalityList: [],
|
modalityList: [],
|
||||||
CriterionModalitys: [],
|
CriterionModalitys: [],
|
||||||
modalityIsCheck: false, // 是否允许影像筛选
|
modalityIsCheck: false, // 是否允许影像筛选
|
||||||
|
tools: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
if (this.CriterionType === 0) {
|
||||||
|
this.tools = [...config.customizeStandards]
|
||||||
|
}
|
||||||
|
|
||||||
this.initPage()
|
this.initPage()
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
Loading…
Reference in New Issue