下载进度提示
parent
edb03fef23
commit
b661a51ec2
|
|
@ -80,60 +80,81 @@
|
|||
placement="bottom">
|
||||
<i class="el-icon-warning" style="color:#ff9800" />
|
||||
</el-tooltip>
|
||||
<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
|
||||
: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>
|
||||
<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',
|
||||
<!-- 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',
|
||||
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>
|
||||
}}
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div
|
||||
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'"
|
||||
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'"
|
||||
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip
|
||||
|
|
@ -142,6 +163,13 @@
|
|||
<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>
|
||||
|
|
@ -165,10 +193,35 @@
|
|||
</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 } from '@/api/trials'
|
||||
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||
import { resetReadingTask } from '@/api/reading'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
import store from '@/store'
|
||||
|
|
@ -224,7 +277,12 @@ export default {
|
|||
criterionType: null,
|
||||
subjectCode: '',
|
||||
isConvertedTask: null,
|
||||
isFirstChangeTask: null
|
||||
isFirstChangeTask: null,
|
||||
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -280,6 +338,66 @@ 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) {
|
||||
|
|
@ -1181,6 +1299,70 @@ 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;
|
||||
|
|
|
|||
|
|
@ -68,43 +68,63 @@
|
|||
placement="bottom">
|
||||
<i class="el-icon-warning" style="color:#ff9800" />
|
||||
</el-tooltip>
|
||||
<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
|
||||
: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>
|
||||
<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>
|
||||
<!-- 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>
|
||||
</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'"
|
||||
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'"
|
||||
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip
|
||||
|
|
@ -113,6 +133,13 @@
|
|||
<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>
|
||||
|
|
@ -134,10 +161,35 @@
|
|||
</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 } from '@/api/trials'
|
||||
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||
import { resetReadingTask } from '@/api/reading'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
import store from '@/store'
|
||||
|
|
@ -191,7 +243,12 @@ export default {
|
|||
tableQuestions: [],
|
||||
isFirstRender: false,
|
||||
CriterionType: null,
|
||||
subjectCode: ''
|
||||
subjectCode: '',
|
||||
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -248,6 +305,66 @@ 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) {
|
||||
|
|
@ -1066,6 +1183,70 @@ 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;
|
||||
|
|
|
|||
|
|
@ -66,38 +66,58 @@
|
|||
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="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
|
||||
: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>
|
||||
<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="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="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||
</template>
|
||||
<template v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</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'"
|
||||
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'"
|
||||
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip
|
||||
|
|
@ -106,6 +126,13 @@
|
|||
<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>
|
||||
|
|
@ -127,10 +154,35 @@
|
|||
</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 } from '@/api/trials'
|
||||
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||
import { resetReadingTask } from '@/api/reading'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
|
||||
|
|
@ -185,7 +237,12 @@ export default {
|
|||
tableQuestions: [],
|
||||
isFirstRender: false,
|
||||
CriterionType: null,
|
||||
subjectCode: ''
|
||||
subjectCode: '',
|
||||
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -243,6 +300,66 @@ 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) {
|
||||
|
|
@ -993,6 +1110,70 @@ 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;
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
|
||||
<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" />
|
||||
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
|
||||
<customize-question-list
|
||||
v-else-if="lastViewportTaskId && criterionType === 0 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
||||
:ref="`ecrf_${s.VisitTaskId}`"
|
||||
|
|
|
|||
|
|
@ -77,49 +77,70 @@
|
|||
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"
|
||||
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
|
||||
: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>
|
||||
<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 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>
|
||||
</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'"
|
||||
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'"
|
||||
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"
|
||||
|
|
@ -127,6 +148,13 @@
|
|||
<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>
|
||||
|
|
@ -164,6 +192,31 @@
|
|||
</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>
|
||||
|
|
@ -174,7 +227,9 @@ import {
|
|||
saveTaskQuestion,
|
||||
submitTableQuestion,
|
||||
deleteReadingRowAnswer,
|
||||
splitLesion
|
||||
splitLesion,
|
||||
getCanMergeLesion,
|
||||
mergeLesion
|
||||
} from '@/api/trials'
|
||||
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
|
@ -221,7 +276,13 @@ export default {
|
|||
deleteTargetInfo: null,
|
||||
digitPlaces: 2,
|
||||
imageQualityId: '',
|
||||
imageQualityIssuesId: ''
|
||||
imageQualityIssuesId: '',
|
||||
|
||||
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -258,6 +319,66 @@ 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 {
|
||||
|
|
@ -1841,6 +1962,70 @@ 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;
|
||||
|
|
|
|||
|
|
@ -80,8 +80,25 @@
|
|||
<i class="el-icon-warning" style="color:#ff9800" />
|
||||
</el-tooltip>
|
||||
<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;">
|
||||
: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>
|
||||
<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">
|
||||
|
|
@ -122,7 +139,7 @@
|
|||
</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'"
|
||||
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'"
|
||||
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"
|
||||
|
|
@ -130,6 +147,13 @@
|
|||
<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>
|
||||
|
|
@ -167,6 +191,31 @@
|
|||
</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>
|
||||
|
|
@ -177,7 +226,9 @@ import {
|
|||
saveTaskQuestion,
|
||||
submitTableQuestion,
|
||||
deleteReadingRowAnswer,
|
||||
splitLesion
|
||||
splitLesion,
|
||||
getCanMergeLesion,
|
||||
mergeLesion
|
||||
} from '@/api/trials'
|
||||
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
|
@ -223,7 +274,12 @@ export default {
|
|||
deleteTargetInfo: null,
|
||||
digitPlaces: 2,
|
||||
imageQualityId: '',
|
||||
imageQualityIssuesId: ''
|
||||
imageQualityIssuesId: '',
|
||||
|
||||
merge: { visible: false, loading: false },
|
||||
lesionData: [],
|
||||
mergeInfo: {},
|
||||
mergeList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -259,6 +315,66 @@ 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 {
|
||||
|
|
@ -1930,6 +2046,70 @@ 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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue