阅片布局调整及中心调研更改

uat
caiyiling 2025-03-06 15:10:11 +08:00
parent 4ad67e5501
commit cd630a70fb
4 changed files with 86 additions and 14 deletions

View File

@ -61,7 +61,7 @@
</el-form-item>
<!-- 平均刻盘周期 -->
<el-form-item :label="$t('trials:researchForm:form:engravingCycle')">
<el-input-number v-model="form.AverageEngravingCycle" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" style="width:100%;" />
<el-input-number v-if="!notShowFieldList.includes('AverageEngravingCycle')" v-model="form.AverageEngravingCycle" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" style="width:100%;" />
</el-form-item>
</div>
<!-- 请确认参与本项目影像采集的影像技师具备对应的资质技师证对应设备的大型设备上岗证 -->

View File

@ -56,7 +56,7 @@
<!-- <el-divider /> -->
<!-- 平均刻盘周期 -->
<el-form-item :label="$t('trials:researchForm:form:engravingCycle')">
<el-input-number v-model="form.AverageEngravingCycle" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" />
<el-input-number v-if="!notShowFieldList.includes('AverageEngravingCycle')" v-model="form.AverageEngravingCycle" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" />
</el-form-item>
<!-- 请确认参与本项目影像采集的影像技师具备对应的资质技师证对应设备的大型设备上岗证 -->
<el-form-item v-if="!notShowFieldList.includes('IsConfirmImagingTechnologist')" :label="$t('trials:researchForm:form:isQualified')">

View File

