1521 lines
67 KiB
Plaintext
1521 lines
67 KiB
Plaintext
<template>
|
||
<el-form
|
||
v-if="isRender"
|
||
ref="measurementForm"
|
||
v-loading="loading"
|
||
:model="questionForm"
|
||
size="mini"
|
||
class="measurement-form"
|
||
>
|
||
<div class="base-dialog-body">
|
||
<div style="display: flex;justify-content: space-between;">
|
||
<h3 v-if="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||
<!-- {{ `${questionName} (${orderMark}${String(rowIndex).padStart(2, '0')})` }} -->
|
||
{{ lesionName }}
|
||
</h3>
|
||
<!-- 关闭 -->
|
||
<div>
|
||
<i class="el-icon-circle-close" style="font-size: 25px;cursor: pointer;" @click="handleClose" />
|
||
</div>
|
||
</div>
|
||
|
||
<el-form-item
|
||
:label="$t('trials:reading:title:lesionType')"
|
||
prop="LesionType"
|
||
:rules="[
|
||
{ required:true,message: $t('common:ruleMessage:select'), trigger: ['blur']},
|
||
]"
|
||
>
|
||
<!-- 下拉框 -->
|
||
<el-select
|
||
v-model="questionForm.LesionType"
|
||
filterable
|
||
:disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && !(isFirstChangeTask && (lesionType === 2 || lesionType === 5 || lesionType === 6)))"
|
||
@change="((val)=>{lesionTypeChange(val)})"
|
||
>
|
||
|
||
<el-option
|
||
v-for="item of $d.LesionType"
|
||
v-show="(isBaseLineTask && (item.value === 0 || item.value === 1)) || (!isBaseLineTask && ((isFirstChangeTask && (item.value === 5 || item.value === 6)) || !isFirstChangeTask))"
|
||
:key="item.id"
|
||
:value="item.value"
|
||
:label="item.label"
|
||
/>
|
||
|
||
</el-select>
|
||
</el-form-item>
|
||
<!-- :rules="[
|
||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue))) && qs.Type!=='group' && qs.Type!=='summary' && qs.QuestionMark !== 4 && qs.QuestionMark !== 6 && qs.QuestionMark !== 2,
|
||
message: '请注明', trigger: ['blur']},
|
||
]" -->
|
||
<el-form-item
|
||
v-for="qs in questions"
|
||
v-show="qs.ShowQuestion!==2"
|
||
:key="qs.Id"
|
||
:label="`${qs.QuestionName}`"
|
||
:prop="qs.Id"
|
||
:rules="[
|
||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue)) || (qs.QuestionMark === 6 && questionForm.IsCanEditPosition === true) || (questionForm.IsCanEditPosition && qs.QuestionMark === 10)) && qs.Type!=='group' && qs.Type!=='summary',
|
||
message:['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur','change']},
|
||
]"
|
||
>
|
||
<!-- {{ isCurrentTaskAdd }}
|
||
{{ questionForm.IsCanEditPosition }} -->
|
||
|
||
<!-- 输入框 -->
|
||
<template v-if="qs.Type==='input' || qs.Type==='number'">
|
||
<!-- {{ ((qs.QuestionMark === 6 && isCurrentTaskAdd === 'False') || (qs.QuestionMark === 6 && isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition)) }} -->
|
||
<el-input
|
||
v-if="qs.Type==='input' || qs.Type==='number'"
|
||
v-model="questionForm[qs.Id]"
|
||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName) && lesionType !== 2 ) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName)) || (isFirstChangeTask && (lesionType === 5 || lesionType === 6) && (qs.QuestionMark === 8 || qs.QuestionMark === 10 ))"
|
||
@change="((val)=>{formItemChange(val, qs)})"
|
||
>
|
||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||
</template>
|
||
</el-input>
|
||
</template>
|
||
<!-- 多行文本输入框 -->
|
||
<el-input
|
||
v-if="qs.Type==='textarea'"
|
||
v-model="questionForm[qs.Id]"
|
||
type="textarea"
|
||
:autosize="{ minRows: 2, maxRows: 4}"
|
||
:disabled="!isCurrentTask || readingTaskState>=2 "
|
||
@change="((val)=>{formItemChange(val, qs)})"
|
||
/>
|
||
<!-- 下拉框 -->
|
||
<!-- :disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && qs.QuestionMark === 5 && isCurrentTaskAdd === 'False') || qs.QuestionMark === 2 || (qs.QuestionMark === 8 && !isBaseLineTask && isCurrentTaskAdd === 'False')" -->
|
||
|
||
<el-select
|
||
v-if="qs.Type==='select'"
|
||
v-model="questionForm[qs.Id]"
|
||
filterable
|
||
:placeholder="qs.QuestionMark === 8 ? $t('common:placeholder:selectorsearch') : $t('common:placeholder:select')"
|
||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 7 && isFirstChangeTask && (lesionType !== 5 && lesionType !== 6)) || (qs.QuestionMark === 8 && isFirstChangeTask)"
|
||
@change="((val)=>{formItemChange(val, qs)})"
|
||
>
|
||
<template v-if="qs.QuestionMark === 8" #prefix>
|
||
<span style="padding-left: 5px;">
|
||
<i class="el-icon-search" />
|
||
</span>
|
||
</template>
|
||
<template v-if="qs.TableQuestionType === 1">
|
||
<el-option
|
||
v-for="item in organList"
|
||
:key="item.Id"
|
||
:label="item[qs.DataTableColumn]"
|
||
:value="item[qs.DataTableColumn]"
|
||
/>
|
||
</template>
|
||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && isBaseLineTask">
|
||
<el-option
|
||
v-for="item of $d[qs.DictionaryCode]"
|
||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||
:key="item.id"
|
||
:value="item.value"
|
||
:label="item.label"
|
||
/>
|
||
</template>
|
||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||
<template v-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||
<el-option
|
||
v-for="item of $d[qs.DictionaryCode]"
|
||
v-show="item.value === 0 || item.value === 1"
|
||
:key="item.id"
|
||
:value="item.value"
|
||
:label="item.label"
|
||
/>
|
||
</template>
|
||
<el-option
|
||
v-for="item of $d[qs.DictionaryCode]"
|
||
v-else
|
||
:key="item.id"
|
||
:value="item.value"
|
||
:label="item.label"
|
||
/>
|
||
</template>
|
||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark !== 7">
|
||
<el-option
|
||
v-for="item of $d[qs.DictionaryCode]"
|
||
:key="item.id"
|
||
:value="item.value"
|
||
:label="item.label"
|
||
/>
|
||
</template>
|
||
<template v-else>
|
||
<el-option
|
||
v-for="val in qs.TypeValue.split('|')"
|
||
:key="val"
|
||
:label="val"
|
||
:value="val"
|
||
/>
|
||
</template>
|
||
|
||
</el-select>
|
||
<!-- 单选 -->
|
||
<el-radio-group
|
||
v-if="qs.Type==='radio'"
|
||
v-model="questionForm[qs.id]"
|
||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||
>
|
||
<el-radio
|
||
v-for="val in qs.options.split('|')"
|
||
:key="val"
|
||
:label="val"
|
||
>
|
||
{{ val }}
|
||
</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
|
||
</div>
|
||
|
||
<div
|
||
v-if="isCurrentTask && readingTaskState<2"
|
||
class="base-dialog-footer"
|
||
style="text-align:right;margin-top:10px;"
|
||
>
|
||
|
||
<!-- 清除标记 -->
|
||
<el-button
|
||
v-if="questionForm.MeasureData && (!isFirstChangeTask || (isFirstChangeTask && (lesionType === 5 || lesionType === 6)))"
|
||
size="mini"
|
||
@click="handleDeleteMeasureData"
|
||
>
|
||
{{ $t('trials:reading:button:removeMark') }}
|
||
</el-button>
|
||
<!-- 删除 -->
|
||
<el-button
|
||
v-if="isCurrentTaskAdd !== 'False'"
|
||
size="mini"
|
||
@click="handleDelete"
|
||
>
|
||
{{ $t('common:button:delete') }}
|
||
</el-button>
|
||
<!-- 保存 -->
|
||
<el-button
|
||
v-if="(isFirstChangeTask && (lesionType === 5 || lesionType === 6)) || !isFirstChangeTask"
|
||
size="mini"
|
||
@click="handleSave"
|
||
>
|
||
{{ $t('common:button:save') }}
|
||
</el-button>
|
||
</div>
|
||
</el-form>
|
||
</template>
|
||
<script>
|
||
import { submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
|
||
import { uploadPrintscreen } from '@/api/reading'
|
||
import DicomEvent from './../DicomEvent'
|
||
import store from '@/store'
|
||
export default {
|
||
name: 'IRecistQuestionForm',
|
||
props: {
|
||
questions: {
|
||
type: Array,
|
||
default() { return [] }
|
||
},
|
||
answers: {
|
||
type: Object,
|
||
default() { return {} }
|
||
},
|
||
lesionType: {
|
||
type: Number,
|
||
required: true
|
||
},
|
||
visitTaskId: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
parentQsId: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
isCurrentTask: {
|
||
type: Boolean,
|
||
required: true
|
||
},
|
||
readingTaskState: {
|
||
type: Number,
|
||
required: true
|
||
},
|
||
isBaseLineTask: {
|
||
type: Boolean,
|
||
required: true
|
||
},
|
||
isFirstChangeTask: {
|
||
type: Boolean,
|
||
required: false
|
||
},
|
||
isConvertedTask: {
|
||
type: Boolean,
|
||
required: false
|
||
},
|
||
orderMark: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
questionName: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
rowIndex: {
|
||
type: String,
|
||
required: true
|
||
},
|
||
tableQuestions: {
|
||
type: Array,
|
||
default() { return [] }
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
questionForm: {},
|
||
loading: false,
|
||
trialId: '',
|
||
organList: [],
|
||
originalQuestionForm: {},
|
||
isRender: false,
|
||
toolType: '',
|
||
lesionName: '',
|
||
isCurrentTaskAdd: 'False',
|
||
splitOrMergeLesionName: '',
|
||
lesionMark: '',
|
||
deleteInfo: null,
|
||
pictureBaseStr: ''
|
||
}
|
||
},
|
||
mounted() {
|
||
this.trialId = this.$route.query.trialId
|
||
this.initForm()
|
||
},
|
||
methods: {
|
||
async initForm() {
|
||
const loading = this.$loading({ fullscreen: true })
|
||
this.questions.forEach(item => {
|
||
var val = this.answers[item.Id]
|
||
if (item.DictionaryCode) {
|
||
val = isNaN(parseInt(this.answers[item.Id])) ? this.answers[item.Id] : parseInt(this.answers[item.Id])
|
||
}
|
||
if (this.isBaseLineTask && item.QuestionMark === 7 && this.lesionType === 0) {
|
||
val = 0
|
||
}
|
||
if (this.isBaseLineTask && item.QuestionMark === 7 && this.lesionType === 1) {
|
||
val = 0
|
||
}
|
||
|
||
this.$set(this.questionForm, item.Id, val)
|
||
})
|
||
this.$set(this.questionForm, 'MeasureData', this.answers.MeasureData ? JSON.parse(this.answers.MeasureData) : '')
|
||
this.$set(this.questionForm, 'RowIndex', this.answers.RowIndex ? this.answers.RowIndex : '')
|
||
this.$set(this.questionForm, 'RowId', this.answers.RowId ? this.answers.RowId : '')
|
||
this.$set(this.questionForm, 'OrganInfoId', this.answers.OrganInfoId ? this.answers.OrganInfoId : '')
|
||
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整
|
||
var lesionState = this.getQuestionVal(7)
|
||
if (this.questionForm.RowId) {
|
||
this.$set(this.questionForm, 'saveTypeEnum', isNaN(parseInt(lesionState)) ? 1 : 2)
|
||
} else {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 0)
|
||
}
|
||
this.$set(this.questionForm, 'IsCanEditPosition', this.answers.IsCanEditPosition === 'True')
|
||
this.$set(this.questionForm, 'IsDicomReading', this.answers.IsDicomReading !== 'False')
|
||
|
||
this.toolType = this.questionForm.MeasureData ? this.questionForm.MeasureData.type : ''
|
||
if (!this.questionForm.LesionType) {
|
||
this.$set(this.questionForm, 'LesionType', this.lesionType)
|
||
}
|
||
|
||
this.originalQuestionForm = { ...this.questionForm }
|
||
// this.lesionType === 0 && this.questionForm.MeasureData
|
||
if (this.answers.measureObj) {
|
||
await this.setMeasureData(this.answers.measureObj, true)
|
||
} else {
|
||
if (this.questionForm.MeasureData) {
|
||
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
|
||
if (this.questionForm.MeasureData.type === 'Bidirectional') {
|
||
this.organList = []
|
||
await this.getOrganInfoList(1)
|
||
} else if (this.questionForm.MeasureData.type === 'Length') {
|
||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||
this.organList = []
|
||
await this.getOrganInfoList(0)
|
||
} else {
|
||
this.organList = []
|
||
await this.getOrganInfoList()
|
||
}
|
||
} else {
|
||
this.organList = []
|
||
await this.getOrganInfoList()
|
||
}
|
||
}
|
||
this.lesionName = this.getLesionInfo(this.orderMark, this.rowIndex)
|
||
this.isCurrentTaskAdd = this.answers.IsCurrentTaskAdd ? this.answers.IsCurrentTaskAdd : 'True'
|
||
this.lesionMark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
|
||
this.isRender = true
|
||
loading.close()
|
||
},
|
||
getLesionName(orderMark, rowIndex) {
|
||
var lessionName = ''
|
||
var rowIndexArr = rowIndex.split('.')
|
||
var x = parseInt(rowIndexArr[0])
|
||
var y = parseInt(rowIndexArr[1])
|
||
if (y > 0) {
|
||
y = String.fromCharCode(parseInt(rowIndexArr[1]) - 1 + 65 + 32)
|
||
lessionName = `${orderMark}${String(x).padStart(2, '0')}${y}`
|
||
} else {
|
||
lessionName = `${orderMark}${String(x).padStart(2, '0')}`
|
||
}
|
||
|
||
return lessionName
|
||
},
|
||
getLesionInfo(orderMark, rowIndex) {
|
||
var arr = []
|
||
var lessionName = ''
|
||
var rowIndexArr = rowIndex.split('.')
|
||
var x = parseInt(rowIndexArr[0])
|
||
var y = parseInt(rowIndexArr[1])
|
||
if (y > 0) {
|
||
y = String.fromCharCode(parseInt(rowIndexArr[1]) - 1 + 65 + 32)
|
||
lessionName = `${orderMark}${String(x).padStart(2, '0')}${y}`
|
||
arr.push(lessionName)
|
||
} else {
|
||
lessionName = `${orderMark}${String(x).padStart(2, '0')}`
|
||
arr.push(lessionName)
|
||
}
|
||
if (this.answers.SplitOrMergeLesionName && parseInt(this.answers.SplitOrMergeType) === 0) {
|
||
arr.push(`(Split from ${this.answers.SplitOrMergeLesionName})`)
|
||
}
|
||
return arr.join(' ')
|
||
},
|
||
getQuestionId(questionMark) {
|
||
var idx = this.questions.findIndex(i => i.QuestionMark === questionMark)
|
||
if (idx > -1) {
|
||
return this.questions[idx].Id
|
||
} else {
|
||
return ''
|
||
}
|
||
},
|
||
handleLocation() {
|
||
DicomEvent.$emit('imageLocation', this.questionForm)
|
||
},
|
||
getOrganInfoList(isLymphNodes = null) {
|
||
return new Promise(async resolve => {
|
||
// var param = {
|
||
// trialId: this.trialId,
|
||
// visitTaskId: this.visitTaskId,
|
||
// lesionType: this.lesionType,
|
||
// isEnable: true
|
||
// }
|
||
// if (isLymphNodes !== undefined && isLymphNodes !== null) {
|
||
// param.isLymphNodes = isLymphNodes
|
||
// }
|
||
// getTrialOrganList(param).then(res => {
|
||
// this.organList = res.Result
|
||
// resolve()
|
||
// })
|
||
if (!sessionStorage.getItem('organList')) {
|
||
await store.dispatch('reading/getOrganInfo', this.visitTaskId)
|
||
}
|
||
var organList = sessionStorage.getItem('organList') ? JSON.parse(sessionStorage.getItem('organList')) : []
|
||
var idx = organList.findIndex(i => i.LesionType === this.lesionType)
|
||
if (idx > -1) {
|
||
organList = organList[idx].OrganList
|
||
|
||
if (!isNaN(parseInt(isLymphNodes))) {
|
||
this.organList = organList.filter((item) => item.IsLymphNodes === parseInt(isLymphNodes))
|
||
} else {
|
||
this.organList = organList
|
||
}
|
||
}
|
||
resolve()
|
||
})
|
||
},
|
||
async lesionTypeChange(v) {
|
||
this.$emit('determineExistsUnsavedLession', async val => {
|
||
if (val) {
|
||
// 基线时,靶病灶只能用直径和长短径标注,非dicom文件的标注不能作为靶病灶
|
||
//
|
||
if ((this.isBaseLineTask || this.questionForm.IsDicomReading === false) && this.questionForm.MeasureData && this.questionForm.MeasureData.type === 'ArrowAnnotate' && v === 0) {
|
||
// 当前病灶不允许设置为靶病灶
|
||
this.$confirm(this.$t(' trials:reading:warnning:msg15'), {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true
|
||
})
|
||
.then(() => {})
|
||
.catch(() => {})
|
||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||
return
|
||
}
|
||
// 判断是否超过该病灶类型个数的最大值
|
||
var idx = this.tableQuestions.findIndex(item => item.LesionType === v)
|
||
if (idx > -1 && !!this.tableQuestions[idx].MaxQuestionCount && this.tableQuestions[idx].MaxQuestionCount <= this.tableQuestions[idx].TableQuestions.Answers.length) {
|
||
let msg = this.$t('trials:reading:warnning:msg14')
|
||
// msg = msg.replace('xxx', this.tableQuestions[idx].QuestionName)
|
||
msg = msg.replace('xxx', this.tableQuestions[idx].MaxQuestionCount)
|
||
this.$confirm(msg, {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||
return
|
||
}
|
||
|
||
var arr = []
|
||
var lesionName = this.lesionName
|
||
if (this.isFirstChangeTask) {
|
||
this.questionForm[this.getQuestionId(4)] = ''// 病灶名称
|
||
} else {
|
||
this.questionForm[this.getQuestionId(8)] = ''// 所在部位
|
||
this.questionForm[this.getQuestionId(5)] = ''// 所在器官
|
||
this.questionForm[this.getQuestionId(10)] = ''// 部位描述
|
||
this.questionForm[this.getQuestionId(4)] = ''// 病灶名称
|
||
this.questionForm[this.getQuestionId(6)] = ''// 所在位置
|
||
this.questionForm[this.getQuestionId(2)] = ''// 是否淋巴结
|
||
}
|
||
this.questions.forEach(item => {
|
||
item.Answer = this.questionForm[item.Id]
|
||
arr.push(item)
|
||
})
|
||
var obj = { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionType: this.lesionType }
|
||
DicomEvent.$emit('imageLocation', obj)
|
||
var type = null
|
||
if (this.questionForm.RowId) {
|
||
type = 1
|
||
} else {
|
||
type = 0
|
||
}
|
||
DicomEvent.$emit('changeLesionType', { questionForm: arr, oldLesionType: this.lesionType, newLesionType: v, rowIndex: this.questionForm.RowIndex, questionId: this.parentQsId, measureData: this.questionForm.MeasureData, type, rowId: this.questionForm.RowId, lesionName: lesionName })
|
||
} else {
|
||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||
}
|
||
})
|
||
},
|
||
deleteLesionInfo() {
|
||
return new Promise((resolve, reject) => {
|
||
const loading = this.$loading({ fullscreen: true })
|
||
var param = {
|
||
visitTaskId: this.visitTaskId,
|
||
questionId: this.parentQsId,
|
||
rowId: this.questionForm.RowId
|
||
}
|
||
deleteReadingRowAnswer(param)
|
||
.then(async res => {
|
||
if (res.IsSuccess) {
|
||
DicomEvent.$emit('getReportInfo', true)
|
||
}
|
||
loading.close()
|
||
resolve()
|
||
}).catch(() => {
|
||
loading.close()
|
||
reject()
|
||
})
|
||
})
|
||
},
|
||
async formItemChange(v, question) {
|
||
if (question.QuestionMark === 8 && question.RelationQuestions.length > 0) {
|
||
// 当选择部位时,联动器官、位置、是否淋巴结问题答案
|
||
var index = this.organList.findIndex(item => item[question.DataTableColumn] === v)
|
||
if (index > -1) {
|
||
var selected = this.organList[index]
|
||
|
||
question.RelationQuestions.map(qs => {
|
||
var val = selected[qs.DataTableColumn]
|
||
this.$set(this.questionForm, qs.Id, val)
|
||
})
|
||
this.$set(this.questionForm, 'OrganInfoId', selected.OrganInfoId)
|
||
this.$set(this.questionForm, 'IsCanEditPosition', selected['IsCanEditPosition'])
|
||
} else {
|
||
question.RelationQuestions.map(qs => {
|
||
this.$set(this.questionForm, qs.Id, '')
|
||
})
|
||
}
|
||
}
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整
|
||
if (this.questionForm.RowId) {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 1)
|
||
} else {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 0)
|
||
}
|
||
var isLymphLesion = this.getQuestionVal(2)
|
||
isLymphLesion = !isNaN(parseInt(isLymphLesion)) ? parseInt(isLymphLesion) : null
|
||
const lesionPart = this.getQuestionVal(8)
|
||
const lesionOrgan = this.getQuestionVal(6)
|
||
// const lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? Number(this.getQuestionVal(0)) : ''
|
||
// const lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? Number(this.getQuestionVal(1)) : ''
|
||
const lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? this.getQuestionVal(0) : ''
|
||
const lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? this.getQuestionVal(1) : ''
|
||
const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, lesionState, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
|
||
|
||
if (question.QuestionMark === 7) {
|
||
var status = ''
|
||
if (this.lesionType === 0 && lesionState === 1) {
|
||
status = 'T'
|
||
}
|
||
if ((this.lesionType === 0 && lesionState === 3) || (this.lesionType === 1 && lesionState === 3) || (this.lesionType === 2 && lesionState === 3)) {
|
||
status = 'D'
|
||
}
|
||
if (this.questionForm.measureData) {
|
||
this.questionForm.measureData.status = status
|
||
}
|
||
await store.dispatch('reading/updateMeasureDataStatus', { visitTaskId: this.visitTaskId, rowIndex: this.rowIndex, questionId: this.parentQsId, status })
|
||
DicomEvent.$emit('getMeasureData')
|
||
}
|
||
},
|
||
setMeasureData(measureData, isInit = false) {
|
||
return new Promise(resolve => {
|
||
if (measureData) {
|
||
if (measureData.pictureBaseStr) {
|
||
this.pictureBaseStr = measureData.pictureBaseStr
|
||
measureData.pictureBaseStr = ''
|
||
}
|
||
// 获取长径(0)
|
||
// const loading = this.$loading({ fullscreen: true })
|
||
var lengthObj = this.questions.find(i => i.QuestionMark === 0)
|
||
var shortObj = this.questions.find(i => i.QuestionMark === 1)
|
||
if (measureData.type === 'Length' || measureData.type === 'Bidirectional') {
|
||
var length = ''
|
||
if (measureData.type === 'Length') {
|
||
length = measureData.data.length
|
||
} else if (measureData.type === 'Bidirectional') {
|
||
length = measureData.data.longestDiameter
|
||
}
|
||
this.$set(this.questionForm, lengthObj.Id, length)
|
||
// 获取短径(1)
|
||
|
||
var short = ''
|
||
if (measureData.type === 'Bidirectional') {
|
||
short = measureData.data.shortestDiameter
|
||
}
|
||
this.$set(this.questionForm, shortObj.Id, short)
|
||
} else if (measureData.type === 'ArrowAnnotate') {
|
||
this.$set(this.questionForm, lengthObj.Id, '')
|
||
this.$set(this.questionForm, shortObj.Id, '')
|
||
}
|
||
// if (this.toolType !== measureData.type) {
|
||
// 获取器官问题
|
||
// var organ = this.getQuestionVal(5)
|
||
|
||
// 十字线工具 器官只能是淋巴结类型
|
||
|
||
if (measureData.type === 'Bidirectional') {
|
||
this.organList = []
|
||
this.getOrganInfoList(1)
|
||
} else if (measureData.type === 'Length') {
|
||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||
this.organList = []
|
||
this.getOrganInfoList(0)
|
||
} else {
|
||
this.organList = []
|
||
this.getOrganInfoList()
|
||
}
|
||
|
||
// if (this.toolType) {
|
||
// this.questionForm[this.getQuestionId(8)] = ''
|
||
// this.questionForm[this.getQuestionId(5)] = ''
|
||
// this.questionForm[this.getQuestionId(6)] = ''
|
||
// this.questionForm[this.getQuestionId(2)] = ''
|
||
// }
|
||
|
||
var data = {}
|
||
if (measureData.isDicomReading === false) {
|
||
this.$set(this.questionForm, 'IsDicomReading', false)
|
||
data = {
|
||
Id: '',
|
||
IsDicomReading: false,
|
||
StudyId: measureData.studyId,
|
||
InstanceId: measureData.instanceId,
|
||
SeriesId: measureData.seriesId,
|
||
MeasureData: measureData,
|
||
QuestionId: this.parentQsId,
|
||
RowIndex: this.questionForm.RowIndex,
|
||
RowId: this.questionForm.RowId,
|
||
VisitTaskId: this.visitTaskId
|
||
}
|
||
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
||
} else {
|
||
this.$set(this.questionForm, 'IsDicomReading', true)
|
||
// 设置默认值
|
||
// 状态为空时,非淋巴结靶病灶长径>0mm,自动给“存在”状态,如果淋巴结靶病灶短径>=10mm,自动给“存在”状态。淋巴结靶病灶在短径小于10mm时,用十字线标记测量时标记为消失
|
||
var isLymphLesion = this.getQuestionVal(2)
|
||
isLymphLesion = !isNaN(parseInt(isLymphLesion)) ? parseInt(isLymphLesion) : null
|
||
var lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? this.getQuestionVal(0) : ''
|
||
var lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? this.getQuestionVal(1) : ''
|
||
if (!this.isBaseLineTask && this.lesionType === 0 && ((isLymphLesion === 0 && lesionLength > 0) || (isLymphLesion === 1 && lesionShort >= 10))) {
|
||
const stateId = this.getQuestionId(7)
|
||
this.$set(this.questionForm, stateId, 0)
|
||
}
|
||
|
||
if (!this.isBaseLineTask && this.lesionType === 0 && (isLymphLesion === 1 && measureData.type === 'Bidirectional' && lesionShort < 10)) {
|
||
const stateId = this.getQuestionId(7)
|
||
this.$set(this.questionForm, stateId, 3)
|
||
}
|
||
// 基线时,默认状态都为存在
|
||
if (this.isBaseLineTask && !lesionState) {
|
||
const stateId = this.getQuestionId(7)
|
||
this.$set(this.questionForm, stateId, 0)
|
||
}
|
||
|
||
const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||
var status = ''
|
||
if (lesionState) {
|
||
if (this.lesionType === 0 && lesionState === 1) {
|
||
status = 'T'
|
||
}
|
||
if ((this.lesionType === 0 && lesionState === 3) || (this.lesionType === 1 && lesionState === 3) || (this.lesionType === 2 && lesionState === 3)) {
|
||
status = 'D'
|
||
}
|
||
}
|
||
measureData.data.status = status
|
||
|
||
measureData.data.remark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
|
||
data = {
|
||
Id: '',
|
||
IsDicomReading: true,
|
||
StudyId: measureData.studyId,
|
||
InstanceId: measureData.instanceId,
|
||
SeriesId: measureData.seriesId,
|
||
MeasureData: measureData,
|
||
QuestionId: this.parentQsId,
|
||
RowIndex: this.questionForm.RowIndex,
|
||
RowId: this.questionForm.RowId,
|
||
VisitTaskId: this.visitTaskId,
|
||
frame: isNaN(parseInt(measureData.frame)) ? 0 : measureData.frame
|
||
}
|
||
}
|
||
// Store.$emit('addTemporaryMeasuredData', data)
|
||
store.dispatch('reading/addMeasuredData', { visitTaskId: this.visitTaskId, data: data })
|
||
if (!this.questionForm.IsDicomReading) {
|
||
DicomEvent.$emit('addNoneDicomMeasureData', measureData)
|
||
}
|
||
DicomEvent.$emit('getMeasureData', val => {
|
||
this.pictureBaseStr = val
|
||
})
|
||
}
|
||
if (!isInit) {
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断)
|
||
if (this.questionForm.RowId) {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 1)
|
||
} else {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 0)
|
||
}
|
||
}
|
||
this.$set(this.questionForm, 'MeasureData', measureData)
|
||
var isLymph = this.getQuestionVal(2)
|
||
isLymph = !isNaN(parseInt(isLymph)) ? parseInt(isLymph) : null
|
||
const lesionPart = this.getQuestionVal(8)
|
||
const lesionOrgan = this.getQuestionVal(6)
|
||
// const lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? Number(this.getQuestionVal(0)) : ''
|
||
// const lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? Number(this.getQuestionVal(1)) : ''
|
||
const lesionL = !isNaN(parseInt(this.getQuestionVal(0))) ? this.getQuestionVal(0) : ''
|
||
const lesionS = !isNaN(parseInt(this.getQuestionVal(1))) ? this.getQuestionVal(1) : ''
|
||
var lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||
// // 状态为空时,非淋巴结靶病灶长径>0mm,自动给“存在”状态,如果淋巴结靶病灶短径>=10mm,自动给“存在”状态。淋巴结靶病灶在短径小于10mm时,用十字线标记测量时标记为消失
|
||
// if (!this.isBaseLineTask && this.lesionType === 0 && ((isLymphLesion === 0 && lesionLength > 0) || (isLymphLesion === 1 && lesionShort >= 10))) {
|
||
// const stateId = this.getQuestionId(7)
|
||
// this.$set(this.questionForm, stateId, 0)
|
||
// lesionState = 0
|
||
// }
|
||
|
||
// if (!this.isBaseLineTask && this.lesionType === 0 && (isLymphLesion === 1 && measureData.type === 'Bidirectional' && lesionShort < 10)) {
|
||
// const stateId = this.getQuestionId(7)
|
||
// this.$set(this.questionForm, stateId, 3)
|
||
// lesionState = 3
|
||
// }
|
||
// // 基线时,默认状态都为存在
|
||
// if (this.isBaseLineTask && !lesionState) {
|
||
// const stateId = this.getQuestionId(7)
|
||
// this.$set(this.questionForm, stateId, 0)
|
||
// lesionState = 0
|
||
// }
|
||
|
||
this.$emit('resetQuestions', { isLymphLesion: isLymph, lesionPart, lesionOrgan, lesionShort: lesionS, lesionLength: lesionL, lesionState, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
|
||
this.toolType = measureData.type
|
||
resolve()
|
||
})
|
||
|
||
// loading.close()
|
||
// this.handleSave()
|
||
},
|
||
returnFloat(num) {
|
||
if (num) return
|
||
var value = Math.round(parseFloat(num) * 100) / 100
|
||
var s = value.toString().split('.')
|
||
if (s.length === 1) {
|
||
value = value.toString() + '.00'
|
||
return value
|
||
}
|
||
if (s.length > 1) {
|
||
if (s[1].length < 2) {
|
||
value = value.toString() + '0'
|
||
}
|
||
return value
|
||
}
|
||
},
|
||
getQuestionVal(questionMark) {
|
||
var idx = this.questions.findIndex(i => i.QuestionMark === questionMark)
|
||
if (idx > -1) {
|
||
var questionId = this.questions[idx].Id
|
||
return this.questionForm[questionId]
|
||
} else {
|
||
return ''
|
||
}
|
||
},
|
||
setDeleteInfo(deleteInfo) {
|
||
this.deleteInfo = deleteInfo
|
||
},
|
||
deleteOldLesion(questionId, rowId) {
|
||
return new Promise((resolve, reject) => {
|
||
var param = {
|
||
visitTaskId: this.visitTaskId,
|
||
questionId: questionId,
|
||
rowId: rowId
|
||
}
|
||
deleteReadingRowAnswer(param)
|
||
.then(async res => {
|
||
resolve()
|
||
}).catch(() => {
|
||
})
|
||
})
|
||
},
|
||
async uploadScreenshots(fileName, file) {
|
||
try {
|
||
file = this.convertBase64ToBlob(file)
|
||
const formData = new FormData()
|
||
formData.append('file', file)
|
||
const result = await uploadPrintscreen(formData, this.$route.query.subjectId)
|
||
result.url = result.Result.Path
|
||
// const result = await this.OSSclient.put(`${fileName}.png`, file)
|
||
return { isSuccess: true, result: result }
|
||
} catch (e) {
|
||
console.log(e)
|
||
return { isSuccess: false, result: e }
|
||
}
|
||
},
|
||
convertBase64ToBlob(imageEditorBase64) {
|
||
var base64Arr = imageEditorBase64.split(',')
|
||
var imgtype = ''
|
||
var base64String = ''
|
||
if (base64Arr.length > 1) {
|
||
// 如果是图片base64,去掉头信息
|
||
base64String = base64Arr[1]
|
||
imgtype = base64Arr[0].substring(
|
||
base64Arr[0].indexOf(':') + 1,
|
||
base64Arr[0].indexOf(';')
|
||
)
|
||
}
|
||
// 将base64解码
|
||
var bytes = atob(base64String)
|
||
// var bytes = base64;
|
||
var bytesCode = new ArrayBuffer(bytes.length)
|
||
// 转换为类型化数组
|
||
var byteArray = new Uint8Array(bytesCode)
|
||
|
||
// 将base64转换为ascii码
|
||
for (var i = 0; i < bytes.length; i++) {
|
||
byteArray[i] = bytes.charCodeAt(i)
|
||
}
|
||
|
||
// 生成Blob对象(文件对象)
|
||
return new Blob([bytesCode], { type: imgtype })
|
||
},
|
||
handleSave() {
|
||
this.$refs.measurementForm.validate(async valid => {
|
||
if (!valid) return
|
||
const loading = this.$loading({ fullscreen: true })
|
||
var measureData = this.questionForm.MeasureData
|
||
var lesionState = this.getQuestionVal(7)
|
||
// var lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? Number(this.getQuestionVal(0)) : ''
|
||
// var lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? Number(this.getQuestionVal(1)) : ''
|
||
var lesionLength = !isNaN(parseInt(this.getQuestionVal(0))) ? this.getQuestionVal(0) : ''
|
||
var lesionShort = !isNaN(parseInt(this.getQuestionVal(1))) ? this.getQuestionVal(1) : ''
|
||
var lymphNodes = this.getQuestionVal(2)
|
||
lymphNodes = (lymphNodes !== null && lymphNodes !== undefined) ? parseInt(lymphNodes) : null
|
||
if (this.isBaseLineTask) {
|
||
// 基线
|
||
// 靶病灶且状态为存在(0)
|
||
if (this.lesionType === 0 && lesionState === 0) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mm
|
||
if (!(measureData && measureData.type === 'Bidirectional' && lesionShort >= 15)) {
|
||
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记,且短径须大于15mm!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结靶病灶 直径测量工具 长径须大于等于10mm且不小于2倍层厚
|
||
if (!(measureData && measureData.type === 'Length' && lesionLength >= 10 && (measureData.thick && lesionLength >= 2 * measureData.thick || !measureData.thick))) {
|
||
// 评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记,长径须大于10mm且不小于2倍层厚!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非靶病灶且状态为存在(0)
|
||
if (this.lesionType === 1 && lesionState === 0) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结非靶病灶 必须使用长短径测量工具或箭头工具
|
||
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'RectangleRoi'))) {
|
||
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记
|
||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具或箭头工具
|
||
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'RectangleRoi'))) {
|
||
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
// 非基线
|
||
// 靶病灶且状态为存在(0)
|
||
if (this.lesionType === 0 && lesionState === 0) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具
|
||
if (!(measureData && measureData.type === 'Bidirectional')) {
|
||
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结靶病灶 直径测量工具
|
||
if (!(measureData && measureData.type === 'Length')) {
|
||
// `评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记!`
|
||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
// 靶病灶且状态为太小(1)
|
||
if (this.lesionType === 0 && lesionState === 1) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用箭头工具,短径记录为5mm
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为太小的淋巴结靶病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
} else if (measureData && measureData.type === 'ArrowAnnotate') {
|
||
const shortId = this.getQuestionId(1)
|
||
this.$set(this.questionForm, shortId, 5)
|
||
lesionShort = 5
|
||
}
|
||
} else {
|
||
// 非淋巴结靶病灶 箭头工具,长径记录为5mm
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为太小的非淋巴结靶病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
} else if (measureData && measureData.type === 'ArrowAnnotate') {
|
||
const lengthId = this.getQuestionId(0)
|
||
this.$set(this.questionForm, lengthId, 5)
|
||
lesionLength = 5
|
||
}
|
||
}
|
||
}
|
||
|
||
// 靶病灶且状态为无法评估(2)
|
||
if (this.lesionType === 0 && lesionState === 2) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 不需要添加标记
|
||
if (measureData) {
|
||
// 评估状态为无法评估的淋巴结靶病灶不需要添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结靶病灶 不需要添加标记
|
||
if (measureData) {
|
||
// 状态为无法评估的非淋巴结靶病灶不需要添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 靶病灶且状态为消失(3)
|
||
if (this.lesionType === 0 && lesionState === 3) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 使用箭头工具
|
||
// if (!(measureData && (measureData.type === 'ArrowAnnotate' || measureData.type === 'Bidirectional'))) {
|
||
// this.$confirm(`评估状态为消失的淋巴结靶病灶需使用箭头工具或长短径工具添加标记!`, {
|
||
// type: 'warning',
|
||
// showCancelButton: false,
|
||
// callback: action => {}
|
||
// })
|
||
// loading.close()
|
||
// return
|
||
// }
|
||
// else if (measureData && measureData.type === 'Bidirectional' && lesionShort >= 10) {
|
||
// this.$confirm(`评估状态为消失的淋巴结靶病灶,短径需小于10mm!`, {
|
||
// type: 'warning',
|
||
// showCancelButton: false,
|
||
// callback: action => {}
|
||
// })
|
||
// loading.close()
|
||
// return
|
||
// }
|
||
if (!(measureData && (measureData.type === 'Bidirectional' && lesionShort < 10))) {
|
||
// `评估状态为消失的淋巴结靶病灶需使用长短径工具添加标记,且短径需小于10mm!`
|
||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结靶病灶 箭头工具
|
||
if (!(measureData && measureData.type === 'ArrowAnnotate')) {
|
||
// 评估状态为消失的非淋巴结靶病灶只能使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
} else if (measureData && measureData.type === 'ArrowAnnotate') {
|
||
const lId = this.getQuestionId(0)
|
||
this.$set(this.questionForm, lId, 0)
|
||
lesionLength = 0
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非靶病灶且状态为存在(0)
|
||
if (this.lesionType === 1 && lesionState === 0) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结非靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'RectangleRoi'))) {
|
||
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'RectangleRoi'))) {
|
||
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非靶病灶且状态为显著增大(1)
|
||
if (this.lesionType === 1 && lesionState === 1) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'RectangleRoi'))) {
|
||
// `评估状态为显著增大的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记!`
|
||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'RectangleRoi'))) {
|
||
// 评估状态为显著增大的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非靶病灶且状态为无法评估(2)
|
||
if (this.lesionType === 1 && lesionState === 2) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 无标记
|
||
if (measureData) {
|
||
// 评估状态为无法评估的淋巴结非靶病灶不需要添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 无标记
|
||
if (measureData) {
|
||
// 评估状态为无法评估的非淋巴结非靶病灶不需要添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非靶病灶且状态为消失(3)
|
||
if (this.lesionType === 1 && lesionState === 3) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为消失的淋巴结非靶病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 箭头工具
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为消失的非淋巴结非靶病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 新病灶且状态为存在(0)
|
||
if (this.lesionType === 2 && lesionState === 0) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为存在的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 新病灶且状态为疑似(1)
|
||
if (this.lesionType === 2 && lesionState === 1) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为疑似的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
|
||
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!`
|
||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 新病灶且状态为无法评估(2)
|
||
if (this.lesionType === 2 && lesionState === 2) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (measureData) {
|
||
// `评估状态为无法评估的淋巴结新病灶不需要添加标记!`
|
||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||
if (measureData) {
|
||
// 评估状态为无法评估的非淋巴结新病灶不需要添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// 新病灶且状态为消失(3)
|
||
if (this.lesionType === 2 && lesionState === 3) {
|
||
if (lymphNodes === 1) {
|
||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为消失的淋巴结新病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
} else {
|
||
// 箭头工具
|
||
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
|
||
// 评估状态为消失的非淋巴结新病灶需使用箭头工具添加标记!
|
||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
loading.close()
|
||
return
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
DicomEvent.$emit('getScreenshots', async val => {
|
||
// 靶病灶状态为0(存在)时,一定存在长径或者长短径(长径、十字线 )
|
||
// 普通靶病灶:长径大于10mm且不小于2倍层厚(基线校验)
|
||
// 淋巴结靶病灶:短径大于15mm且不小于2倍层厚(基线校验)
|
||
var picturePath = ''
|
||
if (val) {
|
||
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
|
||
|
||
picturePath = pictureObj.isSuccess ? pictureObj.result.url : ''
|
||
|
||
var answers = []
|
||
var reg = new RegExp(/^[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}$/)
|
||
for (const k in this.questionForm) {
|
||
if (reg.test(k)) {
|
||
if (answers.findIndex(i => i.tableQuestionId === k) === -1) {
|
||
answers.push({ tableQuestionId: k, answer: this.questionForm[k] })
|
||
}
|
||
}
|
||
}
|
||
|
||
var params = {
|
||
questionId: this.parentQsId,
|
||
rowId: this.questionForm.RowId,
|
||
rowIndex: this.answers.RowIndex,
|
||
visitTaskId: this.visitTaskId,
|
||
trialId: this.trialId,
|
||
measureData: measureData ? JSON.stringify(measureData) : '',
|
||
answerList: answers,
|
||
isCanEditPosition: this.questionForm.IsCanEditPosition,
|
||
studyId: measureData ? this.questionForm.MeasureData.studyId : '',
|
||
seriesId: measureData ? this.questionForm.MeasureData.seriesId : '',
|
||
instanceId: measureData ? this.questionForm.MeasureData.instanceId : '',
|
||
numberOfFrames: measureData && !isNaN(parseInt(this.questionForm.MeasureData.frame)) ? parseInt(this.questionForm.MeasureData.frame) : 0,
|
||
picturePath: picturePath,
|
||
organInfoId: this.questionForm.OrganInfoId,
|
||
formName: this.questionForm.FormName
|
||
}
|
||
if (this.questionForm.IsDicomReading === false) {
|
||
params.isDicomReading = false
|
||
}
|
||
if (this.deleteInfo) {
|
||
await this.deleteOldLesion(this.deleteInfo.questionId, this.deleteInfo.rowId)
|
||
this.deleteInfo = null
|
||
}
|
||
submitTableQuestion(params).then(async res => {
|
||
// 保存成功!
|
||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整
|
||
|
||
this.$set(this.questionForm, 'saveTypeEnum', 2)
|
||
this.originalQuestionForm = { ...this.questionForm }
|
||
loading.close()
|
||
var isLymphLesion = this.getQuestionVal(2)
|
||
isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
|
||
var lesionOrgan = this.getQuestionVal(6)
|
||
this.$set(this.questionForm, 'RowId', res.Result.RowId)
|
||
const lesionPart = this.getQuestionVal(8)
|
||
const lesionState = Number(this.getQuestionVal(7))
|
||
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, lesionState, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
|
||
|
||
// await store.dispatch('reading/refreshMeasuredData', this.visitTaskId)
|
||
// DicomEvent.$emit('getMeasureData')
|
||
this.$emit('close')
|
||
DicomEvent.$emit('getReportInfo', true)
|
||
}).catch(() => { loading.close() })
|
||
}
|
||
})
|
||
})
|
||
},
|
||
handleDeleteMeasureData() {
|
||
// 是否确认清除标记?
|
||
this.$confirm(this.$t('trials:reading:warnning:msg47'), {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true
|
||
})
|
||
.then(async() => {
|
||
this.organList = []
|
||
await this.getOrganInfoList()
|
||
// 重置长短径 和 状态
|
||
var lengId = this.getQuestionId(0)
|
||
this.$set(this.questionForm, lengId, '')
|
||
var shortId = this.getQuestionId(1)
|
||
this.$set(this.questionForm, shortId, '')
|
||
|
||
var stateId = this.getQuestionId(7)
|
||
this.$set(this.questionForm, stateId, '')
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断)
|
||
if (this.questionForm.RowId) {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 1)
|
||
} else {
|
||
this.$set(this.questionForm, 'saveTypeEnum', 0)
|
||
}
|
||
await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex })
|
||
DicomEvent.$emit('getMeasureData')
|
||
// Store.$emit('updateImage', this.questionForm.MeasureData.instanceId)
|
||
var isLymphLesion = this.getQuestionVal(2)
|
||
isLymphLesion = !isNaN(parseInt(isLymphLesion)) ? parseInt(isLymphLesion) : null
|
||
const lesionPart = this.getQuestionVal(8)
|
||
const lesionOrgan = this.getQuestionVal(6)
|
||
const lesionLength = ''
|
||
const lesionShort = ''
|
||
const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||
|
||
if (!this.questionForm.IsDicomReading) {
|
||
DicomEvent.$emit('removeNoneDicomMeasureData', this.questionForm.MeasureData)
|
||
}
|
||
this.$set(this.questionForm, 'IsDicomReading', true)
|
||
|
||
this.$set(this.questionForm, 'MeasureData', '')
|
||
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, lesionState, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
|
||
})
|
||
.catch(() => {})
|
||
},
|
||
handleDelete() {
|
||
// 是否确认删除?
|
||
this.$confirm(this.$t('trials:reading:warnning:msg48'), {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true
|
||
})
|
||
.then(async() => {
|
||
if (this.questionForm.RowId) {
|
||
const loading = this.$loading({ fullscreen: true })
|
||
var param = {
|
||
visitTaskId: this.visitTaskId,
|
||
questionId: this.parentQsId,
|
||
rowId: this.questionForm.RowId
|
||
}
|
||
deleteReadingRowAnswer(param)
|
||
.then(async res => {
|
||
loading.close()
|
||
if (res.IsSuccess) {
|
||
// this.$emit('getReadingQuestionAndAnswer')
|
||
if (this.questionForm.MeasureData) {
|
||
await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex })
|
||
}
|
||
// await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||
// DicomEvent.$emit('getMeasureData')
|
||
if (!this.questionForm.IsDicomReading && this.questionForm.MeasureData) {
|
||
DicomEvent.$emit('removeNoneDicomMeasureData', this.questionForm.MeasureData)
|
||
}
|
||
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||
DicomEvent.$emit('getReportInfo', true)
|
||
// if (!this.questionForm.IsDicomReading) {
|
||
// DicomEvent.$emit('removeNoneDicomMeasureData', this.questionForm.MeasureData)
|
||
// }
|
||
// '删除成功!'
|
||
this.$message.success(this.$t('common:message:deletedSuccessfully'))
|
||
loading.close()
|
||
}
|
||
}).catch(() => { loading.close() })
|
||
} else {
|
||
// const loading = this.$loading({ fullscreen: true })
|
||
// 移除新建病灶并关闭窗口
|
||
// if (this.questionForm.MeasureData) {
|
||
// await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex })
|
||
// }
|
||
// DicomEvent.$emit('getMeasureData')
|
||
if (!this.questionForm.IsDicomReading && this.questionForm.MeasureData) {
|
||
DicomEvent.$emit('removeNoneDicomMeasureData', this.questionForm.MeasureData)
|
||
}
|
||
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||
// loading.close()
|
||
}
|
||
})
|
||
},
|
||
handleClose() {
|
||
if (!this.questionForm.RowId) {
|
||
// '当前病灶为新建病灶,未保存。如果关闭窗口,将会删除病灶信息,是否继续?'
|
||
this.$confirm(this.$t('trials:reading:warnning:msg49'), {
|
||
type: 'warning',
|
||
distinguishCancelAndClose: true
|
||
})
|
||
.then(async() => {
|
||
// 移除新建病灶并关闭窗口
|
||
if (this.questionForm.MeasureData) {
|
||
await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex })
|
||
}
|
||
// await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||
DicomEvent.$emit('getMeasureData')
|
||
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||
})
|
||
.catch(() => {})
|
||
} else {
|
||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断)
|
||
|
||
if (this.questionForm.saveTypeEnum === 1) {
|
||
// // 当前病灶信息有更新,未保存,是否继续?
|
||
// this.$confirm(this.$t('trials:reading:warnning:msg50'), {
|
||
// type: 'warning',
|
||
// distinguishCancelAndClose: true
|
||
// })
|
||
// .then(() => {
|
||
// this.$emit('close')
|
||
// })
|
||
// .catch(() => {})
|
||
this.$emit('close')
|
||
} else {
|
||
this.$emit('close')
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.measurement-form{
|
||
>>>.el-form-item__label{
|
||
color: #c3c3c3;
|
||
}
|
||
>>>.el-input .el-input__inner{
|
||
background-color: transparent;
|
||
color: #ddd;
|
||
border: 1px solid #5e5e5e;
|
||
}
|
||
>>>.el-form-item{
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-start;
|
||
}
|
||
>>>.el-form-item__content{
|
||
flex: 1;
|
||
}
|
||
>>>.el-input.is-disabled .el-input__inner{
|
||
background-color: #646464a1;
|
||
}
|
||
>>>.el-select.is-disabled .el-input__inner{
|
||
background-color: #646464a1;
|
||
}
|
||
>>>.el-button--mini, .el-button--mini.is-round {
|
||
padding: 7px 10px;
|
||
}
|
||
.el-form-item__content
|
||
.el-select{
|
||
width: 100%;
|
||
}
|
||
.input-width1{
|
||
width: calc(100% -60px)!important;
|
||
}
|
||
.input-width2{
|
||
width: 100% !important;
|
||
}
|
||
}
|
||
|
||
</style>
|