From 42711dadb54c4faaf53da1a213d8716f446e40f8 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 10 Apr 2025 15:26:11 +0800 Subject: [PATCH] =?UTF-8?q?dicom=E9=98=85=E7=89=87=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/ReadPage.vue | 1273 ++++++++--- .../components/Recist/QuestionFormItem.vue | 318 +++ .../components/Recist/QuestionList.vue | 1858 ++++++++++++++++ .../Recist/TableQuestionFormItem.vue | 352 +++ .../dicoms3D/components/ReportPage.vue | 915 ++++++++ .../reading/dicoms3D/components/StudyList.vue | 32 +- .../reading/dicoms3D/components/Viewport.vue | 111 +- .../dicoms3D/components/VisitReview.vue | 11 +- .../components/mRecist/QuestionFormItem.vue | 318 +++ .../components/mRecist/QuestionList.vue | 1914 +++++++++++++++++ .../mRecist/TableQuestionFormItem.vue | 360 ++++ .../reading/dicoms3D/components/toolConfig.js | 88 +- 12 files changed, 7144 insertions(+), 406 deletions(-) create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/Recist/QuestionFormItem.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/Recist/QuestionList.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/Recist/TableQuestionFormItem.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionFormItem.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionList.vue create mode 100644 src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/TableQuestionFormItem.vue diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue index d2ca6b8d..e6c7c385 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -14,7 +14,7 @@ >{{ s.TaskBlindName }} -
+
-
- - - - - - 1*1 - 1*2 - 2*2 - - +
+
-
- - - - - - -
-
{{i.label}}
-
{{`${i.ww}/${i.wc}`}}
-
- - {{ ` ${$t('trials:reading:title:preset') }` }} - -
-
-
+ :title="$t('trials:reading:button:wwwc')" + @click.stop="setWindowLevelActive($event)" + @mouseleave="toolMouseout" + > +
--> -
- - - - - - - {{$t('trials:reading:button:rotateDefault')}} - - - {{$t('trials:reading:button:rotateVertical')}} - - - {{$t('trials:reading:button:rotateHorizontal')}} - - - {{$t('trials:reading:button:rotateTurnLeft')}} - - - {{$t('trials:reading:button:rotateTurnRight')}} - - - +
+
-
- - -
+ + +
-->
@@ -156,18 +218,18 @@
-
-
@@ -180,7 +242,7 @@
- @@ -202,24 +264,24 @@
- {{ $t('trials:reading:button:handbooks') }} - {{ $t('trials:reading:button:clinicalData') }} - {{ $t('trials:reading:button:customCfg') }} @@ -228,7 +290,7 @@
-
+
-
@@ -255,28 +318,20 @@
-
-

- - {{ currentVisitInfo.SubjectCode }} - - - {{ currentVisitInfo.TaskBlindName }} - -