@ -47,7 +47,14 @@
>
<svg-icon icon-class="arrow" class="svg-icon" />
</div>
<!-- 矩形工具RectangleROITool -->
<div
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'RectangleROI' ? 'tool-item-active' : '']"
:title="$t('trials:dicom-show:RectangleRoi')"
@click.prevent="setAnnotateToolActive('RectangleROI')"
>
<svg-icon icon-class="rectangle" class="svg-icon" />
</div>
<!-- 自由曲线 -->
<div
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'PlanarFreehandROI' ? 'tool-item-active' : '']"
@ -110,7 +117,7 @@
>
{{ `${taskInfo.SubjectCode} ${v.taskInfo.TaskBlindName} ` }}
</h2>
<div v-if="v.currentFileName">{{ v.currentFileName }}</div>
<!-- <div v-if="v.currentFileName">{{ v.currentFileName }}</div> -->
</div>
<div
v-if="taskInfo && taskInfo.IsReadingTaskViewInOrder === 1 && v.taskInfo"
@ -142,9 +149,57 @@
<div :style="{top: v.height + '%'}" class="slider" @click.stop.prevent="() => {return}" @mousedown.stop="sliderMousedown($event, index)" />
</div>
</div>
<div v-show="v.fileType === 'application/pdf'" class="content">
<div v-show="v.fileType === 'application/pdf' && fullScreenIndex === null " class="content flex_col">
<div class="content-top" style="height: 50px;">
<div class="left-top-text">
<div
v-if="v.taskInfo.IsExistsClinicalData"
class="cd-info"
:title="$t('trials:reading:button:clinicalData')"
@click.stop="viewCD(v.taskInfo.VisitTaskId)"
>
<svg-icon icon-class="documentation" class="svg-icon" />
</div>
<h2
v-if="taskInfo && taskInfo.IsReadingShowSubjectInfo && v.taskInfo"
class="subject-info"
>
{{ `${taskInfo.SubjectCode} ${v.taskInfo.TaskBlindName} ` }}
</h2>
<!-- <div v-if="v.currentFileName">{{ v.currentFileName }}</div> -->
</div>
<div
v-if="taskInfo && taskInfo.IsReadingTaskViewInOrder === 1 && v.taskInfo"
class="top-center-tool"
>
<div class="toggle-visit-container">
<div
class="arrw_icon"
:style="{ cursor: v.taskInfo.VisitTaskNum !== 0 ? 'pointer' : 'not-allowed', color: v.taskInfo.VisitTaskNum !== 0 ? '#fff': '#6b6b6b' }"
@click.stop.prevent="toggleTask($event, v.taskInfo.VisitTaskNum, -1)"
@dblclick.stop="preventDefault($event)"
>
<i class="el-icon-caret-left" />
</div>
<div class="arrow_text">
{{ v.taskInfo.TaskBlindName }}
</div>
<div
class="arrw_icon"
:style="{ cursor: v.taskInfo.VisitTaskNum < taskInfo.VisitNum ? 'pointer' : 'not-allowed', color: v.taskInfo.VisitTaskNum < taskInfo.VisitNum ? '#fff': '#6b6b6b' }"
@click.stop.prevent="toggleTask($event, v.taskInfo.VisitTaskNum, 1)"
@dblclick.stop="preventDefault($event)"
>
<i class="el-icon-caret-right" />
</div>
</div>
</div>
</div>
<div class="content-main" style="flex: 1;">
<iframe v-if="v.currentFilePath" :ref="`iframe-${index}`" :src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${v.currentFilePath}?index=${index}`" width="100%" height="100%" frameborder="0" crossorigin="anonymous" />
</div>
</div>
</div>
</div>
</div>
@ -176,6 +231,7 @@ const {
ZoomTool,
PlanarRotateTool,
ArrowAnnotateTool,
RectangleROITool,
PlanarFreehandROITool,
EraserTool
} = cornerstoneTools
@ -344,6 +400,7 @@ export default {
cornerstoneTools.addTool(ZoomTool)
cornerstoneTools.addTool(PlanarRotateTool)
cornerstoneTools.addTool(ArrowAnnotateTool)
cornerstoneTools.addTool(RectangleROITool)
cornerstoneTools.addTool(PlanarFreehandROITool)
cornerstoneTools.addTool(EraserTool)
@ -364,6 +421,7 @@ export default {
return doneChangingTextCallback(await this.customPrompt())
}
})
toolGroup.addTool(RectangleROITool.toolName)
toolGroup.addTool(PlanarFreehandROITool.toolName, {
allowOpenContours: false
// cachedStats: false
@ -377,9 +435,11 @@ export default {
toolGroup.setToolPassive(PlanarRotateTool.toolName)
if (this.readingTaskState < 2) {
toolGroup.setToolPassive(ArrowAnnotateTool.toolName)
toolGroup.setToolPassive(RectangleROITool.toolName)
toolGroup.setToolPassive(PlanarFreehandROITool.toolName)
} else {
toolGroup.setToolEnabled(ArrowAnnotateTool.toolName)
toolGroup.setToolEnabled(RectangleROITool.toolName)
toolGroup.setToolEnabled(PlanarFreehandROITool.toolName)
}
toolGroup.setToolPassive(EraserTool.toolName)
@ -585,6 +645,8 @@ export default {
},
//
toggleFullScreen(e, index) {
const i = this.viewportInfos.findIndex(i => i.index === index)
if (i === -1 && this.viewportInfos[i].fileType !== 'image/jpeg') return
this.fullScreenIndex = this.fullScreenIndex === index ? null : index
this.activeCanvasIndex = index
},
@ -685,7 +747,7 @@ export default {
const { annotation } = e.detail
if (!annotation) return
if (!annotation.annotationId) return
if (!annotation.data.contour.closed) return
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
if (i === -1) return
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
@ -711,7 +773,7 @@ export default {
if (this.readingTaskState === 2) return
const { annotation } = e.detail
if (!annotation) return
if (!annotation.data.contour.closed) return
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
if (i === -1) return
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
@ -885,7 +947,10 @@ export default {
grid-column: 1 / -1;
grid-row: 1 / -1;
}
.flex_col {
display: flex;
flex-direction: column;
}
.content {
width: 100%;
height: 100%;

View File

@ -15,7 +15,7 @@
</div>
</div>
<div class="ps">
<el-collapse v-model="activeNames">
<el-collapse v-model="activeNames" @change="handleChange">
<el-collapse-item v-for="(study, index) in studyList" :key="`${study.Id}`" :name="`${study.Id}`">
<template slot="title">
<div
@ -48,7 +48,7 @@
<el-image
style="width: 100%;height: 100%;"
:src="`${OSSclientConfig.basePath}${k.Path}?x-oss-process=image/resize,w_50,h_50/format,png`"
fit="fill"
fit="contain"
crossorigin="anonymous"
/>
</div>
@ -90,7 +90,7 @@ export default {
this.studyList = this.visitTaskInfo.StudyList
if (this.studyList.length === 0) return
this.$nextTick(() => {
this.activeNames.push(this.studyList[0].Id)
this.activeStudy(this.studyList[0].Id)
})
},
methods: {
@ -98,7 +98,7 @@ export default {
setInitActiveFile() {
if (this.studyList.length === 0) return
this.$nextTick(() => {
this.activeNames.push(this.studyList[0].Id)
this.activeStudy(this.studyList[0].Id)
this.selectFile(this.studyList[0], 0, 0)
})
},
@ -113,12 +113,19 @@ export default {
if (this.studyList.length === 0) return
const i = this.studyList.findIndex(i => i.Id === obj.studyId)
if (i === -1) return
this.activeNames.push(obj.studyId)
this.activeStudy(obj.studyId)
this.activeStudyIndex = i
const fileList = this.studyList[i].NoneDicomStudyFileList
const fIndex = fileList.findIndex(f => f.Path === obj.path)
if (fIndex === -1) return
this.activeFileIndex = fIndex
},
activeStudy(id) {
if (this.activeNames.indexOf(id) > -1) return
this.activeNames.push(id)
},
handleChange(v) {
console.log(v)
}
}
}