irc_web/.svn/pristine/a4/a404ac58d2e9ca8fc19d1a9ea0b...

1154 lines
46 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="病灶类型"
prop="LesionType"
:rules="[
{ required:true,message: '请注明', trigger: ['blur']},
]"
>
<!-- 下拉框 -->
<el-select
v-model="questionForm.LesionType"
filterable
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask"
@change="((val)=>{lesionTypeChange(val)})"
>
<el-option
v-for="item of $d.LesionType"
v-show="!(isBaseLineTask && item.value === 2)"
: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.Type!=='group' && qs.Type!=='summary' && qs.QuestionMark !== 4 && qs.QuestionMark !== 6 && qs.QuestionMark !== 2,
message: '请注明', trigger: ['blur']},
]"
>
<!-- 输入框 -->
<template v-if="qs.Type==='input' || qs.Type==='number'">
<el-input
v-if="qs.Type==='input' || qs.Type==='number'"
v-model="questionForm[qs.Id]"
:disabled="qs.TableQuestionType===2 || !isCurrentTask || qs.QuestionMark===0 || qs.QuestionMark===1 || qs.QuestionMark===4 || readingTaskState>=2 "
>
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
</template>
</el-input>
</template>
<!-- <template v-if="qs.Type==='input' && qs.QuestionMark===0">
<el-col :span="16">
<el-input
v-if="qs.Type==='input'"
v-model="questionForm[qs.Id]"
:disabled="qs.TableQuestionType===2 || !isCurrentTask"
/>
</el-col>
<el-col :span="8" style="padding:0 5px">
<el-button
v-if="qs.QuestionMark === 0 && qs.MeasuredData=== '' && isCurrentTask"
type="text"
size="mini"
@click="activeTool"
>开始测量</el-button>
</el-col>
</template> -->
<!-- 多行文本输入框 -->
<el-input
v-if="qs.Type==='textarea'"
v-model="questionForm[qs.Id]"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:disabled="!isCurrentTask || readingTaskState>=2"
/>
<!-- 下拉框 -->
<el-select
v-if="qs.Type==='select'"
v-model="questionForm[qs.Id]"
filterable
:disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && qs.QuestionMark === 5 && (lesionType !== 2 || (lesionType === 2 && isCurrentTaskAdd === 'False'))) || qs.QuestionMark === 2"
@change="((val)=>{formItemChange(val, qs)})"
>
<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">
<el-option
v-for="item of $d[qs.DictionaryCode]"
: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-form-item>
<!-- 清除标记 -->
<el-button
v-if="questionForm.MeasureData"
size="mini"
@click="handleDeleteMeasureData"
>
清除标记
</el-button>
<!-- 删除 -->
<el-button
v-if="isCurrentTaskAdd !== 'False'"
size="mini"
@click="handleDelete"
>
删除
</el-button>
<!-- 保存 -->
<el-button
size="mini"
@click="handleSave"
>
{{ $t('common:button:save') }}
</el-button>
</el-form-item>
</div>
</el-form>
</template>
<script>
import { getTrialOrganList, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
import Store from './Store'
import store from '@/store'
export default {
name: 'MeasurementForm',
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
},
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: [],
lesionNameId: '',
lesionOrganId: '',
lesionLocId: '',
originalQuestionForm: {},
isRender: false,
toolType: '',
lesionName: '',
isCurrentTaskAdd: 'False'
}
},
mounted() {
this.trialId = this.$route.query.trialId
this.initForm()
// this.getOrganInfoList()
},
methods: {
initForm() {
this.questions.forEach(item => {
var val = this.answers[item.Id]
if (item.DictionaryCode) {
val = this.answers[item.Id] ? Number(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, 'isSave', this.answers.isSave)
this.toolType = this.questionForm.MeasureData ? this.questionForm.MeasureData.type : ''
if (!this.questionForm.LesionType) {
this.$set(this.questionForm, 'LesionType', this.lesionType)
}
this.lesionNameId = this.getQuestionId(4)
this.lesionOrganId = this.getQuestionId(5)
this.lesionLocId = this.getQuestionId(6)
this.originalQuestionForm = { ...this.questionForm }
// this.lesionType === 0 && this.questionForm.MeasureData
if (this.questionForm.MeasureData) {
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
if (this.questionForm.MeasureData.type === 'Bidirectional') {
this.organList = []
this.getOrganInfoList(1)
} else if (this.questionForm.MeasureData.type === 'Length') {
// 长径测量工具 且是靶病灶 器官只能是非淋巴结类型
this.organList = []
this.getOrganInfoList(0)
} else {
this.organList = []
this.getOrganInfoList()
}
} else {
this.organList = []
this.getOrganInfoList()
}
this.lesionName = this.getLesionInfo(this.orderMark, this.rowIndex)
this.isCurrentTaskAdd = this.answers.IsCurrentTaskAdd
this.isRender = true
},
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() {
Store.$emit('imageLocation', this.questionForm)
},
getOrganInfoList(isLymphNodes) {
var param = {
trialId: this.trialId,
lesionType: this.lesionType,
isEnable: true
}
if (isLymphNodes !== undefined && isLymphNodes !== null) {
param.isLymphNodes = isLymphNodes
}
getTrialOrganList(param).then(res => {
this.organList = res.Result
})
},
async lesionTypeChange(v) {
// this.$emit('determineExistsUnsavedLession', async val => {
// if (val) {
// if (this.questionForm.MeasureData && this.questionForm.MeasureData.type === 'ArrowAnnotate' && v === 0) {
// this.$confirm('不可测量的病灶不允许设置为靶病灶!', {
// 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) {
// this.$confirm(`${this.tableQuestions[idx].QuestionName}个数最多不能超过${this.tableQuestions[idx].MaxQuestionCount}个`, {
// type: 'warning',
// showCancelButton: false,
// callback: action => {}
// })
// this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
// return
// }
// var arr = []
// this.questionForm[this.getQuestionId(5)] = ''
// 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] ? this.questionForm[item.Id] : ''
// arr.push(item)
// })
// Store.$emit('imageLocation', this.questionForm)
// var type = null
// if (this.questionForm.isSave !== false) {
// await this.deleteLesionInfo()
// type = 0
// } else {
// type = 1
// }
// Store.$emit('changeLesionType', { questionForm: arr, oldLesionType: this.lesionType, newLesionType: v, rowIndex: this.questionForm.RowIndex, measureData: this.questionForm.MeasureData, type })
// } else {
// this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
// }
// })
if (this.questionForm.MeasureData && this.questionForm.MeasureData.type === 'ArrowAnnotate' && v === 0) {
this.$confirm('不可测量的病灶不允许设置为靶病灶!', {
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) {
this.$confirm(`${this.tableQuestions[idx].QuestionName}个数最多不能超过${this.tableQuestions[idx].MaxQuestionCount}个`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
return
}
var arr = []
this.questionForm[this.getQuestionId(5)] = ''
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] ? this.questionForm[item.Id] : ''
arr.push(item)
})
Store.$emit('imageLocation', this.questionForm)
var type = null
if (this.questionForm.isSave !== false) {
await this.deleteLesionInfo()
type = 0
} else {
type = 1
}
Store.$emit('changeLesionType', { questionForm: arr, oldLesionType: this.lesionType, newLesionType: v, rowIndex: this.questionForm.RowIndex, measureData: this.questionForm.MeasureData, type })
},
deleteLesionInfo() {
return new Promise((resolve, reject) => {
var param = {
visitTaskId: this.visitTaskId,
questionId: this.parentQsId,
rowIndex: this.questionForm.RowIndex
}
deleteReadingRowAnswer(param)
.then(async res => {
if (res.IsSuccess) {
// await store.dispatch('reading/getMeasuredData', this.visitTaskId)
// this.$emit('refreshReadingQuestionAndAnswer', 0)
// var measureData = { ...this.questionForm.MeasureData }
// if (measureData) {
// Store.$emit('resetMeasuredData', measureData.instanceId)
// }
// Store.$emit('refreshVisitList', this.visitTaskId)
Store.$emit('getReportInfo', true)
}
resolve()
}).catch(() => {
reject()
})
})
},
formItemChange(v, question) {
// this.$emit('determineExistsUnsavedLession', val => {
// if (val) {
// } else {
// this.$set(this.questionForm, question.Id, this.originalQuestionForm[question.Id])
// }
// })
if (question.QuestionMark === 5 && 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]
// if (typeof val === 'boolean') {
// // val = this.$fd('YesOrNo', val)
// }
this.$set(this.questionForm, qs.Id, val)
})
} else {
question.RelationQuestions.map(qs => {
this.$set(this.questionForm, qs.Id, '')
})
}
}
if (question.Id === this.lesionOrganId || question.Id === this.lesionLocId) {
// 设置病灶名称
this.$set(this.questionForm, this.lesionNameId, `${this.questionForm[this.lesionOrganId]} ${this.questionForm[this.lesionLocId]}`)
}
this.$set(this.questionForm, 'isSave', false)
var isLymphLesion = this.getQuestionVal(2)
isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
this.$emit('resetQuestions', { isLymphLesion, lesionOrgan, lesionShort, isLesionSaved: false, lesionLength, rowIndex: this.rowIndex, questionId: this.parentQsId })
},
setMeasureData(measureData) {
if (measureData) {
// 获取长径(0)
// const loading = this.$loading({ fullscreen: true })
if (measureData.type === 'Length' || measureData.type === 'Bidirectional') {
var lengthObj = this.questions.find(i => i.QuestionMark === 0)
var length = ''
if (measureData.type === 'Length') {
length = measureData.data.length ? measureData.data.length.toFixed(2) : ''
} else if (measureData.type === 'Bidirectional') {
length = measureData.data.longestDiameter
}
this.$set(this.questionForm, lengthObj.Id, length)
// 获取短径(1)
var shortObj = this.questions.find(i => i.QuestionMark === 1)
var short = ''
if (measureData.type === 'Bidirectional') {
short = measureData.data.shortestDiameter
}
this.$set(this.questionForm, shortObj.Id, short)
}
if (this.toolType !== measureData.type) {
// 获取器官问题
var organ = this.getQuestionVal(5)
if (!organ) {
// 十字线工具 器官只能是淋巴结类型
if (measureData.type === 'Bidirectional') {
this.organList = []
this.getOrganInfoList(1)
} else if (measureData.type === 'Length') {
// 长径测量工具 且是靶病灶 器官只能是非淋巴结类型
this.organList = []
this.getOrganInfoList(0)
}
}
}
measureData.data.remark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
var data = {
Id: '',
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
}
// Store.$emit('addTemporaryMeasuredData', data)
store.dispatch('reading/addMeasuredData', { visitTaskId: this.visitTaskId, data: data })
Store.$emit('getMeasureData')
// Store.$emit('updateImage', measureData.instanceId)
this.$set(this.questionForm, 'isSave', false)
this.$set(this.questionForm, 'MeasureData', measureData)
}
var isLymphLesion = this.getQuestionVal(2)
isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
this.$emit('resetQuestions', { isLymphLesion, lesionOrgan, lesionShort, lesionLength, isLesionSaved: false, rowIndex: this.rowIndex, questionId: this.parentQsId })
// 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 ''
}
},
handleSave() {
this.$refs.measurementForm.validate(valid => {
if (!valid) return
const loading = this.$loading({ fullscreen: true })
var measureData = this.questionForm.MeasureData
var lesionState = this.getQuestionVal(7)
var lesionLength = Number(this.getQuestionVal(0))
var lesionShort = Number(this.getQuestionVal(1))
var lymphNodes = this.getQuestionVal(2)
lymphNodes = lymphNodes ? parseInt(lymphNodes) : null
if (this.isBaseLineTask) {
// 基线
// 靶病灶且状态为存在0
if (this.lesionType === 0 && lesionState === 0) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mmCT/MR
if (!(measureData && measureData.type === 'Bidirectional' && lesionShort >= 15)) {
this.$confirm(`评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记且短径须大于等于15mm`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结靶病灶 长径测量工具,长径大于10mm且不小于2倍层厚CT/MR
if (!(measureData && measureData.type === 'Length' && lesionLength > 10 && lesionLength >= 2 * measureData.thick)) {
this.$confirm(`评估状态为存在的非淋巴结靶病灶需使用长径测量工具添加标记长径须大于10mm且不小于2倍层厚`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 非靶病灶且状态为存在0
if (this.lesionType === 1 && lesionState === 0) {
if (lymphNodes === 1) {
// 淋巴结非靶病灶 必须使用长短径测量工具或标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或标注工具添加标记`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具或标注工具
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的非淋巴结靶病灶需使用长径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
} else {
// 非基线
// 靶病灶且状态为存在0
if (this.lesionType === 0 && lesionState === 0) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于10mm
if (!(measureData && measureData.type === 'Bidirectional' && lesionShort >= 10)) {
this.$confirm(`评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记且短径须大于等于10mm`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结靶病灶 长径测量工具,长径大于0mm
if (!(measureData && measureData.type === 'Length' && lesionLength > 0)) {
this.$confirm(`评估状态为存在的非淋巴结靶病灶需使用长径测量工具添加标记长径须大于0mm`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 靶病灶且状态为太小1
if (this.lesionType === 0 && lesionState === 1) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用标注工具短径记录为5mm
if (!(measureData && measureData.type === 'ArrowAnnotate')) {
this.$confirm(`评估状态为太小的淋巴结靶病灶需使用标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
} else {
const shortId = this.getQuestionId(1)
this.$set(this.questionForm, shortId, 5)
}
} else {
// 非淋巴结靶病灶 标注工具,长径记录为5mm
if (!(measureData && measureData.type === 'ArrowAnnotate')) {
this.$confirm(`评估状态为太小的非淋巴结靶病灶需使用标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
} else {
const lengthId = this.getQuestionId(0)
this.$set(this.questionForm, lengthId, 5)
}
}
}
// 靶病灶且状态为无法评估2
if (this.lesionType === 0 && lesionState === 2) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 不需要添加标记
if (measureData) {
this.$confirm(`评估状态为无法评估的淋巴结靶病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结靶病灶 不需要添加标记
if (measureData) {
this.$confirm(`状态为存在的非淋巴结靶病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
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 => {}
})
return
}
} else {
// 非淋巴结靶病灶 标注工具
if (!(measureData && measureData.type === 'ArrowAnnotate')) {
this.$confirm(`评估状态为消失的非淋巴结靶病灶只能使用标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 非靶病灶且状态为存在0
if (this.lesionType === 1 && lesionState === 0) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的非淋巴结非靶病灶需使用长径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 非靶病灶且状态为显著增大1
if (this.lesionType === 1 && lesionState === 1) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为显著增大的淋巴结非靶病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为显著增大的非淋巴结非靶病灶需使用长径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 非靶病灶且状态为无法评估2
if (this.lesionType === 1 && lesionState === 2) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 无标记
if (measureData) {
this.$confirm(`评估状态为无法评估的淋巴结非靶病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 无标记
if (measureData) {
this.$confirm(`评估状态为无法评估的非淋巴结非靶病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 非靶病灶且状态为消失3
if (this.lesionType === 1 && lesionState === 3) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为显著增大的淋巴结非靶病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 标注工具
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为显著增大的非淋巴结非靶病灶需使用标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 新病灶且状态为存在0
if (this.lesionType === 2 && lesionState === 0) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的淋巴结新病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为存在的非淋巴结新病灶需使用长径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 新病灶且状态为疑似1
if (this.lesionType === 2 && lesionState === 1) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为疑似的淋巴结新病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (!(measureData && (measureData.type === 'Length' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为疑似的非淋巴结新病灶需使用长径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 新病灶且状态为无法评估2
if (this.lesionType === 2 && lesionState === 2) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (measureData) {
this.$confirm(`评估状态为无法评估的淋巴结新病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (measureData) {
this.$confirm(`评估状态为无法评估的非淋巴结新病灶不需要添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
// 新病灶且状态为消失3
if (this.lesionType === 2 && lesionState === 3) {
if (lymphNodes === 1) {
// 淋巴结靶病灶 必须使用长短径测量工具、标注工具
if (!(measureData && (measureData.type === 'Bidirectional' || measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为消失的淋巴结新病灶需使用长短径测量工具或标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
} else {
// 非淋巴结非靶病灶 长径测量工具、标注工具
if (!(measureData && (measureData.type === 'ArrowAnnotate'))) {
this.$confirm(`评估状态为消失的非淋巴结新病灶需使用标注工具添加标记!`, {
type: 'warning',
showCancelButton: false,
callback: action => {}
})
return
}
}
}
}
// 靶病灶状态为0存在一定存在长径或者长短径长径、十字线
// 普通靶病灶长径大于10mm且不小于2倍层厚基线校验
// 淋巴结靶病灶短径大于15mm且不小于2倍层厚基线校验
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 (k === 'isSave' || k === 'RowIndex' || k === 'RowId' || k === 'InstanceId' || k === 'SeriesId' || k === 'MeasureData' || k === 'IsCurrentTaskAdd' || k === 'LesionType' || k === 'SplitOrMergeLesionName' || k === 'SplitOrMergeType') continue
if (reg.test(k)) {
if (answers.findIndex(i => i.tableQuestionId === k) === -1) {
answers.push({ tableQuestionId: k, answer: this.questionForm[k] })
}
}
}
// measureData.data.remark = `${this.orderMark}${String(this.questionForm.RowIndex).padStart(2, '0')}`
var params = {
questionId: this.parentQsId,
rowIndex: this.answers.RowIndex,
visitTaskId: this.visitTaskId,
trialId: this.trialId,
measureData: measureData ? JSON.stringify(measureData) : '',
answerList: answers,
seriesId: measureData ? this.questionForm.MeasureData.seriesId : '',
instanceId: measureData ? this.questionForm.MeasureData.instanceId : ''
}
submitTableQuestion(params).then(async res => {
this.$message.success('保存成功!')
this.$set(this.questionForm, 'isSave', true)
this.originalQuestionForm = { ...this.questionForm }
loading.close()
this.$emit('getReadingQuestionAndAnswer')
this.$emit('close')
Store.$emit('getReportInfo', true)
}).catch(() => { loading.close() })
})
},
handleDeleteMeasureData() {
// this.$emit('determineExistsUnsavedLession', val => {
// if (val) {
// }
// })
this.$confirm('是否确认清除标记?', {
type: 'warning',
distinguishCancelAndClose: true
})
.then(async() => {
// 重置长短径
var lengId = this.getQuestionId(0)
this.$set(this.questionForm, lengId, '')
var shortId = this.getQuestionId(1)
this.$set(this.questionForm, shortId, '')
this.$set(this.questionForm, 'isSave', false)
await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData })
Store.$emit('getMeasureData')
// Store.$emit('updateImage', this.questionForm.MeasureData.instanceId)
var isLymphLesion = this.getQuestionVal(2)
isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
this.$emit('resetQuestions', { isLymphLesion, lesionOrgan, lesionShort, isLesionSaved: false, lesionLength, rowIndex: this.rowIndex, questionId: this.parentQsId })
this.$set(this.questionForm, 'MeasureData', '')
this.organList = []
this.toolType = ''
// this.handleSave()
this.getOrganInfoList()
})
.catch(() => {})
},
handleDelete() {
// 判断是否存在未保存的病灶
// this.$emit('determineExistsUnsavedLession', val => {
// if (val) {
// }
// })
this.$confirm('是否确认删除?', {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
const loading = this.$loading({ fullscreen: true })
var param = {
visitTaskId: this.visitTaskId,
questionId: this.parentQsId,
rowIndex: this.questionForm.RowIndex
}
deleteReadingRowAnswer(param)
.then(res => {
loading.close()
if (res.IsSuccess) {
this.$emit('getReadingQuestionAndAnswer')
Store.$emit('getReportInfo', true)
this.$message.success('删除成功!')
}
}).catch(() => { loading.close() })
})
},
handleClose() {
if (this.questionForm.isSave === false) {
this.$confirm('当前病灶信息未保存,是否继续关闭?', {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.$emit('close')
})
.catch(() => {})
} 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-form-item__content
.el-select{
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
}
.input-width2{
width: 100% !important;
}
}
</style>