diff --git a/src/api/trials.js b/src/api/trials.js index 432f32c5..31c03293 100644 --- a/src/api/trials.js +++ b/src/api/trials.js @@ -1081,6 +1081,13 @@ export function setSeriesStatus(trialId, subjectVisitId, studyId, seriesId, stat }) } +export function setInstanceStatus(trialId, subjectVisitId, seriesId, instanceId, state) { + return request({ + url: `/QCOperation/setInstanceState/${trialId}/${subjectVisitId}/${seriesId}/${instanceId}/${state}`, + method: 'put' + }) +} + export function getVisitQCStudyAndSeriesList(subjectVisitId) { return request({ url: `/QCList/getVisitQCStudyAndSeriesList/${subjectVisitId}`, diff --git a/src/main.js b/src/main.js index f8ce36ff..12bbc267 100644 --- a/src/main.js +++ b/src/main.js @@ -174,7 +174,7 @@ var _vm async function VueInit() { var params var res - if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions') || ~window.location.href.indexOf('/petct')) { + if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions') || ~window.location.href.indexOf('/petct') || ~window.location.href.indexOf('/fusion')) { params = $q('TrialReadingCriterionId') res = await getBasicDataAllSelect(params) } else if (~window.location.href.indexOf('/ecrfPreview')) { diff --git a/src/router/index.js b/src/router/index.js index 302adff7..c4866af8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -139,6 +139,12 @@ export const constantRoutes = [ hidden: true, component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt') }, + { + path: '/fusion', + name: 'fusion', + hidden: true, + component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index') + }, { path: '/historyScreenshot', diff --git a/src/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue index 6ffe6298..104ccbbc 100644 --- a/src/views/dicom-show/dicom-study.vue +++ b/src/views/dicom-show/dicom-study.vue @@ -52,10 +52,14 @@
+
+ +
{{ instance.InstanceNumber }}
-
{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}
+
+ {{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }} +
+
+ {{ $t('trials:audit:table:isDelete') }} + + {{ $t('trials:audit:table:isReading') }} + +
- +
@@ -138,13 +158,13 @@ import * as cornerstone from 'cornerstone-core' import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader' import dicomViewer from '@/components/Dicom/DicomViewer' import { getStudyInfo, getSeriesList } from '@/api/reading' -import { getInstanceList, getPatientSeriesList, setSeriesStatus } from '@/api/trials' +import { getInstanceList, getPatientSeriesList, setSeriesStatus, setInstanceStatus } from '@/api/trials' import requestPoolManager from '@/utils/request-pool' import store from '@/store' import { changeURLStatic } from '@/utils/history.js' import metaDataProvider from '@/utils/metaDataProvider' -cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 }); +cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 }) var config = { maxWebWorkers: 4, startWebWorkersOnDemand: true, @@ -296,7 +316,8 @@ export default { tpCode: this.tpCode, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: item.IsExistMutiFrames + isExistMutiFrames: item.IsExistMutiFrames, + isShowPopper: false }) }) this.seriesList = seriesList @@ -355,7 +376,8 @@ export default { tpCode: this.tpCode, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: item.IsExistMutiFrames + isExistMutiFrames: item.IsExistMutiFrames, + isShowPopper: false }) }) this.seriesList = seriesList @@ -384,8 +406,8 @@ export default { if (!res.Result || (res.Result && res.Result.length === 0)) return var seriesInstanceUid = res.Result[0].SeriesInstanceUid var sliceThickness = res.Result[0].SliceThickness - var isReading = res.Result[0].IsReading - var isDeleted = res.Result[0].IsDeleted + var isReading = res.OtherInfo.IsReading + var isDeleted = res.OtherInfo.IsDeleted var seriesList = [] var imageIds = [] let isExistMutiFrames = false @@ -403,7 +425,7 @@ export default { imageIds.push(path) imageId = path } - instanceInfoList.push({ Id: instance.Id, InstanceNumber: instance.InstanceNumber, NumberOfFrames: instance.NumberOfFrames, Path: instance.Path, ImageId: imageId }) + instanceInfoList.push({ Id: instance.Id, InstanceNumber: instance.InstanceNumber, NumberOfFrames: instance.NumberOfFrames, Path: instance.Path, ImageId: imageId, IsDeleted: instance.IsDeleted, IsReading: instance.IsReading }) }) seriesList.push({ trialId, @@ -424,7 +446,8 @@ export default { prefetchInstanceCount: 0, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: isExistMutiFrames + isExistMutiFrames: isExistMutiFrames, + isShowPopper: false }) this.seriesList = seriesList if (this.seriesList.length > 0) { @@ -573,7 +596,8 @@ export default { hasLabel: seriesInfo.HasLabel, keySeries: seriesInfo.KeySeries, loadStatus: false, - imageloadedArr: [] + imageloadedArr: [], + isShowPopper: false }) this.seriesList = seriesList if (this.seriesList.length > 0) { @@ -671,6 +695,81 @@ export default { this.loading = false } }, + async changeInstanceReadingStatus(callback, series, instance) { + let statusStr = '' + if (callback) { + statusStr = this.$t('trials:audit:label:setSeriesReading') + instance.IsReading = false + } else { + statusStr = this.$t('trials:audit:label:setSeriesNotReading') + instance.IsReading = true + } + var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr) + message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsReading)) + const confirm = await this.$confirm( + message, + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + const state = instance.IsReading ? 1 : 2 + this.loading = true + try { + const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state) + this.loading = false + if (res.IsSuccess) { + instance.IsReading = !instance.IsReading + this.$message.success(this.$t('common:message:savedSuccessfully')) + window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location) + } + } catch (e) { + this.loading = false + } + }, + async changeInstanceDeleteStatus(callback, series, instance) { + let statusStr = '' + if (callback) { + statusStr = this.$t('trials:audit:label:setSeriesDeleted') + instance.IsDeleted = false + } else { + statusStr = this.$t('trials:audit:label:setSeriesNotDelete') + instance.IsDeleted = true + } + var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr) + message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsDeleted)) + const confirm = await this.$confirm( + message, + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + + const state = instance.IsDeleted ? 5 : 4 + this.loading = true + try { + const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state) + this.loading = false + if (res.IsSuccess) { + instance.IsDeleted = !instance.IsDeleted + this.$message.success(this.$t('common:message:savedSuccessfully')) + window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location) + } + } catch (e) { + this.loading = false + } + }, + popperClick(seriesList, series) { + for (let i = 0; i < seriesList.length; i++) { + if (seriesList[i].isShowPopper) { + seriesList[i].isShowPopper = false + } + } + series.isShowPopper = !series.isShowPopper + }, loadAllImages() { const seriesIndex = this.seriesList.findIndex(i => i.loadStatus === false) if (seriesIndex === -1) return @@ -948,8 +1047,8 @@ export default { background: #d0d0d0; } .frame_content{ - height: 50px; - padding: 5px; + /* height: 50px; */ + padding: 10px; display: flex; justify-content: flex-start; color: #ddd; diff --git a/src/views/dicom-show/dicom-visit.vue b/src/views/dicom-show/dicom-visit.vue index a5bc8294..710c2e0d 100644 --- a/src/views/dicom-show/dicom-visit.vue +++ b/src/views/dicom-show/dicom-visit.vue @@ -59,34 +59,56 @@
#{{ series.seriesNumber }}
-
- -
-
{{ instance.InstanceNumber }}
-
{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}
-
- +
+
- +
+
+ +
+
{{ instance.InstanceNumber }}
+
+ {{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }} +
+
+ {{ $t('trials:audit:table:isDelete') }} + + {{ $t('trials:audit:table:isReading') }} + +
+
+ +
+
+
@@ -143,7 +165,7 @@
- +
@@ -196,8 +218,8 @@
#{{ seriesItem.seriesNumber }}
@@ -260,13 +282,13 @@ import * as cornerstone from 'cornerstone-core' import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader' import dicomViewer from '@/components/Dicom/DicomViewer' import { getVisitStudyList, getAllRelationStudyList, getSeriesList } from '@/api/reading' -import { setSeriesStatus } from '@/api/trials' +import { setSeriesStatus, setInstanceStatus } from '@/api/trials' import { getTaskUploadedDicomStudyList } from '@/api/reading' import requestPoolManager from '@/utils/request-pool' import store from '@/store' import { changeURLStatic } from '@/utils/history.js' import metaDataProvider from '@/utils/metaDataProvider' -cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 }); +cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 }) // import * as cornerstoneTools from 'cornerstone-tools' var config = { maxWebWorkers: 4, @@ -348,7 +370,7 @@ export default { let res = null if (this.page === 'upload') { res = await getTaskUploadedDicomStudyList({ visitTaskId: this.visitTaskId }) - } else if (this.page === 'download'){ + } else if (this.page === 'download') { res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading, this.visitTaskId) } else { res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading) @@ -399,7 +421,8 @@ export default { prefetchInstanceCount: 0, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: series.IsExistMutiFrames + isExistMutiFrames: series.IsExistMutiFrames, + isShowPopper: false }) }) data.SeriesList = seriesList @@ -595,6 +618,83 @@ export default { this.loading = false } }, + async changeInstanceReadingStatus(callback, series, instance) { + let statusStr = '' + if (callback) { + statusStr = this.$t('trials:audit:label:setSeriesReading') + instance.IsReading = false + } else { + statusStr = this.$t('trials:audit:label:setSeriesNotReading') + instance.IsReading = true + } + var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr) + message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsReading)) + const confirm = await this.$confirm( + message, + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + const state = instance.IsReading ? 1 : 2 + this.loading = true + try { + const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state) + this.loading = false + if (res.IsSuccess) { + instance.IsReading = !instance.IsReading + this.$message.success(this.$t('common:message:savedSuccessfully')) + window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location) + } + } catch (e) { + this.loading = false + } + }, + async changeInstanceDeleteStatus(callback, series, instance) { + let statusStr = '' + if (callback) { + statusStr = this.$t('trials:audit:label:setSeriesDeleted') + instance.IsDeleted = false + } else { + statusStr = this.$t('trials:audit:label:setSeriesNotDelete') + instance.IsDeleted = true + } + var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr) + message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsDeleted)) + const confirm = await this.$confirm( + message, + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + + const state = instance.IsDeleted ? 5 : 4 + this.loading = true + try { + const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state) + this.loading = false + if (res.IsSuccess) { + instance.IsDeleted = !instance.IsDeleted + this.$message.success(this.$t('common:message:savedSuccessfully')) + window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location) + } + } catch (e) { + this.loading = false + } + }, + popperClick(studyList, series) { + for (let i = 0; i < studyList.length; i++) { + for (let j = 0; j < studyList[i].SeriesList.length; j++) { + if (studyList[i].SeriesList[j].isShowPopper) { + studyList[i].SeriesList[j].isShowPopper = false + } + } + } + series.isShowPopper = !series.isShowPopper + }, // 切换关联检查Tab时获取关联检查信息 async handleTabClick(tab, event) { if (tab.name === 'relation-study' && this.relationStudyList.length <= 0) { @@ -671,7 +771,8 @@ export default { keySeries: item.KeySeries, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: item.IsExistMutiFrames + isExistMutiFrames: item.IsExistMutiFrames, + isShowPopper: false }) }) scope.relationStudyList[index].seriesCount = seriesList.length @@ -978,9 +1079,21 @@ export default { border: 1px solid #2c2c2c; padding: 5px; } +.frame_list{ + max-height: 500px; + overflow-y: auto; +} +.instance_frame_wrapper ::-webkit-scrollbar { + width: 7px; + height: 7px; +} +.instance_frame_wrapper ::-webkit-scrollbar-thumb { + border-radius: 10px; + background: #d0d0d0; +} .frame_content{ - height: 50px; - padding: 5px; + /* height: 50px; */ + padding: 10px; display: flex; justify-content: flex-start; color: #ddd; 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 ae41e258..2e39d650 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue @@ -1780,7 +1780,18 @@ export default { if (seriesIdx > -1) { var series = studyList[studyIdx].SeriesList[seriesIdx] const frame = this.visitTaskList[index].MeasureData[idx].MeasureData.frame - const filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + // const filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + let n = series.instanceInfoList.findIndex(k=>k.Id === instanceId) + let filterStr = '' + if (n > -1 && series.isExistMutiFrames) { + if (series.instanceInfoList[n].NumberOfFrames > 0) { + filterStr = `frame=${frame}&instanceId=${instanceId}` + } else { + filterStr = `instanceId=${instanceId}` + } + } else { + filterStr = `instanceId=${instanceId}` + } var instanceIdx = series.imageIds.findIndex(imageId => imageId.includes(filterStr)) if (instanceIdx > -1) { series.imageIdIndex = instanceIdx diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Assessment.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Assessment.vue new file mode 100644 index 00000000..baf762d1 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Assessment.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Questions.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Questions.vue new file mode 100644 index 00000000..80311289 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Questions.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/TableQuestions.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/TableQuestions.vue new file mode 100644 index 00000000..946aba1f --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/TableQuestions.vue @@ -0,0 +1,354 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Viewport.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Viewport.vue new file mode 100644 index 00000000..ab9f970d --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Viewport.vue @@ -0,0 +1,687 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index.vue new file mode 100644 index 00000000..4256d086 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index.vue @@ -0,0 +1,2155 @@ + + + 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 a99bb0db..30453284 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue @@ -496,7 +496,18 @@ export default { 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}` + // const filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + let n = series.instanceInfoList.findIndex(k=>k.Id === instanceId) + let filterStr = '' + if (n > -1 && series.isExistMutiFrames) { + if (series.instanceInfoList[n].NumberOfFrames > 0) { + filterStr = `frame=${frame}&instanceId=${instanceId}` + } else { + filterStr = `instanceId=${instanceId}` + } + } else { + filterStr = `instanceId=${instanceId}` + } var instanceIdx = series.imageIds.findIndex(imageId => imageId.includes(filterStr)) if (instanceIdx > -1) { series.imageIdIndex = instanceIdx 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 15af0d20..e32ab737 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue @@ -477,7 +477,18 @@ export default { const srIdx = seriesList.findIndex(sr => sr.seriesId === measureDatas[i].SeriesId) // const instanceList = seriesList[srIdx].instanceList const imageIds = seriesList[srIdx].imageIds - const filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` : `instanceId=${measureDatas[i].InstanceId}` + // const filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` : `instanceId=${measureDatas[i].InstanceId}` + let instanceIndex = seriesList[srIdx].instanceInfoList.findIndex(k=>k.Id === measureDatas[i].InstanceId) + let filterStr = '' + if (instanceIndex > -1 && seriesList[srIdx].isExistMutiFrames) { + if (seriesList[srIdx].instanceInfoList[instanceIndex].NumberOfFrames > 0) { + filterStr = `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` + } else { + filterStr = `instanceId=${measureDatas[i].InstanceId}` + } + } else { + filterStr = `instanceId=${measureDatas[i].InstanceId}` + } const isIdx = imageIds.findIndex(is => is.includes(filterStr)) const series = seriesList[srIdx] series.imageIdIndex = isIdx @@ -550,7 +561,18 @@ export default { const srIdx = seriesList.findIndex(sr => sr.seriesId === measureDatas[mIdx].SeriesId) // const instanceList = seriesList[srIdx].imageIds const imageIds = seriesList[srIdx].imageIds - const filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` : `instanceId=${measureDatas[mIdx].InstanceId}` + // const filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` : `instanceId=${measureDatas[mIdx].InstanceId}` + let instanceIndex = seriesList[srIdx].instanceInfoList.findIndex(i=>i.Id === measureDatas[mIdx].InstanceId) + let filterStr = '' + if (instanceIndex > -1 && seriesList[srIdx].isExistMutiFrames) { + if (seriesList[srIdx].instanceInfoList[instanceIndex].NumberOfFrames > 0) { + filterStr = `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` + } else { + filterStr = `instanceId=${measureDatas[mIdx].InstanceId}` + } + } else { + filterStr = `instanceId=${measureDatas[mIdx].InstanceId}` + } const isIdx = imageIds.findIndex(is => is.includes(filterStr)) const series = seriesList[srIdx] series.imageIdIndex = isIdx diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue index c4661dcd..f9c1b0c4 100644 --- a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue +++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue @@ -1736,9 +1736,20 @@ export default { var series = studyList[studyIdx].SeriesList[seriesIdx] let frame = this.visitTaskList[index].MeasureData[idx].MeasureData.frame - let filterStr = series.isExistMutiFrames - ? `frame=${frame}&instanceId=${instanceId}` - : `instanceId=${instanceId}` + // let filterStr = series.isExistMutiFrames + // ? `frame=${frame}&instanceId=${instanceId}` + // : `instanceId=${instanceId}` + let filterStr = '' + let n = series.instanceInfoList.findIndex(k=>k.Id === instanceId) + if (n > -1 && series.isExistMutiFrames) { + if (series.instanceInfoList[n].NumberOfFrames > 0) { + filterStr = `frame=${frame}&instanceId=${instanceId}` + } else { + filterStr = `instanceId=${instanceId}` + } + } else { + filterStr = `instanceId=${instanceId}` + } var instanceIdx = series.imageIds.findIndex((imageId) => imageId.includes(filterStr) ) diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue index d6f7c5c1..f1a60316 100644 --- a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue @@ -635,7 +635,18 @@ export default { // (imageId) => !!~imageId.indexOf(instanceId) // ); let frame = this.visitTaskList[index].MeasureData[idx].MeasureData.frame - let filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + // let filterStr = series.isExistMutiFrames ? `frame=${frame}&instanceId=${instanceId}` : `instanceId=${instanceId}` + let n = series.instanceInfoList.findIndex(k=>k.Id === instanceId) + let filterStr = '' + if (n > -1 && series.isExistMutiFrames) { + if (series.instanceInfoList[n].NumberOfFrames > 0) { + filterStr = `frame=${frame}&instanceId=${instanceId}` + } else { + filterStr = `instanceId=${instanceId}` + } + } else { + filterStr = `instanceId=${instanceId}` + } var instanceIdx = series.imageIds.findIndex(imageId => imageId.includes(filterStr)) if (instanceIdx > -1) { series.imageIdIndex = instanceIdx; 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 3b94abff..81ca6bee 100644 --- a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue @@ -451,7 +451,18 @@ export default { // const instanceList = seriesList[srIdx].instanceList // const isIdx = instanceList.findIndex(is => is.includes(measureDatas[i].InstanceId)) const imageIds = seriesList[srIdx].imageIds - let filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` : `instanceId=${measureDatas[i].InstanceId}` + // let filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` : `instanceId=${measureDatas[i].InstanceId}` + let instanceIndex = seriesList[srIdx].instanceInfoList.findIndex(k=>k.Id === measureDatas[i].InstanceId) + let filterStr = '' + if (instanceIndex > -1 && seriesList[srIdx].isExistMutiFrames) { + if (seriesList[srIdx].instanceInfoList[instanceIndex].NumberOfFrames > 0) { + filterStr = `frame=${measureDatas[i].MeasureData.frame}&instanceId=${measureDatas[i].InstanceId}` + } else { + filterStr = `instanceId=${measureDatas[i].InstanceId}` + } + } else { + filterStr = `instanceId=${measureDatas[i].InstanceId}` + } const isIdx = imageIds.findIndex(is => is.includes(filterStr)) const series = seriesList[srIdx] series.imageIdIndex = isIdx @@ -523,9 +534,20 @@ export default { const seriesList = studyList[sdIndx].SeriesList const srIdx = seriesList.findIndex(sr => sr.seriesId === measureDatas[mIdx].SeriesId) // const instanceList = seriesList[srIdx].instanceList - // const isIdx = instanceList.findIndex(is => is.includes(measureDatas[mIdx].InstanceId)) + // const isIdx = instanceList.findIndex(is => is.includes(measureDatas[mIdx].InstanceId)) const imageIds = seriesList[srIdx].imageIds - let filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` : `instanceId=${measureDatas[mIdx].InstanceId}` + let instanceIndex = seriesList[srIdx].instanceInfoList.findIndex(i=>i.Id === measureDatas[mIdx].InstanceId) + let filterStr = '' + if (instanceIndex > -1 && seriesList[srIdx].isExistMutiFrames) { + if (seriesList[srIdx].instanceInfoList[instanceIndex].NumberOfFrames > 0) { + filterStr = `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` + } else { + filterStr = `instanceId=${measureDatas[mIdx].InstanceId}` + } + } else { + filterStr = `instanceId=${measureDatas[mIdx].InstanceId}` + } + // let filterStr = seriesList[srIdx].isExistMutiFrames ? `frame=${measureDatas[mIdx].MeasureData.frame}&instanceId=${measureDatas[mIdx].InstanceId}` : `instanceId=${measureDatas[mIdx].InstanceId}` const isIdx = imageIds.findIndex(is => is.includes(filterStr)) const series = seriesList[srIdx] series.imageIdIndex = isIdx diff --git a/src/views/trials/trials-panel/reading/reading-task/index.vue b/src/views/trials/trials-panel/reading/reading-task/index.vue index e46e1c6f..b02e325a 100644 --- a/src/views/trials/trials-panel/reading/reading-task/index.vue +++ b/src/views/trials/trials-panel/reading/reading-task/index.vue @@ -424,7 +424,11 @@ export default { var token = getToken() var path = '' if (this.readingTool === 0) { - path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}` + if (this.criterionType === 0 && this.trialId === '08dd28b3-6843-fc05-0242-ac1301000000') { + path = `/fusion?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&studyId=62b3dfc4-1e04-4180-910d-fe595f398361&ctseriesId=1bd24f53-d419-32e5-92d4-2b04640aaa65&ptseriesId=2b7b128d-8c3f-8357-ad14-e38f3acbbdff&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&TokenKey=${token}&lang=${this.$i18n.locale}` + } else { + path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}` + } } else { path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}` }