From 4e5c9aaf383b71eddf49ef5c51912cc055d305f4 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Mon, 3 Aug 2026 14:43:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A8=E6=8E=A7=E9=A1=B5=E9=9D=A2=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E8=87=AA=E5=AE=9A=E4=B9=89metaDataProvider=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dicom/DicomCanvas.vue | 9 +++++- src/utils/metaDataProvider.js | 32 +++++++++++++++++-- .../reading/dicoms/components/DicomCanvas.vue | 4 ++- .../dicoms/customize/CustomizeDicomCanvas.vue | 4 ++- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/components/Dicom/DicomCanvas.vue b/src/components/Dicom/DicomCanvas.vue index 68d8a4c7..cbba347f 100644 --- a/src/components/Dicom/DicomCanvas.vue +++ b/src/components/Dicom/DicomCanvas.vue @@ -80,7 +80,7 @@ import * as cornerstone from 'cornerstone-core' import * as cornerstoneMath from 'cornerstone-math' import * as cornerstoneTools from 'cornerstone-tools' -import metaDataProvider from '@/utils/metaDataProvider' +import metaDataProvider, { registerImageSharedCacheKey, unregisterImageSharedCacheKeys } from '@/utils/metaDataProvider' const scroll = cornerstoneTools.import('util/scrollToIndex') import Hammer from 'hammerjs' @@ -211,6 +211,9 @@ export default { this.stackScrollCallback ) }, + beforeDestroy() { + unregisterImageSharedCacheKeys(this.stack?.imageIds) + }, methods: { loadImageStack(dicomSeries, text = '') { @@ -400,6 +403,10 @@ export default { }, onNewImage(e) { e.detail.enabledElement.options = {} + registerImageSharedCacheKey( + e.detail.image?.imageId, + e.detail.image?.sharedCacheKey + ) var data = e.detail.image.data this.dicomInfo.hospital = data.string('x00080080') // let instanceInfo = this.series.instanceInfoList.find(item => item.ImageId === e.detail.image.imageId) diff --git a/src/utils/metaDataProvider.js b/src/utils/metaDataProvider.js index c5c59ae8..e07504de 100644 --- a/src/utils/metaDataProvider.js +++ b/src/utils/metaDataProvider.js @@ -119,6 +119,25 @@ function parseImageId(imageId) { return { scheme, url, frame }; } + +const imageIdToSharedCacheKey = new Map(); + +export function registerImageSharedCacheKey(imageId, sharedCacheKey) { + if (!imageId || !sharedCacheKey) { + return; + } + imageIdToSharedCacheKey.set(imageId, sharedCacheKey); +} +export function unregisterImageSharedCacheKeys(imageIds) { + if (!Array.isArray(imageIds) || imageIds.length === 0) { + return; + } + imageIds.forEach((imageId) => { + if (imageId) { + imageIdToSharedCacheKey.delete(imageId); + } + }); +} function getNumberValues(dataSet, tag, minimumLength) { const values = []; const valueAsString = dataSet.string(tag); @@ -257,10 +276,20 @@ function getSpacingBetweenSlices(dataSet) { } function metaDataProvider(type, imageId) { const parsedImageId = parseImageId(imageId); - const dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get( + let dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get( parsedImageId.url ); + if (!dataSet) { + const sharedCacheKey = imageIdToSharedCacheKey.get(imageId); + + if (sharedCacheKey) { + dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get( + sharedCacheKey + ); + } + } + if (!dataSet) { return; } @@ -421,7 +450,6 @@ function metaDataProvider(type, imageId) { let columnPixelSpacing = null; let rowPixelSpacing = null; - if (pixelSpacing) { rowPixelSpacing = pixelSpacing[0]; columnPixelSpacing = pixelSpacing[1]; diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue index bcaa42bb..75cbd5f1 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue @@ -133,7 +133,7 @@ import { mapGetters } from 'vuex' import Contextmenu from 'vue-contextmenujs' Vue.use(Contextmenu) import * as cornerstone from 'cornerstone-core' -import metaDataProvider from '@/utils/metaDataProvider' +import metaDataProvider, { registerImageSharedCacheKey, unregisterImageSharedCacheKeys } from '@/utils/metaDataProvider' import * as cornerstoneMath from 'cornerstone-math' import * as cornerstoneTools from 'cornerstone-tools' @@ -480,6 +480,7 @@ export default { }, beforeDestroy() { // Store.$off('getMeasureData') + unregisterImageSharedCacheKeys(this.stack?.imageIds) DicomEvent.$off('setReadingState') }, methods: { @@ -1279,6 +1280,7 @@ export default { this.resetHideMeasureArr() } const { image } = e.detail + registerImageSharedCacheKey(image?.imageId, image?.sharedCacheKey) const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager const imageId = image.imageId ToolStateManager.clearImageIdToolState(imageId) diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue index 92e832e6..7c424a68 100644 --- a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue +++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue @@ -126,7 +126,7 @@ import { mapGetters } from 'vuex' import Contextmenu from 'vue-contextmenujs' Vue.use(Contextmenu) import * as cornerstone from 'cornerstone-core' -import metaDataProvider from '@/utils/metaDataProvider' +import metaDataProvider, { registerImageSharedCacheKey, unregisterImageSharedCacheKeys } from '@/utils/metaDataProvider' import * as cornerstoneMath from 'cornerstone-math' import * as cornerstoneTools from 'cornerstone-tools' @@ -473,6 +473,7 @@ export default { }, beforeDestroy() { // Store.$off('getMeasureData') + unregisterImageSharedCacheKeys(this.stack?.imageIds) DicomEvent.$off('setReadingState') DicomEvent.$off('updateImage') }, @@ -1186,6 +1187,7 @@ export default { this.resetHideMeasureArr() } const { image } = e.detail + registerImageSharedCacheKey(image?.imageId, image?.sharedCacheKey) const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager const imageId = image.imageId ToolStateManager.clearImageIdToolState(imageId)