irc_web/.svn/pristine/50/50e2640b47b7e164ddab8d4092d...

1521 lines
67 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>