From 05e9bbb050e4d91dbcaf62f196971a92459bfd89 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Wed, 10 Jun 2026 15:59:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=AE=BF=E8=A7=86=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=85=B3=E9=94=AE=E5=BA=8F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/reading.js | 9 +- .../reading/dicoms3D/components/ReadPage.vue | 64 ++++-- .../visit-review/components/FileViewer.vue | 211 +++++++++++++++++- .../visit-review/components/ReadPage.vue | 31 ++- 4 files changed, 294 insertions(+), 21 deletions(-) diff --git a/src/api/reading.js b/src/api/reading.js index a3e01c28..4a9436be 100644 --- a/src/api/reading.js +++ b/src/api/reading.js @@ -456,4 +456,11 @@ export function getMarkList(data) { method: 'post', data }) -} \ No newline at end of file +} +export function getNoneDicomMarkList(data) { + return request({ + url: `/ReadingImageTask/getNoneDicomMarkList`, + method: 'post', + data + }) +} 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 998d4f7f..a028dc2d 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -171,8 +171,8 @@ v-if="((criterionType === 0 && readingTool === 0) || this.readingTool === 3) && isMPR"> - - +
-
+
- --> +
@@ -1962,6 +1973,17 @@ export default { const annotation = i.MeasureData if ((this.readingTool === 3 && annotation.seriesId === series.Id) || this.readingTool < 3) { annotation.highlighted = false + const textBox = annotation?.data?.handles?.textBox + const worldPosition = textBox?.worldPosition + const hasValidTextBoxWorldPosition = Array.isArray(worldPosition) && + worldPosition.length === 3 && + worldPosition.every(v => Number.isFinite(v)) && + worldPosition.some(v => Math.abs(v) > 0) + + // 如果保存的标注里已带 textbox 世界坐标,则优先按该坐标回显,避免重新计算位置。 + if (textBox && hasValidTextBoxWorldPosition) { + textBox.hasMoved = true + } cornerstoneTools.annotation.state.addAnnotation(annotation) if (this.visitTaskList[taskIdx].ReadingTaskState === 2) { cornerstoneTools.annotation.locking.setAnnotationLocked(annotation.annotationUID) @@ -4275,13 +4297,11 @@ export default { async showKeySeriesPanel() { this.keySeries = [] this.keySeriesLoading = true - + try { let res = await getMarkList({ visitTaskId: this.taskInfo.VisitTaskId }) if (res && res.Result) { this.keySeries = res.Result - } else if (Array.isArray(res)) { - this.keySeries = res } } catch (err) { console.error(err) @@ -4295,8 +4315,9 @@ export default { const task = this.visitTaskList[tIdx] const studyList = task.StudyList const annotation = kf.MeasureData ? JSON.parse(kf.MeasureData) : {} - let targetSeries = this.getMarkedSeries(studyList, annotation) + let targetSeries = this.getMarkedSeries(studyList, annotation, true) if (Object.keys(targetSeries).length === 0) return + this.activeTaskId = this.taskInfo.VisitTaskId this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(targetSeries, true) this.$refs[this.taskInfo.VisitTaskId][0].setSeriesActive(targetSeries.StudyIndex, targetSeries.SeriesIndex) }, @@ -5401,11 +5422,24 @@ export default { flex: 1; overflow: hidden; display: flex; - flex-direction: row; - align-items: center; + flex-direction: column; + align-items: flex-start; justify-content: flex-start; padding-right: 5px; + .key-series-meta { + width: 100%; + overflow: hidden; + display: flex; + flex-direction: row; + align-items: center; + margin-bottom: 4px; + + &:last-child { + margin-bottom: 0; + } + } + .key-series-label { font-size: 13px; color: #aaa; diff --git a/src/views/trials/trials-panel/reading/visit-review/components/FileViewer.vue b/src/views/trials/trials-panel/reading/visit-review/components/FileViewer.vue index 18c5a592..45598685 100644 --- a/src/views/trials/trials-panel/reading/visit-review/components/FileViewer.vue +++ b/src/views/trials/trials-panel/reading/visit-review/components/FileViewer.vue @@ -31,6 +31,56 @@ :title="$t('trials:reading:button:rotate')" @click.prevent="setToolActive('PlanarRotate')">
+ + +
    +
  • + +
  • +
  • + {{ $t('trials:reading:keyImage:noData') }} +
  • +
  • +
    + + +
    +
    +
    +
    {{ $t('trials:reading:keySeries:annotationName') }}
    +
    + {{ kf.MarkName }} +
    +
    +
    +
    {{ $t('trials:reading:keySeries:fileName') }}
    +
    + {{ kf.FileName || '-' }} +
    +
    +
    +
    + +
    +
  • +
+
+
+ +
+
+
+