+
+
+
+
+
+ {{ `${series.TaskInfo.SubjectCode} ${series.TaskInfo.TaskBlindName} ` }}
+
+
Series: #{{ series.SeriesNumber }}
+
Image: #{{ `${series.SliceIndex + 1}/${series.ImageIds.length}` }}
+
{{series.Modality}}
+
+
+
+
{{ series.Description }}
+
+
+
+ Pos: {{ mousePosition.index[0] }}, {{ mousePosition.index[1] }}, {{ mousePosition.index[2] }}
+
+
+ HU: {{ mousePosition.value }}
+
+
+ SUVbw(g/ml): {{ digitPlaces === -1 ?mousePosition.value.toFixed(3) :mousePosition.value.toFixed(digitPlaces) }}
+
+
+ Density: {{ mousePosition.value }}
+
+
+ W*H: {{ imageInfo.size }}
+
+
+
+
Location: {{ `${Number(imageInfo.location).toFixed(digitPlaces)} mm` }}
+
Slice Thickness: {{ `${Number(series.SliceThickness).toFixed(digitPlaces)} mm` }}
+
WW/WL: {{ imageInfo.wwwc }}
+
+
+ {{ markers.top }}
+
+
+ {{ markers.right }}
+
+
+
+ {{ markers.bottom }}
+
+
+ {{ markers.left }}
+
+
+
{return}" @mousedown.stop="sliderMousedown($event)" />
+
+
+
+
+
\ 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
new file mode 100644
index 00000000..f9908be8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/VisitReview.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js b/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js
new file mode 100644
index 00000000..9427deb2
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/toolConfig.js
@@ -0,0 +1,193 @@
+const config = {
+ "standards": [
+ {
+ "type": 1,
+ "name": "RECIST 1.1",
+ "tools": [
+ {
+ "name": "直径测量工具",
+ "icon": "length",
+ "toolName": "Length",
+ "i18nKey": "trials:reading:button:length"
+ },
+ {
+ "name": "长短径测量工具",
+ "icon": "bidirection",
+ "toolName": "Bidirectional",
+ "i18nKey": "trials:reading:button:bidirectional"
+ },
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 2,
+ "name": "Lugano 2014",
+ "tools": [
+ {
+ "name": "直径测量工具",
+ "icon": "length",
+ "toolName": "Length",
+ "i18nKey": "trials:reading:button:length"
+ },
+ {
+ "name": "长短径测量工具",
+ "icon": "bidirection",
+ "toolName": "Bidirectional",
+ "i18nKey": "trials:reading:button:bidirectional"
+ },
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 3,
+ "name": "iRECIST",
+ "tools": [
+ {
+ "name": "直径测量工具",
+ "icon": "length",
+ "toolName": "Length",
+ "i18nKey": "trials:reading:button:length"
+ },
+ {
+ "name": "长短径测量工具",
+ "icon": "bidirection",
+ "toolName": "Bidirectional",
+ "i18nKey": "trials:reading:button:bidirectional"
+ },
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 7,
+ "name": "mRECIST HCC",
+ "tools": [
+ {
+ "name": "直径测量工具",
+ "icon": "length",
+ "toolName": "Length",
+ "i18nKey": "trials:reading:button:length"
+ },
+ {
+ "name": "长短径测量工具",
+ "icon": "bidirection",
+ "toolName": "Bidirectional",
+ "i18nKey": "trials:reading:button:bidirectional"
+ },
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 10,
+ "name": "PCWG3",
+ "tools": [
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 17,
+ "name": "PCWG3",
+ "tools": [
+ {
+ "name": "直径测量工具",
+ "icon": "length",
+ "toolName": "Length",
+ "i18nKey": "trials:reading:button:length"
+ },
+ {
+ "name": "矩形工具",
+ "icon": "rectangle",
+ "toolName": "RectangleRoi",
+ "i18nKey": "trials:reading:button:rectangle"
+ },
+ {
+ "name": "箭头工具",
+ "icon": "arrow",
+ "toolName": "ArrowAnnotate",
+ "i18nKey": "trials:reading:button:arrowAnnotate"
+ }
+ ]
+ },
+ {
+ "type": 19,
+ "name": "IVUS定量评估",
+ "tools": []
+ },
+ {
+ "type": 20,
+ "name": "OCT定量评估",
+ "tools": []
+ },
+ {
+ "type": 21,
+ "name": "MRI-PDFF",
+ "tools": [
+ {
+ "name": "圆形测量",
+ "icon": "oval",
+ "toolName": "Probe",
+ "i18nKey": "trials:reading:button:circle"
+ }
+ ]
+ }
+ ]
+}
+const getTools = (criterionType) => {
+ const standard = config.standards.find(s => s.type === criterionType);
+ return standard?.tools || [];
+};
+export {config, getTools}
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/index.vue b/src/views/trials/trials-panel/reading/dicoms3D/index.vue
new file mode 100644
index 00000000..cc0b6467
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms3D/index.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:reading:button:confirm') }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/trials/trials-panel/reading/visit-review/components/ReadPage.vue b/src/views/trials/trials-panel/reading/visit-review/components/ReadPage.vue
index 65093dbd..d65167fb 100644
--- a/src/views/trials/trials-panel/reading/visit-review/components/ReadPage.vue
+++ b/src/views/trials/trials-panel/reading/visit-review/components/ReadPage.vue
@@ -295,8 +295,8 @@ export default {
async toggleTaskByViewer(visitTaskNum) {
const i = this.visitTaskList.findIndex(v => v.VisitTaskNum === visitTaskNum)
if (i === -1) return
- const visistTaskId = this.visitTaskList[i].VisitTaskId
- this.setActiveTaskVisitId(visistTaskId, true)
+ const visitTaskId = this.visitTaskList[i].VisitTaskId
+ this.setActiveTaskVisitId(visitTaskId, true)
},
// 设置激活的访视
async setActiveTaskVisitId(id, isInitActiveFile = false) {