非dicom阅片问题修改
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-10-28 17:55:48 +08:00
parent 9b67760ffd
commit b6bc22af72
3 changed files with 132 additions and 79 deletions

View File

@ -366,6 +366,10 @@ export default {
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
return i > -1
},
verifyFileIsBound(annotation) {
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.noneDicomFileId === annotation.noneDicomFileId)
return i > -1
},
async operateImageMarker(obj) {
const STATE = {
BIND: 0, //
@ -1159,6 +1163,8 @@ export default {
if (ps) {
if (prop === 'area') value = this.reRound(csUtils.roundNumber(value * ps * ps), this.digitPlaces)
if (prop === 'length' || prop === 'perimeter') value = this.reRound(csUtils.roundNumber(value * ps), this.digitPlaces)
} else {
value = this.reRound(csUtils.roundNumber(value), this.digitPlaces)
}
let obj = {
QuestionId: item.QuestionId,

View File

@ -126,7 +126,8 @@
@dblclick="toggleFullScreen($event, index)" @click="activeCanvas(index)"
@mouseup="sliderMouseup($event, index)" @mousemove="sliderMousemove($event, index)"
@mouseleave="sliderMouseleave($event, index)">
<div v-show="imageType.includes(v.fileType)" :ref="`canvas-${index}`" class="content">
<div v-show="imageType.includes(v.fileType)" :ref="`canvas-${index}`" class="content"
@mouseup="contentMouseup($event, index)">
<div class="left-top-text">
<div v-if="v.taskInfo.IsExistsClinicalData" class="cd-info"
:title="$t('trials:reading:button:clinicalData')">
@ -350,7 +351,11 @@ export default {
taskId: '',
isReadingTaskViewInOrder: null,
trialCriterion: {},
saveCustomAnnotationTimer: null
saveCustomAnnotationTimer: null,
curOperation: {
type: '',
annotation: null
}
}
},
computed: {
@ -544,11 +549,17 @@ export default {
toolGroup.addTool(PlanarRotateTool.toolName)
toolGroup.addTool(ArrowAnnotateTool.toolName, {
arrowHeadStyle: 'standard',
// changeTextCallback: async (data, eventData, doneChangingTextCallback) => {
// return doneChangingTextCallback(await this.customPrompt())
// },
// getTextCallback: async (doneChangingTextCallback) => {
// return doneChangingTextCallback(await this.customPrompt())
// }
changeTextCallback: async (data, eventData, doneChangingTextCallback) => {
return doneChangingTextCallback(await this.customPrompt())
return doneChangingTextCallback(data.text)
},
getTextCallback: async (doneChangingTextCallback) => {
return doneChangingTextCallback(await this.customPrompt())
return doneChangingTextCallback('Annotation')
}
})
toolGroup.addTool(RectangleROITool.toolName, {
@ -947,13 +958,13 @@ export default {
try {
// if ( this.resetAnnotation && this.isFusion ) return false
if (!annotation) return false
if (annotation.metadata.toolName === 'Lengthscale') {
await this.$confirm(
this.$t('trials:trials-list:table:LengthscaleIsDeleted')
)
const errorMsg = { message: 'Lengthscale Not delete' }
throw errorMsg
}
// if (annotation.metadata.toolName === 'Lengthscale') {
// await this.$confirm(
// this.$t('trials:trials-list:table:LengthscaleIsDeleted')
// )
// const errorMsg = { message: 'Lengthscale Not delete' }
// throw errorMsg
// }
if (this.readingTaskState === 2 && !annotation.data.label && annotation.metadata.toolName !== 'Lengthscale') return false
if (this.readingTaskState === 2) {
const errorMsg = { message: 'annotation Not allowed to operate' }
@ -975,16 +986,32 @@ export default {
const errorMsg = { message: 'annotation Not allowed to operate' }
throw errorMsg
} else if (this.activeTool === 'Eraser') {
await this.$confirm(
this.$t('trials:trials-list:table:isDeleted') +
annotation.data.label +
'?'
)
if (annotation.metadata.toolName === 'Lengthscale') {
await this.$confirm(
this.$t('trials:trials-list:table:isDeleted') +
this.$t('trials:nondicom-show:scale') +
'?'
)
} else {
await this.$confirm(
this.$t('trials:trials-list:table:isDeleted') +
annotation.data.label +
'?'
)
}
if (annotation.id) {
let res = await deleteTrialFileType(annotation.id)
if (!res.IsSuccess) throw ''
}
let psIndex = this.psArr.findIndex(item => item.Path === annotation.path)
if (psIndex > -1) {
this.psArr.splice(psIndex, 1)
}
console.log(this.psArr, psIndex)
if (annotation.metadata.toolName === 'Lengthscale') {
this.$emit('getEcrf', { type: "changePlottingScaleChangeAnswer", VisitTaskId: this.taskInfo.VisitTaskId, noneDicomFileId: annotation.noneDicomFileId, path: annotation.path || '', picturePath: null, psArr: this.psArr, isRemovePlottingScale: false })
}
const renderingEngine = getRenderingEngine(renderingEngineId)
for (let i = 0; i < this.cells.length; i++) {
const viewportId = `canvas-${i}`
@ -1040,47 +1067,26 @@ export default {
annotation.path = path
let ps = null
let psIndex = this.psArr.findIndex(i => i.Path === path)
if (psIndex > -1 && this.psArr[i].PS) {
ps = parseFloat(this.psArr[i].PS).toFixed(3)
if (psIndex > -1 && this.psArr[psIndex].PS) {
ps = parseFloat(this.psArr[psIndex].PS).toFixed(3)
}
annotation.ps = ps
if (!annotation.data.label && annotation.metadata.toolName !== 'Lengthscale') return
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
if (annotation.metadata.toolName === 'Lengthscale') {
const value = annotation.data.l
if (isNaN(parseFloat(value))) return false
let ps = 1
if (value) {
const cachedStats = Object.keys(annotation.data.cachedStats)
ps = value / annotation.data.cachedStats[cachedStats[0]].length
annotation.data.ps = ps
this.$emit('setPS', { NoneDicomFileId: fileList[fileIndex].Id, Path: fileList[fileIndex].Path, PS: ps, OldPS: 1 })
this.$emit('setPS', { NoneDicomFileId: fileList[fileIndex].Id, Path: fileList[fileIndex].Path, PS: ps })
}
this.setToolsPassive()
if (this.customizeStandardsNoneDicom.find(item => item.toolName === annotation.metadata?.toolName)) return false
if (this.saveCustomAnnotationTimer) {
clearTimeout(this.saveCustomAnnotationTimer)
this.saveCustomAnnotationTimer = null
}
let psIndex = this.psArr.findIndex(p => p.NoneDicomFileId === fileList[fileIndex].Id)
let OldPS = 1
if (psIndex > -1) {
OldPS = this.psArr[i].OldPS
}
let Proportion = ps / OldPS
return this.saveCustomAnnotationTimer = setTimeout(async () => {
if (OldPS === ps || !this.ecrf.IsHaveBindingQuestion) {
this.saveCustomAnnotation(annotation)
} else {
await this.$confirm(
this.$t('trials:trials-list:table:allQuestionChange')
).then(() => {
this.saveCustomAnnotation(annotation, Proportion)
})
.catch(action => {
this.saveCustomAnnotation(annotation, -1)
});
}
}, 500)
this.curOperation.type = 'Modified'
return this.curOperation.annotation = annotation
}
this.$emit("getEcrf", { type: "getOperateStateEnum", VisitTaskId: this.taskInfo.VisitTaskId })
this.$emit('getEcrf', { type: "verifyAnnotationIsBound", VisitTaskId: this.taskInfo.VisitTaskId, annotation })
@ -1090,11 +1096,8 @@ export default {
if (isBound || this.isNumber(operateStateEnum)) {
this.$emit('getEcrf', { type: "updateAnnotationToQuestion", VisitTaskId: this.taskInfo.VisitTaskId, annotation })
} else {
if (this.saveCustomAnnotationTimer) {
clearTimeout(this.saveCustomAnnotationTimer)
this.saveCustomAnnotationTimer = null
}
this.saveCustomAnnotationTimer = setTimeout(() => { this.saveCustomAnnotation(annotation) }, 1000)
this.curOperation.type = 'Modified'
this.curOperation.annotation = annotation
}
this.setToolsPassive()
})
@ -1121,8 +1124,8 @@ export default {
annotation.path = path
let ps = null
let psIndex = this.psArr.findIndex(i => i.Path === path)
if (psIndex > -1 && this.psArr[i].PS) {
ps = parseFloat(this.psArr[i].PS).toFixed(3)
if (psIndex > -1 && this.psArr[psIndex].PS) {
ps = parseFloat(this.psArr[psIndex].PS).toFixed(3)
}
annotation.ps = ps
annotation.markTool = annotation.metadata.toolName
@ -1183,7 +1186,16 @@ export default {
if (annotations[i].visitTaskId !== this.taskInfo.VisitTaskId) {
return
} else {
this.$emit('getEcrf', { type: "bindAnnotationToQuestion", VisitTaskId: this.taskInfo.VisitTaskId, annotation: annotations[i] })
let annotation = annotations[i]
const imageId = annotation.metadata.referencedImageId
const path = imageId.split(`web:${this.OSSclientConfig.basePath}`)[1]
let psIndex = this.psArr.findIndex(i => i.Path === path)
let ps = null
if (psIndex > -1 && this.psArr[psIndex].PS) {
ps = parseFloat(this.psArr[psIndex].PS).toFixed(3)
}
annotation.ps = ps
this.$emit('getEcrf', { type: "bindAnnotationToQuestion", VisitTaskId: this.taskInfo.VisitTaskId, annotation })
}
}
},
@ -1291,38 +1303,36 @@ export default {
const cachedStats = Object.keys(annotation.data.cachedStats)
ps = parseFloat(value) / annotation.data.cachedStats[cachedStats[0]].length
annotation.data.ps = ps
this.$emit('setPS', { NoneDicomFileId: fileList[fileIndex].Id, Path: fileList[fileIndex].Path, PS: ps, OldPS: 1 })
this.$emit('setPS', { NoneDicomFileId: fileList[fileIndex].Id, Path: fileList[fileIndex].Path, PS: ps })
} else {
cornerstoneTools.annotation.state.removeAnnotation(annotation.annotationUID)
return
}
if (this.customizeStandardsNoneDicom.find(item => item.toolName === annotation.metadata?.toolName)) return false
this.dialogVisible = false
if (this.saveCustomAnnotationTimer) {
clearTimeout(this.saveCustomAnnotationTimer)
this.saveCustomAnnotationTimer = null
}
let psIndex = this.psArr.findIndex(p => p.NoneDicomFileId === fileList[fileIndex].Id)
let OldPS = 1
if (psIndex > -1) {
OldPS = this.psArr[psIndex].OldPS
}
let Proportion = ps / OldPS
return this.saveCustomAnnotationTimer = setTimeout(async () => {
if (!this.ecrf.IsHaveBindingQuestion) {
this.saveCustomAnnotation(annotation)
} else {
await this.$confirm(
this.$t('trials:trials-list:table:allQuestionChange')
).then(() => {
this.saveCustomAnnotation(annotation, Proportion)
})
.catch(action => {
this.saveCustomAnnotation(annotation, -1)
});
this.$emit('getEcrf', { type: "verifyFileIsBound", VisitTaskId: this.taskInfo.VisitTaskId, annotation })
this.$nextTick(() => {
if (this.saveCustomAnnotationTimer) {
clearTimeout(this.saveCustomAnnotationTimer)
this.saveCustomAnnotationTimer = null
}
}, 500)
this.saveCustomAnnotationTimer = setTimeout(() => { this.saveCustomAnnotation(annotation) }, 500)
return this.saveCustomAnnotationTimer = setTimeout(async () => {
if (!this.ecrf.IsHaveBindingQuestion || !this.ecrf.isFileBound) {
this.saveCustomAnnotation(annotation)
} else {
await this.$confirm(
this.$t('trials:trials-list:table:allQuestionChange')
).then(() => {
this.saveCustomAnnotation(annotation, 1)
})
.catch(action => {
this.saveCustomAnnotation(annotation, -1)
});
}
}, 500)
this.saveCustomAnnotationTimer = setTimeout(() => { this.saveCustomAnnotation(annotation) }, 500)
})
},
getLengthscaleToolTextLines(data, targetId) {
const cachedVolumeStats = data.cachedStats[targetId]
@ -1696,6 +1706,40 @@ export default {
e.stopPropagation()
e.preventDefault()
},
contentMouseup(e, index) {
console.log('contentMouseup')
const i = this.viewportInfos.findIndex(i => i.index === index)
if (i === -1) return
if (this.curOperation.type === 'Modified') {
let annotation = this.curOperation.annotation
if (annotation.metadata.toolName === 'Lengthscale') {
this.$emit('getEcrf', { type: "verifyFileIsBound", VisitTaskId: this.taskInfo.VisitTaskId, annotation })
this.$nextTick(() => {
if (!this.ecrf.IsHaveBindingQuestion || !this.ecrf.isFileBound) {
this.saveCustomAnnotation(annotation)
} else {
this.$confirm(
this.$t('trials:trials-list:table:allQuestionChange')
).then(() => {
this.saveCustomAnnotation(annotation, 1)
})
.catch(action => {
this.saveCustomAnnotation(annotation, -1)
});
}
})
} else {
this.saveCustomAnnotation(annotation)
}
}
this.curOperation = {
type: '',
annotation: null
}
// e.stopImmediatePropagation()
// e.stopPropagation()
// e.preventDefault()
},
handleIframeMessage(event) {
if (event.data.type === 'pdf-clicked') {
const baseUrl = event.data.data.baseUrl

View File

@ -180,6 +180,9 @@ export default {
if (type === 'changePlottingScaleChangeAnswer') {
this.ecrf.isBound = this.$refs[`ecrf_${data.VisitTaskId}`][0].changePlottingScaleChangeAnswer(data)
}
if (type === 'verifyFileIsBound') {
this.ecrf.isFileBound = this.$refs[`ecrf_${data.VisitTaskId}`][0].verifyFileIsBound(data.annotation)
}
},
setSaved(saved) {
this.$refs.fileViewer.lengthscaleToolDisabled(saved)
@ -203,7 +206,7 @@ export default {
}
this.psArr = []
if (i.MeasureData.metadata.toolName === 'Lengthscale' && this.psArr.findIndex(p => p.NoneDicomFileId === i.NoneDicomFileId) === -1) {
this.psArr.push({ NoneDicomFileId: i.NoneDicomFileId, Path: i.Path, PS: i.MeasureData.data.ps, OldPS: i.MeasureData.data.ps })
this.psArr.push({ NoneDicomFileId: i.NoneDicomFileId, Path: i.Path, PS: i.MeasureData.data.ps })
}
return i
})
@ -314,7 +317,7 @@ export default {
i.MeasureData.id = i.Id
}
if (i.MeasureData.metadata.toolName === 'Lengthscale' && this.psArr.findIndex(p => p.NoneDicomFileId === i.NoneDicomFileId) === -1) {
this.psArr.push({ NoneDicomFileId: i.NoneDicomFileId, Path: i.Path, PS: i.MeasureData.data.ps, OldPS: i.MeasureData.data.ps })
this.psArr.push({ NoneDicomFileId: i.NoneDicomFileId, Path: i.Path, PS: i.MeasureData.data.ps })
}
return i
})