irc_web/.svn/pristine/be/be2c50d0cb4e7b5538958ee2ec7...

972 lines
38 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="true"
>
<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>
<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: '请注明', 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 === 9"
@input="limitInput($event, qs)"
@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)})"
/>
<el-select
v-if="qs.Type==='select'"
v-model="questionForm[qs.Id]"
filterable
:disabled="((!isBaseLineTask && qs.QuestionMark === 11) || (isBaseLineTask || lesionType === 2) && qs.QuestionMark === 7) || !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)"
@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]"
: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 { submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
import DicomEvent from '../DicomEvent'
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',
splitOrMergeLesionName: '',
pictureBaseStr: '',
digitPlaces: 0
}
},
mounted() {
this.trialId = this.$route.query.trialId
this.initForm()
// this.getOrganInfoList()
},
methods: {
limitInput(value, q) {
console.log(value)
if (value.indexOf('.') > -1) {
if (value.split('.')[1].length >= this.digitPlaces) {
this.$set(this.questionForm, q.Id, parseFloat(value).toFixed(this.digitPlaces))
}
}
},
initForm() {
console.log(this.lesionType)
this.questions.forEach(item => {
var val = this.answers[item.Id]
console.log(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, '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)
var lesionNum = this.getQuestionVal(11)
var idx = this.questions.findIndex(i => i.QuestionMark === 11)
if (this.questionForm.RowId) {
if (idx > -1) {
this.$set(this.questionForm, 'saveTypeEnum', isNaN(parseInt(lesionNum)) ? 1 : 2)
} else {
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.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)
console.log(this.lesionNameId)
console.log(this.lesionOrganId)
console.log(this.lesionLocId)
this.originalQuestionForm = { ...this.questionForm }
this.lesionType === 0 && this.questionForm.MeasureData
if (this.questionForm.MeasureData) {
console.log('this.questionForm.MeasureData', 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.answers.IsCurrentTaskAdd : 'True'
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() {
DicomEvent.$emit('imageLocation', this.questionForm)
},
getOrganInfoList(isLymphNodes) {
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 = 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) {
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(8)] = ''
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)
})
var obj = { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionType: this.lesionType }
DicomEvent.$emit('imageLocation', obj)
// DicomEvent.$emit('imageLocation', this.questionForm)
var type = null
if (this.questionForm.isSave !== false) {
await this.deleteLesionInfo()
type = 0
} else {
type = 1
}
DicomEvent.$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)
}
})
},
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)
DicomEvent.$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])
// }
// })
console.log('question', question)
if (question.QuestionMark === 8 && question.RelationQuestions.length > 0) {
// 当选择部位时,联动器官、位置、是否淋巴结问题答案
var index = this.organList.findIndex(item => item[question.DataTableColumn] === v)
console.log('index', index)
if (index > -1) {
var selected = this.organList[index]
question.RelationQuestions.map(qs => {
console.log('qs', qs)
var val = selected[qs.DataTableColumn]
// if (typeof val === 'boolean') {
// // val = this.$fd('YesOrNo', val)
// }
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, '')
})
}
}
// if (question.QuestionMark === 4) {
// this.lesionNameId = this.getQuestionId(4)
// }
if (question.Id === this.lesionOrganId || question.Id === this.lesionLocId) {
// 设置病灶名称
this.$set(this.questionForm, this.lesionNameId, `${this.questionForm[this.lesionOrganId]} ${this.questionForm[this.lesionLocId]}`)
}
// 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 = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionPart = this.getQuestionVal(8)
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
const lesionState = Number(this.getQuestionVal(7))
const lesionNum = Number(this.getQuestionVal(11))
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, lesionState, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, lesionNum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
},
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 })
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 (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
}
} else {
this.$set(this.questionForm, 'IsDicomReading', true)
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 })
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 isLymphLesion = this.getQuestionVal(2)
isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionPart = this.getQuestionVal(8)
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
const lesionState = Number(this.getQuestionVal(7))
const lesionNum = Number(this.getQuestionVal(11))
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, lesionLength, lesionState, lesionNum, 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 ''
}
},
async uploadScreenshots(fileName, file) {
try {
file = this.convertBase64ToBlob(file)
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
var lesionState = this.getQuestionVal(7)
var measureData = this.questionForm.MeasureData
if ((!measureData || measureData === '') && (lesionState === 1 || lesionState === 2 || lesionState === 3)) {
this.$message.error('请标记病灶')
return
}
const loading = this.$loading({ fullscreen: true })
var lesionLength = Number(this.getQuestionVal(0))
var lesionShort = Number(this.getQuestionVal(1))
// var lymphNodes = this.getQuestionVal(2)
// lymphNodes = (lymphNodes !== null && lymphNodes !== undefined) ? parseInt(lymphNodes) : null
// 靶病灶状态为0存在一定存在长径或者长短径长径、十字线
// 普通靶病灶长径大于10mm且不小于2倍层厚基线校验
// 淋巴结靶病灶短径大于15mm且不小于2倍层厚基线校验
DicomEvent.$emit('getScreenshots', async val => {
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 (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,
TaskNum: this.answers.TaskNum,
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 : '',
blindName: this.answers.BlindName,
rowId: this.questionForm.RowId,
numberOfFrames: measureData && !isNaN(parseInt(this.questionForm.MeasureData.frame)) ? parseInt(this.questionForm.MeasureData.frame) : 0,
picturePath: picturePath,
organInfoId: this.questionForm.OrganInfoId
}
submitTableQuestion(params).then(async res => {
try {
this.$message.success('保存成功!')
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))
const lesionNum = Number(this.getQuestionVal(11))
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, lesionState, lesionNum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
// this.$emit('getReadingQuestionAndAnswer')
// await store.dispatch('reading/refreshMeasuredData', this.visitTaskId)
DicomEvent.$emit('getMeasureData')
this.$emit('close')
console.log('close')
DicomEvent.$emit('getReportInfo', true)
} catch (e) {
console.log(e)
}
}).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, '')
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 = isLymphLesion ? parseInt(isLymphLesion) : null
const lesionPart = this.getQuestionVal(8)
const lesionOrgan = this.getQuestionVal(6)
const lesionLength = Number(this.getQuestionVal(0))
const lesionShort = Number(this.getQuestionVal(1))
const lesionState = Number(this.getQuestionVal(7))
const lesionNum = Number(this.getQuestionVal(11))
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, lesionShort, lesionState, lesionNum, saveTypeEnum: this.questionForm.saveTypeEnum, lesionLength, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
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(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')
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
DicomEvent.$emit('getReportInfo', true)
this.$message.success('删除成功!')
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')
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
loading.close()
}
})
},
handleClose() {
if (!this.questionForm.RowId) {
this.$confirm('当前病灶为新建病灶,未保存。如果关闭窗口,将会删除病灶信息,是否继续?', {
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 {
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>