From f1dee25987aabc593cd269dc56997c51e6be901c Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 2 Jan 2025 09:18:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=A0=B8=E5=8C=BB=E5=AD=A6=E6=A0=87?= =?UTF-8?q?=E5=87=86=E6=B7=BB=E5=8A=A0=E8=9E=8D=E5=90=88=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 2 +- src/router/index.js | 6 + .../components/Fusion/demo/Assessment.vue | 106 + .../components/Fusion/demo/Questions.vue | 148 ++ .../components/Fusion/demo/TableQuestions.vue | 354 +++ .../components/Fusion/demo/Viewport.vue | 687 ++++++ .../dicoms/components/Fusion/demo/index.vue | 2155 +++++++++++++++++ .../reading/reading-task/index.vue | 6 +- 8 files changed, 3462 insertions(+), 2 deletions(-) create mode 100644 src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Assessment.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Questions.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/TableQuestions.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/Viewport.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index.vue diff --git a/src/main.js b/src/main.js index 968fbd18..f9799d70 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/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/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}` } From efb88b7ad1522f602582279fed59ea3a6765de49 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 13 Feb 2025 11:50:29 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=A4=9A=E5=B8=A7=E5=BD=B1=E5=83=8F?= =?UTF-8?q?=E8=B4=A8=E6=8E=A7=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/trials.js | 7 ++ src/views/dicom-show/dicom-study.vue | 110 ++++++++++++++++-- src/views/dicom-show/dicom-visit.vue | 166 +++++++++++++++++++++------ 3 files changed, 240 insertions(+), 43 deletions(-) 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/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue index 6ffe6298..6ff3e8c9 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, @@ -196,7 +216,8 @@ export default { imageList: [], showSeriesList: [], currentLoadIns: [], - isFromCRCUpload: false + isFromCRCUpload: false, + visible: false } }, created: function() { @@ -384,8 +405,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 +424,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, @@ -671,6 +692,73 @@ 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 + } + }, loadAllImages() { const seriesIndex = this.seriesList.findIndex(i => i.loadStatus === false) if (seriesIndex === -1) return @@ -948,8 +1036,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..10eb0958 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 @@
- +
@@ -197,7 +219,7 @@
@@ -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, @@ -306,7 +328,8 @@ export default { currentLoadIns: [], isFromCRCUpload: false, visitTaskId: null, - page: '' + page: '', + visible: false } }, mounted() { @@ -348,7 +371,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) @@ -595,6 +618,73 @@ 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 + } + }, // 切换关联检查Tab时获取关联检查信息 async handleTabClick(tab, event) { if (tab.name === 'relation-study' && this.relationStudyList.length <= 0) { @@ -978,9 +1068,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; From ab5645f28a9c40b6c543d36c1bd517110c668fd2 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 13 Feb 2025 13:50:27 +0800 Subject: [PATCH 3/4] =?UTF-8?q?popper=E5=BC=B9=E5=87=BA=E5=B1=82=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dicom-show/dicom-study.vue | 29 +++++++++++++++++++--------- src/views/dicom-show/dicom-visit.vue | 25 +++++++++++++++++------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue index 6ff3e8c9..d3e35ba3 100644 --- a/src/views/dicom-show/dicom-study.vue +++ b/src/views/dicom-show/dicom-study.vue @@ -52,13 +52,13 @@
- +
- +
@@ -216,8 +216,7 @@ export default { imageList: [], showSeriesList: [], currentLoadIns: [], - isFromCRCUpload: false, - visible: false + isFromCRCUpload: false } }, created: function() { @@ -317,7 +316,8 @@ export default { tpCode: this.tpCode, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: item.IsExistMutiFrames + isExistMutiFrames: item.IsExistMutiFrames, + isShowPopper: false }) }) this.seriesList = seriesList @@ -376,7 +376,8 @@ export default { tpCode: this.tpCode, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: item.IsExistMutiFrames + isExistMutiFrames: item.IsExistMutiFrames, + isShowPopper: false }) }) this.seriesList = seriesList @@ -445,7 +446,8 @@ export default { prefetchInstanceCount: 0, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: isExistMutiFrames + isExistMutiFrames: isExistMutiFrames, + isShowPopper: false }) this.seriesList = seriesList if (this.seriesList.length > 0) { @@ -594,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) { @@ -759,6 +762,14 @@ export default { 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 diff --git a/src/views/dicom-show/dicom-visit.vue b/src/views/dicom-show/dicom-visit.vue index 10eb0958..556a0e66 100644 --- a/src/views/dicom-show/dicom-visit.vue +++ b/src/views/dicom-show/dicom-visit.vue @@ -59,13 +59,13 @@
#{{ series.seriesNumber }}
- +
- +
@@ -328,8 +328,7 @@ export default { currentLoadIns: [], isFromCRCUpload: false, visitTaskId: null, - page: '', - visible: false + page: '' } }, mounted() { @@ -422,7 +421,8 @@ export default { prefetchInstanceCount: 0, loadStatus: false, imageloadedArr: [], - isExistMutiFrames: series.IsExistMutiFrames + isExistMutiFrames: series.IsExistMutiFrames, + isShowPopper: false }) }) data.SeriesList = seriesList @@ -685,6 +685,16 @@ export default { 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) { @@ -761,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 From 0cd07b76f8b6d5c3e5ea170471ca2310f9a3adf2 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 14 Feb 2025 14:30:55 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=A4=9A=E5=B8=A7=E5=AF=B9=E9=BD=90bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dicom-show/dicom-study.vue | 2 +- src/views/dicom-show/dicom-visit.vue | 4 +-- .../reading/dicoms/components/DicomViewer.vue | 13 ++++++++- .../reading/dicoms/components/ReadPage.vue | 13 ++++++++- .../reading/dicoms/components/StudyList.vue | 26 +++++++++++++++-- .../dicoms/customize/CustomizeDicomViewer.vue | 17 +++++++++-- .../dicoms/customize/CustomizeReadPage.vue | 13 ++++++++- .../dicoms/customize/CustomizeStudyList.vue | 28 +++++++++++++++++-- 8 files changed, 102 insertions(+), 14 deletions(-) diff --git a/src/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue index d3e35ba3..104ccbbc 100644 --- a/src/views/dicom-show/dicom-study.vue +++ b/src/views/dicom-show/dicom-study.vue @@ -53,7 +53,7 @@
diff --git a/src/views/dicom-show/dicom-visit.vue b/src/views/dicom-show/dicom-visit.vue index 556a0e66..710c2e0d 100644 --- a/src/views/dicom-show/dicom-visit.vue +++ b/src/views/dicom-show/dicom-visit.vue @@ -60,7 +60,7 @@
@@ -218,7 +218,7 @@
#{{ seriesItem.seriesNumber }}
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/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