lugano病灶融合
parent
ee8b630806
commit
6e95127522
|
@ -3519,3 +3519,18 @@ export function getTrialSiteSurveySelectList(param) {
|
|||
data: param
|
||||
})
|
||||
}
|
||||
export function getCanMergeLesion(param) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/getCanMergeLesion`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function mergeLesion(param) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/mergeLesion`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<!-- 临床数据 -->
|
||||
<div v-if="stack.isExistsClinicalData" class="info-cd" @click.stop="handleViewCD($event)">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:clinicalData')" placement="bottom">
|
||||
<svg-icon icon-class="documentation" class="svg-icon"/>
|
||||
<svg-icon icon-class="documentation" class="svg-icon" />
|
||||
</el-tooltip>
|
||||
|
||||
</div>
|
||||
|
@ -223,7 +223,7 @@ export default {
|
|||
taskBlindName: '',
|
||||
frame: null,
|
||||
imageRendered: false,
|
||||
isExistsClinicalData:false
|
||||
isExistsClinicalData: false
|
||||
// preventCache: true
|
||||
},
|
||||
dicomInfo: {
|
||||
|
@ -539,7 +539,7 @@ export default {
|
|||
this.mousePosition.y = currentPoints.image.y + 1
|
||||
this.mousePosition.mo = stats.mo
|
||||
this.mousePosition.suv = stats.suv
|
||||
if (this.isFirstChangeTask && this.pointNearTool(e)) {
|
||||
if ((this.isFirstChangeTask || this.disabledMarks.length > 0) && this.pointNearTool(e)) {
|
||||
e.stopImmediatePropagation()
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
|
@ -555,7 +555,7 @@ export default {
|
|||
mouseDown(e) {
|
||||
this.image = e.detail.image
|
||||
var pointNearTool = this.pointNearTool(e)
|
||||
if (this.isFirstChangeTask && pointNearTool) {
|
||||
if ((this.isFirstChangeTask || this.disabledMarks.length > 0) && pointNearTool) {
|
||||
e.stopImmediatePropagation()
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
|
@ -604,6 +604,15 @@ export default {
|
|||
})
|
||||
return arr
|
||||
},
|
||||
getMergeMarks(measureDatas) {
|
||||
var arr = []
|
||||
measureDatas.map(i => {
|
||||
if ((i.LesionType === 0) && i.SplitOrMergeType === 1) {
|
||||
arr.push(i.OrderMarkName)
|
||||
}
|
||||
})
|
||||
return arr
|
||||
},
|
||||
getRGBPixels(element, x, y, width, height) {
|
||||
if (!element) {
|
||||
return
|
||||
|
@ -1064,11 +1073,15 @@ export default {
|
|||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === dicomSeries.visitTaskId)
|
||||
this.stack.visitTaskNum = this.visitTaskList[idx].VisitTaskNum
|
||||
this.isFirstChangeTask = this.visitTaskList[idx].IsFirstChangeTask
|
||||
var criterionType = parseInt(localStorage.getItem('CriterionType'))
|
||||
if (this.isFirstChangeTask) {
|
||||
this.disabledMarks = this.getDisabledMarks(this.visitTaskList[idx].MeasureData)
|
||||
} else if (criterionType === 2) {
|
||||
this.disabledMarks = this.getMergeMarks(this.visitTaskList[idx].MeasureData)
|
||||
} else {
|
||||
this.disabledMarks = []
|
||||
}
|
||||
|
||||
this.maxVistNum = this.visitTaskList[this.visitTaskList.length - 1].VisitTaskNum
|
||||
this.minVistNum = this.visitTaskList[0].VisitTaskNum
|
||||
this.measureData = this.visitTaskList[idx].MeasureData
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
<el-select
|
||||
v-model="questionForm.LesionType"
|
||||
filterable
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask || answers.SplitOrMergeType === '1'"
|
||||
:popper-append-to-body="lesionType === 0 ? false :true"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
|
@ -63,7 +63,7 @@
|
|||
<el-input
|
||||
v-if="qs.Type==='input' || qs.Type==='number'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName))"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName)) || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
|
@ -77,7 +77,7 @@
|
|||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
/>
|
||||
<!-- 下拉框 -->
|
||||
|
@ -88,7 +88,7 @@
|
|||
v-model="questionForm[qs.Id]"
|
||||
filterable
|
||||
:placeholder="qs.QuestionMark === 8 ? $t('common:placeholder:selectorsearch') : $t('common:placeholder:select')"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 7 && stateDisabled)"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 7 && stateDisabled) || answers.SplitOrMergeType === '1'"
|
||||
:popper-append-to-body="lesionType === 0 ? false :true"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
|
@ -166,7 +166,7 @@
|
|||
<el-radio-group
|
||||
v-if="qs.Type==='radio'"
|
||||
v-model="questionForm[qs.id]"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || answers.SplitOrMergeType === '1'"
|
||||
>
|
||||
<el-radio
|
||||
v-for="val in qs.options.split('|')"
|
||||
|
@ -234,7 +234,7 @@
|
|||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
v-if="isCurrentTask && readingTaskState<2"
|
||||
v-if="isCurrentTask && readingTaskState<2 && answers.SplitOrMergeType !== '1'"
|
||||
class="base-dialog-footer"
|
||||
style="text-align:right;margin-top:10px;"
|
||||
>
|
||||
|
|
|
@ -87,16 +87,16 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="((item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0)) && item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'" style="position: absolute;right: 5px;top: 2px;">
|
||||
<div v-if="item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'" style="position: absolute;right: 5px;top: 2px;">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId" class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '1' && ((item.LesionType === 0 && [0,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 1 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0))" class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="handleSplit(item.TableQuestions.Answers[i].RowId,item.Id)" />
|
||||
</el-tooltip>
|
||||
|
||||
<!-- 融合 -->
|
||||
<!-- <el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId " class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;" />
|
||||
</el-tooltip> -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '2' && ((item.LesionType === 0 && [0,1,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))))" class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;" @click.stop="handleMerge(item.TableQuestions.Answers[i],item.Id,item.OrderMark)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -149,10 +149,62 @@
|
|||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
|
||||
/>
|
||||
</div>
|
||||
<el-dialog
|
||||
v-if="merge.visible"
|
||||
v-loading="merge.loading"
|
||||
:visible.sync="merge.visible"
|
||||
:close-on-click-modal="false"
|
||||
title="靶病灶融合"
|
||||
width="500px"
|
||||
>
|
||||
<div class="merge-table">
|
||||
<div class="merge-label">
|
||||
<label>当前病灶: </label>
|
||||
<span>{{ mergeInfo.lesionName }}</span>
|
||||
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
|
||||
</div>
|
||||
<div class="merge-label"><label>请选择融合病灶: </label></div>
|
||||
<el-table
|
||||
:data="lesionData"
|
||||
style="width: 450px"
|
||||
size="mini"
|
||||
height="200"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="45"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="OrderMarkName"
|
||||
label="编号"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="Part"
|
||||
label="部位"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</div>
|
||||
<div slot="footer" style="text-align:right;">
|
||||
<!-- 确认 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
:disabled="mergeList.length === 0"
|
||||
@click="confirmMerge"
|
||||
>
|
||||
{{ $t('common:button:confirm') }}</el-button>
|
||||
<!-- 取消 -->
|
||||
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { splitLesion, getSplitPPdSum } from '@/api/trials'
|
||||
import { splitLesion, getSplitPPdSum, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
import store from '@/store'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
@ -209,7 +261,11 @@ export default {
|
|||
subjectCode: '',
|
||||
isNonTargetMeasurement: false,
|
||||
splitTargetLesions: [],
|
||||
lesionTypeQuestionId: ''
|
||||
lesionTypeQuestionId: '',
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -288,7 +344,6 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
async initList() {
|
||||
console.log('initList')
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
this.visitTaskId = this.visitTaskList[i].VisitTaskId
|
||||
|
@ -613,6 +668,53 @@ export default {
|
|||
})
|
||||
})
|
||||
},
|
||||
// 融合
|
||||
handleMerge(answers, questionId, orderMark) {
|
||||
this.lesionData = []
|
||||
this.merge.visible = true
|
||||
this.mergeInfo.questionId = questionId
|
||||
this.mergeInfo.mergeRowId = answers.RowId
|
||||
this.mergeInfo.lesionName = this.getLesionName(orderMark, answers.RowIndex)
|
||||
this.mergeInfo.lesionPart = answers.lesionPart
|
||||
this.merge.loading = true
|
||||
getCanMergeLesion({ rowId: answers.RowId }).then(res => {
|
||||
this.lesionData = res.Result
|
||||
this.merge.loading = false
|
||||
}).catch(() => { this.merge.loading = false })
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.mergeList = []
|
||||
val.map(i => {
|
||||
this.mergeList.push(i.RowId)
|
||||
})
|
||||
},
|
||||
confirmMerge() {
|
||||
this.$confirm('融合后将无法撤销, 是否继续?', '提示', {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.lesionMerge()
|
||||
}).catch(() => {
|
||||
|
||||
})
|
||||
},
|
||||
lesionMerge() {
|
||||
this.merge.loading = true
|
||||
var params = {
|
||||
visitTaskId: this.visitTaskId,
|
||||
questionId: this.mergeInfo.questionId,
|
||||
mergeRowId: this.mergeInfo.mergeRowId,
|
||||
meltingInToLesionList: this.mergeList
|
||||
}
|
||||
mergeLesion(params).then(res => {
|
||||
this.merge.loading = false
|
||||
this.merge.visible = false
|
||||
DicomEvent.$emit('readingPageUpdate', {})
|
||||
DicomEvent.$emit('getReportInfo', true)
|
||||
DicomEvent.$emit('setMeasuredToolsPassive')
|
||||
this.getReadingQuestionAndAnswer()
|
||||
// 刷新病灶列表及标记
|
||||
}).catch(() => { this.merge.loading = false })
|
||||
},
|
||||
isCanActiveTool(toolName) {
|
||||
this.isNonTargetMeasurement = false
|
||||
this.getUnSaveTarget()
|
||||
|
@ -1233,5 +1335,41 @@ export default {
|
|||
}
|
||||
|
||||
}
|
||||
.merge-table{
|
||||
padding:0 10px;
|
||||
/deep/.el-table{
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
/deep/.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
}
|
||||
.el-table--border::after, .el-table--group::after, .el-table::before{
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
/deep/.el-table__header-wrapper{
|
||||
th{
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
}
|
||||
/deep/.el-table__body-wrapper{
|
||||
tr{
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
tr:hover > td{
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
}
|
||||
/deep/.el-table__empty-block{
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
.merge-label{
|
||||
color:#ddd;
|
||||
font-size: 13px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
Loading…
Reference in New Issue