文件上传信息获取
continuous-integration/drone/push Build is passing Details

rj
wangxiaoshuang 2026-05-07 10:20:53 +08:00
parent 49c7482d76
commit e100d45bc1
2 changed files with 254 additions and 635 deletions

View File

@ -12,33 +12,16 @@
<!--受试者--> <!--受试者-->
<el-table-column prop="SubjectCode" :label="$t('upload:dicom:table:subjectCode')" sortable /> <el-table-column prop="SubjectCode" :label="$t('upload:dicom:table:subjectCode')" sortable />
<!--访视名称--> <!--访视名称-->
<el-table-column <el-table-column prop="VisitName" :label="$t('download:table:VisitName')" v-if="IsImageSegment" sortable />
prop="VisitName"
:label="$t('download:table:VisitName')"
v-if="IsImageSegment"
sortable
/>
<!--任务名称--> <!--任务名称-->
<el-table-column <el-table-column prop="TaskBlindName" :label="$t('upload:dicom:table:taskBlindName')" v-else sortable />
prop="TaskBlindName"
:label="$t('upload:dicom:table:taskBlindName')"
v-else
sortable
/>
<!--原始检查数--> <!--原始检查数-->
<el-table-column <el-table-column prop="OrginalStudyList" :label="$t('upload:dicom:table:orginalStudyListNum')">
prop="OrginalStudyList"
:label="$t('upload:dicom:table:orginalStudyListNum')"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button v-if="
v-if="
scope.row.OrginalStudyList && scope.row.OrginalStudyList &&
scope.row.OrginalStudyList.length >= 1 scope.row.OrginalStudyList.length >= 1
" " type="text" @click="handleOpenDialog(scope.row, 'OrginalStudyList')">
type="text"
@click="handleOpenDialog(scope.row, 'OrginalStudyList')"
>
<span>{{ scope.row.OrginalStudyList.length }}</span> <span>{{ scope.row.OrginalStudyList.length }}</span>
</el-button> </el-button>
<span v-else>0</span> <span v-else>0</span>
@ -47,13 +30,9 @@
<!--后处理检查数--> <!--后处理检查数-->
<el-table-column prop="UploadStudyList" :label="$t('upload:dicom:table:uploadStudyListNum')"> <el-table-column prop="UploadStudyList" :label="$t('upload:dicom:table:uploadStudyListNum')">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button v-if="
v-if="
scope.row.UploadStudyList && scope.row.UploadStudyList.length >= 1 scope.row.UploadStudyList && scope.row.UploadStudyList.length >= 1
" " type="text" @click="handleOpenDialog(scope.row, 'UploadStudyList', true)">
type="text"
@click="handleOpenDialog(scope.row, 'UploadStudyList', true)"
>
<span>{{ scope.row.UploadStudyList.length }}</span> <span>{{ scope.row.UploadStudyList.length }}</span>
</el-button> </el-button>
<span v-else>0</span> <span v-else>0</span>
@ -63,57 +42,27 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="btnBox"> <div class="btnBox">
<!--上传---> <!--上传--->
<form <form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data" v-if="!forbid">
id="inputForm"
:ref="`uploadForm_${scope.row.Id}`"
enctype="multipart/form-data"
v-if="!forbid"
>
<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 <el-button circle icon="el-icon-upload2" :disabled="btnLoading" :loading="btnLoading"
circle :title="$t('upload:dicom:button:upload')" />
icon="el-icon-upload2" <input :title="$t('upload:dicom:button:upload')" type="file" :name="`file_${scope.row.VisitTaskId}`"
:disabled="btnLoading" :ref="`pathClear_${scope.row.VisitTaskId}`" :disabled="btnLoading" webkitdirectory multiple @change="
:loading="btnLoading"
:title="$t('upload:dicom:button:upload')"
/>
<input
:title="$t('upload:dicom:button:upload')"
type="file"
:name="`file_${scope.row.VisitTaskId}`"
:ref="`pathClear_${scope.row.VisitTaskId}`"
:disabled="btnLoading"
webkitdirectory
multiple
@change="
($event) => beginScanFiles($event, scope.row.VisitTaskId) ($event) => beginScanFiles($event, scope.row.VisitTaskId)
" " />
/>
</div> </div>
</div> </div>
</form> </form>
<!--预览---> <!--预览--->
<el-button <el-button circle icon="el-icon-view" :disabled="!scope.row.UploadStudyList ||
circle
icon="el-icon-view"
:disabled="!scope.row.UploadStudyList ||
scope.row.UploadStudyList.length <= 0 scope.row.UploadStudyList.length <= 0
" " @click.stop="handleViewReadingImages(scope.row)" :title="$t('upload:dicom:button:preview')" />
@click.stop="handleViewReadingImages(scope.row)"
:title="$t('upload:dicom:button:preview')"
/>
<!--删除---> <!--删除--->
<el-button <el-button circle :disabled="!scope.row.UploadStudyList ||
circle
:disabled="!scope.row.UploadStudyList ||
scope.row.UploadStudyList.length <= 0 || scope.row.UploadStudyList.length <= 0 ||
scope.row.ReadingTaskState === 2 scope.row.ReadingTaskState === 2
" " icon="el-icon-delete" :title="$t('upload:dicom:button:delete')" @click.stop="remove(scope.row)" />
icon="el-icon-delete"
:title="$t('upload:dicom:button:delete')"
@click.stop="remove(scope.row)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -125,36 +74,18 @@
<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">
<div id="directoryInputWrapper" class="btn btn-link file-input"> <div id="directoryInputWrapper" class="btn btn-link file-input">
<el-button <el-button type="primary" :disabled="btnLoading" :loading="btnLoading" size="mini">{{
type="primary" $t('upload:dicom:button:batchUpload') }}</el-button>
:disabled="btnLoading" <input type="file" name="file" ref="pathClear" :disabled="btnLoading" webkitdirectory multiple title
:loading="btnLoading" @change="beginScanFiles($event)" />
size="mini"
>{{ $t('upload:dicom:button:batchUpload') }}</el-button>
<input
type="file"
name="file"
ref="pathClear"
:disabled="btnLoading"
webkitdirectory
multiple
title
@change="beginScanFiles($event)"
/>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<!--上传列表--> <!--上传列表-->
<el-table <el-table ref="dicomFilesTable" v-adaptive="{ bottomOffset: 80 }" height="100" :data="uploadQueues"
ref="dicomFilesTable" class="dicomFiles-table" @selection-change="handleSelectionChange">
v-adaptive="{ bottomOffset: 80 }"
height="100"
:data="uploadQueues"
class="dicomFiles-table"
@selection-change="handleSelectionChange"
>
<el-table-column type="index" width="40" /> <el-table-column type="index" width="40" />
<el-table-column min-width="200" show-overflow-tooltip> <el-table-column min-width="200" show-overflow-tooltip>
<template slot="header"> <template slot="header">
@ -180,9 +111,8 @@
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
<div style="display: inline-block; margin-right: 2px"> <div style="display: inline-block; margin-right: 2px">
<span <span v-if="scope.row.dicomInfo.modality.length > 0">{{ scope.row.dicomInfo.modality.join('')
v-if="scope.row.dicomInfo.modality.length > 0" }},</span>
>{{ scope.row.dicomInfo.modality.join('、') }},</span>
<span v-else style="color: #f44336">N/A,</span> <span v-else style="color: #f44336">N/A,</span>
</div> </div>
<div style="display: inline-block; margin-right: 2px"> <div style="display: inline-block; margin-right: 2px">
@ -258,11 +188,9 @@
}}, }},
</span> </span>
<span <span :class="[
:class="[
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed', scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
]" ]">
>
{{ {{
scope.row.dicomInfo.patientBirthDate scope.row.dicomInfo.patientBirthDate
? scope.row.dicomInfo.patientBirthDate ? scope.row.dicomInfo.patientBirthDate
@ -273,20 +201,14 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:failedFileCount')" min-width="150"
:label="$t('trials:uploadDicomList:table:failedFileCount')" show-overflow-tooltip>
min-width="150"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-progress <el-progress color="#409eff" :percentage="(
color="#409eff"
:percentage="(
(scope.row.dicomInfo.uploadFileSize * 100) / (scope.row.dicomInfo.uploadFileSize * 100) /
(scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1) (scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1)
).toFixed(2) * 1 ).toFixed(2) * 1
" " />
/>
<span> <span>
{{ $t('trials:uploadDicomList:table:uploadNow') {{ $t('trials:uploadDicomList:table:uploadNow')
}}{{ scope.row.dicomInfo.failedFileCount }}/{{ }}{{ scope.row.dicomInfo.failedFileCount }}/{{
@ -301,47 +223,29 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:status')" min-width="140" show-overflow-tooltip>
:label="$t('trials:uploadDicomList:table:status')"
min-width="140"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<span <span v-if="
v-if="
!scope.row.dicomInfo.failedFileCount && !scope.row.dicomInfo.failedFileCount &&
!scope.row.dicomInfo.isInit !scope.row.dicomInfo.isInit
" ">{{ $t('trials:uploadDicomList:table:status1') }}</span>
>{{ $t('trials:uploadDicomList:table:status1') }}</span> <span style="color: #409eff" v-else-if="
<span
style="color: #409eff"
v-else-if="
!scope.row.dicomInfo.failedFileCount && !scope.row.dicomInfo.failedFileCount &&
scope.row.dicomInfo.isInit && scope.row.dicomInfo.isInit &&
btnLoading btnLoading
" ">{{ $t('trials:uploadDicomList:table:status2') }}</span>
>{{ $t('trials:uploadDicomList:table:status2') }}</span> <span style="color: #409eff" v-else-if="
<span
style="color: #409eff"
v-else-if="
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && !scope.row.uploadState.record scope.row.dicomInfo.fileCount && !scope.row.uploadState.record
" ">{{ $t('trials:uploadDicomList:table:status2') }}</span>
>{{ $t('trials:uploadDicomList:table:status2') }}</span> <span style="color: #2cc368" v-else-if="
<span
style="color: #2cc368"
v-else-if="
scope.row.dicomInfo.failedFileCount === scope.row.dicomInfo.failedFileCount ===
scope.row.dicomInfo.fileCount scope.row.dicomInfo.fileCount
" ">{{ $t('trials:uploadDicomList:table:status3') }}</span>
>{{ $t('trials:uploadDicomList:table:status3') }}</span> <span style="color: #f66" v-else-if="
<span
style="color: #f66"
v-else-if="
scope.row.uploadState.record && scope.row.uploadState.record &&
scope.row.uploadState.record.fileCount === 0 scope.row.uploadState.record.fileCount === 0
" ">{{ $t('trials:uploadDicomList:table:status5') }}</span>
>{{ $t('trials:uploadDicomList:table:status5') }}</span>
<span style="color: #f66" v-else> <span style="color: #f66" v-else>
{{ {{
$t('trials:uploadDicomList:table:Failed') $t('trials:uploadDicomList:table:Failed')
@ -349,41 +253,28 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:record')" min-width="140" show-overflow-tooltip>
:label="$t('trials:uploadDicomList:table:record')"
min-width="140"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip placement="top" v-if="scope.row.uploadState.record"> <el-tooltip placement="top" v-if="scope.row.uploadState.record">
<div slot="content"> <div slot="content">
<div style="max-height: 500px; overflow-y: auto"> <div style="max-height: 500px; overflow-y: auto">
{{ $t('trials:uploadDicomList:table:Existed') }}: {{ $t('trials:uploadDicomList:table:Existed') }}:
<div v-if="scope.row.uploadState.record.Existed.length"> <div v-if="scope.row.uploadState.record.Existed.length">
<div <div v-for="item of scope.row.uploadState.record.Existed" :key="item"
v-for="item of scope.row.uploadState.record.Existed" style="font-size: 12px; color: #baa72a">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #baa72a"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
{{ $t('trials:uploadDicomList:table:Uploaded') }}: {{ $t('trials:uploadDicomList:table:Uploaded') }}:
<div v-if="scope.row.uploadState.record.Uploaded.length"> <div v-if="scope.row.uploadState.record.Uploaded.length">
<div <div v-for="item of scope.row.uploadState.record.Uploaded" :key="item"
v-for="item of scope.row.uploadState.record.Uploaded" style="font-size: 12px; color: #24b837">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #24b837"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
<br /> <br />
{{ $t('trials:uploadDicomList:table:Failed') }}: {{ $t('trials:uploadDicomList:table:Failed') }}:
<div v-if="scope.row.uploadState.record.Failed.length"> <div v-if="scope.row.uploadState.record.Failed.length">
<div <div v-for="item of scope.row.uploadState.record.Failed" :key="item"
v-for="item of scope.row.uploadState.record.Failed" style="font-size: 12px; color: #f66">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #f66"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
</div> </div>
@ -411,18 +302,9 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<study-view <study-view v-if="model_cfg.visible" :model_cfg="model_cfg" :IsDicom="true" :bodyPart="bodyPart"
v-if="model_cfg.visible" :subjectVisitId="openSubjectVisitId" :modelList="modelList" :isUpload="openIsUpload"
:model_cfg="model_cfg" :visitTaskId="openVisitTaskId" :TrialModality="TrialModality" @getList="getList" />
:IsDicom="true"
:bodyPart="bodyPart"
:subjectVisitId="openSubjectVisitId"
:modelList="modelList"
:isUpload="openIsUpload"
:visitTaskId="openVisitTaskId"
:TrialModality="TrialModality"
@getList="getList"
/>
</div> </div>
</template> </template>
<script> <script>
@ -666,8 +548,7 @@ export default {
this.openIsUpload = isUpload this.openIsUpload = isUpload
this.openSubjectVisitId = item.SubjectVisitId || item.SourceSubjectVisitId this.openSubjectVisitId = item.SubjectVisitId || item.SourceSubjectVisitId
this.openVisitTaskId = item.VisitTaskId this.openVisitTaskId = item.VisitTaskId
this.model_cfg.title = `${item.SubjectCode || ''} > ${ this.model_cfg.title = `${item.SubjectCode || ''} > ${this.IsImageSegment ? item.VisitName : item.TaskBlindName
this.IsImageSegment ? item.VisitName : item.TaskBlindName
}` }`
this.modelList = item[list] this.modelList = item[list]
this.model_cfg.visible = true this.model_cfg.visible = true
@ -801,7 +682,7 @@ export default {
var validFilesCount = 0 var validFilesCount = 0
scope.uploadQueues = [] scope.uploadQueues = []
for (var i = 0; i < checkFiles.length; ++i) { for (var i = 0; i < checkFiles.length; ++i) {
;(function (index) { ; (function (index) {
p = p.then(function () { p = p.then(function () {
if ( if (
checkFiles[index].name.toUpperCase().indexOf('DICOMDIR') === -1 checkFiles[index].name.toUpperCase().indexOf('DICOMDIR') === -1
@ -1324,8 +1205,8 @@ export default {
institutionName: dicomInfo.institutionName, institutionName: dicomInfo.institutionName,
patientId: dicomInfo.patientId, patientId: dicomInfo.patientId,
patientName: '', patientName: '',
patientAge: '', patientAge: dicomInfo.patientAge,
patientSex: dicomInfo.patientSex, patientSex: config.DicomStoreInfo.SubjectSex || dicomInfo.patientSex,
accessionNumber: dicomInfo.accNumber, accessionNumber: dicomInfo.accNumber,
patientBirthDate: '', patientBirthDate: '',
acquisitionTime: dicomInfo.acquisitionTime, acquisitionTime: dicomInfo.acquisitionTime,
@ -1409,10 +1290,8 @@ export default {
dicomInfo.failedFileCount++ dicomInfo.failedFileCount++
Record.FileCount++ Record.FileCount++
} else { } else {
let path = `/${params.trialId}/Image/${ let path = `/${params.trialId}/Image/${params.subjectId
params.subjectId }/${params.subjectVisitId}/${dicomInfo.visitTaskId
}/${params.subjectVisitId}/${
dicomInfo.visitTaskId
}/${scope.getGuid( }/${scope.getGuid(
dicomInfo.studyUid + dicomInfo.studyUid +
v.seriesUid + v.seriesUid +
@ -1420,10 +1299,8 @@ export default {
params.trialId params.trialId
)}` )}`
if (scope.IsImageSegment) { if (scope.IsImageSegment) {
path = `/${params.trialId}/Image/${ path = `/${params.trialId}/Image/${params.subjectId
params.subjectId }/${params.subjectVisitId}/AnnotationImage/${dicomInfo.visitTaskId
}/${params.subjectVisitId}/AnnotationImage/${
dicomInfo.visitTaskId
}/${scope.getGuid( }/${scope.getGuid(
dicomInfo.studyUid + dicomInfo.studyUid +
v.seriesUid + v.seriesUid +
@ -1759,10 +1636,8 @@ export default {
var token = getToken() var token = getToken()
let trialId = this.$route.query.trialId let trialId = this.$route.query.trialId
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
path: `/showvisitdicoms?page=upload&trialId=${trialId}&visitTaskId=${ path: `/showvisitdicoms?page=upload&trialId=${trialId}&visitTaskId=${this.IsImageSegment ? 'undefined' : row.VisitTaskId
this.IsImageSegment ? 'undefined' : row.VisitTaskId }&subjectVisitId=${row.SourceSubjectVisitId
}&subjectVisitId=${
row.SourceSubjectVisitId
}&isReading=1&TokenKey=${token}`, }&isReading=1&TokenKey=${token}`,
}) })
this.open = window.open(routeData.href, '_blank') this.open = window.open(routeData.href, '_blank')

View File

@ -7,44 +7,21 @@
<div style="margin: 10px 0">{{ $t('trials:uploadedDicoms:title:dicomUploaded') }}</div> <div style="margin: 10px 0">{{ $t('trials:uploadedDicoms:title:dicomUploaded') }}</div>
<div class="functions" style="text-align: right"> <div class="functions" style="text-align: right">
<!-- // --> <!-- // -->
<el-button <el-button :disabled="deleteArr.length === 0" type="primary" size="small" icon="el-icon-delete"
:disabled="deleteArr.length === 0" @click="handleBatchDelete">{{ $t('trials:uploadedDicoms:action:delete') }}</el-button>
type="primary"
size="small"
icon="el-icon-delete"
@click="handleBatchDelete"
>{{ $t('trials:uploadedDicoms:action:delete') }}</el-button>
<!-- 预览 --> <!-- 预览 -->
<el-button <el-button type="primary" icon="el-icon-view" size="small" :disabled="studyList.length === 0"
type="primary" @click="handlePreviewAllFiles">{{ $t('trials:uploadedDicoms:action:preview') }}</el-button>
icon="el-icon-view"
size="small"
:disabled="studyList.length === 0"
@click="handlePreviewAllFiles"
>{{ $t('trials:uploadedDicoms:action:preview') }}</el-button>
</div> </div>
<el-table <el-table v-loading="studyLoading" :data="studyList" style="width: 100%" :row-class-name="tableRowClassName"
v-loading="studyLoading" max-height="250" @selection-change="handleUploadedSelectionChange"
:data="studyList" :default-sort="{ prop: 'UploadedTime', order: 'ascending' }">
style="width: 100%"
:row-class-name="tableRowClassName"
max-height="250"
@selection-change="handleUploadedSelectionChange"
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }"
>
<el-table-column type="selection" width="55" :selectable="handleSelectable2" /> <el-table-column type="selection" width="55" :selectable="handleSelectable2" />
<!-- 检查编号 --> <!-- 检查编号 -->
<el-table-column <el-table-column prop="StudyCode" :label="$t('trials:uploadedDicoms:table:studyId')" min-width="80"
prop="StudyCode" show-overflow-tooltip sortable>
:label="$t('trials:uploadedDicoms:table:studyId')"
min-width="80"
show-overflow-tooltip
sortable
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip <el-tooltip placement="top" v-if="
placement="top"
v-if="
(() => { (() => {
var r = false var r = false
if (scope.row.IsHaveUploadFailed) { if (scope.row.IsHaveUploadFailed) {
@ -60,14 +37,10 @@
} }
return r return r
})() })()
" ">
>
<div slot="content">{{ $t('trials:uploadDicomList:table:status4') }}</div> <div slot="content">{{ $t('trials:uploadDicomList:table:status4') }}</div>
<span <span class="el-icon-warning" style="color: #cbb024; cursor: pointer"
class="el-icon-warning" v-if="scope.row.IsHaveUploadFailed"></span>
style="color: #cbb024; cursor: pointer"
v-if="scope.row.IsHaveUploadFailed"
></span>
</el-tooltip> </el-tooltip>
<el-tooltip placement="top" v-if="!scope.row.IsCompleteClinicalData"> <el-tooltip placement="top" v-if="!scope.row.IsCompleteClinicalData">
<div slot="content">{{ $t('trials:crc-upload:confirm:message') }}</div> <div slot="content">{{ $t('trials:crc-upload:confirm:message') }}</div>
@ -77,52 +50,27 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 检查名称 --> <!-- 检查名称 -->
<el-table-column <el-table-column v-if="relationInfo.IsShowStudyName" prop="StudyName" :label="$t('trials:audit:table:StudyName')"
v-if="relationInfo.IsShowStudyName" sortable />
prop="StudyName"
:label="$t('trials:audit:table:StudyName')"
sortable
/>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-table-column prop="ModalityForEdit" :label="$t('trials:audit:table:modality')" sortable /> <el-table-column prop="ModalityForEdit" :label="$t('trials:audit:table:modality')" sortable />
<!-- 检查设备 --> <!-- 检查设备 -->
<el-table-column prop="Modalities" :label="$t('trials:audit:table:modality1')" sortable /> <el-table-column prop="Modalities" :label="$t('trials:audit:table:modality1')" sortable />
<!-- 检查部位 --> <!-- 检查部位 -->
<el-table-column <el-table-column prop="BodyPartForEdit" :label="$t('trials:uploadedDicoms:table:bodyPart')" min-width="100"
prop="BodyPartForEdit" show-overflow-tooltip sortable>
:label="$t('trials:uploadedDicoms:table:bodyPart')" <template slot-scope="scope">{{ getBodyPart(scope.row.BodyPartForEdit, scope.row.BodyPartForEditOther)
min-width="100" }}</template>
show-overflow-tooltip
sortable
>
<template
slot-scope="scope"
>{{ getBodyPart(scope.row.BodyPartForEdit, scope.row.BodyPartForEditOther) }}</template>
</el-table-column> </el-table-column>
<!-- 序列数量 --> <!-- 序列数量 -->
<el-table-column <el-table-column prop="SeriesCount" :label="$t('trials:uploadedDicoms:table:seriesCount')" min-width="100"
prop="SeriesCount" show-overflow-tooltip sortable />
:label="$t('trials:uploadedDicoms:table:seriesCount')"
min-width="100"
show-overflow-tooltip
sortable
/>
<!-- 图像数量 --> <!-- 图像数量 -->
<el-table-column <el-table-column prop="InstanceCount" :label="$t('trials:uploadedDicoms:table:instanceCount')" min-width="100"
prop="InstanceCount" show-overflow-tooltip sortable />
:label="$t('trials:uploadedDicoms:table:instanceCount')"
min-width="100"
show-overflow-tooltip
sortable
/>
<!-- 检查日期 --> <!-- 检查日期 -->
<el-table-column <el-table-column prop="StudyTime" :label="$t('trials:uploadedDicoms:table:studyDate')" min-width="120"
prop="StudyTime" show-overflow-tooltip sortable>
:label="$t('trials:uploadedDicoms:table:studyDate')"
min-width="120"
show-overflow-tooltip
sortable
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
scope.row.StudyTime scope.row.StudyTime
@ -132,60 +80,31 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 更新时间 --> <!-- 更新时间 -->
<el-table-column <el-table-column prop="UpdateTime" :label="$t('trials:uploadedDicoms:table:UpdateTime')" min-width="120"
prop="UpdateTime" show-overflow-tooltip sortable />
:label="$t('trials:uploadedDicoms:table:UpdateTime')"
min-width="120"
show-overflow-tooltip
sortable
/>
<!-- 上传时间 --> <!-- 上传时间 -->
<el-table-column <el-table-column prop="UploadedTime" :label="$t('trials:uploadedDicoms:table:uploadedTime')" min-width="120"
prop="UploadedTime" show-overflow-tooltip sortable />
:label="$t('trials:uploadedDicoms:table:uploadedTime')"
min-width="120"
show-overflow-tooltip
sortable
/>
<el-table-column :label="$t('common:action:action')" min-width="260" fixed="right"> <el-table-column :label="$t('common:action:action')" min-width="260" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 预览 --> <!-- 预览 -->
<el-button <el-button icon="el-icon-view" :disabled="scope.row.SeriesCount === 0"
icon="el-icon-view" :title="$t('trials:uploadedDicoms:action:preview')" circle @click="handleViewStudy(scope.row)" />
:disabled="scope.row.SeriesCount === 0"
:title="$t('trials:uploadedDicoms:action:preview')"
circle
@click="handleViewStudy(scope.row)"
/>
<!-- 上传临床数据 --> <!-- 上传临床数据 -->
<el-button <el-button icon="el-icon-upload2" v-if="
icon="el-icon-upload2"
v-if="
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) && ['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
relationInfo.IsHaveStudyClinicalData relationInfo.IsHaveStudyClinicalData
" " :disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
:disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))" :title="$t('trials:workbench:title:UploadClinicalData')" circle @click="handleUploadPetData(scope.row)" />
:title="$t('trials:workbench:title:UploadClinicalData')"
circle
@click="handleUploadPetData(scope.row)"
/>
<!-- 编辑 --> <!-- 编辑 -->
<el-button <el-button icon="el-icon-edit-outline" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
icon="el-icon-edit-outline"
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
:title="$t('common:button:edit')" :title="$t('common:button:edit')"
:disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))" :disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
circle circle @click="handleEditStudy(scope.row)" />
@click="handleEditStudy(scope.row)"
/>
<!-- 删除 :disabled="scope.row.IsDeleted"--> <!-- 删除 :disabled="scope.row.IsDeleted"-->
<el-button <el-button icon="el-icon-delete" :title="$t('trials:uploadedDicoms:action:delete')" circle
icon="el-icon-delete"
:title="$t('trials:uploadedDicoms:action:delete')"
circle
:disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))" :disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
@click="handleDeleteStudy(scope.row)" @click="handleDeleteStudy(scope.row)" />
/>
<!-- <el-button--> <!-- <el-button-->
<!-- icon="el-icon-toilet-paper"--> <!-- icon="el-icon-toilet-paper"-->
<!-- circle--> <!-- circle-->
@ -211,28 +130,15 @@
$t('trials:uploadedDicomsicom:button:selectFolder') $t('trials:uploadedDicomsicom:button:selectFolder')
}} }}
</el-button> </el-button>
<input <input type="file" name="file" ref="pathClear" :disabled="btnLoading" webkitdirectory multiple title
type="file" @change="beginScanFiles($event)" />
name="file"
ref="pathClear"
:disabled="btnLoading"
webkitdirectory
multiple
title
@change="beginScanFiles($event)"
/>
</div> </div>
</div> </div>
</form> </form>
<div class="drag" ref="drag" @dragover="handleDragover" @drop="handleDrop"> <div class="drag" ref="drag" @dragover="handleDragover" @drop="handleDrop">
<!-- 文件列表 --> <!-- 文件列表 -->
<el-table <el-table ref="dicomFilesTable" :data="uploadQueues" :row-key="(row) => row.studyIndex"
ref="dicomFilesTable" class="dicomFiles-table" @selection-change="handleSelectionChange">
:data="uploadQueues"
:row-key="(row) => row.studyIndex"
class="dicomFiles-table"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" :selectable="handleSelectable" /> <el-table-column type="selection" width="55" :selectable="handleSelectable" />
<el-table-column type="index" width="40" /> <el-table-column type="index" width="40" />
<el-table-column min-width="200" show-overflow-tooltip> <el-table-column min-width="200" show-overflow-tooltip>
@ -259,21 +165,16 @@
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
<div style="display: inline-block; margin-right: 2px"> <div style="display: inline-block; margin-right: 2px">
<span <span v-if="scope.row.dicomInfo.modality.length > 0">{{ scope.row.dicomInfo.modality.join('')
v-if="scope.row.dicomInfo.modality.length > 0" }},</span>
>{{ scope.row.dicomInfo.modality.join('、') }},</span>
<span v-else style="color: #f44336">N/A,</span> <span v-else style="color: #f44336">N/A,</span>
</div> </div>
<div style="display: inline-block; margin-right: 2px"> <div style="display: inline-block; margin-right: 2px">
<span <span v-if="scope.row.seriesList.length">{{ scope.row.seriesList.length }} Series,</span>
v-if="scope.row.seriesList.length"
>{{ scope.row.seriesList.length }} Series,</span>
<span v-else style="color: #f44336">N/A,</span> <span v-else style="color: #f44336">N/A,</span>
</div> </div>
<div style="display: inline-block"> <div style="display: inline-block">
<span <span v-if="scope.row.fileList.length">{{ scope.row.fileList.length }} Instances</span>
v-if="scope.row.fileList.length"
>{{ scope.row.fileList.length }} Instances</span>
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
</div> </div>
@ -284,9 +185,7 @@
<span v-else style="color: #f44336">N/A,</span> <span v-else style="color: #f44336">N/A,</span>
</div> </div>
<div style="display: inline-block"> <div style="display: inline-block">
<span <span v-if="scope.row.dicomInfo.description">{{ scope.row.dicomInfo.description }}</span>
v-if="scope.row.dicomInfo.description"
>{{ scope.row.dicomInfo.description }}</span>
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
</div> </div>
@ -322,11 +221,9 @@
<span v-else style="color: #f44336">N/A</span> <span v-else style="color: #f44336">N/A</span>
</div> </div>
<div> <div>
<span <span :class="[
:class="[
scope.row.dicomInfo.patientName ? '' : 'colorOfRed', scope.row.dicomInfo.patientName ? '' : 'colorOfRed',
]" ]">
>
{{ {{
scope.row.dicomInfo.patientName scope.row.dicomInfo.patientName
? scope.row.dicomInfo.patientName ? scope.row.dicomInfo.patientName
@ -335,11 +232,9 @@
</span> </span>
</div> </div>
<div> <div>
<span <span :class="[
:class="[
scope.row.dicomInfo.patientSex ? '' : 'colorOfRed', scope.row.dicomInfo.patientSex ? '' : 'colorOfRed',
]" ]">
>
{{ {{
scope.row.dicomInfo.patientSex scope.row.dicomInfo.patientSex
? scope.row.dicomInfo.patientSex ? scope.row.dicomInfo.patientSex
@ -347,11 +242,9 @@
}}, }},
</span> </span>
<span <span :class="[
:class="[
scope.row.dicomInfo.patientAge ? '' : 'colorOfRed', scope.row.dicomInfo.patientAge ? '' : 'colorOfRed',
]" ]">
>
{{ {{
scope.row.dicomInfo.patientAge scope.row.dicomInfo.patientAge
? scope.row.dicomInfo.patientAge ? scope.row.dicomInfo.patientAge
@ -359,11 +252,9 @@
}}, }},
</span> </span>
<span <span :class="[
:class="[
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed', scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
]" ]">
>
{{ {{
scope.row.dicomInfo.patientBirthDate scope.row.dicomInfo.patientBirthDate
? scope.row.dicomInfo.patientBirthDate ? scope.row.dicomInfo.patientBirthDate
@ -374,25 +265,19 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:failedFileCount')" min-width="150"
:label="$t('trials:uploadDicomList:table:failedFileCount')" show-overflow-tooltip>
min-width="150"
show-overflow-tooltip
>
<!--:percentage=" <!--:percentage="
(scope.row.dicomInfo.failedFileCount * 100) / (scope.row.dicomInfo.failedFileCount * 100) /
scope.row.dicomInfo.fileCount scope.row.dicomInfo.fileCount
" "
:show-text="false"---> :show-text="false"--->
<template slot-scope="scope"> <template slot-scope="scope">
<el-progress <el-progress color="#409eff" :percentage="(
color="#409eff"
:percentage="(
(scope.row.dicomInfo.uploadFileSize * 100) / (scope.row.dicomInfo.uploadFileSize * 100) /
(scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1) (scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1)
).toFixed(2) * 1 ).toFixed(2) * 1
" " />
/>
<span> <span>
{{ $t('trials:uploadDicomList:table:uploadNow') {{ $t('trials:uploadDicomList:table:uploadNow')
}}{{ scope.row.dicomInfo.failedFileCount }}/{{ }}{{ scope.row.dicomInfo.failedFileCount }}/{{
@ -407,48 +292,30 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:status')" min-width="140" show-overflow-tooltip>
:label="$t('trials:uploadDicomList:table:status')"
min-width="140"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<span <span v-if="
v-if="
!scope.row.dicomInfo.failedFileCount && !scope.row.dicomInfo.failedFileCount &&
!scope.row.dicomInfo.isInit !scope.row.dicomInfo.isInit
" ">{{ $t('trials:uploadDicomList:table:status1') }}</span>
>{{ $t('trials:uploadDicomList:table:status1') }}</span> <span style="color: #409eff" v-else-if="
<span
style="color: #409eff"
v-else-if="
!scope.row.dicomInfo.failedFileCount && !scope.row.dicomInfo.failedFileCount &&
scope.row.dicomInfo.isInit && scope.row.dicomInfo.isInit &&
btnLoading btnLoading
" ">{{ $t('trials:uploadDicomList:table:status2') }}</span>
>{{ $t('trials:uploadDicomList:table:status2') }}</span> <span style="color: #409eff" v-else-if="
<span
style="color: #409eff"
v-else-if="
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && scope.row.dicomInfo.fileCount &&
!scope.row.uploadState.record !scope.row.uploadState.record
" ">{{ $t('trials:uploadDicomList:table:status2') }}</span>
>{{ $t('trials:uploadDicomList:table:status2') }}</span> <span style="color: #2cc368" v-else-if="
<span
style="color: #2cc368"
v-else-if="
scope.row.dicomInfo.failedFileCount === scope.row.dicomInfo.failedFileCount ===
scope.row.dicomInfo.fileCount scope.row.dicomInfo.fileCount
" ">{{ $t('trials:uploadDicomList:table:status3') }}</span>
>{{ $t('trials:uploadDicomList:table:status3') }}</span> <span style="color: #f66" v-else-if="
<span
style="color: #f66"
v-else-if="
scope.row.uploadState.record && scope.row.uploadState.record &&
scope.row.uploadState.record.fileCount === 0 scope.row.uploadState.record.fileCount === 0
" ">{{ $t('trials:uploadDicomList:table:status5') }}</span>
>{{ $t('trials:uploadDicomList:table:status5') }}</span>
<span style="color: #f66" v-else> <span style="color: #f66" v-else>
{{ {{
$t('trials:uploadDicomList:table:Failed') $t('trials:uploadDicomList:table:Failed')
@ -456,41 +323,28 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadDicomList:table:record')" min-width="140" show-overflow-tooltip>
:label="$t('trials:uploadDicomList:table:record')"
min-width="140"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip placement="top" v-if="scope.row.uploadState.record"> <el-tooltip placement="top" v-if="scope.row.uploadState.record">
<div slot="content"> <div slot="content">
<div style="max-height: 500px; overflow-y: auto"> <div style="max-height: 500px; overflow-y: auto">
{{ $t('trials:uploadDicomList:table:Existed') }}: {{ $t('trials:uploadDicomList:table:Existed') }}:
<div v-if="scope.row.uploadState.record.Existed.length"> <div v-if="scope.row.uploadState.record.Existed.length">
<div <div v-for="item of scope.row.uploadState.record.Existed" :key="item"
v-for="item of scope.row.uploadState.record.Existed" style="font-size: 12px; color: #baa72a">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #baa72a"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
{{ $t('trials:uploadDicomList:table:Uploaded') }}: {{ $t('trials:uploadDicomList:table:Uploaded') }}:
<div v-if="scope.row.uploadState.record.Uploaded.length"> <div v-if="scope.row.uploadState.record.Uploaded.length">
<div <div v-for="item of scope.row.uploadState.record.Uploaded" :key="item"
v-for="item of scope.row.uploadState.record.Uploaded" style="font-size: 12px; color: #24b837">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #24b837"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
<br /> <br />
{{ $t('trials:uploadDicomList:table:Failed') }}: {{ $t('trials:uploadDicomList:table:Failed') }}:
<div v-if="scope.row.uploadState.record.Failed.length"> <div v-if="scope.row.uploadState.record.Failed.length">
<div <div v-for="item of scope.row.uploadState.record.Failed" :key="item"
v-for="item of scope.row.uploadState.record.Failed" style="font-size: 12px; color: #f66">{{ item }}</div>
:key="item"
style="font-size: 12px; color: #f66"
>{{ item }}</div>
</div> </div>
<div v-else>&nbsp;</div> <div v-else>&nbsp;</div>
</div> </div>
@ -521,33 +375,21 @@
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 预览 --> <!-- 预览 -->
<!-- :disabled="scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.fileCount && scope.row.dicomInfo.failedFileCount !== 0"--> <!-- :disabled="scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.fileCount && scope.row.dicomInfo.failedFileCount !== 0"-->
<el-button <el-button icon="el-icon-view" circle :disabled="(scope.row.uploadState.stateCode !== '' &&
icon="el-icon-view"
circle
:disabled="(scope.row.uploadState.stateCode !== '' &&
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && scope.row.dicomInfo.fileCount &&
!scope.row.uploadState.record) || !scope.row.uploadState.record) ||
btnLoading btnLoading
" " :title="$t('trials:uploadedDicoms:action:preview')" size="small"
:title="$t('trials:uploadedDicoms:action:preview')" @click="handlePreview(scope.row.dicomInfo.studyUid)" />
size="small"
@click="handlePreview(scope.row.dicomInfo.studyUid)"
/>
<!-- 移除 --> <!-- 移除 -->
<el-button <el-button icon="el-icon-delete" circle :title="$t('trials:uploadedDicoms:action:delete')" size="small"
icon="el-icon-delete"
circle
:title="$t('trials:uploadedDicoms:action:delete')"
size="small"
:disabled="(scope.row.uploadState.stateCode !== '' && :disabled="(scope.row.uploadState.stateCode !== '' &&
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && scope.row.dicomInfo.fileCount &&
!scope.row.uploadState.record) || !scope.row.uploadState.record) ||
btnLoading btnLoading
" " @click="handleDelete(scope.$index, scope.row)" />
@click="handleDelete(scope.$index, scope.row)"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -564,76 +406,37 @@
}} }}
</span> </span>
<!-- 上传 --> <!-- 上传 -->
<el-button <el-button size="small" type="primary" :disabled="selectArr.length == 0 || !isScan" :loading="btnLoading"
size="small" @click="beginUploadQueues">{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
type="primary"
:disabled="selectArr.length == 0 || !isScan"
:loading="btnLoading"
@click="beginUploadQueues"
>{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
</div> </div>
</el-tab-pane> </el-tab-pane>
<!-- pacs上传 --> <!-- pacs上传 -->
<el-tab-pane <el-tab-pane :label="$t('trials:uploadNonDicoms:tab:uploadPacs')" name="pacs" :disabled="btnLoading"
:label="$t('trials:uploadNonDicoms:tab:uploadPacs')" v-if="relationInfo.IsPacsConnectConfiged">
name="pacs" <uploadDicomPacs v-if="uploadActiveName === 'pacs'" ref="dicomPacs" :subjectVisitId="subjectVisitId"
:disabled="btnLoading" :relationInfo="relationInfo" :subjectId="subjectId" @getList="getParentList" @petDataTip="petDataTip" />
v-if="relationInfo.IsPacsConnectConfiged"
>
<uploadDicomPacs
v-if="uploadActiveName === 'pacs'"
ref="dicomPacs"
:subjectVisitId="subjectVisitId"
:relationInfo="relationInfo"
:subjectId="subjectId"
@getList="getParentList"
@petDataTip="petDataTip"
/>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<!-- 预览影像模态框 --> <!-- 预览影像模态框 -->
<el-dialog <el-dialog v-if="previewVisible" :fullscreen="true" :show-close="true" :visible.sync="previewVisible"
v-if="previewVisible" :title="$t('trials:uploadDicoms:title:previewLocalImage')" append-to-body>
:fullscreen="true"
:show-close="true"
:visible.sync="previewVisible"
:title="$t('trials:uploadDicoms:title:previewLocalImage')"
append-to-body
>
<DicomPreview :uid="uid" :studyList="uploadQueues" /> <DicomPreview :uid="uid" :studyList="uploadQueues" />
</el-dialog> </el-dialog>
<!--pet-ct临床数据上传--> <!--pet-ct临床数据上传-->
<el-dialog v-if="petVisible" :show-close="true" :visible.sync="petVisible" append-to-body> <el-dialog v-if="petVisible" :show-close="true" :visible.sync="petVisible" append-to-body>
<uploadPetClinicalData <uploadPetClinicalData :subject-visit-id="data.Id" :data="data" :studyData="studyData" :allow-add-or-edit="true"
:subject-visit-id="data.Id" @getStudyInfo="getStudyInfo" />
:data="data"
:studyData="studyData"
:allow-add-or-edit="true"
@getStudyInfo="getStudyInfo"
/>
</el-dialog> </el-dialog>
<!-- 校验警告信息模态框 --> <!-- 校验警告信息模态框 -->
<el-dialog <el-dialog v-if="warning_cfg.visible" :visible.sync="warning_cfg.visible" width="500px"
v-if="warning_cfg.visible" :close-on-click-modal="false" append-to-body title="Warning" custom-class="warning-dialog">
:visible.sync="warning_cfg.visible"
width="500px"
:close-on-click-modal="false"
append-to-body
title="Warning"
custom-class="warning-dialog"
>
<div style="border: 1px solid #e0e0e0; padding: 10px"> <div style="border: 1px solid #e0e0e0; padding: 10px">
<!-- Information from DICOM headers not consistent with that of this subject --> <!-- Information from DICOM headers not consistent with that of this subject -->
<div <div style="color: red; font-size: 14px; margin-bottom: 10px">{{
style="color: red; font-size: 14px; margin-bottom: 10px" $t('trials:uploadDicomList:message:informationConsistent') }}:</div>
>{{ $t('trials:uploadDicomList:message:informationConsistent') }}:</div>
<div v-for="(item, i) in warningArr" :key="item.index"> <div v-for="(item, i) in warningArr" :key="item.index">
<div>{{ `(${i + 1}). ACC: ${item.accNumber}` }}</div> <div>{{ `(${i + 1}). ACC: ${item.accNumber}` }}</div>
<div <div v-for="(warning, index) in item.warnings" :key="index" style="margin: 10px 0px; font-size: 13px">
v-for="(warning, index) in item.warnings"
:key="index"
style="margin: 10px 0px; font-size: 13px"
>
<ul> <ul>
<li>{{ warning }}</li> <li>{{ warning }}</li>
</ul> </ul>
@ -641,61 +444,39 @@
</div> </div>
</div> </div>
<div slot="footer" class="base-modal-footer"> <div slot="footer" class="base-modal-footer">
<el-button <el-button size="small" type="primary" @click="handleCancelWarnVisible">{{ $t('common:button:cancel')
size="small" }}</el-button>
type="primary" <el-button size="small" type="primary" @click="handleContinueUpload">{{
@click="handleCancelWarnVisible" $t('trials:uploadDicomList:button:upload')
>{{ $t('common:button:cancel') }}</el-button> }}</el-button>
<el-button
size="small"
type="primary"
@click="handleContinueUpload"
>{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog <el-dialog v-if="editStudyInfoVisible" :title="$t('trials:audit:action:edit')" :visible.sync="editStudyInfoVisible"
v-if="editStudyInfoVisible" :close-on-click-modal="false" append-to-body custom-class="base-dialog-wrapper" width="600px">
:title="$t('trials:audit:action:edit')" <div style="
:visible.sync="editStudyInfoVisible"
:close-on-click-modal="false"
append-to-body
custom-class="base-dialog-wrapper"
width="600px"
>
<div
style="
padding: 10px; padding: 10px;
border: 1px solid #e0e0e0; border: 1px solid #e0e0e0;
max-height: 650px; max-height: 650px;
overflow-y: auto; overflow-y: auto;
" ">
>
<el-form ref="studyForm" :model="studyForm" label-width="100px"> <el-form ref="studyForm" :model="studyForm" label-width="100px">
<!-- 检查编号 --> <!-- 检查编号 -->
<el-form-item :label="$t('trials:audit:table:studyId')"> <el-form-item :label="$t('trials:audit:table:studyId')">
<el-input v-model="studyForm.StudyCode" disabled /> <el-input v-model="studyForm.StudyCode" disabled />
</el-form-item> </el-form-item>
<!-- 检查名称 --> <!-- 检查名称 -->
<el-form-item <el-form-item v-if="relationInfo.IsShowStudyName" :label="$t('trials:audit:table:StudyName')" prop="StudyName"
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
prop="StudyName"
:rules="[ :rules="[
{ {
required: true, required: true,
message: $t('common:ruleMessage:specify'), message: $t('common:ruleMessage:specify'),
trigger: 'blur', trigger: 'blur',
}, },
]" ]">
>
<el-radio-group v-model="studyForm.StudyName"> <el-radio-group v-model="studyForm.StudyName">
<template v-for="m in relationInfo.StudyNameList"> <template v-for="m in relationInfo.StudyNameList">
<el-radio <el-radio v-if="m.IsChoose" :key="m.Name" :label="isEN ? m.EnName : m.Name"
v-if="m.IsChoose" style="margin-bottom: 15px" />
:key="m.Name"
:label="isEN ? m.EnName : m.Name"
style="margin-bottom: 15px"
/>
</template> </template>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@ -704,51 +485,33 @@
<el-input v-model="studyForm.Modalities" disabled /> <el-input v-model="studyForm.Modalities" disabled />
</el-form-item> </el-form-item>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-form-item <el-form-item v-else :label="$t('trials:audit:table:modality')" prop="Modalities" :rules="[
v-else
:label="$t('trials:audit:table:modality')"
prop="Modalities"
:rules="[
{ {
required: true, required: true,
message: $t('common:ruleMessage:specify'), message: $t('common:ruleMessage:specify'),
trigger: 'blur', trigger: 'blur',
}, },
]" ]">
>
<el-radio-group v-model="studyForm.Modality"> <el-radio-group v-model="studyForm.Modality">
<el-radio <el-radio v-for="m in trialModalitys" v-show="m !== ''" :key="m" :label="m" style="margin-bottom: 15px" />
v-for="m in trialModalitys"
v-show="m !== ''"
:key="m"
:label="m"
style="margin-bottom: 15px"
/>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<!-- 检查部位 --> <!-- 检查部位 -->
<el-form-item <el-form-item :label="$t('trials:audit:table:bodyPart')" prop="BodyPartForEdit" :rules="[
:label="$t('trials:audit:table:bodyPart')"
prop="BodyPartForEdit"
:rules="[
{ {
required: studyForm.BodyPartForEditOther ? false : true, required: studyForm.BodyPartForEditOther ? false : true,
message: $t('common:ruleMessage:specify'), message: $t('common:ruleMessage:specify'),
trigger: 'blur', trigger: 'blur',
}, },
]" ]">
>
<el-checkbox-group v-model="studyForm.BodyPartForEdit"> <el-checkbox-group v-model="studyForm.BodyPartForEdit">
<el-checkbox v-for="bodyPart in trialBodyPartTypes" :key="bodyPart" :label="bodyPart"> <el-checkbox v-for="bodyPart in trialBodyPartTypes" :key="bodyPart" :label="bodyPart">
{{ {{
$fd('Bodypart', bodyPart, 'Code', BodyPart, 'Name') $fd('Bodypart', bodyPart, 'Code', BodyPart, 'Name')
}} }}
</el-checkbox> </el-checkbox>
<el-input <el-input :placeholder="$t('trials:audit:placeholder:BodyPartForEditOther')"
:placeholder="$t('trials:audit:placeholder:BodyPartForEditOther')" v-model.trim="studyForm.BodyPartForEditOther" style="width:150px;margin-left: 30px;"></el-input>
v-model.trim="studyForm.BodyPartForEditOther"
style="width:150px;margin-left: 30px;"
></el-input>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<!-- 序列数量 --> <!-- 序列数量 -->
@ -756,38 +519,21 @@
<el-input v-model="studyForm.SeriesCount" disabled /> <el-input v-model="studyForm.SeriesCount" disabled />
</el-form-item> </el-form-item>
<!-- 图像数量 --> <!-- 图像数量 -->
<el-form-item <el-form-item v-if="studyForm.InstanceCount" :label="$t('trials:audit:table:instanceCount')">
v-if="studyForm.InstanceCount"
:label="$t('trials:audit:table:instanceCount')"
>
<el-input v-model="studyForm.InstanceCount" disabled /> <el-input v-model="studyForm.InstanceCount" disabled />
</el-form-item> </el-form-item>
<!-- 检查日期 --> <!-- 检查日期 -->
<el-form-item :label="$t('trials:audit:table:studyDate')"> <el-form-item :label="$t('trials:audit:table:studyDate')">
<el-date-picker <el-date-picker v-model="studyForm.StudyTime" disabled type="date" value-format="yyyy-MM-dd"
v-model="studyForm.StudyTime" format="yyyy-MM-dd" style="width: 100%" />
disabled
type="date"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button <el-button :disabled="btnLoading" size="small" type="primary" @click="editStudyInfoVisible = false">{{
:disabled="btnLoading" $t('common:button:cancel') }}</el-button>
size="small" <el-button :loading="btnLoading" size="small" type="primary" @click="handleUpdateStudyInfo">{{
type="primary" $t('common:button:save') }}</el-button>
@click="editStudyInfoVisible = false"
>{{ $t('common:button:cancel') }}</el-button>
<el-button
:loading="btnLoading"
size="small"
type="primary"
@click="handleUpdateStudyInfo"
>{{ $t('common:button:save') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -1104,7 +850,7 @@ export default {
}) })
var validFilesCount = 0 var validFilesCount = 0
for (var i = 0; i < files.length; ++i) { for (var i = 0; i < files.length; ++i) {
;(function (index) { ; (function (index) {
p = p.then(function () { p = p.then(function () {
if (files[index].name.toUpperCase().indexOf('DICOMDIR') === -1) { if (files[index].name.toUpperCase().indexOf('DICOMDIR') === -1) {
validFilesCount = validFilesCount + 1 validFilesCount = validFilesCount + 1
@ -1618,7 +1364,7 @@ export default {
'trials:uploadDicomList:label:confirm' 'trials:uploadDicomList:label:confirm'
), ),
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
callback: (action) => {}, callback: (action) => { },
}) })
this.btnLoading = false this.btnLoading = false
} }
@ -1755,7 +1501,7 @@ export default {
dicomUploadInProgress({ dicomUploadInProgress({
trialId: scope.trialId, trialId: scope.trialId,
studyInstanceUid: dicomInfo.studyUid, studyInstanceUid: dicomInfo.studyUid,
}).then((res) => {}) }).then((res) => { })
}, 5000) }, 5000)
scope.myInterval.push(t) scope.myInterval.push(t)
let Record = { let Record = {
@ -1787,8 +1533,8 @@ export default {
institutionName: dicomInfo.institutionName, institutionName: dicomInfo.institutionName,
patientId: config.DicomStoreInfo.SubjectCode, patientId: config.DicomStoreInfo.SubjectCode,
patientName: '', patientName: '',
patientAge: '', patientAge: dicomInfo.patientAge,
patientSex: config.DicomStoreInfo.SubjectSex, patientSex: config.DicomStoreInfo.SubjectSex || dicomInfo.patientSex,
accessionNumber: dicomInfo.accNumber, accessionNumber: dicomInfo.accNumber,
patientBirthDate: '', patientBirthDate: '',
acquisitionTime: dicomInfo.acquisitionTime, acquisitionTime: dicomInfo.acquisitionTime,
@ -1872,10 +1618,8 @@ export default {
dicomInfo.failedFileCount++ dicomInfo.failedFileCount++
Record.FileCount++ Record.FileCount++
} else { } else {
let path = `/${params.trialId}/Image/${ let path = `/${params.trialId}/Image/${params.subjectId
params.subjectId }/${params.subjectVisitId}/${dicomInfo.studyUid
}/${params.subjectVisitId}/${
dicomInfo.studyUid
}/${scope.getGuid( }/${scope.getGuid(
dicomInfo.studyUid + dicomInfo.studyUid +
v.seriesUid + v.seriesUid +
@ -2275,7 +2019,7 @@ export default {
this.studyLoading = true this.studyLoading = true
}) })
}) })
.catch(() => {}) .catch(() => { })
}, },
// //
handleDeleteStudy(row) { handleDeleteStudy(row) {
@ -2306,7 +2050,7 @@ export default {
this.studyLoading = true this.studyLoading = true
}) })
}) })
.catch(() => {}) .catch(() => { })
}, },
// cancel // cancel
cancel() { cancel() {