阅片中上传影像需要在下载影像后才能上传
continuous-integration/drone/push Build is passing Details

temp
wangxiaoshuang 2026-07-27 14:28:55 +08:00
parent 6ecc0e58e9
commit 78624d9cce
6 changed files with 47 additions and 21 deletions

View File

@ -141,6 +141,10 @@ export default {
type: Number, type: Number,
default: 2, default: 2,
}, },
isReading: {
type: Boolean,
default: false,
}
}, },
data() { data() {
return { return {
@ -442,6 +446,9 @@ export default {
let params = { let params = {
TrialImageDownloadId: this.downloadId, TrialImageDownloadId: this.downloadId,
} }
if (this.isReading) {
params.VisitTaskId = this.TaskId
}
await downloadImageSuccess(params) await downloadImageSuccess(params)
} catch (err) { } catch (err) {
console.log(err) console.log(err)

View File

@ -43,7 +43,8 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="btnBox"> <div class="btnBox">
<!--上传---> <!--上传--->
<form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data" v-if="!forbid"> <form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data"
v-if="!forbid && (!isReading || isDownloaded)">
<div class="form-group" style="margin-right: 10px"> <div class="form-group" style="margin-right: 10px">
<div :id="`directoryInputWrapper_${scope.row.Id}`" class="btn btn-link file-input"> <div :id="`directoryInputWrapper_${scope.row.Id}`" class="btn btn-link file-input">
<el-button circle icon="el-icon-upload2" :disabled="btnLoading" :loading="btnLoading" <el-button circle icon="el-icon-upload2" :disabled="btnLoading" :loading="btnLoading"
@ -70,7 +71,7 @@
</el-table> </el-table>
<div style="margin: 10px 0" class="top"> <div style="margin: 10px 0" class="top">
<span>{{ $t('upload:dicom:uploadTitle') }}</span> <span>{{ $t('upload:dicom:uploadTitle') }}</span>
<div class="btnBox" v-if="!forbid"> <div class="btnBox" v-if="!forbid && (!isReading || isDownloaded)">
<span style="margin-right: 10px">{{ $store.state.trials.uploadTip }}</span> <span style="margin-right: 10px">{{ $store.state.trials.uploadTip }}</span>
<form id="inputForm" ref="uploadForm" enctype="multipart/form-data"> <form id="inputForm" ref="uploadForm" enctype="multipart/form-data">
<div class="form-group"> <div class="form-group">
@ -379,6 +380,10 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
isReading: {
type: Boolean,
default: false,
}
}, },
components: { components: {
'study-view': studyView, 'study-view': studyView,
@ -428,7 +433,8 @@ export default {
openSubjectVisitId: null, openSubjectVisitId: null,
openVisitTaskId: null, openVisitTaskId: null,
TrialModality: [], TrialModality: [],
IsReadingTaskViewInOrder: 2 IsReadingTaskViewInOrder: 2,
isDownloaded: false
} }
}, },
async mounted() { async mounted() {
@ -471,6 +477,7 @@ export default {
let res = await getSubjectImageUploadList(params) let res = await getSubjectImageUploadList(params)
this.loading = false this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.isDownloaded = res.OtherInfo.IsIRImageDownloaded
this.TrialModality = res.OtherInfo.TrialModality.split('|') this.TrialModality = res.OtherInfo.TrialModality.split('|')
this.IsReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder || res.OtherInfo.IsReadingTaskViewInOrder === 0 ? res.OtherInfo.IsReadingTaskViewInOrder : 2 this.IsReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder || res.OtherInfo.IsReadingTaskViewInOrder === 0 ? res.OtherInfo.IsReadingTaskViewInOrder : 2
this.StudyInstanceUidList = [] this.StudyInstanceUidList = []

View File

@ -6,12 +6,13 @@
<el-tab-pane :label="$t('uploadDicomAndNonedicom:label:dicom')" name="dicom"> <el-tab-pane :label="$t('uploadDicomAndNonedicom:label:dicom')" name="dicom">
<dicomFile v-if="activeName === 'dicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode" <dicomFile v-if="activeName === 'dicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode"
:Criterion="Criterion" :TaskId="VisitTaskId" :isUpload.sync="isUpload" :Criterion="Criterion" :TaskId="VisitTaskId" :isUpload.sync="isUpload"
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" :IsImageSegment="IsImageSegment" :forbid="forbid" /> :isReadingTaskViewInOrder="isReadingTaskViewInOrder" :IsImageSegment="IsImageSegment" :forbid="forbid"
:isReading="isReading" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('uploadDicomAndNonedicom:label:nonedicom')" name="nonedicom"> <el-tab-pane :label="$t('uploadDicomAndNonedicom:label:nonedicom')" name="nonedicom">
<nonedicomFile v-if="activeName === 'nonedicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode" <nonedicomFile v-if="activeName === 'nonedicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode"
:Criterion="Criterion" :VisitTaskId="VisitTaskId" :isUpload.sync="isUpload" :IsImageSegment="IsImageSegment" :Criterion="Criterion" :VisitTaskId="VisitTaskId" :isUpload.sync="isUpload" :IsImageSegment="IsImageSegment"
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" :forbid="forbid" /> :isReadingTaskViewInOrder="isReadingTaskViewInOrder" :forbid="forbid" :isReading="isReading" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-dialog> </el-dialog>
@ -58,6 +59,10 @@ export default {
IsImageSegment: { IsImageSegment: {
type: Boolean, type: Boolean,
default: false, default: false,
},
isReading: {
type: Boolean,
default: false,
} }
}, },
data() { data() {

View File

@ -111,7 +111,7 @@
:title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" /> :title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" />
<!--上传---> <!--上传--->
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')" v-if="!forbid" <el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')" v-if="!forbid"
@click.native.prevent="handleUpload(scope.row)" /> @click.native.prevent="handleUpload(scope.row)" :disabled="isReading && !isDownloaded" />
<!--删除---> <!--删除--->
<el-button :disabled="scope.row.UploadedFileCount <= 0 || <el-button :disabled="scope.row.UploadedFileCount <= 0 ||
scope.row.ReadingTaskState === 2 scope.row.ReadingTaskState === 2
@ -270,6 +270,10 @@ export default {
type: Number, type: Number,
default: 0, default: 0,
}, },
isReading: {
type: Boolean,
default: false,
}
}, },
data() { data() {
return { return {
@ -291,7 +295,8 @@ export default {
BodyPart: {}, BodyPart: {},
relationInfo: { relationInfo: {
ImageFormatList: [] ImageFormatList: []
} },
isDownloaded: false
} }
}, },
watch: { watch: {
@ -348,6 +353,7 @@ export default {
if (res.IsSuccess) { if (res.IsSuccess) {
this.list = res.Result this.list = res.Result
this.relationInfo = res.OtherInfo this.relationInfo = res.OtherInfo
this.isDownloaded = res.OtherInfo.IsIRImageDownloaded
this.faccept = [] this.faccept = []
this.relationInfo.ImageFormatList.forEach((item) => { this.relationInfo.ImageFormatList.forEach((item) => {
this.faccept.push(`.${item}`) this.faccept.push(`.${item}`)

View File

@ -218,9 +218,9 @@
<div class="text">{{ $t('trials:reading:button:screenShot') }}</div> <div class="text">{{ $t('trials:reading:button:screenShot') }}</div>
</div> </div>
</el-tooltip> </el-tooltip>
<el-popover v-model="keySeriesPopoverVisible" placement="bottom" trigger="click" popper-class="key-series-popper" <el-popover v-model="keySeriesPopoverVisible" placement="bottom" trigger="click"
@show="showKeySeriesPanel"> popper-class="key-series-popper" @show="showKeySeriesPanel">
<ul class="key-series-list"> <ul class="key-series-list">
<li v-if="keyStack && keyStack.taskBlindName" class="key-series-header"> <li v-if="keyStack && keyStack.taskBlindName" class="key-series-header">
<div class="key-series-header-top"> <div class="key-series-header-top">
@ -563,7 +563,7 @@
</el-button> </el-button>
</div> </div>
</div> </div>
</transition> </transition>
@ -596,7 +596,7 @@
</el-tab-pane> </el-tab-pane>
<!-- 其他 --> <!-- 其他 -->
<el-tab-pane :label="$t('trials:reading:tab:others')" name="3"> <el-tab-pane :label="$t('trials:reading:tab:others')" name="3">
<Others v-if="activeName === '3'" :imageToolType="1"/> <Others v-if="activeName === '3'" :imageToolType="1" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -708,10 +708,10 @@
</el-dialog> </el-dialog>
<upload-dicom-and-nonedicom v-if="uploadImageVisible" :subject-id="uploadSubjectId" <upload-dicom-and-nonedicom v-if="uploadImageVisible" :subject-id="uploadSubjectId"
:subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible" :subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible"
:visit-task-id="taskId" :is-reading-task-view-in-order="isReadingTaskViewInOrder" /> :visit-task-id="taskId" :is-reading-task-view-in-order="isReadingTaskViewInOrder" :isReading="true" />
<download-dicom-and-nonedicom v-if="downloadImageVisible" :subject-id="uploadSubjectId" <download-dicom-and-nonedicom v-if="downloadImageVisible" :subject-id="uploadSubjectId"
:subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId" :subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId"
:visible.sync="downloadImageVisible" /> :visible.sync="downloadImageVisible" :isReading="true" />
<!-- 签名框 --> <!-- 签名框 -->
<el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px" <el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px"
custom-class="base-dialog-wrapper"> custom-class="base-dialog-wrapper">
@ -1129,7 +1129,7 @@ export default {
DicomEvent.$on('imageLocation', async (measuredData) => { DicomEvent.$on('imageLocation', async (measuredData) => {
return new Promise(async resolve => { return new Promise(async resolve => {
if (!measuredData) return if (!measuredData) return
await this.imageLocation(measuredData) await this.imageLocation(measuredData)
resolve() resolve()
}) })
@ -1197,7 +1197,7 @@ export default {
} else if (this.CriterionType === 22) { } else if (this.CriterionType === 22) {
this.setToolActive('Probe', true, null, 'tableQuestion') this.setToolActive('Probe', true, null, 'tableQuestion')
} }
}) })
window.addEventListener('beforeunload', () => { window.addEventListener('beforeunload', () => {
if (this.petctWindow) { if (this.petctWindow) {
@ -1451,7 +1451,7 @@ export default {
// } catch (err) { // } catch (err) {
// console.error(err) // console.error(err)
// } // }
const series = this.getSeriesInfoByMark(visitTaskId, {lesionName: kf.MarkName}) const series = this.getSeriesInfoByMark(visitTaskId, { lesionName: kf.MarkName })
if (!series) return if (!series) return
this.loadImageStack(series) this.loadImageStack(series)
}, },
@ -2496,7 +2496,7 @@ export default {
this.readingTaskState = 2 this.readingTaskState = 2
await store.dispatch('reading/setVisitTaskReadingTaskState', { visitTaskId: this.visitTaskId, readingTaskState: 2 }) await store.dispatch('reading/setVisitTaskReadingTaskState', { visitTaskId: this.visitTaskId, readingTaskState: 2 })
await store.dispatch('reading/setCurrentReadingTaskState', 2) await store.dispatch('reading/setCurrentReadingTaskState', 2)
const res = await getAutoCutNextTask({imageToolType: 1}) const res = await getAutoCutNextTask({ imageToolType: 1 })
var isAutoTask = res.Result.AutoCutNextTask var isAutoTask = res.Result.AutoCutNextTask
if (isAutoTask) { if (isAutoTask) {
window.location.reload() window.location.reload()
@ -2609,7 +2609,7 @@ export default {
await this.$confirm(this.$t('trials:lugano:fusionDialog:message:checkSeries'), this.$t('trials:lugano:fusionDialog:warning'), { await this.$confirm(this.$t('trials:lugano:fusionDialog:message:checkSeries'), this.$t('trials:lugano:fusionDialog:warning'), {
showCancelButton: false, showCancelButton: false,
type: 'warning' type: 'warning'
}).catch(() => {}) }).catch(() => { })
return return
} }
if (this.ctSeriesInfo.instanceCount > 400) { if (this.ctSeriesInfo.instanceCount > 400) {

View File

@ -582,10 +582,11 @@
:renderingEngineId="renderingEngineId" :visitInfo="taskInfo" /> --> :renderingEngineId="renderingEngineId" :visitInfo="taskInfo" /> -->
<upload-dicom-and-nonedicom v-if="uploadImageVisible" :subject-id="uploadSubjectId" <upload-dicom-and-nonedicom v-if="uploadImageVisible" :subject-id="uploadSubjectId"
:subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible" :subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible"
:visit-task-id="taskId" :is-reading-task-view-in-order="isReadingTaskViewInOrder" /> :visit-task-id="taskId" :is-reading-task-view-in-order="isReadingTaskViewInOrder" :isReading="true" />
<download-dicom-and-nonedicom v-if="downloadImageVisible" :subject-id="uploadSubjectId" <download-dicom-and-nonedicom v-if="downloadImageVisible" :subject-id="uploadSubjectId"
:subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId" :subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId"
:visible.sync="downloadImageVisible" :is-reading-task-view-in-order="isReadingTaskViewInOrder" /> :visible.sync="downloadImageVisible" :is-reading-task-view-in-order="isReadingTaskViewInOrder"
:isReading="true" />
<readingChart ref="readingChart" /> <readingChart ref="readingChart" />
</div> </div>
</template> </template>