RECIST1.1标准阅片时,对于非DICOM图像可以画标记并创建病灶,升级后的工具不能画标记了
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
dff6de546c
commit
035e46bacc
|
@ -570,7 +570,7 @@ export default {
|
|||
end: { x: e.offsetX, y: e.offsetY }
|
||||
},
|
||||
remark: this.lesionName,
|
||||
uuid: `${this.imgId}-${this.lesionName}`,
|
||||
uuid: `${this.imgId}-${this.lesionName ? this.lesionName : Date.now()}`,
|
||||
toolName: 'ArrowAnnotate',
|
||||
toolType: 'ArrowAnnotate'
|
||||
}
|
||||
|
@ -601,7 +601,7 @@ export default {
|
|||
end: { x: e.offsetX, y: e.offsetY }
|
||||
},
|
||||
remark: this.lesionName,
|
||||
uuid: `${this.imgId}-${this.lesionName}`,
|
||||
uuid: `${this.imgId}-${this.lesionName ? this.lesionName : Date.now()}`,
|
||||
toolName: 'RectangleRoi',
|
||||
toolType: 'RectangleRoi'
|
||||
}
|
||||
|
|
|
@ -1405,7 +1405,7 @@ export default {
|
|||
if (taskIdx === -1) return
|
||||
const annotations = this.visitTaskList[taskIdx].Annotations
|
||||
annotations.map(i => {
|
||||
if (i.MeasureData) {
|
||||
if (i.MeasureData && !Object.hasOwn(i.MeasureData, 'isDicomReading')) {
|
||||
const annotation = i.MeasureData
|
||||
annotation.highlighted = false
|
||||
cornerstoneTools.annotation.state.addAnnotation(annotation)
|
||||
|
|
|
@ -8,35 +8,24 @@
|
|||
<span style="margin-left:5px;">{{ visitInfo.TaskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetForm"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetForm" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 影像质量评估 -->
|
||||
<div v-if="outerQuestions.length > 0" class="outer_form_wrapper">
|
||||
<el-form
|
||||
ref="outerForm"
|
||||
size="small"
|
||||
:model="outerForm"
|
||||
>
|
||||
<question-form-item
|
||||
v-for="outerQs in outerQuestions"
|
||||
:key="outerQs.Id"
|
||||
:question="outerQs"
|
||||
:question-form="outerForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
:visit-task-id="visitTaskId"
|
||||
@resetFormItemData="resetOuterFormItemData"
|
||||
@setFormItemData="setOuterFormItemData"
|
||||
/>
|
||||
<el-form ref="outerForm" size="small" :model="outerForm">
|
||||
<question-form-item v-for="outerQs in outerQuestions" :key="outerQs.Id" :question="outerQs"
|
||||
:question-form="outerForm" :reading-task-state="readingTaskState" :visit-task-id="visitTaskId"
|
||||
@resetFormItemData="resetOuterFormItemData" @setFormItemData="setOuterFormItemData" />
|
||||
<el-form-item v-if="readingTaskState < 2">
|
||||
<div class="outer_form-footer">
|
||||
<i class="el-icon-warning feedback-icon" :style="{color: taskInfo && taskInfo.IsExistUnprocessedFeedback ? '#ffeb3b' : '#fff'}" @click="openFeedBackTable" />
|
||||
<i class="el-icon-warning feedback-icon"
|
||||
:style="{ color: taskInfo && taskInfo.IsExistUnprocessedFeedback ? '#ffeb3b' : '#fff' }"
|
||||
@click="openFeedBackTable" />
|
||||
<el-button size="mini" @click="saveOuterForm">{{ $t('common:button:save') }}</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
@ -44,146 +33,116 @@
|
|||
</div>
|
||||
<!-- 病灶评估 -->
|
||||
<template v-if="tableQuestions.length > 0 && criterionType !== 10">
|
||||
<div
|
||||
v-for="(qs,index) in tableQuestions"
|
||||
:key="index"
|
||||
class="lesions lesions_wrapper"
|
||||
>
|
||||
<h4
|
||||
v-if="qs.Type === 'group'"
|
||||
style="color: #ddd;padding: 5px 0px;margin: 0;"
|
||||
>
|
||||
{{ language==='en'?qs.GroupEnName:qs.GroupName }}
|
||||
<div v-for="(qs, index) in tableQuestions" :key="index" class="lesions lesions_wrapper">
|
||||
<h4 v-if="qs.Type === 'group'" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
{{ language === 'en' ? qs.GroupEnName : qs.GroupName }}
|
||||
</h4>
|
||||
<div class="lesion_list">
|
||||
<div
|
||||
v-for="table in qs.Childrens"
|
||||
v-show="!(isBaseLineTask && table.LesionType === 2)"
|
||||
:key="table.Id"
|
||||
>
|
||||
<div
|
||||
v-if="table.Type === 'table'"
|
||||
class="flex-row"
|
||||
style="margin:3px 0;"
|
||||
>
|
||||
<div v-for="table in qs.Childrens" v-show="!(isBaseLineTask && table.LesionType === 2)" :key="table.Id">
|
||||
<div v-if="table.Type === 'table'" class="flex-row" style="margin:3px 0;">
|
||||
<div class="title">{{ table.QuestionName }}</div>
|
||||
<div
|
||||
v-if="readingTaskState<2 && (isBaseLineTask || table.LesionType === 2)"
|
||||
class="add-icon"
|
||||
@click.prevent="addTarget(table)"
|
||||
>
|
||||
<div v-if="readingTaskState < 2 && (isBaseLineTask || table.LesionType === 2)" class="add-icon"
|
||||
@click.prevent="addTarget(table)">
|
||||
<i class="el-icon-plus" />
|
||||
</div>
|
||||
</div>
|
||||
<el-collapse
|
||||
v-if="table.Type === 'table' && table.TableQuestions"
|
||||
v-model="activeName"
|
||||
accordion
|
||||
@change="handleCollapseChange"
|
||||
>
|
||||
<el-collapse-item
|
||||
v-for="(answer,i) in table.TableQuestions.Answers"
|
||||
:key="`${table.Id}_${answer.RowIndex}`"
|
||||
:name="`${table.Id}_${answer.RowIndex}`"
|
||||
@contextmenu.prevent.native="collapseRightClick($event, table.Id, answer.RowIndex)"
|
||||
>
|
||||
<el-collapse v-if="table.Type === 'table' && table.TableQuestions" v-model="activeName" accordion
|
||||
@change="handleCollapseChange">
|
||||
<el-collapse-item v-for="(answer, i) in table.TableQuestions.Answers"
|
||||
:key="`${table.Id}_${answer.RowIndex}`" :name="`${table.Id}_${answer.RowIndex}`"
|
||||
@contextmenu.prevent.native="collapseRightClick($event, table.Id, answer.RowIndex)">
|
||||
<template slot="title">
|
||||
<div
|
||||
style="width:340px;position: relative;"
|
||||
:style="{color:(activeName===table.Id+answer.RowIndex?'#ffeb3b':'#fff')}"
|
||||
>
|
||||
{{ getLesionName(table.OrderMark,answer.RowIndex) }}
|
||||
<div style="width:340px;position: relative;"
|
||||
:style="{ color: (activeName === table.Id + answer.RowIndex ? '#ffeb3b' : '#fff') }">
|
||||
{{ getLesionName(table.OrderMark, answer.RowIndex) }}
|
||||
<!-- 未保存 -->
|
||||
<el-tooltip v-if="readingTaskState<2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) === 0" class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
|
||||
<el-tooltip
|
||||
v-if="readingTaskState < 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) === 0"
|
||||
class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
|
||||
<i class="el-icon-warning" style="color:red" />
|
||||
</el-tooltip>
|
||||
<!-- 信息不完整 -->
|
||||
<el-tooltip v-if="readingTaskState<2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) ===1" class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')" placement="bottom">
|
||||
<el-tooltip
|
||||
v-if="readingTaskState < 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) === 1"
|
||||
class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-warning" style="color:#ff9800" />
|
||||
</el-tooltip>
|
||||
<div style="position: absolute;left: 50px;top: 2px;">
|
||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||
<div
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px"
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
>
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart }}
|
||||
</div>
|
||||
<div style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
||||
<span v-if="table.LesionType === 0">
|
||||
{{ $fd('TargetState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('TargetState', parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
<span v-else-if="table.LesionType === 1">
|
||||
{{ $fd('NoTargetState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('NoTargetState',
|
||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ $fd('NewLesionState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('NewLesionState',
|
||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
<div style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphLesion && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort))">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphLesion && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort))">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort }}mm
|
||||
</template>
|
||||
<template v-else-if="!innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphLesion && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
|
||||
<template
|
||||
v-else-if="!innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphLesion && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength }}mm
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 分裂 -->
|
||||
<div v-if="((table.LesionType === 0 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0) || (table.LesionType === 1 && [0,1].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))) || (table.LesionType === 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0)) && innerFormData[`${table.Id}_${answer.RowIndex}`].IsCurrentTaskAdd === 'False'" style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<el-tooltip v-show="readingTaskState<2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false" class="table" :content="$t('trials:reading:button:split')" placement="left">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||
<div
|
||||
v-if="((table.LesionType === 0 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0) || (table.LesionType === 1 && [0, 1].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))) || (table.LesionType === 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0)) && innerFormData[`${table.Id}_${answer.RowIndex}`].IsCurrentTaskAdd === 'False'"
|
||||
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<el-tooltip
|
||||
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false"
|
||||
class="table" :content="$t('trials:reading:button:split')" placement="left">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<el-form
|
||||
:ref="`${table.Id}_${answer.RowIndex}`"
|
||||
size="small"
|
||||
:model="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
>
|
||||
<table-question-form-item
|
||||
:ref="`form_${table.Id}_${answer.RowIndex}`"
|
||||
:table-info="table"
|
||||
:answer="answer"
|
||||
:question-form="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
:reading-task-state="readingTaskState"
|
||||
:organs="organs"
|
||||
:is-base-line-task="isBaseLineTask"
|
||||
:is-current-task="isCurrentTask"
|
||||
@update="innerFormDataUpdate"
|
||||
@close="closeInnerForm"
|
||||
@lesionTypeChange="lesionTypeChange"
|
||||
/>
|
||||
<div
|
||||
v-if="readingTaskState<2"
|
||||
style="text-align:right;margin-top:10px;"
|
||||
>
|
||||
<el-form :ref="`${table.Id}_${answer.RowIndex}`" size="small"
|
||||
:model="innerFormData[`${table.Id}_${answer.RowIndex}`]">
|
||||
<table-question-form-item :ref="`form_${table.Id}_${answer.RowIndex}`" :table-info="table"
|
||||
:answer="answer" :question-form="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
:reading-task-state="readingTaskState" :organs="organs" :is-base-line-task="isBaseLineTask"
|
||||
:is-current-task="isCurrentTask" @update="innerFormDataUpdate" @close="closeInnerForm"
|
||||
@lesionTypeChange="lesionTypeChange" />
|
||||
<div v-if="readingTaskState < 2" style="text-align:right;margin-top:10px;">
|
||||
<!-- 清除标记 -->
|
||||
<el-button
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].MeasureData"
|
||||
size="mini"
|
||||
@click="clearMeasureData(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].MeasureData" size="mini"
|
||||
@click="clearMeasureData(table, answer.RowIndex)">
|
||||
{{ $t('trials:reading:button:removeMark') }}
|
||||
</el-button>
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if="table.TableQuestions.Answers[i].IsCurrentTaskAdd !== 'False'"
|
||||
size="mini"
|
||||
@click="deleteLesion(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button v-if="table.TableQuestions.Answers[i].IsCurrentTaskAdd !== 'False'" size="mini"
|
||||
@click="deleteLesion(table, answer.RowIndex)">
|
||||
{{ $t('common:button:delete') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
size="mini"
|
||||
@click="saveLesion(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button size="mini" @click="saveLesion(table, answer.RowIndex)">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
@ -212,6 +171,7 @@ import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
|||
import { mapGetters } from 'vuex'
|
||||
import QuestionFormItem from './QuestionFormItem'
|
||||
import TableQuestionFormItem from './TableQuestionFormItem'
|
||||
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
||||
export default {
|
||||
name: 'QuestionList',
|
||||
components: {
|
||||
|
@ -283,6 +243,7 @@ export default {
|
|||
this.getOrganList()
|
||||
this.getOuterQuestions()
|
||||
this.getTableQuestions()
|
||||
window.addEventListener('message', this.receiveMsg)
|
||||
},
|
||||
methods: {
|
||||
// 获取器官信息
|
||||
|
@ -344,7 +305,7 @@ export default {
|
|||
this.$set(this.outerForm, v, null)
|
||||
},
|
||||
setOuterFormItemData(obj) {
|
||||
|
||||
|
||||
},
|
||||
// 获取表格问题
|
||||
async getTableQuestions() {
|
||||
|
@ -468,7 +429,7 @@ export default {
|
|||
}
|
||||
},
|
||||
setAnnotation(obj) {
|
||||
const annotation = Object.assign({}, obj.annotation)
|
||||
const annotation = Object.assign({}, !Object.hasOwn(obj, 'isDicomReading') ? obj.annotation : obj)
|
||||
if (this.activeName) {
|
||||
// 判断当前激活的病灶是否有标注信息
|
||||
const tableId = this.activeName.split('_')[0]
|
||||
|
@ -493,6 +454,13 @@ export default {
|
|||
child => child.Id === tableId
|
||||
)
|
||||
if (typeof targetTable !== 'object') return
|
||||
if (Object.hasOwn(annotation, 'isDicomReading') && !annotation.isDicomReading) {
|
||||
// 非dicom获取名称进行重绘
|
||||
annotation.data.remark = innerForm.LesionName
|
||||
annotation.markTool = annotation.data.toolName
|
||||
DicomEvent.$emit('addNoneDicomMeasureData', annotation)
|
||||
this.$set(this.innerFormData[`${tableId}_${rowIndex}`], 'IsDicomReading', false)
|
||||
}
|
||||
this.$set(this.innerFormData[`${tableId}_${rowIndex}`], 'MeasureData', annotation)
|
||||
let length = null
|
||||
let short = null
|
||||
|
@ -544,7 +512,7 @@ export default {
|
|||
}
|
||||
this.$set(this.innerFormData[`${tableId}_${rowIndex}`], 'SaveTypeEnum', innerForm.RowId ? 1 : 0)
|
||||
this.setMarkName(this.innerFormData[`${tableId}_${rowIndex}`].LesionType, this.innerFormData[`${tableId}_${rowIndex}`][stateId], this.innerFormData[`${tableId}_${rowIndex}`].LesionName, annotation)
|
||||
|
||||
|
||||
}
|
||||
} else {
|
||||
if (this.isBaseLineTask) {
|
||||
|
@ -656,7 +624,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
@ -667,7 +635,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
@ -676,10 +644,16 @@ export default {
|
|||
answer.RowId = ''
|
||||
const maxIndex = this.getMaxRowIndex(tableInfo.TableQuestions.Answers)
|
||||
answer.RowIndex = `${maxIndex + 1}.00`
|
||||
answer.IsDicomReading = true
|
||||
answer.IsDicomReading = annotation && Object.hasOwn(annotation, 'isDicomReading') ? annotation.isDicomReading : true
|
||||
answer.SaveTypeEnum = 0
|
||||
answer.LesionType = tableInfo.LesionType
|
||||
answer.LesionName = this.getLesionName(tableInfo.OrderMark, answer.RowIndex)
|
||||
if (!answer.IsDicomReading) {
|
||||
// 非dicom获取名称进行重绘
|
||||
annotation.data.remark = answer.LesionName
|
||||
annotation.markTool = annotation.data.toolName
|
||||
DicomEvent.$emit('addNoneDicomMeasureData', annotation)
|
||||
}
|
||||
let state = null
|
||||
if (this.isBaseLineTask && tableInfo.LesionType === 0) {
|
||||
state = 0
|
||||
|
@ -693,14 +667,14 @@ export default {
|
|||
tableInfo.TableQuestions.Answers.push(answer)
|
||||
if (typeof annotation === 'object') {
|
||||
answer.MeasureData = annotation
|
||||
if (annotation.metadata.toolName === 'Length') {
|
||||
if (annotation.metadata?.toolName === 'Length') {
|
||||
const referencedImageId = annotation.metadata.referencedImageId
|
||||
let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||
const lengthId = this.getQuestionId(0, tableInfo.TableQuestions.Questions)
|
||||
answer.LesionLength = length
|
||||
answer[lengthId] = length
|
||||
} else if (annotation.metadata.toolName === 'Bidirectional') {
|
||||
} else if (annotation.metadata?.toolName === 'Bidirectional') {
|
||||
const referencedImageId = annotation.metadata.referencedImageId
|
||||
let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||
|
@ -775,7 +749,11 @@ export default {
|
|||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionState', null)
|
||||
const obj = Object.assign({}, innerForm.MeasureData)
|
||||
// 移除标注信息
|
||||
this.$emit('removeAnnotation', obj)
|
||||
if (innerForm.IsDicomReading && innerForm.IsDicomReading !== 'False') {
|
||||
this.$emit('removeAnnotation', obj)
|
||||
} else {
|
||||
DicomEvent.$emit('removeNoneDicomMeasureData', obj)
|
||||
}
|
||||
// 重置标注信息
|
||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'MeasureData', null)
|
||||
// 重置保存标志
|
||||
|
@ -806,7 +784,11 @@ export default {
|
|||
if (innerForm.MeasureData) {
|
||||
// 移除标注信息
|
||||
const obj = Object.assign({}, innerForm.MeasureData)
|
||||
this.$emit('removeAnnotation', obj)
|
||||
if (innerForm.IsDicomReading && innerForm.IsDicomReading !== 'False') {
|
||||
this.$emit('removeAnnotation', obj)
|
||||
} else {
|
||||
DicomEvent.$emit('removeNoneDicomMeasureData', obj)
|
||||
}
|
||||
}
|
||||
// 刷新表格问题
|
||||
await this.getTableQuestions()
|
||||
|
@ -819,7 +801,11 @@ export default {
|
|||
if (innerForm.MeasureData) {
|
||||
// 移除标注信息
|
||||
const obj = Object.assign({}, innerForm.MeasureData)
|
||||
this.$emit('removeAnnotation', obj)
|
||||
if (innerForm.IsDicomReading && innerForm.IsDicomReading !== 'False') {
|
||||
this.$emit('removeAnnotation', obj)
|
||||
} else {
|
||||
DicomEvent.$emit('removeNoneDicomMeasureData', obj)
|
||||
}
|
||||
}
|
||||
// 移除病灶
|
||||
this.removeAnswer(table.Id, rowIndex)
|
||||
|
@ -857,7 +843,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -869,7 +855,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -886,7 +872,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -898,7 +884,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -916,7 +902,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -928,7 +914,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -944,7 +930,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -961,7 +947,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -983,7 +969,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -995,7 +981,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1011,7 +997,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1023,7 +1009,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1045,7 +1031,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1057,7 +1043,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1074,7 +1060,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1086,7 +1072,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1103,7 +1089,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1115,7 +1101,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1132,7 +1118,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1144,7 +1130,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1161,7 +1147,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1173,7 +1159,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1190,7 +1176,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1202,7 +1188,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1219,7 +1205,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1231,7 +1217,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1248,7 +1234,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1260,7 +1246,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
@ -1390,7 +1376,7 @@ export default {
|
|||
if (annotation) {
|
||||
this.setMarkName(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`].LesionType, obj.val, this.innerFormData[`${obj.tableId}_${obj.rowIndex}`].LesionName, annotation)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (obj.questionMark === 8) {
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionPart', obj.val)
|
||||
|
@ -1448,7 +1434,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
@ -1551,7 +1537,7 @@ export default {
|
|||
type: 'imgfail',
|
||||
trialId: this.$route.query.trialId,
|
||||
visitTaskId: this.visitTaskId,
|
||||
callBack: async() => {
|
||||
callBack: async () => {
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:reading:confirm:feedbackmsg'),
|
||||
{
|
||||
|
@ -1588,7 +1574,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
@ -1605,7 +1591,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
@ -1616,7 +1602,7 @@ export default {
|
|||
this.$confirm(this.$t(' trials:reading:warnning:msg15'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
@ -1694,7 +1680,11 @@ export default {
|
|||
// 移除标注信息
|
||||
if (innerForm.MeasureData) {
|
||||
const obj = Object.assign({}, innerForm.MeasureData)
|
||||
this.$emit('removeAnnotation', obj)
|
||||
if (innerForm.IsDicomReading && innerForm.IsDicomReading !== 'False') {
|
||||
this.$emit('removeAnnotation', obj)
|
||||
} else {
|
||||
DicomEvent.$emit('removeNoneDicomMeasureData', obj)
|
||||
}
|
||||
}
|
||||
// 关闭窗口
|
||||
this.activeName = ''
|
||||
|
@ -1819,28 +1809,42 @@ export default {
|
|||
} else {
|
||||
return { isCanActiveTool: true, reason: '' }
|
||||
}
|
||||
},
|
||||
receiveMsg(event) {
|
||||
if (event.data.type === 'isCanActiveNoneDicomTool') {
|
||||
let obj = { isCanActiveTool: true, lesionName: '', reason: '', toolName: event.data.toolName }
|
||||
let { isCanActiveTool, reason } = this.validTool(event.data.toolName)
|
||||
obj.isCanActiveTool = isCanActiveTool
|
||||
obj.reason = reason
|
||||
DicomEvent.$emit('isCanActiveNoneDicomTool', obj)
|
||||
} else if (event.data.type === 'setMeasurement') {
|
||||
this.setAnnotation(event.data.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.questionList-wrapper{
|
||||
.questionList-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
@ -1848,64 +1852,75 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.outer_form_wrapper{
|
||||
::v-deep .el-form-item__label{
|
||||
|
||||
.outer_form_wrapper {
|
||||
::v-deep .el-form-item__label {
|
||||
color: #c3c3c3;
|
||||
text-align: left;
|
||||
}
|
||||
::v-deep .el-input__inner{
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
::v-deep .el-textarea__inner{
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item{
|
||||
::v-deep .el-textarea__inner {
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
::v-deep .el-form-item__content{
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
flex: 1;
|
||||
}
|
||||
::v-deep .el-button--mini, .el-button--mini.is-round {
|
||||
|
||||
::v-deep .el-button--mini,
|
||||
.el-button--mini.is-round {
|
||||
padding: 7px 10px;
|
||||
}
|
||||
::v-deep .el-form-item__content
|
||||
.el-select{
|
||||
|
||||
::v-deep .el-form-item__content .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
.outer_form-footer{
|
||||
|
||||
.outer_form-footer {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
.feedback-icon{
|
||||
|
||||
.feedback-icon {
|
||||
padding: 0 10px;
|
||||
color: #fff;
|
||||
font-weight: 400;
|
||||
font-size: 22px;
|
||||
cursor: pointer;
|
||||
&:hover{
|
||||
|
||||
&:hover {
|
||||
color: #68a2d5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
@ -1914,42 +1929,49 @@ export default {
|
|||
margin-bottom: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.add-icon:hover{
|
||||
|
||||
.add-icon:hover {
|
||||
background-color: #607d8b;
|
||||
}
|
||||
|
||||
.flex-row{
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
background-color: #424242;
|
||||
|
||||
}
|
||||
.lesion_list{
|
||||
|
||||
.lesion_list {
|
||||
position: relative;
|
||||
}
|
||||
.el-collapse{
|
||||
border-bottom:none;
|
||||
border-top:none;
|
||||
::v-deep .el-collapse-item{
|
||||
background-color: #000!important;
|
||||
|
||||
.el-collapse {
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
|
||||
::v-deep .el-collapse-item {
|
||||
background-color: #000 !important;
|
||||
color: #ddd;
|
||||
|
||||
}
|
||||
::v-deep .el-collapse-item__header{
|
||||
background-color: #000!important;
|
||||
|
||||
::v-deep .el-collapse-item__header {
|
||||
background-color: #000 !important;
|
||||
color: #ddd;
|
||||
border-bottom-color:#5a5a5a;
|
||||
border-bottom-color: #5a5a5a;
|
||||
padding-left: 5px;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
}
|
||||
::v-deep .el-collapse-item__wrap{
|
||||
background-color: #000!important;
|
||||
|
||||
::v-deep .el-collapse-item__wrap {
|
||||
background-color: #000 !important;
|
||||
color: #ddd;
|
||||
}
|
||||
::v-deep .el-collapse-item__content{
|
||||
width:260px;
|
||||
|
||||
::v-deep .el-collapse-item__content {
|
||||
width: 260px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
|
@ -1958,7 +1980,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue