病灶融合功能
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-12-11 16:30:31 +08:00
parent b661a51ec2
commit aab9c4576c
6 changed files with 159 additions and 1068 deletions

View File

@ -80,81 +80,60 @@
placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
<div
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<el-tooltip
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
class="item" effect="dark"
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
placement="bottom">
<div
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].MergeRowId)}`" />
</div>
</el-tooltip>
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '4'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].RowId)}`" />
<div style="position: absolute;left: 62px;top: 2px;">
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 2">
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 5">
{{ $fd('NewTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 6">
{{ $fd('NewNoTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState))
}}
</span>
<span v-else-if="item.LesionType === 7">
{{ $fd('OtherPreviousNewLesionState',
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 2">
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 5">
{{ $fd('NewTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 6">
{{ $fd('NewNoTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 7">
{{ $fd('OtherPreviousNewLesionState',
parseInt(item.TableQuestions.Answers[i].lesionState))
}}
</span>
<span v-else-if="item.LesionType === 8">
{{
$fd('NewLesionAfterTriggeringiRECSITState',
parseInt(item.TableQuestions.Answers[i].lesionState))
}}
</span>
<span v-else-if="item.LesionType === 8">
{{
$fd('NewLesionAfterTriggeringiRECSITState',
parseInt(item.TableQuestions.Answers[i].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="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
{{ item.TableQuestions.Answers[i].lesionShort }}mm
</template>
<template
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
}}
</span>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
<template
v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
{{ item.TableQuestions.Answers[i].lesionShort }}mm
</template>
<template
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
</div>
</div>
<div
v-if="((item.LesionType === 0 && [0, 1, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0, 1, 4, 5].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 5 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1) || (item.LesionType === 6 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 7 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 8 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1)) && item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'"
v-if="((item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0, 1, 4, 5].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 5 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1) || (item.LesionType === 6 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 7 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 8 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1)) && item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'"
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
<!-- 分裂 -->
<el-tooltip
@ -163,13 +142,6 @@
<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 && 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>
@ -193,35 +165,10 @@
</div>
</template>
</div>
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
<div class="merge-table">
<div class="merge-label">
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
<span>{{ mergeInfo.lesionName }}</span>
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
</div>
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" />
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
show-overflow-tooltip />
</el-table>
</div>
<div slot="footer" style="text-align:right;">
<!-- 取消 -->
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
<!-- 确认 -->
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
{{ $t('common:button:confirm') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent'
import store from '@/store'
@ -277,12 +224,7 @@ export default {
criterionType: null,
subjectCode: '',
isConvertedTask: null,
isFirstChangeTask: null,
merge: { visible: false, loading: false },
lesionData: [],
mergeInfo: {},
mergeList: []
isFirstChangeTask: null
}
},
computed: {
@ -338,66 +280,6 @@ export default {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
//
async handleMerge(answers, questionId, orderMark) {
this.lesionData = []
this.mergeList = []
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
try {
const res = await getCanMergeLesion({ rowId: answers.RowId })
if (res.IsSuccess) {
this.lesionData = res.Result
}
this.merge.loading = false
} catch (e) {
console.log(e)
this.merge.loading = false
}
},
handleSelectionChange(val) {
this.mergeList = []
val.map(i => {
this.mergeList.push(i.RowId)
})
},
confirmMerge() {
// ', ?'
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
type: 'warning'
}).then(() => {
this.lesionMerge()
}).catch(() => {
})
},
async lesionMerge() {
this.merge.loading = true
try {
var params = {
visitTaskId: this.visitTaskId,
questionId: this.mergeInfo.questionId,
mergeMainRowId: this.mergeInfo.mergeRowId,
mergeRowIdList: this.mergeList
}
const res = await mergeLesion(params)
if (res.IsSuccess) {
this.merge.visible = false
DicomEvent.$emit('readingPageUpdate', {})
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('setMeasuredToolsPassive')
this.getReadingQuestionAndAnswer()
}
this.merge.loading = false
} catch (e) {
this.merge.loading = false
console.log(e)
}
},
async initList() {
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
if (i > -1) {
@ -1299,70 +1181,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.login-cycle {
width: 5px;
height: 5px;
display: inline-block;
background-color: #428bca;
border-radius: 50%;
margin-right: 2px;
margin-bottom: 2px;
}
.merge-table {
padding: 0 10px;
::v-deep.el-table {
background-color: #1e1e1e !important;
color: #383838;
}
::v-deep.el-table td.el-table__cell,
.el-table th.el-table__cell.is-leaf {
border-bottom: 1px solid #383838;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
background-color: #1e1e1e;
}
::v-deep.el-table__header-wrapper {
th {
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
::v-deep.el-table__body-wrapper {
tr {
background-color: #1e1e1e !important;
color: #dfdfdf;
}
tr:hover>td {
background-color: #1e1e1e !important;
}
}
::v-deep.el-table__empty-block {
background-color: #1e1e1e !important;
}
.merge-label {
color: #ddd;
font-size: 13px;
margin-bottom: 10px;
span {
font-size: 15px;
color: red;
}
}
}
.measurement-wrapper {
height: 100%;
overflow-y: auto;

View File

@ -68,63 +68,43 @@
placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
<div
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<el-tooltip
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
class="item" effect="dark"
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
placement="bottom">
<div
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].MergeRowId)}`" />
</div>
</el-tooltip>
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '4'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].RowId)}`" />
<div style="position: absolute;left: 50px;top: 2px;">
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else>
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].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="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
{{ item.TableQuestions.Answers[i].lesionShort }}mm
</template>
<template
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else>
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].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="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
{{ item.TableQuestions.Answers[i].lesionShort }}mm
</template>
<template
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
</div>
</div>
<div
v-if="((item.LesionType === 0 && [0, 1, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (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'"
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;transform: rotateY(180deg);">
<!-- 分裂 -->
<el-tooltip
@ -133,13 +113,6 @@
<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 && 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>
@ -161,35 +134,10 @@
</div>
</template>
</div>
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
<div class="merge-table">
<div class="merge-label">
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
<span>{{ mergeInfo.lesionName }}</span>
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
</div>
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" />
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
show-overflow-tooltip />
</el-table>
</div>
<div slot="footer" style="text-align:right;">
<!-- 取消 -->
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
<!-- 确认 -->
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
{{ $t('common:button:confirm') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent'
import store from '@/store'
@ -243,12 +191,7 @@ export default {
tableQuestions: [],
isFirstRender: false,
CriterionType: null,
subjectCode: '',
merge: { visible: false, loading: false },
lesionData: [],
mergeInfo: {},
mergeList: []
subjectCode: ''
}
},
computed: {
@ -305,66 +248,6 @@ export default {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
//
async handleMerge(answers, questionId, orderMark) {
this.lesionData = []
this.mergeList = []
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
try {
const res = await getCanMergeLesion({ rowId: answers.RowId })
if (res.IsSuccess) {
this.lesionData = res.Result
}
this.merge.loading = false
} catch (e) {
console.log(e)
this.merge.loading = false
}
},
handleSelectionChange(val) {
this.mergeList = []
val.map(i => {
this.mergeList.push(i.RowId)
})
},
confirmMerge() {
// ', ?'
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
type: 'warning'
}).then(() => {
this.lesionMerge()
}).catch(() => {
})
},
async lesionMerge() {
this.merge.loading = true
try {
var params = {
visitTaskId: this.visitTaskId,
questionId: this.mergeInfo.questionId,
mergeMainRowId: this.mergeInfo.mergeRowId,
mergeRowIdList: this.mergeList
}
const res = await mergeLesion(params)
if (res.IsSuccess) {
this.merge.visible = false
DicomEvent.$emit('readingPageUpdate', {})
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('setMeasuredToolsPassive')
this.getReadingQuestionAndAnswer()
}
this.merge.loading = false
} catch (e) {
this.merge.loading = false
console.log(e)
}
},
async initList() {
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
if (i > -1) {
@ -1183,70 +1066,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.login-cycle {
width: 5px;
height: 5px;
display: inline-block;
background-color: #428bca;
border-radius: 50%;
margin-right: 2px;
margin-bottom: 2px;
}
.merge-table {
padding: 0 10px;
::v-deep.el-table {
background-color: #1e1e1e !important;
color: #383838;
}
::v-deep.el-table td.el-table__cell,
.el-table th.el-table__cell.is-leaf {
border-bottom: 1px solid #383838;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
background-color: #1e1e1e;
}
::v-deep.el-table__header-wrapper {
th {
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
::v-deep.el-table__body-wrapper {
tr {
background-color: #1e1e1e !important;
color: #dfdfdf;
}
tr:hover>td {
background-color: #1e1e1e !important;
}
}
::v-deep.el-table__empty-block {
background-color: #1e1e1e !important;
}
.merge-label {
color: #ddd;
font-size: 13px;
margin-bottom: 10px;
span {
font-size: 15px;
color: red;
}
}
}
.measurement-wrapper {
height: 100%;
overflow-y: auto;

View File

@ -66,58 +66,38 @@
placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
<div
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<el-tooltip
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
class="item" effect="dark"
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
placement="bottom">
<div
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].MergeRowId)}`" />
</div>
</el-tooltip>
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '4'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(item.TableQuestions.Answers[i].RowId)}`" />
<div style="position: absolute;left: 50px;top: 2px;">
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<div style="font-size: 11px;width:220px;height: 30px;">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else>
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
</div>
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else>
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].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="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
<template v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
{{ item.TableQuestions.Answers[i].lesionLength }}mm
</template>
</div>
</div>
</div>
<div
v-if="((item.LesionType === 0 && [0, 1, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (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'"
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;transform: rotateY(180deg);">
<!-- 分裂 -->
<el-tooltip
@ -126,13 +106,6 @@
<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 && 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>
@ -154,35 +127,10 @@
</div>
</template>
</div>
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
<div class="merge-table">
<div class="merge-label">
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
<span>{{ mergeInfo.lesionName }}</span>
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
</div>
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" />
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
show-overflow-tooltip />
</el-table>
</div>
<div slot="footer" style="text-align:right;">
<!-- 取消 -->
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
<!-- 确认 -->
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
{{ $t('common:button:confirm') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent'
@ -237,12 +185,7 @@ export default {
tableQuestions: [],
isFirstRender: false,
CriterionType: null,
subjectCode: '',
merge: { visible: false, loading: false },
lesionData: [],
mergeInfo: {},
mergeList: []
subjectCode: ''
}
},
computed: {
@ -300,66 +243,6 @@ export default {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
//
async handleMerge(answers, questionId, orderMark) {
this.lesionData = []
this.mergeList = []
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
try {
const res = await getCanMergeLesion({ rowId: answers.RowId })
if (res.IsSuccess) {
this.lesionData = res.Result
}
this.merge.loading = false
} catch (e) {
console.log(e)
this.merge.loading = false
}
},
handleSelectionChange(val) {
this.mergeList = []
val.map(i => {
this.mergeList.push(i.RowId)
})
},
confirmMerge() {
// ', ?'
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
type: 'warning'
}).then(() => {
this.lesionMerge()
}).catch(() => {
})
},
async lesionMerge() {
this.merge.loading = true
try {
var params = {
visitTaskId: this.visitTaskId,
questionId: this.mergeInfo.questionId,
mergeMainRowId: this.mergeInfo.mergeRowId,
mergeRowIdList: this.mergeList
}
const res = await mergeLesion(params)
if (res.IsSuccess) {
this.merge.visible = false
DicomEvent.$emit('readingPageUpdate', {})
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('setMeasuredToolsPassive')
this.getReadingQuestionAndAnswer()
}
this.merge.loading = false
} catch (e) {
this.merge.loading = false
console.log(e)
}
},
async initList() {
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
if (i > -1) {
@ -1110,70 +993,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.login-cycle {
width: 5px;
height: 5px;
display: inline-block;
background-color: #428bca;
border-radius: 50%;
margin-right: 2px;
margin-bottom: 2px;
}
.merge-table {
padding: 0 10px;
::v-deep.el-table {
background-color: #1e1e1e !important;
color: #383838;
}
::v-deep.el-table td.el-table__cell,
.el-table th.el-table__cell.is-leaf {
border-bottom: 1px solid #383838;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
background-color: #1e1e1e;
}
::v-deep.el-table__header-wrapper {
th {
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
::v-deep.el-table__body-wrapper {
tr {
background-color: #1e1e1e !important;
color: #dfdfdf;
}
tr:hover>td {
background-color: #1e1e1e !important;
}
}
::v-deep.el-table__empty-block {
background-color: #1e1e1e !important;
}
.merge-label {
color: #ddd;
font-size: 13px;
margin-bottom: 10px;
span {
font-size: 15px;
color: red;
}
}
}
.measurement-wrapper {
height: 100%;
overflow-y: auto;

View File

@ -163,7 +163,7 @@
<!-- MPR -->
<div class="tool-item" :title="`${$t('trials:reading:button:mpr')}`" @click.prevent="openMPRViewport()"
v-if="criterionType === 0 && readingTool === 0">
<svg-icon icon-class="mpr" class="svg-icon" style="transform: rotate(180deg);" />
<svg-icon icon-class="mpr" class="svg-icon" style="transform: rotate(180deg);"/>
</div>
<!--融合-->
<div v-if="readingTool === 2" class="tool-item" :title="$t('trials:lugano:button:fusion')"
@ -343,7 +343,7 @@
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
@handleReadingChart="handleReadingChart" />
<recisit
v-else-if="lastViewportTaskId && criterionType === 1 && lastViewportTaskIds.includes(s.VisitTaskId)"
:ref="`ecrf_${s.VisitTaskId}`"
@ -351,7 +351,7 @@
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
@handleReadingChart="handleReadingChart" />
<customize-question-list
v-else-if="lastViewportTaskId && criterionType === 0 && lastViewportTaskIds.includes(s.VisitTaskId)"
:ref="`ecrf_${s.VisitTaskId}`"

View File

@ -77,70 +77,49 @@
placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div
:style="{ position: 'absolute', left: table.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
<div
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<el-tooltip
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '1' || innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '3'"
class="item" effect="dark"
:content="`${$t('trials:reading:message:fused')}${innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeLesionName}`"
placement="bottom">
<div
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '1' || innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '3'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(innerFormData[`${table.Id}_${answer.RowIndex}`].MergeRowId)}`" />
</div>
</el-tooltip>
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '4'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)}`" />
<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"
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">
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart }}
</div>
<div style="font-size: 11px;width:220px;height: 30px;">
<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">
{{ 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">
<span v-if="table.LesionType === 0">
{{
$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))
}}
</span>
<span v-else>
{{
$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}`].IsLymphNodes && !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}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength }}mm
</template>
</div>
<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))
}}
</span>
<span v-else-if="table.LesionType === 1">
{{
$fd('NoTargetState',
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
}}
</span>
<span v-else>
{{
$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}`].IsLymphNodes && !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}`].IsLymphNodes && !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 && [0, 1, 4].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))) || (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'"
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"
@ -148,13 +127,6 @@
<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>
<!-- 融合 -->
<el-tooltip
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType !== '2' && table.LesionType === 0 && [0, 1, 4].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].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(innerFormData[`${table.Id}_${answer.RowIndex}`], table.Id, table.OrderMark)" />
</el-tooltip>
</div>
</div>
@ -192,31 +164,6 @@
</div>
</template>
</div>
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
<div class="merge-table">
<div class="merge-label">
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
<span>{{ mergeInfo.lesionName }}</span>
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
</div>
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" />
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
show-overflow-tooltip />
</el-table>
</div>
<div slot="footer" style="text-align:right;">
<!-- 取消 -->
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
<!-- 确认 -->
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
{{ $t('common:button:confirm') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
@ -227,9 +174,7 @@ import {
saveTaskQuestion,
submitTableQuestion,
deleteReadingRowAnswer,
splitLesion,
getCanMergeLesion,
mergeLesion
splitLesion
} from '@/api/trials'
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
import { mapGetters } from 'vuex'
@ -276,13 +221,7 @@ export default {
deleteTargetInfo: null,
digitPlaces: 2,
imageQualityId: '',
imageQualityIssuesId: '',
merge: { visible: false, loading: false },
lesionData: [],
mergeInfo: {},
mergeList: []
imageQualityIssuesId: ''
}
},
computed: {
@ -319,66 +258,6 @@ export default {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
//
async handleMerge(answers, questionId, orderMark) {
this.lesionData = []
this.mergeList = []
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
try {
const res = await getCanMergeLesion({ rowId: answers.RowId })
if (res.IsSuccess) {
this.lesionData = res.Result
}
this.merge.loading = false
} catch (e) {
console.log(e)
this.merge.loading = false
}
},
handleSelectionChange(val) {
this.mergeList = []
val.map(i => {
this.mergeList.push(i.RowId)
})
},
confirmMerge() {
// ', ?'
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
type: 'warning'
}).then(() => {
this.lesionMerge()
}).catch(() => {
})
},
async lesionMerge() {
this.merge.loading = true
try {
var params = {
visitTaskId: this.visitTaskId,
questionId: this.mergeInfo.questionId,
mergeMainRowId: this.mergeInfo.mergeRowId,
mergeRowIdList: this.mergeList
}
const res = await mergeLesion(params)
if (res.IsSuccess) {
this.merge.visible = false
// DicomEvent.$emit('readingPageUpdate', {})
// DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('setReadingToolPassive')
this.getTableQuestions()
}
this.merge.loading = false
} catch (e) {
this.merge.loading = false
console.log(e)
}
},
//
async getOrganList() {
try {
@ -1962,70 +1841,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.login-cycle {
width: 5px;
height: 5px;
display: inline-block;
background-color: #428bca;
border-radius: 50%;
margin-right: 2px;
margin-bottom: 2px;
}
.merge-table {
padding: 0 10px;
::v-deep.el-table {
background-color: #1e1e1e !important;
color: #383838;
}
::v-deep.el-table td.el-table__cell,
.el-table th.el-table__cell.is-leaf {
border-bottom: 1px solid #383838;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
background-color: #1e1e1e;
}
::v-deep.el-table__header-wrapper {
th {
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
::v-deep.el-table__body-wrapper {
tr {
background-color: #1e1e1e !important;
color: #dfdfdf;
}
tr:hover>td {
background-color: #1e1e1e !important;
}
}
::v-deep.el-table__empty-block {
background-color: #1e1e1e !important;
}
.merge-label {
color: #ddd;
font-size: 13px;
margin-bottom: 10px;
span {
font-size: 15px;
color: red;
}
}
}
.questionList-wrapper {
height: 100%;
overflow-y: auto;

View File

@ -80,25 +80,8 @@
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div
:style="{ position: 'absolute', left: table.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px', color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff' }">
<div
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<el-tooltip
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '1' || innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '3'"
class="item" effect="dark"
:content="`${$t('trials:reading:message:fused')}${innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeLesionName}`"
placement="bottom">
<div
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '1' || innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '3'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(innerFormData[`${table.Id}_${answer.RowIndex}`].MergeRowId)}`" />
</div>
</el-tooltip>
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType === '4'">
<span class="login-cycle"
:style="`background-color:${$GuidToColor(innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)}`" />
</div>
:style="{ position: 'absolute', left: '50px', top: '2px', color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff' }">
<div style="font-size: 11px;width:220px;height: 30px;">
<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">
@ -139,7 +122,7 @@
</div>
<!-- 分裂 -->
<div
v-if="((table.LesionType === 0 && [0, 1, 4].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)))) || ((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'"
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"
@ -147,13 +130,6 @@
<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>
<!-- 融合 -->
<el-tooltip
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && innerFormData[`${table.Id}_${answer.RowIndex}`].SplitOrMergeType !== '2' && table.LesionType === 0 && [0, 1, 4].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].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(innerFormData[`${table.Id}_${answer.RowIndex}`], table.Id, table.OrderMark)" />
</el-tooltip>
</div>
</div>
@ -191,31 +167,6 @@
</div>
</template>
</div>
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
<div class="merge-table">
<div class="merge-label">
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
<span>{{ mergeInfo.lesionName }}</span>
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
</div>
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" />
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
show-overflow-tooltip />
</el-table>
</div>
<div slot="footer" style="text-align:right;">
<!-- 取消 -->
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
<!-- 确认 -->
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
{{ $t('common:button:confirm') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
@ -226,9 +177,7 @@ import {
saveTaskQuestion,
submitTableQuestion,
deleteReadingRowAnswer,
splitLesion,
getCanMergeLesion,
mergeLesion
splitLesion
} from '@/api/trials'
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
import { mapGetters } from 'vuex'
@ -274,12 +223,7 @@ export default {
deleteTargetInfo: null,
digitPlaces: 2,
imageQualityId: '',
imageQualityIssuesId: '',
merge: { visible: false, loading: false },
lesionData: [],
mergeInfo: {},
mergeList: []
imageQualityIssuesId: ''
}
},
computed: {
@ -315,66 +259,6 @@ export default {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
//
async handleMerge(answers, questionId, orderMark) {
this.lesionData = []
this.mergeList = []
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
try {
const res = await getCanMergeLesion({ rowId: answers.RowId })
if (res.IsSuccess) {
this.lesionData = res.Result
}
this.merge.loading = false
} catch (e) {
console.log(e)
this.merge.loading = false
}
},
handleSelectionChange(val) {
this.mergeList = []
val.map(i => {
this.mergeList.push(i.RowId)
})
},
confirmMerge() {
// ', ?'
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
type: 'warning'
}).then(() => {
this.lesionMerge()
}).catch(() => {
})
},
async lesionMerge() {
this.merge.loading = true
try {
var params = {
visitTaskId: this.visitTaskId,
questionId: this.mergeInfo.questionId,
mergeMainRowId: this.mergeInfo.mergeRowId,
mergeRowIdList: this.mergeList
}
const res = await mergeLesion(params)
if (res.IsSuccess) {
this.merge.visible = false
// DicomEvent.$emit('readingPageUpdate', {})
// DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('setReadingToolPassive')
this.getTableQuestions()
}
this.merge.loading = false
} catch (e) {
this.merge.loading = false
console.log(e)
}
},
//
async getOrganList() {
try {
@ -2046,70 +1930,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.login-cycle {
width: 5px;
height: 5px;
display: inline-block;
background-color: #428bca;
border-radius: 50%;
margin-right: 2px;
margin-bottom: 2px;
}
.merge-table {
padding: 0 10px;
::v-deep.el-table {
background-color: #1e1e1e !important;
color: #383838;
}
::v-deep.el-table td.el-table__cell,
.el-table th.el-table__cell.is-leaf {
border-bottom: 1px solid #383838;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
background-color: #1e1e1e;
}
::v-deep.el-table__header-wrapper {
th {
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
::v-deep.el-table__body-wrapper {
tr {
background-color: #1e1e1e !important;
color: #dfdfdf;
}
tr:hover>td {
background-color: #1e1e1e !important;
}
}
::v-deep.el-table__empty-block {
background-color: #1e1e1e !important;
}
.merge-label {
color: #ddd;
font-size: 13px;
margin-bottom: 10px;
span {
font-size: 15px;
color: red;
}
}
}
.questionList-wrapper {
height: 100%;
overflow-y: auto;