-
- +
+ diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/QuestionList.vue new file mode 100644 index 00000000..da67deb9 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/QuestionList.vue @@ -0,0 +1,1858 @@ + + + \ No newline at end of file diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/TableQuestionFormItem.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/TableQuestionFormItem.vue new file mode 100644 index 00000000..500d994c --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Recist/TableQuestionFormItem.vue @@ -0,0 +1,352 @@ + + + \ No newline at end of file diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/ReportPage.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/ReportPage.vue index e69de29b..14ced706 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReportPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReportPage.vue @@ -0,0 +1,915 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue index 670db458..fc97cde7 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/StudyList.vue @@ -22,13 +22,13 @@ v-if="!study.IsCriticalSequence" class="dicom-desc" > - - +
@@ -64,14 +64,14 @@ crossorigin="anonymous" />
-
-
+
+
#{{ series.SeriesNumber }}
-
+
{{ series.Description }}
-
+
T: {{ parseFloat(series.SliceThickness).toFixed(digitPlaces) }}
@@ -80,7 +80,7 @@ {{ series.Modality }}: {{ series.InstanceCount }} image
-
+
@@ -116,14 +116,16 @@ export default { activeSeriesIndex: -1, taskInfo: null, studyList: [], + annotations: [], digitPlaces: 2 } }, mounted() { this.taskInfo = JSON.parse(localStorage.getItem('taskInfo')) - let digitPlaces = Number(localStorage.getItem('digitPlaces')) + const digitPlaces = Number(localStorage.getItem('digitPlaces')) this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces this.studyList = this.visitTaskInfo.StudyList + this.annotations = this.visitTaskInfo.Annotations if (this.studyList.length === 0) return this.$nextTick(() => { this.activeStudy(this.studyList[0].StudyId) @@ -142,22 +144,22 @@ export default { setSeriesActive(studyIndex, seriesIndex) { this.activeStudyIndex = studyIndex this.activeSeriesIndex = seriesIndex - let studyId = this.studyList[studyIndex].StudyId + const studyId = this.studyList[studyIndex].StudyId if (!studyId) return this.activeStudy(studyId) }, getPreviousOrNextSeries(type, series) { - let seriseList = this.studyList.map(s => s.SeriesList).flat() - let i = seriseList.findIndex(i => i.Id === series.Id && i.StudyId === series.StudyId) + const seriseList = this.studyList.map(s => s.SeriesList).flat() + const i = seriseList.findIndex(i => i.Id === series.Id && i.StudyId === series.StudyId) if (i === -1) return let newIndex = null if (type === -1) { newIndex = i === 0 ? i : i - 1 } else { - newIndex = i >= seriseList.length - 1 ? i : i +1 + newIndex = i >= seriseList.length - 1 ? i : i + 1 } - let studyIndex = seriseList[newIndex].StudyIndex - let seriesIndex = seriseList[newIndex].SeriesIndex + const studyIndex = seriseList[newIndex].StudyIndex + const seriesIndex = seriseList[newIndex].SeriesIndex this.setSeriesActive(studyIndex, seriesIndex) this.activeSeries(seriseList[newIndex], seriesIndex, studyIndex) } diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Viewport.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Viewport.vue index 3256127a..637207a9 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/Viewport.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Viewport.vue @@ -1,22 +1,23 @@ @@ -548,4 +551,4 @@ export default { z-index: 1; } } - \ No newline at end of file + diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/VisitReview.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/VisitReview.vue index f9908be8..51e69110 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/VisitReview.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/VisitReview.vue @@ -6,6 +6,7 @@ @@ -17,7 +18,10 @@ :label="$t('trials:reading:tabTitle:report')" name="report" > - +
@@ -39,6 +43,11 @@ export default { }, mounted() { this.taskInfo = JSON.parse(localStorage.getItem('taskInfo')) + }, + methods: { + setReadingTaskState(state) { + this.$refs['readPage'].setReadingTaskState(state) + } } } diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionFormItem.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionFormItem.vue new file mode 100644 index 00000000..2c3211c5 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionFormItem.vue @@ -0,0 +1,318 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionList.vue new file mode 100644 index 00000000..6519e8ce --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/QuestionList.vue @@ -0,0 +1,1914 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/TableQuestionFormItem.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/TableQuestionFormItem.vue new file mode 100644 index 00000000..6f151adf --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/mRecist/TableQuestionFormItem.vue @@ -0,0 +1,360 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js b/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js index 9427deb2..cb3461dd 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js @@ -8,25 +8,33 @@ const config = { "name": "直径测量工具", "icon": "length", "toolName": "Length", - "i18nKey": "trials:reading:button:length" + "i18nKey": "trials:reading:button:length", + "isDisabled": false, + "disabledReason": '' }, { "name": "长短径测量工具", "icon": "bidirection", "toolName": "Bidirectional", - "i18nKey": "trials:reading:button:bidirectional" + "i18nKey": "trials:reading:button:bidirectional", + "isDisabled": false, + "disabledReason": '' }, { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -38,25 +46,33 @@ const config = { "name": "直径测量工具", "icon": "length", "toolName": "Length", - "i18nKey": "trials:reading:button:length" + "i18nKey": "trials:reading:button:length", + "isDisabled": false, + "disabledReason": '' }, { "name": "长短径测量工具", "icon": "bidirection", "toolName": "Bidirectional", - "i18nKey": "trials:reading:button:bidirectional" + "i18nKey": "trials:reading:button:bidirectional", + "isDisabled": false, + "disabledReason": '' }, { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -68,25 +84,33 @@ const config = { "name": "直径测量工具", "icon": "length", "toolName": "Length", - "i18nKey": "trials:reading:button:length" + "i18nKey": "trials:reading:button:length", + "isDisabled": false, + "disabledReason": '' }, { "name": "长短径测量工具", "icon": "bidirection", "toolName": "Bidirectional", - "i18nKey": "trials:reading:button:bidirectional" + "i18nKey": "trials:reading:button:bidirectional", + "isDisabled": false, + "disabledReason": '' }, { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -98,25 +122,33 @@ const config = { "name": "直径测量工具", "icon": "length", "toolName": "Length", - "i18nKey": "trials:reading:button:length" + "i18nKey": "trials:reading:button:length", + "isDisabled": false, + "disabledReason": '' }, { "name": "长短径测量工具", "icon": "bidirection", "toolName": "Bidirectional", - "i18nKey": "trials:reading:button:bidirectional" + "i18nKey": "trials:reading:button:bidirectional", + "isDisabled": false, + "disabledReason": '' }, { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -128,13 +160,17 @@ const config = { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -146,19 +182,25 @@ const config = { "name": "直径测量工具", "icon": "length", "toolName": "Length", - "i18nKey": "trials:reading:button:length" + "i18nKey": "trials:reading:button:length", + "isDisabled": false, + "disabledReason": '' }, { "name": "矩形工具", "icon": "rectangle", "toolName": "RectangleRoi", - "i18nKey": "trials:reading:button:rectangle" + "i18nKey": "trials:reading:button:rectangle", + "isDisabled": false, + "disabledReason": '' }, { "name": "箭头工具", "icon": "arrow", "toolName": "ArrowAnnotate", - "i18nKey": "trials:reading:button:arrowAnnotate" + "i18nKey": "trials:reading:button:arrowAnnotate", + "isDisabled": false, + "disabledReason": '' } ] }, @@ -180,7 +222,9 @@ const config = { "name": "圆形测量", "icon": "oval", "toolName": "Probe", - "i18nKey": "trials:reading:button:circle" + "i18nKey": "trials:reading:button:circle", + "isDisabled": false, + "disabledReason": '' } ] }