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 @@