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

View File

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

View File

@ -60,7 +60,8 @@ export default {
suvmaxId: '', suvmaxId: '',
questionFormChangeState: false, questionFormChangeState: false,
questionFormChangeNum: 0, questionFormChangeNum: 0,
isInsideVolume: true lungIsInsideVolume: true,
liverIsInsideVolume: true
} }
}, },
computed: { computed: {
@ -196,7 +197,7 @@ export default {
handleSave() { handleSave() {
this.$refs['questions'].validate((valid) => { this.$refs['questions'].validate((valid) => {
if (!valid) return if (!valid) return
if (!this.isInsideVolume) { if (!this.lungIsInsideVolume || !this.liverIsInsideVolume) {
this.$alert('当前标记在图像外,不允许保存!', '提示', { this.$alert('当前标记在图像外,不允许保存!', '提示', {
callback: action => { callback: action => {
this.$message({ this.$message({
@ -308,7 +309,51 @@ export default {
FusionEvent.$emit('imageLocation', { otherMeasureData: otherMeasureData }) FusionEvent.$emit('imageLocation', { otherMeasureData: otherMeasureData })
}, },
setMeasuredData(measurement) { 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 var idx = -1
if (this.currentQsId) { if (this.currentQsId) {
// //
@ -321,6 +366,7 @@ export default {
if (idx === -1) return if (idx === -1) return
var obj = this.measurements[idx] var obj = this.measurements[idx]
var remark = obj.QuestionType === 51 ? 'Liver' : obj.QuestionType === 52 ? 'Mediastinum' : '' 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 measurement.data.data.remark = remark
this.measurements[idx].OtherMeasureData = measurement.data this.measurements[idx].OtherMeasureData = measurement.data
this.measurements[idx].OtherMarkTool = measurement.data.metadata.toolName this.measurements[idx].OtherMarkTool = measurement.data.metadata.toolName
@ -333,43 +379,6 @@ export default {
OrderMarkName: remark OrderMarkName: remark
} }
if (measurement.type === 'CircleROI') { 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) this.$set(this.questionForm, obj.QuestionId, null)
var pet5PS = this.setpet5PS() var pet5PS = this.setpet5PS()
this.questionForm[this.pet5PSId] = pet5PS 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 }) this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm })
}, },
setMeasureData(measureData, isInit = false) { setMeasureData(measureData, isInit = false) {
console.log('setMeasureData')
this.isInsideVolume = true
return new Promise(resolve => { return new Promise(resolve => {
if (measureData) { if (measureData.data.isHandleOutsideImage) {
// SUVmax(20) this.setOutsideMeasuredData(measureData)
var SUVmax = measureData.suvMax ? measureData.suvMax : null } else {
var suvObj = this.questions.find(i => i.QuestionMark === 20) this.isInsideVolume = true
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) { if (measureData) {
for (const k in annotation.data.cachedStats) { // SUVmax(20)
if (annotation.data.cachedStats[k].pointsInShape.length !== 0) { var SUVmax = measureData.suvMax ? measureData.suvMax : null
this.firstRenderAnnotation = false var suvObj = this.questions.find(i => i.QuestionMark === 20)
break 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 { } 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)
this.$set(this.questionForm, 'OtherMeasureData', measureData.data) var isLymph = this.getQuestionVal(2)
var isLymph = this.getQuestionVal(2) isLymph = !isNaN(parseInt(isLymph)) ? parseInt(isLymph) : null
isLymph = !isNaN(parseInt(isLymph)) ? parseInt(isLymph) : null const lesionPart = this.getQuestionVal(8)
const lesionPart = this.getQuestionVal(8) const lesionOrgan = this.getQuestionVal(6)
const lesionOrgan = this.getQuestionVal(6) var suvMax = this.getQuestionVal(20)
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.$emit('resetQuestions', { isLymphLesion: isLymph, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm }) this.toolType = measureData.type
this.toolType = measureData.type if (this.questionForm.MeasureData) {
if (this.questionForm.MeasureData) { // if (measureData.type === 'Bidirectional') {
// if (measureData.type === 'Bidirectional') { // this.organList = []
// this.organList = [] // this.getOrganInfoList(1)
// this.getOrganInfoList(1) // } else if (measureData.type === 'Length') {
// } else if (measureData.type === 'Length') { // //
// // // this.organList = []
// this.organList = [] // this.getOrganInfoList(0)
// this.getOrganInfoList(0) // } else {
// } else { // this.organList = []
// this.organList = [] // this.getOrganInfoList()
// this.getOrganInfoList() // }
// } this.organList = []
this.organList = [] this.getOrganInfoList()
this.getOrganInfoList() } else {
} else { this.organList = []
this.organList = [] this.getOrganInfoList()
this.getOrganInfoList() }
} }
resolve() resolve()
}) })
}, },
setOutsideMeasuredData(measureData) { setOutsideMeasuredData(measureData) {
if (this.isInsideVolume === false) {
return
}
this.isInsideVolume = false this.isInsideVolume = false
var suvObj = this.questions.find(i => i.QuestionMark === 20) var suvObj = this.questions.find(i => i.QuestionMark === 20)
this.$set(this.questionForm, suvObj.Id, '') this.$set(this.questionForm, suvObj.Id, '')
@ -627,7 +634,6 @@ export default {
const lesionOrgan = this.getQuestionVal(6) const lesionOrgan = this.getQuestionVal(6)
var suvMax = this.getQuestionVal(20) 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.$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 (this.questionForm.MeasureData) {
this.organList = [] this.organList = []
this.getOrganInfoList() this.getOrganInfoList()
@ -742,7 +748,6 @@ export default {
} }
// suv0 // suv0
if (this.questionForm.OtherMeasureData) { if (this.questionForm.OtherMeasureData) {
console.log(this.questionForm.OtherMeasureData)
var suvmax = this.getQuestionVal(20) var suvmax = this.getQuestionVal(20)
if (suvmax === 0) { if (suvmax === 0) {
this.$confirm(this.$t('当前病灶suv测量值为0不允许保存'), { this.$confirm(this.$t('当前病灶suv测量值为0不允许保存'), {

View File

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

View File

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