From 1eae9eda2803a05fc8068bdef8f2c0e51b291d1a Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Tue, 30 Jul 2024 14:55:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E5=B8=A7=E4=B8=8B=E8=BD=BD=E5=8F=8A?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=9D=A1=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/getters.js | 1 + src/store/modules/reading.js | 155 ++++++++++- .../reading/dicoms/components/DicomCanvas.vue | 29 +- .../reading/dicoms/components/DicomViewer.vue | 38 +-- .../reading/dicoms/components/ReadPage.vue | 30 ++- .../reading/dicoms/components/StudyList.vue | 228 +++++----------- .../dicoms/customize/CustomizeDicomCanvas.vue | 24 +- .../dicoms/customize/CustomizeDicomViewer.vue | 73 ++--- .../dicoms/customize/CustomizeReadPage.vue | 33 ++- .../dicoms/customize/CustomizeStudyList.vue | 254 ++++-------------- 10 files changed, 408 insertions(+), 457 deletions(-) diff --git a/src/store/getters.js b/src/store/getters.js index e79727d6..9f5c1c33 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -41,6 +41,7 @@ const getters = { lastCanvasTaskId: state => state.reading.lastCanvasTaskId, imageQuality: state => state.reading.imageQuality, imageQualityIssues: state => state.reading.imageQualityIssues, + currentLoadIns: state => state.reading.currentLoadIns, language: state => state.lang.language, TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount, TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount, diff --git a/src/store/modules/reading.js b/src/store/modules/reading.js index 6ca73932..efe3cbc4 100644 --- a/src/store/modules/reading.js +++ b/src/store/modules/reading.js @@ -30,7 +30,8 @@ const getDefaultState = () => { activeSeries: {}, lastCanvasTaskId: '', imageQuality: null, - imageQualityIssues: null + imageQualityIssues: null, + currentLoadIns: [] } } function getQuestions(questions) { @@ -139,6 +140,22 @@ function getQuestionAnswer(questions, questionMark, answers) { return '' } } +// function getKeySeriesInfo(keyInstance, series) { +// const obj = {} +// const set = new Set() +// var instances = series.instanceList.concat(keyInstance).filter((item) => { +// if (set.has(item)) { +// return true +// } else { +// set.add(item) +// return false +// } +// }) +// instances.map(item => { +// obj[item] = { seriesId: series.seriesId, studyIndex: series.studyIndex, seriesIndex: series.seriesIndex } +// }) +// return obj +// } const state = getDefaultState @@ -759,7 +776,17 @@ const actions = { resolve() } else { var studyList = [] + var keyImages = [] getReadingVisitStudyList(obj.trialId, obj.subjectVisitId, obj.visitTaskId).then(res => { + const i = res.Result.findIndex(i => i.IsCriticalSequence) + if (i > -1) { + const seriesList = res.Result[i].SeriesList && res.Result[i].SeriesList + seriesList.map(i => { + i.InstanceInfoList.map(k => { + keyImages.push({ instanceId: k.Id }) + }) + }) + } res.Result.forEach((study, studyIndex) => { const data = {} data.StudyId = study.StudyId @@ -785,16 +812,22 @@ const actions = { series.InstanceInfoList.forEach(instance => { if (instance.NumberOfFrames && instance.NumberOfFrames > 1) { for (let i = 0; i < instance.NumberOfFrames; i++) { - const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${i}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}` + const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${i}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}` imageIds.push(imageId) } - instance.ImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${0}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}` + instance.ImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${0}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}` } else { - const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}` + const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}` imageIds.push(imageId) instance.ImageId = imageId } - + if (!study.IsCriticalSequence && series.IsBeMark) { + const i = keyImages.findIndex(i => i.instanceId === instance.Id) + if (i > -1) { + keyImages[i].studyIndex = studyIndex + keyImages[i].seriesIndex = seriesIndex + } + } instanceList.push(instance.Id) }) seriesList.push({ @@ -837,6 +870,7 @@ const actions = { }) state.visitTaskList[index].StudyList = studyList state.visitTaskList[index].studyListInit = true + state.visitTaskList[index].KeyImages = keyImages // sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) @@ -895,11 +929,114 @@ const actions = { resolve() }) }, + setImageLoadedProgress({ state }, obj) { + const studyIndex = parseInt(obj.idx.split('|')[0]) + const seriesIndex = parseInt(obj.idx.split('|')[1]) + const visitTaskIndex = parseInt(obj.idx.split('|')[2]) + let pStudyIndex = null + let pSeriesIndex = null + let pSeries = null + try { + const study = state.visitTaskList[visitTaskIndex].StudyList[studyIndex] + const series = state.visitTaskList[visitTaskIndex].StudyList[studyIndex].SeriesList[seriesIndex] + const keyImages = state.visitTaskList[visitTaskIndex].KeyImages + if (study.IsCriticalSequence) { + const i = keyImages.findIndex(i => i.instanceId === obj.instanceId) + if (i > -1) { + pStudyIndex = keyImages[i].studyIndex + pSeriesIndex = keyImages[i].seriesIndex + } + } else if (series.isBeMark) { + if (keyImages.length > 0) { + pStudyIndex = 0 + pSeriesIndex = 0 + } + } + if (pStudyIndex !== null && pSeriesIndex !== null) { + pSeries = state.visitTaskList[visitTaskIndex].StudyList[pStudyIndex].SeriesList[pSeriesIndex] + } + + var prefetchInstanceCount = series.prefetchInstanceCount + var instanceCount = series.instanceCount + var prefetchInstanceCount2 = pSeries ? pSeries.prefetchInstanceCount : null + var instanceCount2 = pSeries ? pSeries.instanceCount : null + if (series.imageloadedArr.indexOf(obj.instanceId) < 0) { + const i = state.currentLoadIns.findIndex(i => i.instanceId === obj.instanceId) + if (i > -1) { + prefetchInstanceCount = prefetchInstanceCount + obj.percentComplete - state.currentLoadIns[i].percentComplete + prefetchInstanceCount2 = prefetchInstanceCount2 !== null ? prefetchInstanceCount2 + obj.percentComplete - state.currentLoadIns[i].percentComplete : null + state.currentLoadIns[i].percentComplete = obj.percentComplete + if (obj.percentComplete >= 100) { + state.currentLoadIns.splice(i, 1) + } + } else { + if (obj.percentComplete !== 100) { + state.currentLoadIns.push({ instanceId: obj.instanceId, percentComplete: obj.percentComplete }) + } + prefetchInstanceCount = prefetchInstanceCount + obj.percentComplete + prefetchInstanceCount2 = prefetchInstanceCount2 !== null ? prefetchInstanceCount2 + obj.percentComplete : null + } + series.prefetchInstanceCount = prefetchInstanceCount + if (pSeries) { + pSeries.prefetchInstanceCount = prefetchInstanceCount2 + } + if (obj.percentComplete >= 100) { + series.imageloadedArr.push(obj.instanceId) + if (pSeries) { + pSeries.imageloadedArr.push(obj.instanceId) + } + } + } + + if (prefetchInstanceCount >= instanceCount * 100) { + series.prefetchInstanceCount = instanceCount * 100 + // 设置当前序列状态为已下载完成 + series.loadStatus = true + } + if (prefetchInstanceCount2 !== null && instanceCount2 !== null && prefetchInstanceCount2 >= instanceCount2 * 100) { + pSeries.prefetchInstanceCount = instanceCount2 * 100 + // 设置当前序列状态为已下载完成 + pSeries.loadStatus = true + } + } catch (e) { + console.log('error') + } + }, setImageloadedInfo({ state }, obj) { - var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) - const prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount - state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount = prefetchInstanceCount + 100 - state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr.push(obj.imageId) + console.log('setImageloadedInfo', obj) + // if(obj.instance === '20dd8fc9-51b0-ec63-942b-cb3006c72650') + // var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) + // // const prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount + // const instanceList = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].instanceList + // const idx = state.visitTaskList[index].StudyList.findIndex(i => i.IsCriticalSequence) + + // if (!state.visitTaskList[index].StudyList[obj.studyIndex].IsCriticalSequence) { + // // 当前下载的非关键序列 + // console.log('当前下载的非关键序列') + // if (idx > -1) { + // const keyInstance = state.visitTaskList[index].StudyList[idx].SeriesList[0].instanceList + // obj.markedImages = getKeySeriesInfo(keyInstance, state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex]) + // instanceList.map(i => { + // if (obj.markedImages.hasOwnProperty(i) && state.visitTaskList[index].StudyList[idx].SeriesList[0].imageloadedArr.indexOf(i) < 0) { + // state.visitTaskList[index].StudyList[idx].SeriesList[0].imageloadedArr.push(i) + // state.visitTaskList[index].StudyList[idx].SeriesList[0].prefetchInstanceCount = state.visitTaskList[index].StudyList[idx].SeriesList[0].prefetchInstanceCount + 100 + // } + // }) + // if (state.visitTaskList[index].StudyList[idx].SeriesList[0].imageloadedArr >= state.visitTaskList[index].StudyList[idx].SeriesList[0].instanceCount) { + // state.visitTaskList[index].StudyList[idx].SeriesList[0].loadStatus = true + // } + // } + // } + // state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].instanceCount * 100 + // state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr = instanceList + // state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].loadStatus = true + // const imageloadedArr = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr + // if (imageloadedArr.indexOf()) + + // if (state.visitTaskList[index].StudyList[0].IsCriticalSequence){ + // state.visitTaskList[index].StudyList[0].SeriesList[0].prefetchInstanceCount = prefetchInstanceCount + 100 + // state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr.push(obj.imageId) + // } }, setStatus({ state }, obj) { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) 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 8ccbc807..37a76e12 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue @@ -13,7 +13,7 @@
- +
@@ -222,7 +222,8 @@ export default { taskBlindName: '', frame: null, imageRendered: false, - isExistsClinicalData:false + isExistsClinicalData: false, + isExistMutiFrames: false // preventCache: true }, dicomInfo: { @@ -758,7 +759,7 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager for (var m = 0; m < this.measuredTools.length; m++) { var toolType = this.measuredTools[m] @@ -880,7 +881,6 @@ export default { return seriesList[seriesIdx].loadStatus ? 1 : 0 }, renderMeasuredData(e) { - this.stack.frame = !isNaN(parseInt(this.stack.frame)) ? parseInt(this.stack.frame) : 0 var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.stack.visitTaskId) if (idx === -1) return this.measureData = this.visitTaskList[idx].MeasureData @@ -899,9 +899,7 @@ export default { } else { cornerstoneTools.setToolEnabledForElement(element, data.MeasureData.type, { mouseButtonMask: 1 }) } - // console.log('renderMeasuredData', this.stack.frame) - - if (this.stack.instanceId.includes(data.InstanceId) && ((data.NumberOfFrames === this.stack.frame) || !data.NumberOfFrames) && data.MeasureData) { + if (this.stack.instanceId.includes(data.InstanceId) && ((this.stack.isExistMutiFrames && data.MeasureData.frame === this.stack.frame && data.MeasureData) || (!this.stack.isExistMutiFrames && data.MeasureData))) { const toolState = ToolStateManager.getImageIdToolState(e.detail.image.imageId, data.MeasureData.type) if (toolState && toolState.data.length > 0) { var idx = toolState.data.findIndex(item => item.uuid === data.MeasureData.data.uuid) @@ -988,7 +986,7 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager for (let t = 0; t < this.measuredTools.length; t++) { var toolType = this.measuredTools[t] @@ -1056,7 +1054,7 @@ export default { this.stack.studyId = dicomSeries.studyId this.stack.seriesNumber = dicomSeries.seriesNumber this.stack.imageIds = dicomSeries.imageIds - this.stack.currentImageIdIndex = dicomSeries.imageIdIndex ? dicomSeries.imageIdIndex : 0 + this.stack.currentImageIdIndex = dicomSeries.imageIdIndex && dicomSeries.imageIdIndex < dicomSeries.imageIds.length - 1 ? dicomSeries.imageIdIndex : 0 this.stack.imageIdIndex = dicomSeries.imageIdIndex this.stack.firstImageLoading = true this.stack.visitTaskId = dicomSeries.visitTaskId @@ -1067,6 +1065,7 @@ export default { this.stack.sliceThickness = dicomSeries.sliceThickness this.stack.instanceCount = dicomSeries.instanceCount this.stack.isExistsClinicalData = dicomSeries.isExistsClinicalData + this.stack.isExistMutiFrames = dicomSeries.isExistMutiFrames // this.measuredData = dicomSeries.measuredData var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === dicomSeries.visitTaskId) this.stack.visitTaskNum = this.visitTaskList[idx].VisitTaskNum @@ -1087,7 +1086,7 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null this.stack.instanceId = instanceId const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager ToolStateManager.clearImageIdToolState(dicomSeries.imageIds) @@ -1201,7 +1200,7 @@ export default { const imageInfo = this.getInstanceInfo(image.imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null this.stack.instanceId = instanceId this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1) this.resetWwwc() @@ -1276,7 +1275,7 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null if (this.imageId !== instanceId) { this.getOrientationMarker(e.detail.element) // 初次加载时,如果该影像存在标记,则以标记的窗宽窗位为初始化默认值,否则以序列的窗宽窗位为初始化默认值 @@ -1335,13 +1334,13 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null if (e.detail.toolName === 'Length' || e.detail.toolName === 'ArrowAnnotate' || e.detail.toolName === 'RectangleRoi') { const measureData = {} measureData.studyId = this.stack.studyId measureData.seriesId = this.stack.seriesId measureData.instanceId = instanceId - measureData.frame = this.stack.frame ? this.stack.frame : 0 + measureData.frame = this.stack.frame measureData.data = e.detail.measurementData measureData.type = e.detail.toolName measureData.thick = this.dicomInfo.thick @@ -1455,7 +1454,7 @@ export default { const imageInfo = this.getInstanceInfo(imageId) var instanceId = imageInfo.instanceId var frame = imageInfo.frame - this.stack.frame = !isNaN(parseInt(frame)) ? parseInt(frame) : 0 + this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null var uuid = measurementData.uuid var idx = this.measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue index 3eeac316..ba120a41 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue @@ -878,7 +878,7 @@ export default { activeSeries: { immediate: true, handler(v) { - console.log('activeSeries', v) + // console.log('activeSeries', v) if (v && v.isCurrentTask && this.studyList.length === 0) { this.activeTaskInfo.taskName = v.taskBlindName this.activeTaskInfo.visitTaskId = v.visitTaskId @@ -1021,6 +1021,10 @@ export default { if (!this.petctWindow) return this.petctWindow.postMessage({ type: 'readingPageUpdate', data: data }, window.location) }) + DicomEvent.$on('resetPage', () => { + if (!this.petctWindow) return + this.petctWindow.postMessage({ type: 'resetPage' }, window.location) + }) DicomEvent.$on('setReadingState', (data) => { if (!this.petctWindow) return this.petctWindow.postMessage({ type: 'setReadingState', data: data }, window.location) @@ -1058,28 +1062,30 @@ export default { }) }, methods: { - getWwcTpl() { - const loading = this.$loading({ fullscreen: true }) - getUserWLTemplateList().then(res => { + async getWwcTpl() { + // const loading = this.$loading({ fullscreen: true }) + try { + const res = await getUserWLTemplateList() this.customWwcTpl = [] res.Result.map(i => { this.customWwcTpl.push({ label: i.TemplateName, wc: i.WL, ww: i.WW }) }) this.wwwcArr = [...this.defaultWwwc, ...this.customWwcTpl] - loading.close() - }).catch(() => { loading.close() }) + } catch (e) { + console.log(e) + } }, - getHotKeys() { - const loading = this.$loading({ fullscreen: true }) - getDoctorShortcutKey({ imageToolType: 0 }).then(res => { + async getHotKeys() { + // const loading = this.$loading({ fullscreen: true }) + try { + const res = await getDoctorShortcutKey({ imageToolType: 0 }) res.Result.map(item => { this.hotKeyList.push({ id: item.Id, altKey: item.AltKey, ctrlKey: item.CtrlKey, shiftKey: item.ShiftKey, metaKey: item.MetaKey, key: item.Keyboardkey, code: item.Code, text: item.Text, shortcutKeyEnum: item.ShortcutKeyEnum }) }) this.bindHotKey() - loading.close() - }).catch(() => { - loading.close() - }) + } catch (e) { + console.log(e) + } }, resetHotkeyList(arr) { this.hotKeyList = [] @@ -1102,7 +1108,7 @@ export default { var container = this.$refs['container'] // window.addEventListener container.addEventListener('keydown', event => { - console.log(event) + // console.log(event) event.preventDefault() var idx = this.hotKeyList.findIndex(i => i.code === event.code && i.ctrlKey === event.ctrlKey && i.shiftKey === event.shiftKey && i.altKey === event.altKey) @@ -1582,7 +1588,9 @@ export default { var seriesIdx = studyList[studyIdx].SeriesList.findIndex(s => s.seriesId === seriesId) if (seriesIdx > -1) { var series = studyList[studyIdx].SeriesList[seriesIdx] - var instanceIdx = series.instanceList.findIndex(imageId => !!~imageId.indexOf(instanceId)) + const frame = this.visitTaskList[index].MeasureData[idx].MeasureData.frame + const filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + var instanceIdx = series.imageIds.findIndex(imageId => imageId.includes(filterStr)) if (instanceIdx > -1) { series.imageIdIndex = instanceIdx seriesInfo = series diff --git a/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue b/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue index a406553f..633570e1 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue @@ -72,6 +72,13 @@ import DicomEvent from './DicomEvent' import store from '@/store' import { getToken } from '@/utils/auth' import { mapGetters } from 'vuex' +import * as dicomParser from 'dicom-parser' +import * as cornerstone from 'cornerstone-core' +import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader' +cornerstoneWADOImageLoader.external.dicomParser = dicomParser +cornerstoneWADOImageLoader.external.cornerstone = cornerstone +const maximumSizeInBytes = 1024 * 1024 * 1024 * 6 +cornerstone.imageCache.setMaximumSizeBytes(maximumSizeInBytes) export default { name: 'ReadPage', components: { @@ -210,14 +217,20 @@ export default { this.$refs[this.activeTaskVisitId][0].selectSeries(data) }) }) + cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress) + window.addEventListener('beforeunload', e => { + cornerstone.imageCache.purgeCache() + }) }, beforeDestroy() { + cornerstone.imageCache.purgeCache() DicomEvent.$off('getNextVisitInfo') DicomEvent.$off('toggleSeries') DicomEvent.$off('isCanActiveNoneDicomTool') DicomEvent.$off('removeNoneDicomMeasureData') DicomEvent.$off('addNoneDicomMeasureData') DicomEvent.$off('selectSeries') + window.removeEventListener('beforeunload', e => { cornerstone.imageCache.purgeCache() }) }, methods: { async getVisitInfo() { @@ -400,7 +413,7 @@ export default { idx > -1 ? obj = seriesList[idx] : '' } if (obj) { - const index = Math.floor(obj.imageIds.length * ((baseSeries.imageIdIndex + 1) / baseSeries.instanceCount)) + const index = Math.floor(obj.imageIds.length * ((baseSeries.imageIdIndex + 1) / baseSeries.imageIds)) obj.imageIdIndex = index > 0 ? index - 1 : 0 } return obj @@ -464,7 +477,10 @@ export default { var seriesIdx = studyList[studyIdx].SeriesList.findIndex(s => s.seriesId === seriesId) if (seriesIdx > -1) { var series = studyList[studyIdx].SeriesList[seriesIdx] - var instanceIdx = series.instanceList.findIndex(imageId => !!~imageId.indexOf(instanceId)) + // var instanceIdx = series.instanceList.findIndex(imageId => !!~imageId.indexOf(instanceId)) + const frame = this.visitTaskList[index].MeasureData[idx].MeasureData.frame + const filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + var instanceIdx = series.imageIds.findIndex(imageId => imageId.includes(filterStr)) if (instanceIdx > -1) { series.imageIdIndex = instanceIdx // series.studyIndex = studyIdx @@ -485,6 +501,16 @@ export default { seriesInfo = this.getLinkedSeries(baseSeries, visitTaskId, visitTaskIdx) } return seriesInfo + }, + cornerstoneimageloadprogress(e) { + const imageId = e.detail.imageId + const params = {} + const searchParams = new URLSearchParams(imageId.split('?')[1]) + for (const [key, value] of searchParams.entries()) { + params[key] = value + } + params.percentComplete = e.detail.percentComplete + store.dispatch('reading/setImageLoadedProgress', params) } } } diff --git a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue index ccf002e7..b310032b 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue @@ -158,18 +158,13 @@ diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue index 7872beb4..d68ef8c6 100644 --- a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue @@ -157,18 +157,11 @@