RECIST1.1标准阅片时,对于非DICOM图像可以画标记并创建病灶,升级后的工具不能画标记了
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-07-04 16:06:43 +08:00
parent dff6de546c
commit 035e46bacc
3 changed files with 225 additions and 203 deletions

View File

@ -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'
}

View File

@ -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)

View File

@ -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;
}
}