Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
aa5f5f9bc6
|
@ -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,
|
||||
|
|
|
@ -30,7 +30,8 @@ const getDefaultState = () => {
|
|||
activeSeries: {},
|
||||
lastCanvasTaskId: '',
|
||||
imageQuality: null,
|
||||
imageQualityIssues: null
|
||||
imageQualityIssues: null,
|
||||
currentLoadIns: []
|
||||
}
|
||||
}
|
||||
function getQuestions(questions) {
|
||||
|
@ -139,22 +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
|
||||
}
|
||||
// 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
|
||||
|
||||
|
@ -775,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
|
||||
|
@ -801,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({
|
||||
|
@ -853,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() })
|
||||
|
@ -911,33 +929,107 @@ const actions = {
|
|||
resolve()
|
||||
})
|
||||
},
|
||||
setImageloadedInfo({ state }, obj) {
|
||||
console.log('setImageloadedInfo', obj)
|
||||
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
|
||||
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')
|
||||
}
|
||||
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
|
||||
},
|
||||
setImageloadedInfo({ state }, obj) {
|
||||
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())
|
||||
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
|
||||
<div v-if="(visitTaskList.length > 0)" style="display: flex;flex-direction: row;">
|
||||
<div
|
||||
v-for="s in visitTaskList"
|
||||
v-for="(s,index) in visitTaskList"
|
||||
:key="s.VisitTaskId"
|
||||
class="visit-item"
|
||||
:class="{'visit-item-active': activeTaskVisitId==s.VisitTaskId}"
|
||||
|
||||
@click.prevent="handleClick(s)"
|
||||
@click.prevent="handleClick(s,index)"
|
||||
>{{ s.TaskBlindName }}</div>
|
||||
|
||||
</div>
|
||||
|
@ -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() {
|
||||
|
@ -488,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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -158,18 +158,13 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import * as dicomParser from 'dicom-parser'
|
||||
import * as cornerstone from 'cornerstone-core'
|
||||
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
|
||||
// import * as cornerstone from 'cornerstone-core'
|
||||
import requestPoolManager from '@/utils/request-pool'
|
||||
import DicomEvent from './DicomEvent'
|
||||
import { mapGetters } from 'vuex'
|
||||
import store from '@/store'
|
||||
import SrList from './SrList'
|
||||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser
|
||||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone
|
||||
const maximumSizeInBytes = 1024 * 1024 * 1024 * 6
|
||||
cornerstone.imageCache.setMaximumSizeBytes(maximumSizeInBytes)
|
||||
|
||||
export default {
|
||||
name: 'StudyList',
|
||||
components: { SrList },
|
||||
|
@ -271,18 +266,18 @@ export default {
|
|||
// }
|
||||
// })
|
||||
// const debouncedInputHandler = this.debounce(this.cornerstoneimageloadprogress, 100)
|
||||
cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress)
|
||||
cornerstone.events.addEventListener('cornerstoneimageloaded', this.cornerstoneImageLoaded)
|
||||
// cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress)
|
||||
// cornerstone.events.addEventListener('cornerstoneimageloaded', this.cornerstoneImageLoaded)
|
||||
// cornerstone.events.addEventListener('cornerstoneimagecachefull', this.cornerstoneimagecachefull)
|
||||
// cornerstone.events.addEventListener('cornerstoneimagecachechanged', this.cornerstoneimagecachechanged)
|
||||
window.addEventListener('beforeunload', e => {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
})
|
||||
// window.addEventListener('beforeunload', e => {
|
||||
// cornerstone.imageCache.purgeCache()
|
||||
// })
|
||||
},
|
||||
beforeDestroy() {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
// cornerstone.imageCache.purgeCache()
|
||||
DicomEvent.$off('refreshStudyListMeasureData')
|
||||
window.removeEventListener('beforeunload', e => { cornerstone.imageCache.purgeCache() })
|
||||
// window.removeEventListener('beforeunload', e => { cornerstone.imageCache.purgeCache() })
|
||||
},
|
||||
methods: {
|
||||
debounce(fn, delay) {
|
||||
|
@ -709,13 +704,14 @@ export default {
|
|||
},
|
||||
showMultiFrames(studyIndex, series, seriesIndex, instanceInfo) {
|
||||
this.currentSeriesIndex = seriesIndex
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
const imageIds = []
|
||||
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
|
||||
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
|
||||
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${instanceInfo.Path}?frame=${j}&instanceId=${instanceInfo.Id}&visitTaskId=${this.visitTaskId}&idx=${studyIndex}|${seriesIndex}`)
|
||||
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${instanceInfo.Path}?frame=${j}&instanceId=${instanceInfo.Id}&visitTaskId=${this.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${idx}`)
|
||||
}
|
||||
} else {
|
||||
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${instanceInfo.Path}?instanceId=${instanceInfo.Id}&visitTaskId=${this.visitTaskId}&idx=${studyIndex}|${seriesIndex}`)
|
||||
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${instanceInfo.Path}?instanceId=${instanceInfo.Id}&visitTaskId=${this.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${idx}`)
|
||||
}
|
||||
this.studyIndex = studyIndex
|
||||
this.seriesIndex = seriesIndex
|
||||
|
@ -907,137 +903,6 @@ export default {
|
|||
console.log('stopLoadSeries')
|
||||
requestPoolManager.removeTask(series.seriesId)
|
||||
this.$set(this.studyList[studyIndex].SeriesList[seriesIndex], 'isLoading', false)
|
||||
},
|
||||
async imageLoaded(image, seriesUid) {
|
||||
// await store.dispatch('reading/updateStudyList', { visitTaskId: image.visitTaskId, imageId: image.imageId, seriesUid })
|
||||
// console.log(this.studyList[image.studyIndex].SeriesList[image.seriesIndex])
|
||||
if (image.studyIndex > -1 && image.seriesIndex > -1) {
|
||||
var prefetchInstanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount
|
||||
var instanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].instanceCount
|
||||
if (this.studyList[image.studyIndex].SeriesList[image.seriesIndex].imageloadedArr.indexOf(image.imageId) < 0) {
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].imageloadedArr.push(image.imageId)
|
||||
prefetchInstanceCount = prefetchInstanceCount + 1
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount = prefetchInstanceCount
|
||||
}
|
||||
if (prefetchInstanceCount >= instanceCount) {
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].instanceCount
|
||||
// 设置当前序列状态为已下载完成
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].loadStatus = true
|
||||
}
|
||||
}
|
||||
|
||||
// store.dispatch('reading/updateSeriesList', { visitTaskindex: this.visitTaskIdx, studyIndex: image.studyIndex, seriesIndex: image.seriesIndex, imageId: image.imageId })
|
||||
},
|
||||
// instance下载成功回调
|
||||
async cornerstoneImageLoaded(e) {
|
||||
// var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
// if (idx === -1) return
|
||||
// this.studyList = this.visitTaskList[idx].StudyList
|
||||
// if (!this.studyList || this.studyList.length === 0) {
|
||||
// return
|
||||
// }
|
||||
// if (!this.visitTaskList[idx].IsInit) {
|
||||
// const loading = this.$loading({ fullscreen: true })
|
||||
// await store.dispatch('reading/getMeasuredData', this.visitTaskList[idx].VisitTaskId)
|
||||
// await store.dispatch('reading/getStudyInfo', { trialId: this.trialId, subjectVisitId: this.visitTaskList[idx].VisitId, visitTaskId: this.visitTaskList[idx].VisitTaskId, taskBlindName: this.visitTaskList[idx].TaskBlindName })
|
||||
// await store.dispatch('reading/getReadingQuestionAndAnswer', { trialId: this.trialId, visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// await store.dispatch('reading/getDicomReadingQuestionAnswer', { trialId: this.trialId, visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// await store.dispatch('reading/setStatus', { visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// loading.close()
|
||||
// }
|
||||
// await store.dispatch('reading/updateStudyList', { visitTaskId: this.visitTaskId, imageId: e.detail.image.imageId, seriesUid: e.detail.image.data.string('x0020000e') })
|
||||
// const uri = e.detail.image.sharedCacheKey
|
||||
// const index = this.cachedImages.findIndex(item => item.uri === uri)
|
||||
// if (index === -1) {
|
||||
// this.cachedImages.push({ uri: uri, timestamp: new Date().getTime() })
|
||||
// } else {
|
||||
// this.cachedImages[index].timestamp = new Date().getTime()
|
||||
// }
|
||||
// var imageId = e.detail.image.imageId
|
||||
// var seriesUid = e.detail.image.data.string('x0020000e')
|
||||
// var studyIndex = -1
|
||||
// var seriesIndex = -1
|
||||
// for (let i = 0; i < this.studyList.length; ++i) {
|
||||
// for (let j = 0; j < this.studyList[i].SeriesList.length; ++j) {
|
||||
// if (this.studyList[i].SeriesList[j].seriesUid === seriesUid) {
|
||||
// studyIndex = i
|
||||
// seriesIndex = j
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// if (studyIndex > 0) break
|
||||
// }
|
||||
// if (seriesIndex < 0) return
|
||||
|
||||
// const imageIdIndex = this.studyList[studyIndex].SeriesList[seriesIndex].imageIds.indexOf(imageId)
|
||||
// if (imageIdIndex < 0) return
|
||||
// if (this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.indexOf(imageId) < 0) {
|
||||
// if (this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount >= this.studyList[studyIndex].SeriesList[seriesIndex].instanceCount) {
|
||||
// // 设置当前序列状态为已下载完成
|
||||
// this.studyList[studyIndex].SeriesList[seriesIndex].loadStatus = true
|
||||
// }
|
||||
// }
|
||||
},
|
||||
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
|
||||
}
|
||||
if (this.visitTaskId !== params.visitTaskId) return
|
||||
const percentComplete = e.detail.percentComplete
|
||||
const studyIndex = parseInt(params.idx.split('|')[0])
|
||||
const seriesIndex = parseInt(params.idx.split('|')[1])
|
||||
if (this.markedImages.hasOwnProperty(params.instanceId) && percentComplete >= 100) {
|
||||
const markedImage = this.markedImages[params.instanceId]
|
||||
const pStudyIndex = this.studyList[studyIndex].IsCriticalSequence ? markedImage.studyIndex : 0
|
||||
const pSeriesIndex = this.studyList[studyIndex].IsCriticalSequence ? markedImage.seriesIndex : 0
|
||||
const imageloadedArr = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr
|
||||
if (imageloadedArr.indexOf(params.instanceId) < 0) {
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr.push(params.instanceId)
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount + 100
|
||||
if (this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr.length >= this.studyList[pStudyIndex].SeriesList[pSeriesIndex].instanceCount) {
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].instanceCount * 100
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].loadStatus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var prefetchInstanceCount = this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount
|
||||
var instanceCount = this.studyList[studyIndex].SeriesList[seriesIndex].instanceCount
|
||||
if (this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.indexOf(params.instanceId) < 0) {
|
||||
const i = this.currentLoadIns.findIndex(i => i.instanceId === params.instanceId)
|
||||
if (i > -1) {
|
||||
prefetchInstanceCount = prefetchInstanceCount + percentComplete - this.currentLoadIns[i].percentComplete
|
||||
this.currentLoadIns[i].percentComplete = percentComplete
|
||||
if (percentComplete >= 100) {
|
||||
this.currentLoadIns.splice(i, 1)
|
||||
}
|
||||
} else {
|
||||
if (percentComplete !== 100) {
|
||||
this.currentLoadIns.push({ instanceId: params.instanceId, percentComplete })
|
||||
}
|
||||
prefetchInstanceCount = prefetchInstanceCount + percentComplete
|
||||
}
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount = prefetchInstanceCount
|
||||
if (percentComplete >= 100) {
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.push(params.instanceId)
|
||||
}
|
||||
}
|
||||
|
||||
if (prefetchInstanceCount >= instanceCount * 100) {
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount = instanceCount * 100
|
||||
// 设置当前序列状态为已下载完成
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].loadStatus = true
|
||||
}
|
||||
},
|
||||
cornerstoneimagecachechanged(e) {
|
||||
const cacheInfo = cornerstone.imageCache.getCacheInfo()
|
||||
console.log(cacheInfo)
|
||||
},
|
||||
cornerstoneimagecachefull(e) {
|
||||
console.log('超过内存了')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,6 +74,13 @@ import DicomEvent from "./../components/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: "CustomizeReadPage",
|
||||
components: {
|
||||
|
@ -229,6 +236,10 @@ export default {
|
|||
this.$refs[this.activeTaskVisitId][0].selectSeries(data);
|
||||
});
|
||||
});
|
||||
cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress)
|
||||
window.addEventListener('beforeunload', e => {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
DicomEvent.$off("getNextVisitInfo");
|
||||
|
@ -237,6 +248,7 @@ export default {
|
|||
DicomEvent.$off("removeNoneDicomMeasureData");
|
||||
DicomEvent.$off("addNoneDicomMeasureData");
|
||||
DicomEvent.$off("selectSeries");
|
||||
window.removeEventListener('beforeunload', e => { cornerstone.imageCache.purgeCache() })
|
||||
},
|
||||
methods: {
|
||||
async getVisitInfo() {
|
||||
|
@ -646,6 +658,16 @@ export default {
|
|||
}
|
||||
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)
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -157,18 +157,11 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import * as dicomParser from 'dicom-parser'
|
||||
import * as cornerstone from 'cornerstone-core'
|
||||
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
|
||||
import requestPoolManager from '@/utils/request-pool'
|
||||
import DicomEvent from './../components/DicomEvent'
|
||||
import { mapGetters } from 'vuex'
|
||||
import store from '@/store'
|
||||
import SrList from './../components/SrList'
|
||||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser
|
||||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone
|
||||
const maximumSizeInBytes = 1024 * 1024 * 1024 * 6 // 1 GB
|
||||
cornerstone.imageCache.setMaximumSizeBytes(maximumSizeInBytes)
|
||||
export default {
|
||||
name: 'StudyList',
|
||||
components: { SrList },
|
||||
|
@ -268,18 +261,9 @@ export default {
|
|||
// this.studyList = this.visitTaskList[idx].StudyList
|
||||
// }
|
||||
// })
|
||||
cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress)
|
||||
cornerstone.events.addEventListener('cornerstoneimageloaded', this.cornerstoneImageLoaded)
|
||||
// cornerstone.events.addEventListener('cornerstoneimagecachefull', this.cornerstoneimagecachefull)
|
||||
// cornerstone.events.addEventListener('cornerstoneimagecachechanged', this.cornerstoneimagecachechanged)
|
||||
window.addEventListener('beforeunload', e => {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
})
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
window.removeEventListener('beforeunload', e => { cornerstone.imageCache.purgeCache() })
|
||||
},
|
||||
methods: {
|
||||
initStudyInfo() {
|
||||
|
@ -850,137 +834,6 @@ export default {
|
|||
requestPoolManager.removeTask(series.seriesId)
|
||||
this.$set(this.studyList[studyIndex].SeriesList[seriesIndex], 'isLoading', false)
|
||||
},
|
||||
async imageLoaded(image, seriesUid) {
|
||||
// await store.dispatch('reading/updateStudyList', { visitTaskId: image.visitTaskId, imageId: image.imageId, seriesUid })
|
||||
// console.log(this.studyList[image.studyIndex].SeriesList[image.seriesIndex])
|
||||
if (image.studyIndex > -1 && image.seriesIndex > -1) {
|
||||
var prefetchInstanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount
|
||||
var instanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].instanceCount
|
||||
if (this.studyList[image.studyIndex].SeriesList[image.seriesIndex].imageloadedArr.indexOf(image.imageId) < 0) {
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].imageloadedArr.push(image.imageId)
|
||||
prefetchInstanceCount = prefetchInstanceCount + 1
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount = prefetchInstanceCount
|
||||
}
|
||||
if (prefetchInstanceCount >= instanceCount) {
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].prefetchInstanceCount = this.studyList[image.studyIndex].SeriesList[image.seriesIndex].instanceCount
|
||||
// 设置当前序列状态为已下载完成
|
||||
this.studyList[image.studyIndex].SeriesList[image.seriesIndex].loadStatus = true
|
||||
}
|
||||
}
|
||||
|
||||
// store.dispatch('reading/updateSeriesList', { visitTaskindex: this.visitTaskIdx, studyIndex: image.studyIndex, seriesIndex: image.seriesIndex, imageId: image.imageId })
|
||||
},
|
||||
// instance下载成功回调
|
||||
async cornerstoneImageLoaded(e) {
|
||||
// var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
// if (idx === -1) return
|
||||
// this.studyList = this.visitTaskList[idx].StudyList
|
||||
// if (!this.studyList || this.studyList.length === 0) {
|
||||
// return
|
||||
// }
|
||||
// if (!this.visitTaskList[idx].IsInit) {
|
||||
// const loading = this.$loading({ fullscreen: true })
|
||||
// await store.dispatch('reading/getMeasuredData', this.visitTaskList[idx].VisitTaskId)
|
||||
// await store.dispatch('reading/getStudyInfo', { trialId: this.trialId, subjectVisitId: this.visitTaskList[idx].VisitId, visitTaskId: this.visitTaskList[idx].VisitTaskId, taskBlindName: this.visitTaskList[idx].TaskBlindName })
|
||||
// await store.dispatch('reading/getReadingQuestionAndAnswer', { trialId: this.trialId, visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// await store.dispatch('reading/getDicomReadingQuestionAnswer', { trialId: this.trialId, visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// await store.dispatch('reading/setStatus', { visitTaskId: this.visitTaskList[idx].VisitTaskId })
|
||||
// loading.close()
|
||||
// }
|
||||
// await store.dispatch('reading/updateStudyList', { visitTaskId: this.visitTaskId, imageId: e.detail.image.imageId, seriesUid: e.detail.image.data.string('x0020000e') })
|
||||
// const uri = e.detail.image.sharedCacheKey
|
||||
// const index = this.cachedImages.findIndex(item => item.uri === uri)
|
||||
// if (index === -1) {
|
||||
// this.cachedImages.push({ uri: uri, timestamp: new Date().getTime() })
|
||||
// } else {
|
||||
// this.cachedImages[index].timestamp = new Date().getTime()
|
||||
// }
|
||||
// var imageId = e.detail.image.imageId
|
||||
// var seriesUid = e.detail.image.data.string('x0020000e')
|
||||
// var studyIndex = -1
|
||||
// var seriesIndex = -1
|
||||
// for (let i = 0; i < this.studyList.length; ++i) {
|
||||
// for (let j = 0; j < this.studyList[i].SeriesList.length; ++j) {
|
||||
// if (this.studyList[i].SeriesList[j].seriesUid === seriesUid) {
|
||||
// studyIndex = i
|
||||
// seriesIndex = j
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// if (studyIndex > 0) break
|
||||
// }
|
||||
// if (seriesIndex < 0) return
|
||||
|
||||
// const imageIdIndex = this.studyList[studyIndex].SeriesList[seriesIndex].imageIds.indexOf(imageId)
|
||||
// if (imageIdIndex < 0) return
|
||||
// if (this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.indexOf(imageId) < 0) {
|
||||
// if (this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount >= this.studyList[studyIndex].SeriesList[seriesIndex].instanceCount) {
|
||||
// // 设置当前序列状态为已下载完成
|
||||
// this.studyList[studyIndex].SeriesList[seriesIndex].loadStatus = true
|
||||
// }
|
||||
// }
|
||||
},
|
||||
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
|
||||
}
|
||||
if (this.visitTaskId !== params.visitTaskId) return
|
||||
const percentComplete = e.detail.percentComplete
|
||||
const studyIndex = parseInt(params.idx.split('|')[0])
|
||||
const seriesIndex = parseInt(params.idx.split('|')[1])
|
||||
if (this.markedImages.hasOwnProperty(params.instanceId) && percentComplete >= 100) {
|
||||
const markedImage = this.markedImages[params.instanceId]
|
||||
const pStudyIndex = this.studyList[studyIndex].IsCriticalSequence ? markedImage.studyIndex : 0
|
||||
const pSeriesIndex = this.studyList[studyIndex].IsCriticalSequence ? markedImage.seriesIndex : 0
|
||||
const imageloadedArr = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr
|
||||
if (imageloadedArr.indexOf(params.instanceId) < 0) {
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr.push(params.instanceId)
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount + 100
|
||||
if (this.studyList[pStudyIndex].SeriesList[pSeriesIndex].imageloadedArr.length >= this.studyList[pStudyIndex].SeriesList[pSeriesIndex].instanceCount) {
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].prefetchInstanceCount = this.studyList[pStudyIndex].SeriesList[pSeriesIndex].instanceCount * 100
|
||||
this.studyList[pStudyIndex].SeriesList[pSeriesIndex].loadStatus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var prefetchInstanceCount = this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount
|
||||
var instanceCount = this.studyList[studyIndex].SeriesList[seriesIndex].instanceCount
|
||||
if (this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.indexOf(params.instanceId) < 0) {
|
||||
const i = this.currentLoadIns.findIndex(i => i.instanceId === params.instanceId)
|
||||
if (i > -1) {
|
||||
prefetchInstanceCount = prefetchInstanceCount + percentComplete - this.currentLoadIns[i].percentComplete
|
||||
this.currentLoadIns[i].percentComplete = percentComplete
|
||||
if (percentComplete >= 100) {
|
||||
this.currentLoadIns.splice(i, 1)
|
||||
}
|
||||
} else {
|
||||
if (percentComplete !== 100) {
|
||||
this.currentLoadIns.push({ instanceId: params.instanceId, percentComplete })
|
||||
}
|
||||
prefetchInstanceCount = prefetchInstanceCount + percentComplete
|
||||
}
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount = prefetchInstanceCount
|
||||
if (percentComplete >= 100) {
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].imageloadedArr.push(params.instanceId)
|
||||
}
|
||||
}
|
||||
|
||||
if (prefetchInstanceCount >= instanceCount * 100) {
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].prefetchInstanceCount = instanceCount * 100
|
||||
// 设置当前序列状态为已下载完成
|
||||
this.studyList[studyIndex].SeriesList[seriesIndex].loadStatus = true
|
||||
}
|
||||
},
|
||||
cornerstoneimagecachechanged(e) {
|
||||
const cacheInfo = cornerstone.imageCache.getCacheInfo()
|
||||
console.log(cacheInfo)
|
||||
},
|
||||
cornerstoneimagecachefull(e) {
|
||||
console.log('超过内存了')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue