系统标准阅片bug修复及非dicom阅片更改
parent
067162e1d7
commit
1265cef6f9
|
@ -4,6 +4,7 @@
|
||||||
<div>
|
<div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
<!-- 配置 -->
|
||||||
<el-button
|
<el-button
|
||||||
size="mini"
|
size="mini"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
@ -11,7 +12,7 @@
|
||||||
@click="handleAdd"
|
@click="handleAdd"
|
||||||
style="margin-right: 10px;"
|
style="margin-right: 10px;"
|
||||||
>
|
>
|
||||||
配置
|
{{ $t('dictionary:template:criterionDictionary:button:config') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,55 +22,63 @@
|
||||||
:data="list"
|
:data="list"
|
||||||
stripe
|
stripe
|
||||||
>
|
>
|
||||||
|
<!-- 序号 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop=""
|
prop=""
|
||||||
label="序号"
|
label=""
|
||||||
width="50"
|
width="50"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{scope.$index + 1}}
|
{{scope.$index + 1}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 字典表名 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Code"
|
prop="Code"
|
||||||
label="字典表名"
|
:label="$t('dictionary:template:criterionDictionary:table:code')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 描述 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Description"
|
prop="Description"
|
||||||
label="描述"
|
:label="$t('dictionary:template:criterionDictionary:table:description')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 子项数量 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Count"
|
prop="Count"
|
||||||
label="子项数量"
|
:label="$t('dictionary:template:criterionDictionary:table:count')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 排序 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="ShowOrder"
|
prop="ShowOrder"
|
||||||
label="排序"
|
:label="$t('dictionary:template:criterionDictionary:table:showOrder')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 操作 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Description"
|
prop="Description"
|
||||||
label="操作"
|
:label="$t('common:action:action')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<!-- 配置 -->
|
||||||
<el-button size="small" :disabled="isCompleteConfig" type="primary" @click="openChildren(scope.row)">
|
<el-button size="small" :disabled="isCompleteConfig" type="primary" @click="openChildren(scope.row)">
|
||||||
配置
|
{{ $t('dictionary:template:criterionDictionary:button:config') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<!-- 删除 -->
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="isCompleteConfig"
|
:disabled="isCompleteConfig"
|
||||||
@click="handleDelete(scope.row)"
|
@click="handleDelete(scope.row)"
|
||||||
>
|
>
|
||||||
删除
|
{{ $t('common:button:delete') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -122,21 +131,24 @@
|
||||||
{{ scope.$index + 1}}
|
{{ scope.$index + 1}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 字典表名 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Code"
|
prop="Code"
|
||||||
label="字典表名"
|
:label="$t('dictionary:template:criterionDictionary:table:code')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 描述 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="Description"
|
prop="Description"
|
||||||
label="描述"
|
:label="$t('dictionary:template:criterionDictionary:table:description')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 排序 -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="ShowOrder"
|
prop="ShowOrder"
|
||||||
label="排序"
|
:label="$t('dictionary:template:criterionDictionary:table:showOrder')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -170,7 +182,6 @@ export default {
|
||||||
rowData: {},
|
rowData: {},
|
||||||
activeName: '0',
|
activeName: '0',
|
||||||
addOrEdit: { visible: false, title: '' },
|
addOrEdit: { visible: false, title: '' },
|
||||||
preview: { visible: false, title: 'eCRF预览' },
|
|
||||||
config: { visible: false, title: '全局配置' },
|
config: { visible: false, title: '全局配置' },
|
||||||
drawer_cfg: { drawerChild: false, parentId: '', title: '' },
|
drawer_cfg: { drawerChild: false, parentId: '', title: '' },
|
||||||
drawer_cfg2: { drawerChild: false, parentId: '', title: '' },
|
drawer_cfg2: { drawerChild: false, parentId: '', title: '' },
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span style="margin-left:auto">
|
<!-- <span style="margin-left:auto">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="!isCompleteConfig"
|
v-if="!isCompleteConfig"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
>
|
>
|
||||||
{{ $t('common:button:new') }}
|
{{ $t('common:button:new') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span> -->
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -680,7 +680,7 @@ export default {
|
||||||
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
||||||
} else {
|
} else {
|
||||||
this.$set(this.questionForm, 'IsDicomReading', true)
|
this.$set(this.questionForm, 'IsDicomReading', true)
|
||||||
|
const lesionState = this.getQuestionVal(7)
|
||||||
// 基线时,默认状态都为存在
|
// 基线时,默认状态都为存在
|
||||||
if (this.isBaseLineTask && !lesionState) {
|
if (this.isBaseLineTask && !lesionState) {
|
||||||
const stateId = this.getQuestionId(7)
|
const stateId = this.getQuestionId(7)
|
||||||
|
@ -735,7 +735,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const lesionState = this.getQuestionVal(7)
|
|
||||||
var status = ''
|
var status = ''
|
||||||
if (lesionState) {
|
if (lesionState) {
|
||||||
if (this.lesionType === 0 && lesionState === 1) {
|
if (this.lesionType === 0 && lesionState === 1) {
|
||||||
|
|
|
@ -775,7 +775,7 @@ export default {
|
||||||
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
||||||
} else {
|
} else {
|
||||||
this.$set(this.questionForm, 'IsDicomReading', true)
|
this.$set(this.questionForm, 'IsDicomReading', true)
|
||||||
|
const lesionState = this.getQuestionVal(7)
|
||||||
// 基线时,默认状态都为存在
|
// 基线时,默认状态都为存在
|
||||||
if (this.isBaseLineTask && !lesionState) {
|
if (this.isBaseLineTask && !lesionState) {
|
||||||
const stateId = this.getQuestionId(7)
|
const stateId = this.getQuestionId(7)
|
||||||
|
@ -810,7 +810,7 @@ export default {
|
||||||
if (this.lesionType === 0) {
|
if (this.lesionType === 0) {
|
||||||
this.calculatePPD()
|
this.calculatePPD()
|
||||||
}
|
}
|
||||||
const lesionState = this.getQuestionVal(7)
|
|
||||||
var status = ''
|
var status = ''
|
||||||
if (lesionState) {
|
if (lesionState) {
|
||||||
if (this.lesionType === 0 && lesionState === 1) {
|
if (this.lesionType === 0 && lesionState === 1) {
|
||||||
|
|
|
@ -645,7 +645,7 @@ export default {
|
||||||
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
||||||
} else {
|
} else {
|
||||||
this.$set(this.questionForm, 'IsDicomReading', true)
|
this.$set(this.questionForm, 'IsDicomReading', true)
|
||||||
|
const lesionState = this.getQuestionVal(7)
|
||||||
// 基线时,默认状态都为存在
|
// 基线时,默认状态都为存在
|
||||||
if (this.isBaseLineTask && !lesionState) {
|
if (this.isBaseLineTask && !lesionState) {
|
||||||
const stateId = this.getQuestionId(7)
|
const stateId = this.getQuestionId(7)
|
||||||
|
@ -673,7 +673,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const lesionState = this.getQuestionVal(7)
|
|
||||||
var status = ''
|
var status = ''
|
||||||
if (lesionState) {
|
if (lesionState) {
|
||||||
if (this.lesionType === 0 && lesionState === 1) {
|
if (this.lesionType === 0 && lesionState === 1) {
|
||||||
|
|
|
@ -571,6 +571,7 @@ export default {
|
||||||
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
measureData.data.uuid = `${measureData.instanceId}-${measureData.data.remark}`
|
||||||
} else {
|
} else {
|
||||||
this.$set(this.questionForm, 'IsDicomReading', true)
|
this.$set(this.questionForm, 'IsDicomReading', true)
|
||||||
|
const lesionState = this.getQuestionVal(7)
|
||||||
// 基线时,默认状态都为存在
|
// 基线时,默认状态都为存在
|
||||||
if (this.isBaseLineTask && !lesionState) {
|
if (this.isBaseLineTask && !lesionState) {
|
||||||
const stateId = this.getQuestionId(7)
|
const stateId = this.getQuestionId(7)
|
||||||
|
@ -599,7 +600,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const lesionState = this.getQuestionVal(7)
|
|
||||||
var status = ''
|
var status = ''
|
||||||
if (lesionState) {
|
if (lesionState) {
|
||||||
if (this.lesionType === 0 && lesionState === 1) {
|
if (this.lesionType === 0 && lesionState === 1) {
|
||||||
|
|
|
@ -1,76 +1,347 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-loading="loading" class="reading-viewer-container">
|
<div ref="container" v-loading="loading" class="none-dicom-reading-container">
|
||||||
<!-- 访视阅片 -->
|
<!-- 访视阅片 -->
|
||||||
<visit-review v-if="taskInfo && taskInfo.ReadingCategory=== 1" />
|
<div v-if="isShow && readingCategory && readingCategory=== 1" class="reading-wrapper">
|
||||||
|
<el-tabs v-model="activeName" :before-leave="beforeLeave">
|
||||||
|
<!-- 阅片 -->
|
||||||
|
<el-tab-pane :label="$t('trials:reading:tabTitle:review')" name="read">
|
||||||
|
<VisitReview
|
||||||
|
:trial-id="trialId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:subject-code="subjectCode"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:task-blind-name="taskBlindName"
|
||||||
|
:reading-category="readingCategory"
|
||||||
|
:readingTool="readingTool"
|
||||||
|
:criterionType="criterionType"
|
||||||
|
:isExistsClinicalData="isExistsClinicalData"
|
||||||
|
:isReadingShowSubjectInfo="isReadingShowSubjectInfo"
|
||||||
|
:is-reading-task-view-in-order="isReadingTaskViewInOrder"
|
||||||
|
:iseCRFShowInDicomReading="iseCRFShowInDicomReading"
|
||||||
|
@previewCD="previewCD"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
<!-- 报告 -->
|
||||||
|
<el-tab-pane :label="$t('trials:reading:tabTitle:report')" name="report" v-if="!iseCRFShowInDicomReading">
|
||||||
|
<Report
|
||||||
|
v-if="tabs.includes('report')"
|
||||||
|
ref="reportPage"
|
||||||
|
:trialId="trialId"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:readingTool="readingTool"
|
||||||
|
:criterionType="criterionType"
|
||||||
|
:is-reading-task-view-in-order="isReadingTaskViewInOrder"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- 全局阅片 -->
|
<!-- 全局阅片 -->
|
||||||
<global-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 2" />
|
<GlobalReview
|
||||||
|
v-else-if="isShow && readingCategory && readingCategory === 2"
|
||||||
|
:trial-id="trialId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:reading-category="readingCategory"
|
||||||
|
:subject-code="subjectCode"
|
||||||
|
:task-blind-name="taskBlindName"
|
||||||
|
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||||
|
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
||||||
|
:is-exists-clinical-data="isExistsClinicalData"
|
||||||
|
/>
|
||||||
<!-- 裁判阅片 -->
|
<!-- 裁判阅片 -->
|
||||||
<ad-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 4" />
|
<AdReview
|
||||||
|
v-else-if="isShow && readingCategory && readingCategory === 4"
|
||||||
|
:trial-id="trialId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:reading-category="readingCategory"
|
||||||
|
:subject-code="subjectCode"
|
||||||
|
:task-blind-name="taskBlindName"
|
||||||
|
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||||
|
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
||||||
|
:is-exists-clinical-data="isExistsClinicalData"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- 肿瘤学阅片 -->
|
<!-- 肿瘤学阅片 -->
|
||||||
<oncology-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 5" />
|
<OncologyReview
|
||||||
|
v-else-if="isShow && readingCategory && readingCategory === 5"
|
||||||
|
:trial-id="trialId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:reading-category="readingCategory"
|
||||||
|
:subject-code="subjectCode"
|
||||||
|
:task-blind-name="taskBlindName"
|
||||||
|
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||||
|
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
||||||
|
:is-exists-clinical-data="isExistsClinicalData"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogVisible"
|
||||||
|
:custom-class="isFullscreen?'full-dialog-container':'dialog-container'"
|
||||||
|
:show-close="false"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:fullscreen="isFullscreen"
|
||||||
|
>
|
||||||
|
<span slot="title" class="dialog-footer">
|
||||||
|
<!-- 当前阅片任务存在临床数据,请查看。若已查看,请点击“确认” -->
|
||||||
|
<span v-if="!closeCDVisible">{{ $t('trials:reading:dagTitle:msg1') }}</span>
|
||||||
|
<div style="position: absolute;right: 20px;top: 10px;">
|
||||||
|
<svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" style="cursor: pointer;font-size: 20px;" @click="isFullscreen=!isFullscreen" />
|
||||||
|
<svg-icon v-if="closeCDVisible" icon-class="dClose" style="cursor: pointer;font-size: 25px;margin-left: 10px;" @click="dialogVisible = false" />
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
<div style="height: 100%;margin:0;display: flex;flex-direction: column;">
|
||||||
|
<ClinicalData
|
||||||
|
v-if="dialogVisible"
|
||||||
|
style="flex: 1"
|
||||||
|
:trial-id="trialId"
|
||||||
|
:subject-id="subjectId"
|
||||||
|
:visit-task-id="cdVisitTaskId"
|
||||||
|
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||||
|
/>
|
||||||
|
<div v-if="!closeCDVisible" style="text-align:right">
|
||||||
|
<el-button type="primary" @click="handleConfirmCD">{{ $t('trials:reading:button:confirm') }}</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getNextTask } from '@/api/trials'
|
import { getNextTask, readClinicalData } from '@/api/trials'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import VisitReview from '@/views/trials/trials-panel/reading/visit-review'
|
import { changeURLStatic } from '@/utils/history.js'
|
||||||
|
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
||||||
|
import Report from './components/Report'
|
||||||
|
import VisitReview from './components/VisitReview'
|
||||||
import GlobalReview from '@/views/trials/trials-panel/reading/global-review'
|
import GlobalReview from '@/views/trials/trials-panel/reading/global-review'
|
||||||
import AdReview from '@/views/trials/trials-panel/reading/ad-review'
|
import AdReview from '@/views/trials/trials-panel/reading/ad-review'
|
||||||
|
import ClinicalData from '@/views/trials/trials-panel/reading/clinical-data'
|
||||||
|
// import { getToken } from '@/utils/auth'
|
||||||
import OncologyReview from '@/views/trials/trials-panel/reading/oncology-review'
|
import OncologyReview from '@/views/trials/trials-panel/reading/oncology-review'
|
||||||
export default {
|
export default {
|
||||||
name: 'ReadingViewer',
|
name: 'NoneDicomReading',
|
||||||
components: {
|
components: {
|
||||||
VisitReview,
|
VisitReview,
|
||||||
GlobalReview,
|
Report,
|
||||||
AdReview,
|
AdReview,
|
||||||
OncologyReview
|
GlobalReview,
|
||||||
|
OncologyReview,
|
||||||
|
ClinicalData
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
taskInfo: null,
|
loading: false,
|
||||||
loading: false
|
readingCategory: null,
|
||||||
|
subjectId: '',
|
||||||
|
visitTaskId: '',
|
||||||
|
trialId: '',
|
||||||
|
subjectCode: '',
|
||||||
|
taskBlindName: '',
|
||||||
|
isReadingShowSubjectInfo: false,
|
||||||
|
isReadingShowPreviousResults: false,
|
||||||
|
isReadingTaskViewInOrder: false,
|
||||||
|
isExistsClinicalData: false,
|
||||||
|
isNeedReadClinicalData: false,
|
||||||
|
isReadClinicalData: false,
|
||||||
|
iseCRFShowInDicomReading: false,
|
||||||
|
criterionType: null,
|
||||||
|
readingTool: null,
|
||||||
|
isNewSubject: null,
|
||||||
|
dialogVisible: false,
|
||||||
|
closeCDVisible: false,
|
||||||
|
cdVisitTaskId: '',
|
||||||
|
isFullscreen: false,
|
||||||
|
// dialogH: 0,
|
||||||
|
isShow: false,
|
||||||
|
activeName:'',
|
||||||
|
tabs: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
DicomEvent.$on('getNextTask', () => {
|
||||||
|
this.getTaskInfo()
|
||||||
|
})
|
||||||
|
this.trialId = this.$router.currentRoute.query.trialId
|
||||||
|
this.subjectCode = this.$router.currentRoute.query.subjectCode
|
||||||
|
this.subjectId = this.$router.currentRoute.query.subjectId
|
||||||
|
this.visitTaskId = this.$router.currentRoute.query.visitTaskId
|
||||||
|
this.isReadingShowSubjectInfo = this.$router.currentRoute.query.isReadingShowSubjectInfo
|
||||||
|
this.isReadingShowPreviousResults = this.$router.currentRoute.query.isReadingShowPreviousResults
|
||||||
|
this.isReadingTaskViewInOrder = JSON.parse(this.$router.currentRoute.query.isReadingTaskViewInOrder)
|
||||||
|
this.criterionType = this.$router.currentRoute.query.criterionType
|
||||||
|
this.readingTool = this.$router.currentRoute.query.readingTool
|
||||||
|
this.isNewSubject = this.$router.currentRoute.query.isNewSubject
|
||||||
|
if (this.isNewSubject && this.isReadingTaskViewInOrder) {
|
||||||
|
const message = this.$t('trials:reading:noneDicom:message:startRead').replace('xxx', this.subjectCode)
|
||||||
|
this.$message.success(message)
|
||||||
|
changeURLStatic('isNewSubject', '')
|
||||||
|
}
|
||||||
|
if (this.$router.currentRoute.query.TokenKey) {
|
||||||
|
store.dispatch('user/setToken', this.$router.currentRoute.query.TokenKey)
|
||||||
|
changeURLStatic('TokenKey', '')
|
||||||
|
}
|
||||||
this.getTaskInfo()
|
this.getTaskInfo()
|
||||||
|
this.dialogH = this.$refs['container'].clientHeight - 250 + 'px'
|
||||||
|
window.addEventListener('resize', () => { this.dialogH = this.$refs['container'].clientHeight - 250 + 'px' })
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
DicomEvent.$off('getNextTask')
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getTaskInfo() {
|
getTaskInfo() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
try {
|
var param = {
|
||||||
const params = {
|
subjectId: this.subjectId,
|
||||||
subjectId: this.$route.query.subjectId,
|
trialId: this.trialId,
|
||||||
trialId: this.$route.query.trialId,
|
subjectCode: this.subjectCode,
|
||||||
subjectCode: this.$route.query.subjectCode,
|
visitTaskId: this.$router.currentRoute.query.visitTaskId,
|
||||||
visitTaskId: this.$route.query.visitTaskId,
|
trialReadingCriterionId: this.$router.currentRoute.query.TrialReadingCriterionId
|
||||||
trialReadingCriterionId: this.$route.query.TrialReadingCriterionId
|
}
|
||||||
}
|
this.isShow = false
|
||||||
const res = await getNextTask(params)
|
getNextTask(param).then(res => {
|
||||||
this.taskInfo = res.Result
|
this.readingCategory = res.Result.ReadingCategory
|
||||||
localStorage.setItem('taskInfo', JSON.stringify(res.Result))
|
// if (this.subjectId !== res.Result.SubjectId && this.isReadingTaskViewInOrder) {
|
||||||
// if (res.Result.IsExistsClinicalData && res.Result.IsNeedReadClinicalData && !res.Result.IsReadClinicalData) {
|
// store.dispatch('reading/resetVisitTasks')
|
||||||
// this.isFullscreen = false
|
// var token = getToken()
|
||||||
// this.dialogVisible = true
|
// window.location.href = `/noneDicomReading?trialId=${this.trialId}&subjectCode=${res.Result.SubjectCode}&subjectId=${res.Result.SubjectId}&isReadingShowPreviousResults=${this.isReadingShowPreviousResults}&isReadingShowSubjectInfo=${this.isReadingShowSubjectInfo}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&isNewSubject=1&isReadingTaskViewInOrder=${res.Result.IsReadingTaskViewInOrder}&TokenKey=${token}`
|
||||||
// this.cdVisitTaskId = res.Result.visitTaskId
|
|
||||||
// }
|
// }
|
||||||
// this.$nextTick(() => {
|
if (res.Result.ReadingCategory === 1) {
|
||||||
// if (res.Result.IsFirstChangeTask && res.Result.ReadingTaskState === 0) {
|
this.activeName = 'read'
|
||||||
// this.tipVisible = true
|
this.tabs = [this.activeName]
|
||||||
// }
|
}
|
||||||
// })
|
this.subjectId = res.Result.SubjectId
|
||||||
|
this.visitTaskId = res.Result.VisitTaskId
|
||||||
|
this.subjectCode = res.Result.SubjectCode
|
||||||
|
this.taskBlindName = res.Result.TaskBlindName
|
||||||
|
this.isExistsClinicalData = res.Result.IsExistsClinicalData
|
||||||
|
this.isReadClinicalData = res.Result.IsReadClinicalData
|
||||||
|
this.isNeedReadClinicalData = res.Result.IsNeedReadClinicalData
|
||||||
|
this.iseCRFShowInDicomReading = res.Result.IseCRFShowInDicomReading
|
||||||
|
this.isReadingTaskViewInOrder = res.Result.IsReadingTaskViewInOrder
|
||||||
|
this.isReadingShowSubjectInfo = res.Result.IsReadingShowSubjectInfo
|
||||||
|
this.isReadingShowPreviousResults = res.Result.IsReadingShowPreviousResults
|
||||||
|
this.digitPlaces = res.Result.DigitPlaces
|
||||||
|
localStorage.setItem('digitPlaces', 2)
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.isExistsClinicalData && this.isNeedReadClinicalData && !this.isReadClinicalData) {
|
||||||
|
this.isFullscreen = false
|
||||||
|
this.dialogVisible = true
|
||||||
|
this.cdVisitTaskId = this.visitTaskId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.isShow = true
|
||||||
this.loading = false
|
this.loading = false
|
||||||
|
}).catch(() => { this.loading = false })
|
||||||
|
},
|
||||||
|
previewCD(taskId) {
|
||||||
|
this.closeCDVisible = true
|
||||||
|
this.isFullscreen = false
|
||||||
|
this.dialogVisible = true
|
||||||
|
this.cdVisitTaskId = taskId
|
||||||
|
this.dialogVisible = true
|
||||||
|
},
|
||||||
|
async handleConfirmCD() {
|
||||||
|
this.loading = true
|
||||||
|
var visitTaskId = this.visitTaskId
|
||||||
|
try {
|
||||||
|
await readClinicalData({ visitTaskId })
|
||||||
|
this.loading = false
|
||||||
|
this.dialogVisible = false
|
||||||
|
this.isReadClinicalData = true
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
|
||||||
store.dispatch('reading/setCurrentReadingTaskState', 2)
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
beforeLeave(activeName, oldActiveName) {
|
||||||
|
if (!this.tabs.includes(activeName)) {
|
||||||
|
this.tabs.push(activeName)
|
||||||
|
}
|
||||||
|
if (oldActiveName === 'read') {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.reportPage) {
|
||||||
|
// DicomEvent.$emit('getReportInfo', true)
|
||||||
|
this.$refs.reportPage.setScrollTop(1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return Promise.resolve(true)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.reading-viewer-container {
|
.none-dicom-reading-container{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.el-dialog{
|
||||||
|
margin-top: 0px !important;
|
||||||
|
::v-deep .el-dialog__wrapper{
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
::v-deep .el-dialog__body{
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.reading-wrapper{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
::v-deep.el-tabs{
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.el-tabs__item{
|
||||||
|
// color: #fff;
|
||||||
|
}
|
||||||
|
.el-tabs__header{
|
||||||
|
height: 50px;
|
||||||
|
margin:0px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.el-tabs__content{
|
||||||
|
flex: 1;
|
||||||
|
margin:0px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.el-tabs__item{
|
||||||
|
// color: #fff;
|
||||||
|
}
|
||||||
|
.el-tab-pane{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::v-deep.dialog-container{
|
||||||
|
margin-top: 50px !important;
|
||||||
|
width:75%;
|
||||||
|
height:80%;
|
||||||
|
}
|
||||||
|
::v-deep.el-dialog__body{
|
||||||
|
padding: 20px 20px 0 20px;
|
||||||
|
height: calc(100% - 70px);
|
||||||
|
}
|
||||||
|
.el-dialog__header{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.full-dialog-container{
|
||||||
|
::v-deep.is-fullscreen .el-dialog__body{
|
||||||
|
height: calc(100% - 70px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,347 +1,76 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="container" v-loading="loading" class="none-dicom-reading-container">
|
<div v-loading="loading" class="reading-viewer-container">
|
||||||
<!-- 访视阅片 -->
|
<!-- 访视阅片 -->
|
||||||
<div v-if="isShow && readingCategory && readingCategory=== 1" class="reading-wrapper">
|
<visit-review v-if="taskInfo && taskInfo.ReadingCategory=== 1" />
|
||||||
<el-tabs v-model="activeName" :before-leave="beforeLeave">
|
|
||||||
<!-- 阅片 -->
|
|
||||||
<el-tab-pane :label="$t('trials:reading:tabTitle:review')" name="read">
|
|
||||||
<VisitReview
|
|
||||||
:trial-id="trialId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:subject-code="subjectCode"
|
|
||||||
:visit-task-id="visitTaskId"
|
|
||||||
:task-blind-name="taskBlindName"
|
|
||||||
:reading-category="readingCategory"
|
|
||||||
:readingTool="readingTool"
|
|
||||||
:criterionType="criterionType"
|
|
||||||
:isExistsClinicalData="isExistsClinicalData"
|
|
||||||
:isReadingShowSubjectInfo="isReadingShowSubjectInfo"
|
|
||||||
:is-reading-task-view-in-order="isReadingTaskViewInOrder"
|
|
||||||
:iseCRFShowInDicomReading="iseCRFShowInDicomReading"
|
|
||||||
@previewCD="previewCD"
|
|
||||||
/>
|
|
||||||
</el-tab-pane>
|
|
||||||
<!-- 报告 -->
|
|
||||||
<el-tab-pane :label="$t('trials:reading:tabTitle:report')" name="report" v-if="!iseCRFShowInDicomReading">
|
|
||||||
<Report
|
|
||||||
v-if="tabs.includes('report')"
|
|
||||||
ref="reportPage"
|
|
||||||
:trialId="trialId"
|
|
||||||
:visit-task-id="visitTaskId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:readingTool="readingTool"
|
|
||||||
:criterionType="criterionType"
|
|
||||||
:is-reading-task-view-in-order="isReadingTaskViewInOrder"
|
|
||||||
/>
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 全局阅片 -->
|
<!-- 全局阅片 -->
|
||||||
<GlobalReview
|
<global-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 2" />
|
||||||
v-else-if="isShow && readingCategory && readingCategory === 2"
|
|
||||||
:trial-id="trialId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:visit-task-id="visitTaskId"
|
|
||||||
:reading-category="readingCategory"
|
|
||||||
:subject-code="subjectCode"
|
|
||||||
:task-blind-name="taskBlindName"
|
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
|
||||||
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
|
||||||
:is-exists-clinical-data="isExistsClinicalData"
|
|
||||||
/>
|
|
||||||
<!-- 裁判阅片 -->
|
<!-- 裁判阅片 -->
|
||||||
<AdReview
|
<ad-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 4" />
|
||||||
v-else-if="isShow && readingCategory && readingCategory === 4"
|
|
||||||
:trial-id="trialId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:visit-task-id="visitTaskId"
|
|
||||||
:reading-category="readingCategory"
|
|
||||||
:subject-code="subjectCode"
|
|
||||||
:task-blind-name="taskBlindName"
|
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
|
||||||
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
|
||||||
:is-exists-clinical-data="isExistsClinicalData"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 肿瘤学阅片 -->
|
<!-- 肿瘤学阅片 -->
|
||||||
<OncologyReview
|
<oncology-review v-else-if="taskInfo && taskInfo.ReadingCategory=== 5" />
|
||||||
v-else-if="isShow && readingCategory && readingCategory === 5"
|
|
||||||
:trial-id="trialId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:visit-task-id="visitTaskId"
|
|
||||||
:reading-category="readingCategory"
|
|
||||||
:subject-code="subjectCode"
|
|
||||||
:task-blind-name="taskBlindName"
|
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
|
||||||
:is-reading-show-previous-results="isReadingShowPreviousResults"
|
|
||||||
:is-exists-clinical-data="isExistsClinicalData"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<el-dialog
|
|
||||||
:visible.sync="dialogVisible"
|
|
||||||
:custom-class="isFullscreen?'full-dialog-container':'dialog-container'"
|
|
||||||
:show-close="false"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
:fullscreen="isFullscreen"
|
|
||||||
>
|
|
||||||
<span slot="title" class="dialog-footer">
|
|
||||||
<!-- 当前阅片任务存在临床数据,请查看。若已查看,请点击“确认” -->
|
|
||||||
<span v-if="!closeCDVisible">{{ $t('trials:reading:dagTitle:msg1') }}</span>
|
|
||||||
<div style="position: absolute;right: 20px;top: 10px;">
|
|
||||||
<svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" style="cursor: pointer;font-size: 20px;" @click="isFullscreen=!isFullscreen" />
|
|
||||||
<svg-icon v-if="closeCDVisible" icon-class="dClose" style="cursor: pointer;font-size: 25px;margin-left: 10px;" @click="dialogVisible = false" />
|
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
<div style="height: 100%;margin:0;display: flex;flex-direction: column;">
|
|
||||||
<ClinicalData
|
|
||||||
v-if="dialogVisible"
|
|
||||||
style="flex: 1"
|
|
||||||
:trial-id="trialId"
|
|
||||||
:subject-id="subjectId"
|
|
||||||
:visit-task-id="cdVisitTaskId"
|
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
|
||||||
/>
|
|
||||||
<div v-if="!closeCDVisible" style="text-align:right">
|
|
||||||
<el-button type="primary" @click="handleConfirmCD">{{ $t('trials:reading:button:confirm') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getNextTask, readClinicalData } from '@/api/trials'
|
import { getNextTask } from '@/api/trials'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import { changeURLStatic } from '@/utils/history.js'
|
import VisitReview from '@/views/trials/trials-panel/reading/visit-review'
|
||||||
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
|
||||||
import Report from './components/Report'
|
|
||||||
import VisitReview from './components/VisitReview'
|
|
||||||
import GlobalReview from '@/views/trials/trials-panel/reading/global-review'
|
import GlobalReview from '@/views/trials/trials-panel/reading/global-review'
|
||||||
import AdReview from '@/views/trials/trials-panel/reading/ad-review'
|
import AdReview from '@/views/trials/trials-panel/reading/ad-review'
|
||||||
import ClinicalData from '@/views/trials/trials-panel/reading/clinical-data'
|
|
||||||
// import { getToken } from '@/utils/auth'
|
|
||||||
import OncologyReview from '@/views/trials/trials-panel/reading/oncology-review'
|
import OncologyReview from '@/views/trials/trials-panel/reading/oncology-review'
|
||||||
export default {
|
export default {
|
||||||
name: 'NoneDicomReading',
|
name: 'ReadingViewer',
|
||||||
components: {
|
components: {
|
||||||
VisitReview,
|
VisitReview,
|
||||||
Report,
|
|
||||||
AdReview,
|
|
||||||
GlobalReview,
|
GlobalReview,
|
||||||
OncologyReview,
|
AdReview,
|
||||||
ClinicalData
|
OncologyReview
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
taskInfo: null,
|
||||||
readingCategory: null,
|
loading: false
|
||||||
subjectId: '',
|
|
||||||
visitTaskId: '',
|
|
||||||
trialId: '',
|
|
||||||
subjectCode: '',
|
|
||||||
taskBlindName: '',
|
|
||||||
isReadingShowSubjectInfo: false,
|
|
||||||
isReadingShowPreviousResults: false,
|
|
||||||
isReadingTaskViewInOrder: false,
|
|
||||||
isExistsClinicalData: false,
|
|
||||||
isNeedReadClinicalData: false,
|
|
||||||
isReadClinicalData: false,
|
|
||||||
iseCRFShowInDicomReading: false,
|
|
||||||
criterionType: null,
|
|
||||||
readingTool: null,
|
|
||||||
isNewSubject: null,
|
|
||||||
dialogVisible: false,
|
|
||||||
closeCDVisible: false,
|
|
||||||
cdVisitTaskId: '',
|
|
||||||
isFullscreen: false,
|
|
||||||
// dialogH: 0,
|
|
||||||
isShow: false,
|
|
||||||
activeName:'',
|
|
||||||
tabs: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
DicomEvent.$on('getNextTask', () => {
|
|
||||||
this.getTaskInfo()
|
|
||||||
})
|
|
||||||
this.trialId = this.$router.currentRoute.query.trialId
|
|
||||||
this.subjectCode = this.$router.currentRoute.query.subjectCode
|
|
||||||
this.subjectId = this.$router.currentRoute.query.subjectId
|
|
||||||
this.visitTaskId = this.$router.currentRoute.query.visitTaskId
|
|
||||||
this.isReadingShowSubjectInfo = this.$router.currentRoute.query.isReadingShowSubjectInfo
|
|
||||||
this.isReadingShowPreviousResults = this.$router.currentRoute.query.isReadingShowPreviousResults
|
|
||||||
this.isReadingTaskViewInOrder = JSON.parse(this.$router.currentRoute.query.isReadingTaskViewInOrder)
|
|
||||||
this.criterionType = this.$router.currentRoute.query.criterionType
|
|
||||||
this.readingTool = this.$router.currentRoute.query.readingTool
|
|
||||||
this.isNewSubject = this.$router.currentRoute.query.isNewSubject
|
|
||||||
if (this.isNewSubject && this.isReadingTaskViewInOrder) {
|
|
||||||
const message = this.$t('trials:reading:noneDicom:message:startRead').replace('xxx', this.subjectCode)
|
|
||||||
this.$message.success(message)
|
|
||||||
changeURLStatic('isNewSubject', '')
|
|
||||||
}
|
|
||||||
if (this.$router.currentRoute.query.TokenKey) {
|
|
||||||
store.dispatch('user/setToken', this.$router.currentRoute.query.TokenKey)
|
|
||||||
changeURLStatic('TokenKey', '')
|
|
||||||
}
|
|
||||||
this.getTaskInfo()
|
this.getTaskInfo()
|
||||||
this.dialogH = this.$refs['container'].clientHeight - 250 + 'px'
|
|
||||||
window.addEventListener('resize', () => { this.dialogH = this.$refs['container'].clientHeight - 250 + 'px' })
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
DicomEvent.$off('getNextTask')
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getTaskInfo() {
|
async getTaskInfo() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
var param = {
|
|
||||||
subjectId: this.subjectId,
|
|
||||||
trialId: this.trialId,
|
|
||||||
subjectCode: this.subjectCode,
|
|
||||||
visitTaskId: this.$router.currentRoute.query.visitTaskId,
|
|
||||||
trialReadingCriterionId: this.$router.currentRoute.query.TrialReadingCriterionId
|
|
||||||
}
|
|
||||||
this.isShow = false
|
|
||||||
getNextTask(param).then(res => {
|
|
||||||
this.readingCategory = res.Result.ReadingCategory
|
|
||||||
// if (this.subjectId !== res.Result.SubjectId && this.isReadingTaskViewInOrder) {
|
|
||||||
// store.dispatch('reading/resetVisitTasks')
|
|
||||||
// var token = getToken()
|
|
||||||
// window.location.href = `/noneDicomReading?trialId=${this.trialId}&subjectCode=${res.Result.SubjectCode}&subjectId=${res.Result.SubjectId}&isReadingShowPreviousResults=${this.isReadingShowPreviousResults}&isReadingShowSubjectInfo=${this.isReadingShowSubjectInfo}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&isNewSubject=1&isReadingTaskViewInOrder=${res.Result.IsReadingTaskViewInOrder}&TokenKey=${token}`
|
|
||||||
// }
|
|
||||||
if (res.Result.ReadingCategory === 1) {
|
|
||||||
this.activeName = 'read'
|
|
||||||
this.tabs = [this.activeName]
|
|
||||||
}
|
|
||||||
this.subjectId = res.Result.SubjectId
|
|
||||||
this.visitTaskId = res.Result.VisitTaskId
|
|
||||||
this.subjectCode = res.Result.SubjectCode
|
|
||||||
this.taskBlindName = res.Result.TaskBlindName
|
|
||||||
this.isExistsClinicalData = res.Result.IsExistsClinicalData
|
|
||||||
this.isReadClinicalData = res.Result.IsReadClinicalData
|
|
||||||
this.isNeedReadClinicalData = res.Result.IsNeedReadClinicalData
|
|
||||||
this.iseCRFShowInDicomReading = res.Result.IseCRFShowInDicomReading
|
|
||||||
this.isReadingTaskViewInOrder = res.Result.IsReadingTaskViewInOrder
|
|
||||||
this.isReadingShowSubjectInfo = res.Result.IsReadingShowSubjectInfo
|
|
||||||
this.isReadingShowPreviousResults = res.Result.IsReadingShowPreviousResults
|
|
||||||
this.digitPlaces = res.Result.DigitPlaces
|
|
||||||
localStorage.setItem('digitPlaces', 2)
|
|
||||||
this.$nextTick(() => {
|
|
||||||
if (this.isExistsClinicalData && this.isNeedReadClinicalData && !this.isReadClinicalData) {
|
|
||||||
this.isFullscreen = false
|
|
||||||
this.dialogVisible = true
|
|
||||||
this.cdVisitTaskId = this.visitTaskId
|
|
||||||
}
|
|
||||||
})
|
|
||||||
this.isShow = true
|
|
||||||
this.loading = false
|
|
||||||
}).catch(() => { this.loading = false })
|
|
||||||
},
|
|
||||||
previewCD(taskId) {
|
|
||||||
this.closeCDVisible = true
|
|
||||||
this.isFullscreen = false
|
|
||||||
this.dialogVisible = true
|
|
||||||
this.cdVisitTaskId = taskId
|
|
||||||
this.dialogVisible = true
|
|
||||||
},
|
|
||||||
async handleConfirmCD() {
|
|
||||||
this.loading = true
|
|
||||||
var visitTaskId = this.visitTaskId
|
|
||||||
try {
|
try {
|
||||||
await readClinicalData({ visitTaskId })
|
const params = {
|
||||||
|
subjectId: this.$route.query.subjectId,
|
||||||
|
trialId: this.$route.query.trialId,
|
||||||
|
subjectCode: this.$route.query.subjectCode,
|
||||||
|
visitTaskId: this.$route.query.visitTaskId,
|
||||||
|
trialReadingCriterionId: this.$route.query.TrialReadingCriterionId
|
||||||
|
}
|
||||||
|
const res = await getNextTask(params)
|
||||||
|
this.taskInfo = res.Result
|
||||||
|
localStorage.setItem('taskInfo', JSON.stringify(res.Result))
|
||||||
|
// if (res.Result.IsExistsClinicalData && res.Result.IsNeedReadClinicalData && !res.Result.IsReadClinicalData) {
|
||||||
|
// this.isFullscreen = false
|
||||||
|
// this.dialogVisible = true
|
||||||
|
// this.cdVisitTaskId = res.Result.visitTaskId
|
||||||
|
// }
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// if (res.Result.IsFirstChangeTask && res.Result.ReadingTaskState === 0) {
|
||||||
|
// this.tipVisible = true
|
||||||
|
// }
|
||||||
|
// })
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.dialogVisible = false
|
|
||||||
this.isReadClinicalData = true
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
store.dispatch('reading/setCurrentReadingTaskState', 2)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
beforeLeave(activeName, oldActiveName) {
|
|
||||||
if (!this.tabs.includes(activeName)) {
|
|
||||||
this.tabs.push(activeName)
|
|
||||||
}
|
|
||||||
if (oldActiveName === 'read') {
|
|
||||||
this.$nextTick(() => {
|
|
||||||
if (this.$refs.reportPage) {
|
|
||||||
// DicomEvent.$emit('getReportInfo', true)
|
|
||||||
this.$refs.reportPage.setScrollTop(1)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return Promise.resolve(true)
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.none-dicom-reading-container{
|
.reading-viewer-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
.el-dialog{
|
|
||||||
margin-top: 0px !important;
|
|
||||||
::v-deep .el-dialog__wrapper{
|
|
||||||
margin-top: 0px !important;
|
|
||||||
}
|
|
||||||
::v-deep .el-dialog__body{
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.reading-wrapper{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
padding: 0 10px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
::v-deep.el-tabs{
|
|
||||||
box-sizing: border-box;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
.el-tabs__item{
|
|
||||||
// color: #fff;
|
|
||||||
}
|
|
||||||
.el-tabs__header{
|
|
||||||
height: 50px;
|
|
||||||
margin:0px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.el-tabs__content{
|
|
||||||
flex: 1;
|
|
||||||
margin:0px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.el-tabs__item{
|
|
||||||
// color: #fff;
|
|
||||||
}
|
|
||||||
.el-tab-pane{
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
::v-deep.dialog-container{
|
|
||||||
margin-top: 50px !important;
|
|
||||||
width:75%;
|
|
||||||
height:80%;
|
|
||||||
}
|
|
||||||
::v-deep.el-dialog__body{
|
|
||||||
padding: 20px 20px 0 20px;
|
|
||||||
height: calc(100% - 70px);
|
|
||||||
}
|
|
||||||
.el-dialog__header{
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.full-dialog-container{
|
|
||||||
::v-deep.is-fullscreen .el-dialog__body{
|
|
||||||
height: calc(100% - 70px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -51,11 +51,18 @@
|
||||||
<!-- 自由曲线 -->
|
<!-- 自由曲线 -->
|
||||||
<div
|
<div
|
||||||
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'PlanarFreehandROI' ? 'tool-item-active' : '']"
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'PlanarFreehandROI' ? 'tool-item-active' : '']"
|
||||||
:title="$t('trials:dicom-show:Eraser')"
|
:title="$t('trials:reading:button:planarFreehandROI')"
|
||||||
@click.prevent="setAnnotateToolActive('PlanarFreehandROI')"
|
@click.prevent="setAnnotateToolActive('PlanarFreehandROI')"
|
||||||
>
|
>
|
||||||
<svg-icon icon-class="polygon" class="svg-icon" />
|
<svg-icon icon-class="polygon" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
:class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '', activeTool === 'Eraser' ? 'tool-item-active' : '']"
|
||||||
|
:title="$t('trials:dicom-show:Eraser')"
|
||||||
|
@click.prevent="setAnnotateToolActive('Eraser')"
|
||||||
|
>
|
||||||
|
<svg-icon icon-class="clear" class="svg-icon" />
|
||||||
|
</div>
|
||||||
<!-- 截图 -->
|
<!-- 截图 -->
|
||||||
<!-- <div
|
<!-- <div
|
||||||
class="tool-item"
|
class="tool-item"
|
||||||
|
@ -357,7 +364,10 @@ export default {
|
||||||
return doneChangingTextCallback(await this.customPrompt())
|
return doneChangingTextCallback(await this.customPrompt())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
toolGroup.addTool(PlanarFreehandROITool.toolName)
|
toolGroup.addTool(PlanarFreehandROITool.toolName, {
|
||||||
|
allowOpenContours: false
|
||||||
|
// cachedStats: false
|
||||||
|
})
|
||||||
toolGroup.addTool(EraserTool.toolName)
|
toolGroup.addTool(EraserTool.toolName)
|
||||||
toolGroup.setToolActive(StackScrollTool.toolName, {
|
toolGroup.setToolActive(StackScrollTool.toolName, {
|
||||||
bindings: [{ mouseButton: MouseBindings.Wheel }]
|
bindings: [{ mouseButton: MouseBindings.Wheel }]
|
||||||
|
@ -675,6 +685,7 @@ export default {
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
if (!annotation.annotationId) return
|
if (!annotation.annotationId) return
|
||||||
|
if (!annotation.data.contour.closed) return
|
||||||
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
|
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
|
||||||
if (i === -1) return
|
if (i === -1) return
|
||||||
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
|
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
|
||||||
|
@ -693,13 +704,14 @@ export default {
|
||||||
}
|
}
|
||||||
await addNoneDicomMark(params)
|
await addNoneDicomMark(params)
|
||||||
// 保存成功
|
// 保存成功
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
// this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
},
|
},
|
||||||
async annotationCompletedListener(e) {
|
async annotationCompletedListener(e) {
|
||||||
console.log('Completed')
|
console.log('Completed')
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (!annotation.data.contour.closed) return
|
||||||
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
|
const i = this.viewportInfos.findIndex(i => i.index === this.activeCanvasIndex)
|
||||||
if (i === -1) return
|
if (i === -1) return
|
||||||
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
|
if (this.viewportInfos[i].taskInfo.VisitTaskId !== this.taskInfo.VisitTaskId) return
|
||||||
|
@ -719,7 +731,7 @@ export default {
|
||||||
const res = await addNoneDicomMark(params)
|
const res = await addNoneDicomMark(params)
|
||||||
annotation.annotationId = res.Result
|
annotation.annotationId = res.Result
|
||||||
// 保存成功
|
// 保存成功
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
// this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
},
|
},
|
||||||
debounce(callback, delay) {
|
debounce(callback, delay) {
|
||||||
let timerId
|
let timerId
|
||||||
|
|
|
@ -44,7 +44,7 @@ export default function hardcodedMetaDataProvider(type, imageId, imageIds) {
|
||||||
columnCosines: [0, 1, 0],
|
columnCosines: [0, 1, 0],
|
||||||
// setting useDefaultValues to true signals the calibration values above cannot be trusted
|
// setting useDefaultValues to true signals the calibration values above cannot be trusted
|
||||||
// and units should be displayed in pixels
|
// and units should be displayed in pixels
|
||||||
usingDefaultValues: true
|
usingDefaultValues: false
|
||||||
}
|
}
|
||||||
|
|
||||||
return imagePlaneModule
|
return imagePlaneModule
|
||||||
|
|
Loading…
Reference in New Issue