脾脏评估和PET 5PS评估逻辑修改

uat_us
caiyiling 2024-04-24 12:57:45 +08:00
parent 0e33b60681
commit 1825ac34e1
3 changed files with 149 additions and 100 deletions

View File

@ -159,6 +159,7 @@ export default {
this.loading = true
var res = await getReadingCalculationData({ visitTaskId: this.visitTaskId })
this.baseLinePET5PS = res.Result.BaseLinePET5PS
this.calculatePet5PS = res.Result.CalculatePET5PS
this.loading = false
}
this.initList(true)
@ -184,7 +185,6 @@ export default {
}
})
this.questions = questions
this.calculatePet5PS = this.setpet5PS()
this.setPet5PSCommentDisplay()
this.measurements = []
res.OtherInfo.QuestionMarkInfoList.forEach(i => {
@ -249,23 +249,7 @@ export default {
this.$alert(this.$t('trials:lugano:message:saveWarning1'), this.$t('trials:lugano:fusionDialog:warning'))
return
}
// SUVmax
const liverSUVmax = !isNaN(parseFloat(this.questionForm[this.liverSuvmaxId])) ? parseFloat(this.questionForm[this.liverSuvmaxId]) : 0
// SUVmax
const lungSUVmax = !isNaN(parseFloat(this.questionForm[this.lungSuvmaxId])) ? parseFloat(this.questionForm[this.lungSuvmaxId]) : 0
// const pet5PS = !isNaN(parseInt(this.questionForm[this.pet5PSId])) ? parseInt(this.questionForm[this.pet5PSId]) : 0
if (liverSUVmax && lungSUVmax && (liverSUVmax <= lungSUVmax)) {
// 'SUVmaxSUVmax'
this.$confirm(this.$t('trials:lugano:message:validLung'), this.$t('trials:lugano:fusionDialog:warning'), {
type: 'warning'
}).then(() => {
this.saveQuestionsForm()
}).catch(() => {
})
} else {
this.saveQuestionsForm()
}
this.saveQuestionsForm()
// else if (pet5PS > 1 && (!liverSUVmax || !lungSUVmax)) {
// this.$alert('pet 5ps1XNE', '', {
// // confirmButtonText: '',
@ -344,11 +328,11 @@ export default {
var idx = this.measurements.findIndex(i => i.QuestionId === Id)
if (idx === -1) return
this.$set(this.questionForm, Id, '')
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setPet5PSCommentDisplay()
this.setUptakeFormBaseline()
// var pet5PS = this.setpet5PS()
// this.questionForm[this.pet5PSId] = pet5PS
// this.calculatePet5PS = pet5PS
// this.setPet5PSCommentDisplay()
// this.setUptakeFormBaseline()
FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.measurements[idx].OtherMeasureData, type: 'clear' })
var remark = this.measurements[idx].OtherMeasureData.data.remark
remark === 'Liver' ? this.liverIsInsideVolume = true : remark === 'Mediastinum' ? this.lungIsInsideVolume = true : ''
@ -373,8 +357,26 @@ export default {
})
return
}
const loading = this.$loading({ fullscreen: true })
// SUVmax
const liverSUVmax = !isNaN(parseFloat(this.questionForm[this.liverSuvmaxId])) ? parseFloat(this.questionForm[this.liverSuvmaxId]) : 0
// SUVmax
const lungSUVmax = !isNaN(parseFloat(this.questionForm[this.lungSuvmaxId])) ? parseFloat(this.questionForm[this.lungSuvmaxId]) : 0
// const pet5PS = !isNaN(parseInt(this.questionForm[this.pet5PSId])) ? parseInt(this.questionForm[this.pet5PSId]) : 0
if (liverSUVmax && lungSUVmax && (liverSUVmax <= lungSUVmax)) {
// 'SUVmaxSUVmax'
this.$confirm(this.$t('trials:lugano:message:validLung'), this.$t('trials:lugano:fusionDialog:warning'), {
type: 'warning'
}).then(() => {
this.handleSaveAnnotation(question)
}).catch(() => {
})
} else {
this.handleSaveAnnotation(question)
}
},
handleSaveAnnotation(question) {
const loading = this.$loading({ fullscreen: true })
//
var answers = []
var questionMarkInfoList = []
@ -414,6 +416,7 @@ export default {
window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location)
loading.close()
this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 })
this.resetSuvQuestions(1)
}).catch(() => {
loading.close()
})
@ -454,17 +457,20 @@ export default {
OrderMarkName: remark
}
if (measurement.type === 'CircleROI') {
const suvMax = measurement.suvMax
if (this.questionForm[obj.QuestionId] !== suvMax) {
this.setPet5PSCommentDisplay()
this.$set(this.questionForm, obj.QuestionId, suvMax || null)
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setUptakeFormBaseline()
}
this.$set(this.questionForm, obj.QuestionId, measurement.suvMax || null)
}
// if (measurement.type === 'CircleROI') {
// const suvMax = measurement.suvMax
// if (this.questionForm[obj.QuestionId] !== suvMax) {
// this.setPet5PSCommentDisplay()
// this.$set(this.questionForm, obj.QuestionId, suvMax || null)
// var pet5PS = this.setpet5PS()
// this.questionForm[this.pet5PSId] = pet5PS
// this.calculatePet5PS = pet5PS
// this.setUptakeFormBaseline()
// }
// }
FusionEvent.$emit('addOrUpdateAnnotations', { data })
this.questionFormChangeState = true
if (obj.QuestionType === 51 && !this.liverRender) {
@ -519,13 +525,16 @@ export default {
OrderMarkName: remark
}
if (measurement.type === 'CircleROI') {
this.setPet5PSCommentDisplay()
this.$set(this.questionForm, obj.QuestionId, null)
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setUptakeFormBaseline()
}
// if (measurement.type === 'CircleROI') {
// this.setPet5PSCommentDisplay()
// this.$set(this.questionForm, obj.QuestionId, null)
// var pet5PS = this.setpet5PS()
// this.questionForm[this.pet5PSId] = pet5PS
// this.calculatePet5PS = pet5PS
// this.setUptakeFormBaseline()
// }
FusionEvent.$emit('addOrUpdateAnnotations', { data })
this.questionFormChangeState = true
this.setQuestionStatus(this.questions, this.measurements[idx].QuestionType)
@ -534,11 +543,11 @@ export default {
var idx = this.measurements.findIndex(i => i.OrderMarkName === remark)
if (idx === -1) return
this.$set(this.questionForm, this.measurements[idx].QuestionId, '')
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setPet5PSCommentDisplay()
this.setUptakeFormBaseline()
// var pet5PS = this.setpet5PS()
// this.questionForm[this.pet5PSId] = pet5PS
// this.calculatePet5PS = pet5PS
// this.setPet5PSCommentDisplay()
// this.setUptakeFormBaseline()
this.measurements[idx].OtherMeasureData = ''
this.currentQsId = this.measurements[idx].QuestionId
// const { QuestionId, QuestionType } = this.measurements[idx]
@ -575,7 +584,7 @@ export default {
setUptakeFormBaseline() {
// 线
if (!this.isBaseLineTask) {
console.log('setUptakeFormBaseline: ',this.questionForm[this.pet5PSId],this.baseLinePET5PS)
console.log('setUptakeFormBaseline: ', this.questionForm[this.pet5PSId], this.baseLinePET5PS)
if (this.questionForm[this.pet5PSId] > 0) {
// 访PET 5ps线PET 5ps
// 访PET 5ps线PET 5ps
@ -619,7 +628,7 @@ export default {
return ''
}
},
resetSuvQuestions() {
resetSuvQuestions(type = 0) {
this.loading = true
var params = {
trialId: this.trialId,
@ -634,40 +643,41 @@ export default {
// this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null)
// }
if (v.Childrens.length > 0) {
this.setSuvChild(v.Childrens)
this.setSuvChild(v.Childrens, type)
}
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setPet5PSCommentDisplay()
this.setUptakeFormBaseline()
// var pet5PS = this.setpet5PS()
// this.questionForm[this.pet5PSId] = pet5PS
// this.calculatePet5PS = pet5PS
// this.setPet5PSCommentDisplay()
// this.setUptakeFormBaseline()
this.questionFormChangeState = true
})
this.loading = false
}).catch(() => { this.loading = false })
},
setSuvChild(obj) {
setSuvChild(obj, type) {
obj.forEach(i => {
if (i.QuestionType === 53) {
if (i.QuestionType === 53 && !type) {
// SUVmax;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
}
if (i.QuestionType === 54) {
if (i.QuestionType === 54 && !type) {
// SUVmax;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
}
// if (i.QuestionType === 55) {
// // PET 5PS;
// this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
// }
// if (i.QuestionType === 56) {
// // 线;
// this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
// }
if (i.QuestionType === 55) {
// PET 5PS;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
this.calculatePet5PS = i.Answer
}
if (i.QuestionType === 56) {
// 线;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
}
if (i.Childrens && i.Childrens.length > 0) {
this.setSuvChild(i.Childrens)
this.setSuvChild(i.Childrens, type)
}
})
},

View File

@ -30,7 +30,7 @@
<script>
// import { uploadPrintscreen } from '@/api/reading'
import { saveTaskQuestion, getSplenicState, getSplenicVerify, getCanChooseNotMerge } from '@/api/trials'
import { saveTaskQuestion, getSplenicState, getSplenicVerify, getCanChooseNotMerge, getDicomReadingQuestionAnswer } from '@/api/trials'
import QuestionItem from './QuestionItem'
import DicomEvent from './DicomEvent'
import { mapGetters } from 'vuex'
@ -146,12 +146,12 @@ export default {
}
},
methods: {
async getQuestions(visitTaskId) {
async getQuestions(visitTaskId, isRefresh = false) {
var isChangeVisitTask = this.visitTaskId !== visitTaskId
this.visitTaskId = visitTaskId
// const loading = this.$loading({ fullscreen: true })
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
this.questions = []
var qs = []
if (idx > -1) {
this.isBaseLineTask = this.visitTaskList[idx].IsBaseLineTask
this.readingTaskState = this.visitTaskList[idx].ReadingTaskState
@ -164,7 +164,7 @@ export default {
}
this.measurements.push(i)
})
if (isChangeVisitTask) {
if (isChangeVisitTask || isRefresh) {
const { Result } = await getSplenicVerify(visitTaskId)
this.spleenInfo = Result
}
@ -210,15 +210,15 @@ export default {
if (v.Childrens.length > 0) {
this.setChild(v.Childrens)
}
this.questions.push(v)
qs.push(v)
}
// this.questions = questions
this.questions = Object.assign([], qs)
}
if (this.imageQualityIssuesId) {
store.dispatch('reading/setImageQualityIssues', this.questionForm[this.imageQualityIssuesId])
}
if (this.spleenLengthId && this.spleenInfo && this.readingTaskState < 2) {
this.calculateSpleenStatus = this.setSpleenStatus(this.questionForm[this.spleenLengthId])
this.calculateSpleenStatus = this.spleenInfo.SplenicStatus
this.setSpleenCommentDisplay()
}
// loading.close()
@ -370,7 +370,7 @@ export default {
this.$message.success(this.$t('common:message:savedSuccessfully'))
var trialId = this.$route.query.trialId
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId })
this.getQuestions(this.visitTaskId)
this.getQuestions(this.visitTaskId, true)
this.loading = false
if (this.isQulityIssues) {
DicomEvent.$emit('questionFormChange', false)
@ -505,15 +505,15 @@ export default {
var idx = this.measurements.findIndex(i => i.QuestionId === Id)
if (idx === -1) return
this.$set(this.questionForm, Id, '')
if (obj.QuestionType === 60 || obj.QuestionType === 61) {
this.$set(this.questionForm, this.spleenStatusId, '')
this.$set(this.questionForm, this.spleenLengthId, '')
}
// if (obj.QuestionType === 60 || obj.QuestionType === 61) {
// this.$set(this.questionForm, this.spleenStatusId, '')
// this.$set(this.questionForm, this.spleenLengthId, '')
// }
await store.dispatch('reading/removeNonTargetMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.measurements[idx].MeasureData, questionId: Id })
this.measurements.splice(idx, 1)
DicomEvent.$emit('getMeasureData')
this.calculateSpleenStatus = ''
this.setSpleenCommentDisplay()
// this.calculateSpleenStatus = ''
// this.setSpleenCommentDisplay()
this.formChanged = true
},
saveAnnotation(question) {
@ -551,6 +551,7 @@ export default {
const qsType = question.QuestionType === 60 ? 4 : question.QuestionType === 61 ? 5 : null
saveTaskQuestion(qsType, params).then(async res => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
await this.setQuestions()
this.loading = false
this.$set(question, 'SaveEnum', 0)
DicomEvent.$emit('getReportInfo', true)
@ -633,13 +634,13 @@ export default {
if (measurement.type === 'ArrowAnnotate') {
const location = measurement.location ? Number(measurement.location).toFixed(this.digitPlaces) : null
this.$set(this.questionForm, this.measurements[idx].QuestionId, location || null)
if (this.measurements[idx].QuestionType === 60 || this.measurements[idx].QuestionType === 61) {
var length = this.getSpleenL()
this.$set(this.questionForm, this.spleenLengthId, length)
var status = this.setSpleenStatus(length)
this.$set(this.questionForm, this.spleenStatusId, status)
this.calculateSpleenStatus = status
}
// if (this.measurements[idx].QuestionType === 60 || this.measurements[idx].QuestionType === 61) {
// var length = this.getSpleenL()
// this.$set(this.questionForm, this.spleenLengthId, length)
// var status = this.setSpleenStatus(length)
// this.$set(this.questionForm, this.spleenStatusId, status)
// this.calculateSpleenStatus = status
// }
// if (this.measurements[idx].QuestionType === 48 && length <= 130 && this.isBaseLineTask) {
// //
@ -744,13 +745,13 @@ export default {
},
resetFormItemData(v) {
this.questionForm[v] = null
if (v === this.spleenLengthId) {
var spleenStatus = this.questionForm[this.spleenStatusId]
spleenStatus = isNaN(parseInt(spleenStatus)) ? null : parseInt(spleenStatus)
if (spleenStatus === 5) {
this.removeAnnotation({ Id: this.spleenLengthId })
}
}
// if (v === this.spleenLengthId) {
// var spleenStatus = this.questionForm[this.spleenStatusId]
// spleenStatus = isNaN(parseInt(spleenStatus)) ? null : parseInt(spleenStatus)
// if (spleenStatus === 5) {
// this.removeAnnotation({ Id: this.spleenLengthId })
// }
// }
this.formChanged = true
},
setFormItemData(obj) {
@ -760,6 +761,45 @@ export default {
}
this.formChanged = true
},
setQuestions() {
return new Promise(resolve => {
var params = {
trialId: this.$route.query.trialId,
visitTaskId: this.visitTaskId
}
getDicomReadingQuestionAnswer(params).then(res => {
var questions = []
for (var i = 0; i < res.Result.length; i++) {
var v = res.Result[i]
if (v.Type === 'group' && v.GroupClassify !== this.groupClassify) continue
questions.push(v)
}
questions.map((v) => {
if (v.Type === 'group' && v.Childrens.length === 0) return
if (v.Childrens.length > 0) {
this.setQSChild(v.Childrens)
}
})
resolve()
})
})
},
setQSChild(obj) {
obj.forEach(i => {
if (i.QuestionType === 49) {
// ;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
this.calculateSpleenStatus = i.Answer
}
if (i.QuestionType === 48) {
// ;
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
}
if (i.Childrens && i.Childrens.length > 0) {
this.setQSChild(i.Childrens)
}
})
},
isJSONString(str) {
try {
JSON.stringify(JSON.parse(str))

View File

@ -75,8 +75,12 @@
/>
</el-form-item>
<!-- 文件类型 -->
<el-form-item v-if="form.Type === 'upload'" :label="$t('trials:readingUnit:qsList:title:FileType')"
prop="FileType">
<el-form-item
v-if="form.Type === 'upload'"
:label="$t('trials:readingUnit:qsList:title:FileType')"
prop="FileType"
:rules="[{ type: 'array', required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change'] }]"
>
<el-checkbox-group
v-model="form.FileType"
@change="(v) => {
@ -803,12 +807,7 @@ export default {
trigger: ['blur', 'change']
}],
GroupName: [{required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']},
{max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`}],
FileType: [{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change']
}]
{max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`}]
},
loading: false,
dicList: [],