suv测量工具优化

uat_us
caiyiling 2024-02-26 17:23:16 +08:00
parent ef732066f4
commit f6eab06c78
6 changed files with 177 additions and 164 deletions

View File

@ -690,46 +690,46 @@ export default {
})
const debouncedCallback = this.debounce((e) => {
const { annotation } = e.detail
const { cachedStats } = annotation.data
var isNotValidAnnotationNum = 0
for (const volumeId in cachedStats) {
var statObj = cachedStats[volumeId]
var arr = Object.keys(statObj)
if (arr.length < 2) {
++isNotValidAnnotationNum
}
}
if (isNotValidAnnotationNum === 0) {
this.onAnnotationModified(e)
} else {
// console.log('', annotation)
// const { remark } = annotation.data
// if (remark === 'Liver' || remark === 'Mediastinum') {
// this.$refs['questions'].setOutsideMeasuredData(annotation)
// } else {
// this.$refs['tableQuestions'].setOutsideMeasuredData(annotation)
// }
//
this.removeAnnotation({ otherMeasureData: annotation })
const { remark } = annotation.data
//
if (remark === 'Liver' || remark === 'Mediastinum') {
this.$refs['questions'].clearMeasuredData(remark)
//
this.setNonTargetMeasurementStatus({ status: true, toolName: 'CircleROI' })
} else {
this.$refs['tableQuestions'].clearMeasuredData()
//
this.setBasicToolActive('CircleROI')
}
}
// const { annotation } = e.detail
this.onAnnotationModified(e)
// const { cachedStats } = annotation.data
// var isNotValidAnnotationNum = 0
// for (const volumeId in cachedStats) {
// var statObj = cachedStats[volumeId]
// var arr = Object.keys(statObj)
// if (arr.length < 2) {
// ++isNotValidAnnotationNum
// }
// }
// if (!annotation.isHandleOutsideImage) {
// this.onAnnotationModified(e)
// } else {
// // console.log('', annotation)
// // const { remark } = annotation.data
// // if (remark === 'Liver' || remark === 'Mediastinum') {
// // this.$refs['questions'].setOutsideMeasuredData(annotation)
// // } else {
// // this.$refs['tableQuestions'].setOutsideMeasuredData(annotation)
// // }
// //
// // this.removeAnnotation({ otherMeasureData: annotation })
// // const { remark } = annotation.data
// // //
// // if (remark === 'Liver' || remark === 'Mediastinum') {
// // this.$refs['questions'].clearMeasuredData(remark)
// // //
// // this.setNonTargetMeasurementStatus({ status: true, toolName: 'CircleROI' })
// // } else {
// // this.$refs['tableQuestions'].clearMeasuredData()
// // //
// // this.setBasicToolActive('CircleROI')
// // }
// }
}, 120)
eventTarget.addEventListener(cornerstoneTools.Enums.Events.ANNOTATION_MODIFIED, (e) => {
debouncedCallback(e)
})
eventTarget.addEventListener(cornerstoneTools.Enums.Events.ANNOTATION_SELECTION_CHANGE, (e) => {
console.log(e)
const { detail } = e
const { selection } = detail
if (selection && selection.length > 0) {
@ -833,7 +833,6 @@ export default {
if (this.isNonTargetMeasurement || annotation.data.remark === 'Liver' || annotation.data.remark === 'Mediastinum') {
this.$refs['questions'].setMeasuredData(measureData)
} else {
console.log('onAnnotationAdded')
this.$refs['tableQuestions'] && this.$refs['tableQuestions'].setMeasuredData(measureData)
}

View File

@ -234,7 +234,7 @@
</div>
</template>
<script>
import { uploadReadingAnswerImage } from '@/api/trials'
// import { uploadReadingAnswerImage } from '@/api/trials'
import { mapGetters } from 'vuex'
export default {
name: 'QuestionItem',

View File

@ -60,7 +60,8 @@ export default {
suvmaxId: '',
questionFormChangeState: false,
questionFormChangeNum: 0,
isInsideVolume: true
lungIsInsideVolume: true,
liverIsInsideVolume: true
}
},
computed: {
@ -196,7 +197,7 @@ export default {
handleSave() {
this.$refs['questions'].validate((valid) => {
if (!valid) return
if (!this.isInsideVolume) {
if (!this.lungIsInsideVolume || !this.liverIsInsideVolume) {
this.$alert('当前标记在图像外,不允许保存!', '提示', {
callback: action => {
this.$message({
@ -308,7 +309,51 @@ export default {
FusionEvent.$emit('imageLocation', { otherMeasureData: otherMeasureData })
},
setMeasuredData(measurement) {
this.isInsideVolume = true
if (measurement.data.isHandleOutsideImage) {
this.setOutsideMeasuredData(measurement)
} else {
var idx = -1
if (this.currentQsId) {
//
idx = this.measurements.findIndex(i => i.QuestionId === this.currentQsId)
this.currentQsId = ''
} else {
//
idx = this.measurements.findIndex(i => i.OrderMarkName === measurement.data.data.remark)
}
if (idx === -1) return
var obj = this.measurements[idx]
var remark = obj.QuestionType === 51 ? 'Liver' : obj.QuestionType === 52 ? 'Mediastinum' : ''
obj.QuestionType === 51 ? this.liverIsInsideVolume = true : obj.QuestionType === 52 ? this.lungIsInsideVolume = true : ''
measurement.data.data.remark = remark
this.measurements[idx].OtherMeasureData = measurement.data
this.measurements[idx].OtherMarkTool = measurement.data.metadata.toolName
//
var data = {
OtherMeasureData: measurement.data,
QuestionId: obj.QuestionId,
VisitTaskId: this.visitTaskId,
OrderMarkName: remark
}
if (measurement.type === 'CircleROI') {
const suvMax = measurement.suvMax
this.$set(this.questionForm, obj.QuestionId, suvMax || null)
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setPet5PSCommentDisplay()
}
FusionEvent.$emit('addOrUpdateAnnotations', { data })
this.questionFormChangeState = true
}
},
setOutsideMeasuredData(measurement) {
console.log('setOutsideMeasuredData: ', measurement)
if ((measurement.data.remark === 'Liver' && this.liverIsInsideVolume === false) || (measurement.data.remark === 'Mediastinum' && this.lungIsInsideVolume === false)) {
return
}
var idx = -1
if (this.currentQsId) {
//
@ -321,6 +366,7 @@ export default {
if (idx === -1) return
var obj = this.measurements[idx]
var remark = obj.QuestionType === 51 ? 'Liver' : obj.QuestionType === 52 ? 'Mediastinum' : ''
obj.QuestionType === 51 ? this.liverIsInsideVolume = false : obj.QuestionType === 52 ? this.lungIsInsideVolume = false : ''
measurement.data.data.remark = remark
this.measurements[idx].OtherMeasureData = measurement.data
this.measurements[idx].OtherMarkTool = measurement.data.metadata.toolName
@ -333,43 +379,6 @@ export default {
OrderMarkName: remark
}
if (measurement.type === 'CircleROI') {
const suvMax = measurement.suvMax
this.$set(this.questionForm, obj.QuestionId, suvMax || null)
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS
this.calculatePet5PS = pet5PS
this.setPet5PSCommentDisplay()
}
FusionEvent.$emit('addOrUpdateAnnotations', { data })
this.questionFormChangeState = true
},
setOutsideMeasuredData(measurement) {
this.isInsideVolume = false
var idx = -1
if (this.currentQsId) {
//
idx = this.measurements.findIndex(i => i.QuestionId === this.currentQsId)
this.currentQsId = ''
} else {
//
idx = this.measurements.findIndex(i => i.OrderMarkName === measurement.data.remark)
}
if (idx === -1) return
var obj = this.measurements[idx]
var remark = obj.QuestionType === 51 ? 'Liver' : obj.QuestionType === 52 ? 'Mediastinum' : ''
measurement.data.remark = remark
this.measurements[idx].OtherMeasureData = measurement
this.measurements[idx].OtherMarkTool = measurement.metadata.toolName
//
var data = {
OtherMeasureData: measurement,
QuestionId: obj.QuestionId,
VisitTaskId: this.visitTaskId,
OrderMarkName: remark
}
if (measurement.metadata.toolName === 'CircleROI') {
// const suvMax = measurement.suvMax
this.$set(this.questionForm, obj.QuestionId, null)
var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS

View File

@ -521,97 +521,104 @@ export default {
this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
},
setMeasureData(measureData, isInit = false) {
console.log('setMeasureData')
this.isInsideVolume = true
return new Promise(resolve => {
if (measureData) {
// SUVmax(20)
var SUVmax = measureData.suvMax ? measureData.suvMax : null
var suvObj = this.questions.find(i => i.QuestionMark === 20)
this.$set(this.questionForm, suvObj.Id, SUVmax)
var data = {}
measureData.data.data.remark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
// measureData.data.data.studyId = measureData.studyId
// measureData.data.data.seriesId = measureData.seriesId
// measureData.data.data.instanceId = measureData.instanceId
// measureData.data.data.viewportId = measureData.viewportId
// measureData.data.data.questionId = this.parentQsId
// measureData.data.data.rowIndex = this.questionForm.RowIndex
data = {
// OtherStudyId: measureData.studyId,
// OtherSeriesId: measureData.seriesId,
// OtherInstanceId: measureData.instanceId,
OtherMeasureData: measureData.data,
QuestionId: this.parentQsId,
RowIndex: this.questionForm.RowIndex,
RowId: this.questionForm.RowId,
VisitTaskId: this.visitTaskId,
OrderMarkName: measureData.data.data.remark
}
FusionEvent.$emit('addOrUpdateAnnotations', { data })
}
if (!isInit) {
// if (this.questionForm.RowId) {
// this.$set(this.questionForm, 'saveTypeEnum', 1)
// } else {
// this.$set(this.questionForm, 'saveTypeEnum', 0)
// }
// saveTypeEnum 01访/
if (this.questionForm.OtherMeasureData) {
var annotation = Object.assign({}, this.questionForm.OtherMeasureData)
if (measureData.data.isHandleOutsideImage) {
this.setOutsideMeasuredData(measureData)
} else {
this.isInsideVolume = true
if (annotation && this.firstRenderAnnotation) {
for (const k in annotation.data.cachedStats) {
if (annotation.data.cachedStats[k].pointsInShape.length !== 0) {
this.firstRenderAnnotation = false
break
if (measureData) {
// SUVmax(20)
var SUVmax = measureData.suvMax ? measureData.suvMax : null
var suvObj = this.questions.find(i => i.QuestionMark === 20)
this.$set(this.questionForm, suvObj.Id, SUVmax)
var data = {}
measureData.data.data.remark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
// measureData.data.data.studyId = measureData.studyId
// measureData.data.data.seriesId = measureData.seriesId
// measureData.data.data.instanceId = measureData.instanceId
// measureData.data.data.viewportId = measureData.viewportId
// measureData.data.data.questionId = this.parentQsId
// measureData.data.data.rowIndex = this.questionForm.RowIndex
data = {
// OtherStudyId: measureData.studyId,
// OtherSeriesId: measureData.seriesId,
// OtherInstanceId: measureData.instanceId,
OtherMeasureData: measureData.data,
QuestionId: this.parentQsId,
RowIndex: this.questionForm.RowIndex,
RowId: this.questionForm.RowId,
VisitTaskId: this.visitTaskId,
OrderMarkName: measureData.data.data.remark
}
FusionEvent.$emit('addOrUpdateAnnotations', { data })
}
if (!isInit) {
// if (this.questionForm.RowId) {
// this.$set(this.questionForm, 'saveTypeEnum', 1)
// } else {
// this.$set(this.questionForm, 'saveTypeEnum', 0)
// }
// saveTypeEnum 01访/
if (this.questionForm.OtherMeasureData) {
var annotation = Object.assign({}, this.questionForm.OtherMeasureData)
if (annotation && this.firstRenderAnnotation) {
for (const k in annotation.data.cachedStats) {
if (annotation.data.cachedStats[k].pointsInShape.length !== 0) {
this.firstRenderAnnotation = false
break
}
}
}
}
} else {
this.firstRenderAnnotation = false
}
if (!this.firstRenderAnnotation) {
if (this.questionForm.RowId) {
this.$set(this.questionForm, 'saveTypeEnum', 1)
} else {
this.$set(this.questionForm, 'saveTypeEnum', 0)
this.firstRenderAnnotation = false
}
if (!this.firstRenderAnnotation) {
if (this.questionForm.RowId) {
this.$set(this.questionForm, 'saveTypeEnum', 1)
} else {
this.$set(this.questionForm, 'saveTypeEnum', 0)
}
} else {
this.$set(this.questionForm, 'saveTypeEnum', 2)
this.$emit('close')
}
} else {
this.$set(this.questionForm, 'saveTypeEnum', 2)
this.$emit('close')
}
}
this.$set(this.questionForm, 'OtherMeasureData', measureData.data)
var isLymph = this.getQuestionVal(2)
isLymph = !isNaN(parseInt(isLymph)) ? parseInt(isLymph) : null
const lesionPart = this.getQuestionVal(8)
const lesionOrgan = this.getQuestionVal(6)
var suvMax = this.getQuestionVal(20)
this.$emit('resetQuestions', { isLymphLesion: isLymph, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
this.toolType = measureData.type
if (this.questionForm.MeasureData) {
// if (measureData.type === 'Bidirectional') {
// this.organList = []
// this.getOrganInfoList(1)
// } else if (measureData.type === 'Length') {
// //
// this.organList = []
// this.getOrganInfoList(0)
// } else {
// this.organList = []
// this.getOrganInfoList()
// }
this.organList = []
this.getOrganInfoList()
} else {
this.organList = []
this.getOrganInfoList()
this.$set(this.questionForm, 'OtherMeasureData', measureData.data)
var isLymph = this.getQuestionVal(2)
isLymph = !isNaN(parseInt(isLymph)) ? parseInt(isLymph) : null
const lesionPart = this.getQuestionVal(8)
const lesionOrgan = this.getQuestionVal(6)
var suvMax = this.getQuestionVal(20)
this.$emit('resetQuestions', { isLymphLesion: isLymph, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
this.toolType = measureData.type
if (this.questionForm.MeasureData) {
// if (measureData.type === 'Bidirectional') {
// this.organList = []
// this.getOrganInfoList(1)
// } else if (measureData.type === 'Length') {
// //
// this.organList = []
// this.getOrganInfoList(0)
// } else {
// this.organList = []
// this.getOrganInfoList()
// }
this.organList = []
this.getOrganInfoList()
} else {
this.organList = []
this.getOrganInfoList()
}
}
resolve()
})
},
setOutsideMeasuredData(measureData) {
if (this.isInsideVolume === false) {
return
}
this.isInsideVolume = false
var suvObj = this.questions.find(i => i.QuestionMark === 20)
this.$set(this.questionForm, suvObj.Id, '')
@ -627,7 +634,6 @@ export default {
const lesionOrgan = this.getQuestionVal(6)
var suvMax = this.getQuestionVal(20)
this.$emit('resetQuestions', { isLymphLesion: isLymph, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
this.toolType = measureData.type
if (this.questionForm.MeasureData) {
this.organList = []
this.getOrganInfoList()
@ -742,7 +748,6 @@ export default {
}
// suv0
if (this.questionForm.OtherMeasureData) {
console.log(this.questionForm.OtherMeasureData)
var suvmax = this.getQuestionVal(20)
if (suvmax === 0) {
this.$confirm(this.$t('当前病灶suv测量值为0不允许保存'), {

View File

@ -520,7 +520,6 @@ export default {
return
},
getUnSaveTarget() {
console.log('getUnSaveTarget')
this.unSaveTargets = []
this.tableQuestions.map(item => {
if (item.TableQuestions && item.TableQuestions.Answers) {
@ -532,7 +531,6 @@ export default {
})
}
})
// console.log(this.unSaveTargets)
return this.unSaveTargets
},
getAllUnSaveLesions() {

View File

@ -18,7 +18,7 @@ const {
} = cornerstoneTools
// const { getWorldWidthAndHeightFromTwoPoints } = utilities.planar
// const { roundNumber } = utilities
const { hideElementCursor } = cursors.elementCursor
const { hideElementCursor,resetElementCursor } = cursors.elementCursor
const { getAnnotations,addAnnotation } = annotation.state
const { isAnnotationVisible } = annotation.visibility
const { isAnnotationLocked } = annotation.locking
@ -428,7 +428,6 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
enabledElement,
modalityUnitOptions
) => {
console.log('_calculateCachedStats')
const data = annotation.data
const { viewportId, renderingEngineId } = enabledElement
@ -549,12 +548,15 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
perimeter: (2 * Math.PI * (worldWidth / 2)) / scale,
modalityUnit
}
annotation.isHandleOutsideImage = false
} else {
this.isHandleOutsideImage = false
this.isHandleOutsideImage = true
cachedStats[targetId] = {
Modality: metadata.Modality
Modality: metadata.Modality,
areaUnit: getCalibratedAreaUnits(null, image)
}
annotation.isHandleOutsideImage = true
}
}