下载进度提示
parent
edb03fef23
commit
b661a51ec2
|
|
@ -80,60 +80,81 @@
|
||||||
placement="bottom">
|
placement="bottom">
|
||||||
<i class="el-icon-warning" style="color:#ff9800" />
|
<i class="el-icon-warning" style="color:#ff9800" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div style="position: absolute;left: 62px;top: 2px;">
|
<div
|
||||||
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
<div
|
||||||
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
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;">
|
||||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
<el-tooltip
|
||||||
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
|
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
|
||||||
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
class="item" effect="dark"
|
||||||
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
|
||||||
</el-tooltip>
|
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>
|
||||||
<div
|
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||||
<span v-if="item.LesionType === 0">
|
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
||||||
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
||||||
</span>
|
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
|
||||||
<span v-else-if="item.LesionType === 1">
|
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
||||||
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
||||||
</span>
|
</el-tooltip>
|
||||||
<span v-else-if="item.LesionType === 2">
|
</div>
|
||||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
<div
|
||||||
</span>
|
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
||||||
<span v-else-if="item.LesionType === 5">
|
<span v-if="item.LesionType === 0">
|
||||||
{{ $fd('NewTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="item.LesionType === 6">
|
<span v-else-if="item.LesionType === 1">
|
||||||
{{ $fd('NewNoTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="item.LesionType === 7">
|
<span v-else-if="item.LesionType === 2">
|
||||||
{{ $fd('OtherPreviousNewLesionState',
|
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
parseInt(item.TableQuestions.Answers[i].lesionState))
|
</span>
|
||||||
}}
|
<span v-else-if="item.LesionType === 5">
|
||||||
</span>
|
{{ $fd('NewTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
<span v-else-if="item.LesionType === 8">
|
</span>
|
||||||
{{
|
<span v-else-if="item.LesionType === 6">
|
||||||
$fd('NewLesionAfterTriggeringiRECSITState',
|
{{ $fd('NewNoTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState))
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
<span v-else-if="item.LesionType === 7">
|
||||||
|
{{ $fd('OtherPreviousNewLesionState',
|
||||||
parseInt(item.TableQuestions.Answers[i].lesionState))
|
parseInt(item.TableQuestions.Answers[i].lesionState))
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
<span v-else-if="item.LesionType === 8">
|
||||||
<div
|
{{
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
$fd('NewLesionAfterTriggeringiRECSITState',
|
||||||
<template
|
parseInt(item.TableQuestions.Answers[i].lesionState))
|
||||||
v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
}}
|
||||||
{{ item.TableQuestions.Answers[i].lesionShort }}mm
|
</span>
|
||||||
</template>
|
</div>
|
||||||
<template
|
<div
|
||||||
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
<template
|
||||||
</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>
|
||||||
|
|
||||||
</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);">
|
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||||
<!-- 分裂 -->
|
<!-- 分裂 -->
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
|
|
@ -142,6 +163,13 @@
|
||||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||||
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
||||||
</el-tooltip>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -165,10 +193,35 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { splitLesion } from '@/api/trials'
|
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||||
import { resetReadingTask } from '@/api/reading'
|
import { resetReadingTask } from '@/api/reading'
|
||||||
import DicomEvent from './../DicomEvent'
|
import DicomEvent from './../DicomEvent'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
|
@ -224,7 +277,12 @@ export default {
|
||||||
criterionType: null,
|
criterionType: null,
|
||||||
subjectCode: '',
|
subjectCode: '',
|
||||||
isConvertedTask: null,
|
isConvertedTask: null,
|
||||||
isFirstChangeTask: null
|
isFirstChangeTask: null,
|
||||||
|
|
||||||
|
merge: { visible: false, loading: false },
|
||||||
|
lesionData: [],
|
||||||
|
mergeInfo: {},
|
||||||
|
mergeList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -280,6 +338,66 @@ export default {
|
||||||
handleReadingChart(e) {
|
handleReadingChart(e) {
|
||||||
this.$emit('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() {
|
async initList() {
|
||||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||||
if (i > -1) {
|
if (i > -1) {
|
||||||
|
|
@ -1181,6 +1299,70 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<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 {
|
.measurement-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
||||||
|
|
@ -68,43 +68,63 @@
|
||||||
placement="bottom">
|
placement="bottom">
|
||||||
<i class="el-icon-warning" style="color:#ff9800" />
|
<i class="el-icon-warning" style="color:#ff9800" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div style="position: absolute;left: 50px;top: 2px;">
|
<div
|
||||||
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
<div
|
||||||
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
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;">
|
||||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
<el-tooltip
|
||||||
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
|
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
|
||||||
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
class="item" effect="dark"
|
||||||
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
|
||||||
</el-tooltip>
|
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>
|
||||||
<div
|
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||||
<span v-if="item.LesionType === 0">
|
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
||||||
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
||||||
</span>
|
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
|
||||||
<span v-else-if="item.LesionType === 1">
|
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
||||||
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
||||||
</span>
|
</el-tooltip>
|
||||||
<span v-else>
|
</div>
|
||||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
<div
|
||||||
</span>
|
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
||||||
</div>
|
<span v-if="item.LesionType === 0">
|
||||||
<div
|
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
</span>
|
||||||
<template
|
<span v-else-if="item.LesionType === 1">
|
||||||
v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
{{ item.TableQuestions.Answers[i].lesionShort }}mm
|
</span>
|
||||||
</template>
|
<span v-else>
|
||||||
<template
|
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
</span>
|
||||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
</div>
|
||||||
</template>
|
<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>
|
||||||
|
|
||||||
</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);">
|
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||||
<!-- 分裂 -->
|
<!-- 分裂 -->
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
|
|
@ -113,6 +133,13 @@
|
||||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||||
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
||||||
</el-tooltip>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -134,10 +161,35 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { splitLesion } from '@/api/trials'
|
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||||
import { resetReadingTask } from '@/api/reading'
|
import { resetReadingTask } from '@/api/reading'
|
||||||
import DicomEvent from './../DicomEvent'
|
import DicomEvent from './../DicomEvent'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
|
@ -191,7 +243,12 @@ export default {
|
||||||
tableQuestions: [],
|
tableQuestions: [],
|
||||||
isFirstRender: false,
|
isFirstRender: false,
|
||||||
CriterionType: null,
|
CriterionType: null,
|
||||||
subjectCode: ''
|
subjectCode: '',
|
||||||
|
|
||||||
|
merge: { visible: false, loading: false },
|
||||||
|
lesionData: [],
|
||||||
|
mergeInfo: {},
|
||||||
|
mergeList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -248,6 +305,66 @@ export default {
|
||||||
handleReadingChart(e) {
|
handleReadingChart(e) {
|
||||||
this.$emit('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() {
|
async initList() {
|
||||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||||
if (i > -1) {
|
if (i > -1) {
|
||||||
|
|
@ -1066,6 +1183,70 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<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 {
|
.measurement-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
||||||
|
|
@ -66,38 +66,58 @@
|
||||||
placement="bottom">
|
placement="bottom">
|
||||||
<i class="el-icon-warning" style="color:#ff9800" />
|
<i class="el-icon-warning" style="color:#ff9800" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div style="position: absolute;left: 50px;top: 2px;">
|
<div
|
||||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||||
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
<div
|
||||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
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].lesionPart" class="item" effect="dark"
|
<el-tooltip
|
||||||
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
|
||||||
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
class="item" effect="dark"
|
||||||
</el-tooltip>
|
: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>
|
||||||
<div
|
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
<div v-if="item.TableQuestions.Answers[i].lesionPart"
|
||||||
<span v-if="item.LesionType === 0">
|
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
|
||||||
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
|
||||||
</span>
|
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
|
||||||
<span v-else-if="item.LesionType === 1">
|
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
|
||||||
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
</el-tooltip>
|
||||||
</span>
|
</div>
|
||||||
<span v-else>
|
<div
|
||||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
||||||
</span>
|
<span v-if="item.LesionType === 0">
|
||||||
</div>
|
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||||
<div
|
</span>
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
<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))">
|
<template v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||||
</template>
|
</template>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</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);">
|
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||||
<!-- 分裂 -->
|
<!-- 分裂 -->
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
|
|
@ -106,6 +126,13 @@
|
||||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||||
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
||||||
</el-tooltip>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -127,10 +154,35 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { splitLesion } from '@/api/trials'
|
import { splitLesion, getCanMergeLesion, mergeLesion } from '@/api/trials'
|
||||||
import { resetReadingTask } from '@/api/reading'
|
import { resetReadingTask } from '@/api/reading'
|
||||||
import DicomEvent from './../DicomEvent'
|
import DicomEvent from './../DicomEvent'
|
||||||
|
|
||||||
|
|
@ -185,7 +237,12 @@ export default {
|
||||||
tableQuestions: [],
|
tableQuestions: [],
|
||||||
isFirstRender: false,
|
isFirstRender: false,
|
||||||
CriterionType: null,
|
CriterionType: null,
|
||||||
subjectCode: ''
|
subjectCode: '',
|
||||||
|
|
||||||
|
merge: { visible: false, loading: false },
|
||||||
|
lesionData: [],
|
||||||
|
mergeInfo: {},
|
||||||
|
mergeList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -243,6 +300,66 @@ export default {
|
||||||
handleReadingChart(e) {
|
handleReadingChart(e) {
|
||||||
this.$emit('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() {
|
async initList() {
|
||||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||||
if (i > -1) {
|
if (i > -1) {
|
||||||
|
|
@ -993,6 +1110,70 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<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 {
|
.measurement-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@
|
||||||
<!-- MPR -->
|
<!-- MPR -->
|
||||||
<div class="tool-item" :title="`${$t('trials:reading:button:mpr')}`" @click.prevent="openMPRViewport()"
|
<div class="tool-item" :title="`${$t('trials:reading:button:mpr')}`" @click.prevent="openMPRViewport()"
|
||||||
v-if="criterionType === 0 && readingTool === 0">
|
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>
|
||||||
<!--融合-->
|
<!--融合-->
|
||||||
<div v-if="readingTool === 2" class="tool-item" :title="$t('trials:lugano:button:fusion')"
|
<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"
|
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
|
||||||
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
||||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
||||||
@handleReadingChart="handleReadingChart" />
|
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
|
||||||
<recisit
|
<recisit
|
||||||
v-else-if="lastViewportTaskId && criterionType === 1 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
v-else-if="lastViewportTaskId && criterionType === 1 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
||||||
:ref="`ecrf_${s.VisitTaskId}`"
|
:ref="`ecrf_${s.VisitTaskId}`"
|
||||||
|
|
@ -351,7 +351,7 @@
|
||||||
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
|
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
|
||||||
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
||||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
||||||
@handleReadingChart="handleReadingChart" />
|
@handleReadingChart="handleReadingChart" @setReadingToolPassive="setReadingToolPassive" />
|
||||||
<customize-question-list
|
<customize-question-list
|
||||||
v-else-if="lastViewportTaskId && criterionType === 0 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
v-else-if="lastViewportTaskId && criterionType === 0 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
||||||
:ref="`ecrf_${s.VisitTaskId}`"
|
:ref="`ecrf_${s.VisitTaskId}`"
|
||||||
|
|
|
||||||
|
|
@ -77,49 +77,70 @@
|
||||||
placement="bottom">
|
placement="bottom">
|
||||||
<i class="el-icon-warning" style="color:#ff9800" />
|
<i class="el-icon-warning" style="color:#ff9800" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div style="position: absolute;left: 50px;top: 2px;">
|
<div
|
||||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
:style="{ position: 'absolute', left: table.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||||
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
<div
|
||||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px"
|
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;">
|
||||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart">
|
<el-tooltip
|
||||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart }}
|
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>
|
||||||
<div
|
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
|
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||||
<span v-if="table.LesionType === 0">
|
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">
|
||||||
$fd('TargetState', parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart }}
|
||||||
}}
|
</div>
|
||||||
</span>
|
<div
|
||||||
<span v-else-if="table.LesionType === 1">
|
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('NoTargetState',
|
{{
|
||||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
$fd('TargetState',
|
||||||
}}
|
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||||
</span>
|
}}
|
||||||
<span v-else>
|
</span>
|
||||||
{{
|
<span v-else-if="table.LesionType === 1">
|
||||||
$fd('NewLesionState',
|
{{
|
||||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
$fd('NoTargetState',
|
||||||
}}
|
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||||
</span>
|
}}
|
||||||
</div>
|
</span>
|
||||||
<div
|
<span v-else>
|
||||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
{{
|
||||||
<template
|
$fd('NewLesionState',
|
||||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort))">
|
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort }}mm
|
}}
|
||||||
</template>
|
</span>
|
||||||
<template
|
</div>
|
||||||
v-else-if="!innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
|
<div
|
||||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength }}mm
|
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||||
</template>
|
<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>
|
||||||
|
|
||||||
</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);">
|
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false"
|
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;"
|
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||||
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||||
</el-tooltip>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -164,6 +192,31 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -174,7 +227,9 @@ import {
|
||||||
saveTaskQuestion,
|
saveTaskQuestion,
|
||||||
submitTableQuestion,
|
submitTableQuestion,
|
||||||
deleteReadingRowAnswer,
|
deleteReadingRowAnswer,
|
||||||
splitLesion
|
splitLesion,
|
||||||
|
getCanMergeLesion,
|
||||||
|
mergeLesion
|
||||||
} from '@/api/trials'
|
} from '@/api/trials'
|
||||||
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
|
|
@ -221,7 +276,13 @@ export default {
|
||||||
deleteTargetInfo: null,
|
deleteTargetInfo: null,
|
||||||
digitPlaces: 2,
|
digitPlaces: 2,
|
||||||
imageQualityId: '',
|
imageQualityId: '',
|
||||||
imageQualityIssuesId: ''
|
imageQualityIssuesId: '',
|
||||||
|
|
||||||
|
|
||||||
|
merge: { visible: false, loading: false },
|
||||||
|
lesionData: [],
|
||||||
|
mergeInfo: {},
|
||||||
|
mergeList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -258,6 +319,66 @@ export default {
|
||||||
handleReadingChart(e) {
|
handleReadingChart(e) {
|
||||||
this.$emit('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() {
|
async getOrganList() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -1841,6 +1962,70 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<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 {
|
.questionList-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
||||||
|
|
@ -80,8 +80,25 @@
|
||||||
<i class="el-icon-warning" style="color:#ff9800" />
|
<i class="el-icon-warning" style="color:#ff9800" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div
|
<div
|
||||||
:style="{ position: 'absolute', left: '50px', top: '2px', color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff' }">
|
: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:220px;height: 30px;">
|
|
||||||
|
<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"
|
<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"
|
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px"
|
||||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart">
|
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart">
|
||||||
|
|
@ -122,7 +139,7 @@
|
||||||
</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);">
|
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false"
|
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;"
|
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||||
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||||
</el-tooltip>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -167,6 +191,31 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -177,7 +226,9 @@ import {
|
||||||
saveTaskQuestion,
|
saveTaskQuestion,
|
||||||
submitTableQuestion,
|
submitTableQuestion,
|
||||||
deleteReadingRowAnswer,
|
deleteReadingRowAnswer,
|
||||||
splitLesion
|
splitLesion,
|
||||||
|
getCanMergeLesion,
|
||||||
|
mergeLesion
|
||||||
} from '@/api/trials'
|
} from '@/api/trials'
|
||||||
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
import { resetReadingTask, setSkipReadingCache } from '@/api/reading'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
|
|
@ -223,7 +274,12 @@ export default {
|
||||||
deleteTargetInfo: null,
|
deleteTargetInfo: null,
|
||||||
digitPlaces: 2,
|
digitPlaces: 2,
|
||||||
imageQualityId: '',
|
imageQualityId: '',
|
||||||
imageQualityIssuesId: ''
|
imageQualityIssuesId: '',
|
||||||
|
|
||||||
|
merge: { visible: false, loading: false },
|
||||||
|
lesionData: [],
|
||||||
|
mergeInfo: {},
|
||||||
|
mergeList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -259,6 +315,66 @@ export default {
|
||||||
handleReadingChart(e) {
|
handleReadingChart(e) {
|
||||||
this.$emit('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() {
|
async getOrganList() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -1930,6 +2046,70 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<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 {
|
.questionList-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue