Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
e0dd443d84
|
|
@ -26,6 +26,8 @@
|
|||
$t('DicomViewer:anonymous:Exit') }}</div>
|
||||
<div :class="{ btn: true, isNoted: isComparison }" @click="recovery(false)">{{
|
||||
$t('DicomViewer:anonymous:Recovery') }}</div>
|
||||
<div :class="{ btn: true, isNoted: isComparison }" @click="recovery(true)">{{
|
||||
$t('DicomViewer:anonymous:RecoveryAll') }}</div>
|
||||
</div>
|
||||
<div v-show="layoutRow >= 1" class="dicom-row" :style="{ height: rowHeight }">
|
||||
<div v-show="layoutRow >= 1 && layoutCol >= 1" class="dicom-item"
|
||||
|
|
@ -99,7 +101,8 @@
|
|||
<option value="3x2">3x2</option>
|
||||
<option value="3x3">3x3</option>
|
||||
</select>
|
||||
<div class="btnBox" v-if="hasAnonymous" @click="openAnonymous">{{ $t('DicomViewer:anonymous:PixelAnonymity')
|
||||
<div class="btnBox" v-if="hasAnonymous && hasPermi(['role:iqc'])" @click="openAnonymous">{{
|
||||
$t('DicomViewer:anonymous:PixelAnonymity')
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -501,8 +504,6 @@ export default {
|
|||
|
||||
methods: {
|
||||
comparison(f) {
|
||||
this.isComparison = f
|
||||
this.$emit("update:Comparison", f)
|
||||
const elements = document.querySelectorAll('.dicom-item')
|
||||
const scope = this
|
||||
Array.from(elements).forEach((element, index) => {
|
||||
|
|
@ -511,12 +512,14 @@ export default {
|
|||
}
|
||||
})
|
||||
scope.activeTool = null
|
||||
if (this.isComparison) {
|
||||
if (f) {
|
||||
this.$refs[`dicomCanvas0`].getNote_RectangleRoi().then(obj => {
|
||||
let { image } = obj
|
||||
let instanceInfo = this.series.instanceInfoList.find(item => item.ImageId === image.imageId)
|
||||
if (!instanceInfo.IsMasked) return this.$confirm(this.$t("DicomViewer:anonymous:notMasked"))
|
||||
this.changeLayout('1x2')
|
||||
this.isComparison = f
|
||||
this.$emit("update:Comparison", f)
|
||||
let serie = {}
|
||||
Object.keys(this.series).forEach(key => {
|
||||
if (key !== 'instanceInfoList' && key !== 'imageIds') {
|
||||
|
|
@ -552,10 +555,11 @@ export default {
|
|||
this.$refs[`dicomCanvas1`].loadImageStack(dicomCanvas1_info)
|
||||
})
|
||||
} else {
|
||||
this.isComparison = f
|
||||
this.$emit("update:Comparison", f)
|
||||
this.changeLayout('1x1')
|
||||
this.$refs[`dicomCanvas0`].loadImageStack(this.series)
|
||||
}
|
||||
|
||||
},
|
||||
recovery(isAll = false) {
|
||||
if (this.isComparison) return false
|
||||
|
|
@ -1170,7 +1174,7 @@ export default {
|
|||
z-index: 9999;
|
||||
|
||||
.btn {
|
||||
width: 15%;
|
||||
width: 12%;
|
||||
text-align: center;
|
||||
height: 40px;
|
||||
line-height: 30px;
|
||||
|
|
|
|||
|
|
@ -12,33 +12,16 @@
|
|||
<!--受试者-->
|
||||
<el-table-column prop="SubjectCode" :label="$t('upload:dicom:table:subjectCode')" sortable />
|
||||
<!--访视名称-->
|
||||
<el-table-column
|
||||
prop="VisitName"
|
||||
:label="$t('download:table:VisitName')"
|
||||
v-if="IsImageSegment"
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="VisitName" :label="$t('download:table:VisitName')" v-if="IsImageSegment" sortable />
|
||||
<!--任务名称-->
|
||||
<el-table-column
|
||||
prop="TaskBlindName"
|
||||
:label="$t('upload:dicom:table:taskBlindName')"
|
||||
v-else
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="TaskBlindName" :label="$t('upload:dicom:table:taskBlindName')" v-else sortable />
|
||||
<!--原始检查数-->
|
||||
<el-table-column
|
||||
prop="OrginalStudyList"
|
||||
:label="$t('upload:dicom:table:orginalStudyListNum')"
|
||||
>
|
||||
<el-table-column prop="OrginalStudyList" :label="$t('upload:dicom:table:orginalStudyListNum')">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="
|
||||
<el-button v-if="
|
||||
scope.row.OrginalStudyList &&
|
||||
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>
|
||||
</el-button>
|
||||
<span v-else>0</span>
|
||||
|
|
@ -47,13 +30,9 @@
|
|||
<!--后处理检查数-->
|
||||
<el-table-column prop="UploadStudyList" :label="$t('upload:dicom:table:uploadStudyListNum')">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="
|
||||
<el-button v-if="
|
||||
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>
|
||||
</el-button>
|
||||
<span v-else>0</span>
|
||||
|
|
@ -63,57 +42,27 @@
|
|||
<template slot-scope="scope">
|
||||
<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">
|
||||
<div class="form-group" style="margin-right: 10px">
|
||||
<div :id="`directoryInputWrapper_${scope.row.Id}`" class="btn btn-link file-input">
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-upload2"
|
||||
:disabled="btnLoading"
|
||||
: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="
|
||||
<el-button circle icon="el-icon-upload2" :disabled="btnLoading" :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)
|
||||
"
|
||||
/>
|
||||
" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!--预览--->
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-view"
|
||||
:disabled="!scope.row.UploadStudyList ||
|
||||
<el-button circle icon="el-icon-view" :disabled="!scope.row.UploadStudyList ||
|
||||
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
|
||||
circle
|
||||
:disabled="!scope.row.UploadStudyList ||
|
||||
<el-button circle :disabled="!scope.row.UploadStudyList ||
|
||||
scope.row.UploadStudyList.length <= 0 ||
|
||||
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>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -125,36 +74,18 @@
|
|||
<form id="inputForm" ref="uploadForm" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<div id="directoryInputWrapper" class="btn btn-link file-input">
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="btnLoading"
|
||||
:loading="btnLoading"
|
||||
size="mini"
|
||||
>{{ $t('upload:dicom:button:batchUpload') }}</el-button>
|
||||
<input
|
||||
type="file"
|
||||
name="file"
|
||||
ref="pathClear"
|
||||
:disabled="btnLoading"
|
||||
webkitdirectory
|
||||
multiple
|
||||
title
|
||||
@change="beginScanFiles($event)"
|
||||
/>
|
||||
<el-button type="primary" :disabled="btnLoading" :loading="btnLoading" 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>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--上传列表-->
|
||||
<el-table
|
||||
ref="dicomFilesTable"
|
||||
v-adaptive="{ bottomOffset: 80 }"
|
||||
height="100"
|
||||
:data="uploadQueues"
|
||||
class="dicomFiles-table"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table ref="dicomFilesTable" v-adaptive="{ bottomOffset: 80 }" height="100" :data="uploadQueues"
|
||||
class="dicomFiles-table" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="index" width="40" />
|
||||
<el-table-column min-width="200" show-overflow-tooltip>
|
||||
<template slot="header">
|
||||
|
|
@ -180,9 +111,8 @@
|
|||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
<div style="display: inline-block; margin-right: 2px">
|
||||
<span
|
||||
v-if="scope.row.dicomInfo.modality.length > 0"
|
||||
>{{ scope.row.dicomInfo.modality.join('、') }},</span>
|
||||
<span v-if="scope.row.dicomInfo.modality.length > 0">{{ scope.row.dicomInfo.modality.join('、')
|
||||
}},</span>
|
||||
<span v-else style="color: #f44336">N/A,</span>
|
||||
</div>
|
||||
<div style="display: inline-block; margin-right: 2px">
|
||||
|
|
@ -228,162 +158,123 @@
|
|||
<span v-if="scope.row.dicomInfo.patientId">
|
||||
<span style="font-weight: 500">PID:</span>
|
||||
{{
|
||||
scope.row.dicomInfo.patientId }}
|
||||
scope.row.dicomInfo.patientId }}
|
||||
</span>
|
||||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
<div>
|
||||
<span :class="[scope.row.dicomInfo.patientName ? '' : 'colorOfRed']">
|
||||
{{
|
||||
scope.row.dicomInfo.patientName
|
||||
? scope.row.dicomInfo.patientName
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientName
|
||||
? scope.row.dicomInfo.patientName
|
||||
: 'N/A'
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span :class="[scope.row.dicomInfo.patientSex ? '' : 'colorOfRed']">
|
||||
{{
|
||||
scope.row.dicomInfo.patientSex
|
||||
? scope.row.dicomInfo.patientSex
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientSex
|
||||
? scope.row.dicomInfo.patientSex
|
||||
: 'N/A'
|
||||
}},
|
||||
</span>
|
||||
|
||||
<span :class="[scope.row.dicomInfo.patientAge ? '' : 'colorOfRed']">
|
||||
{{
|
||||
scope.row.dicomInfo.patientAge
|
||||
? scope.row.dicomInfo.patientAge
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientAge
|
||||
? scope.row.dicomInfo.patientAge
|
||||
: 'N/A'
|
||||
}},
|
||||
</span>
|
||||
|
||||
<span
|
||||
:class="[
|
||||
<span :class="[
|
||||
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
|
||||
]"
|
||||
>
|
||||
]">
|
||||
{{
|
||||
scope.row.dicomInfo.patientBirthDate
|
||||
? scope.row.dicomInfo.patientBirthDate
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientBirthDate
|
||||
? scope.row.dicomInfo.patientBirthDate
|
||||
: 'N/A'
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:failedFileCount')"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:failedFileCount')" min-width="150"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-progress
|
||||
color="#409eff"
|
||||
:percentage="(
|
||||
<el-progress color="#409eff" :percentage="(
|
||||
(scope.row.dicomInfo.uploadFileSize * 100) /
|
||||
(scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1)
|
||||
).toFixed(2) * 1
|
||||
"
|
||||
/>
|
||||
" />
|
||||
<span>
|
||||
{{ $t('trials:uploadDicomList:table:uploadNow')
|
||||
}}{{ scope.row.dicomInfo.failedFileCount }}/{{
|
||||
scope.row.dicomInfo.fileCount
|
||||
scope.row.dicomInfo.fileCount
|
||||
}}
|
||||
({{
|
||||
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
|
||||
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
|
||||
}}MB/{{
|
||||
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
|
||||
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
|
||||
}}MB)
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:status')"
|
||||
min-width="140"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:status')" min-width="140" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span
|
||||
v-if="
|
||||
<span v-if="
|
||||
!scope.row.dicomInfo.failedFileCount &&
|
||||
!scope.row.dicomInfo.isInit
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status1') }}</span>
|
||||
<span
|
||||
style="color: #409eff"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status1') }}</span>
|
||||
<span style="color: #409eff" v-else-if="
|
||||
!scope.row.dicomInfo.failedFileCount &&
|
||||
scope.row.dicomInfo.isInit &&
|
||||
btnLoading
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span
|
||||
style="color: #409eff"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span style="color: #409eff" v-else-if="
|
||||
scope.row.dicomInfo.failedFileCount <
|
||||
scope.row.dicomInfo.fileCount && !scope.row.uploadState.record
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span
|
||||
style="color: #2cc368"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span style="color: #2cc368" v-else-if="
|
||||
scope.row.dicomInfo.failedFileCount ===
|
||||
scope.row.dicomInfo.fileCount
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status3') }}</span>
|
||||
<span
|
||||
style="color: #f66"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status3') }}</span>
|
||||
<span style="color: #f66" v-else-if="
|
||||
scope.row.uploadState.record &&
|
||||
scope.row.uploadState.record.fileCount === 0
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status5') }}</span>
|
||||
">{{ $t('trials:uploadDicomList:table:status5') }}</span>
|
||||
<span style="color: #f66" v-else>
|
||||
{{
|
||||
$t('trials:uploadDicomList:table:Failed')
|
||||
$t('trials:uploadDicomList:table:Failed')
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:record')"
|
||||
min-width="140"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:record')" min-width="140" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip placement="top" v-if="scope.row.uploadState.record">
|
||||
<div slot="content">
|
||||
<div style="max-height: 500px; overflow-y: auto">
|
||||
{{ $t('trials:uploadDicomList:table:Existed') }}:
|
||||
<div v-if="scope.row.uploadState.record.Existed.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Existed"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #baa72a"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Existed" :key="item"
|
||||
style="font-size: 12px; color: #baa72a">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
{{ $t('trials:uploadDicomList:table:Uploaded') }}:
|
||||
<div v-if="scope.row.uploadState.record.Uploaded.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Uploaded"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #24b837"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Uploaded" :key="item"
|
||||
style="font-size: 12px; color: #24b837">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
<br />
|
||||
{{ $t('trials:uploadDicomList:table:Failed') }}:
|
||||
<div v-if="scope.row.uploadState.record.Failed.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Failed"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #f66"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Failed" :key="item"
|
||||
style="font-size: 12px; color: #f66">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
</div>
|
||||
|
|
@ -391,19 +282,19 @@
|
|||
<el-button size="mini" style="cursor: pointer">
|
||||
<span style="font-size: 12px; color: #baa72a">
|
||||
{{
|
||||
scope.row.uploadState.record.Existed.length
|
||||
scope.row.uploadState.record.Existed.length
|
||||
}}
|
||||
</span>
|
||||
/
|
||||
<span style="font-size: 12px; color: #24b837">
|
||||
{{
|
||||
scope.row.uploadState.record.Uploaded.length
|
||||
scope.row.uploadState.record.Uploaded.length
|
||||
}}
|
||||
</span>
|
||||
/
|
||||
<span style="font-size: 12px; color: #f66">
|
||||
{{
|
||||
scope.row.uploadState.record.Failed.length
|
||||
scope.row.uploadState.record.Failed.length
|
||||
}}
|
||||
</span>
|
||||
</el-button>
|
||||
|
|
@ -411,18 +302,9 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<study-view
|
||||
v-if="model_cfg.visible"
|
||||
:model_cfg="model_cfg"
|
||||
:IsDicom="true"
|
||||
:bodyPart="bodyPart"
|
||||
:subjectVisitId="openSubjectVisitId"
|
||||
:modelList="modelList"
|
||||
:isUpload="openIsUpload"
|
||||
:visitTaskId="openVisitTaskId"
|
||||
:TrialModality="TrialModality"
|
||||
@getList="getList"
|
||||
/>
|
||||
<study-view v-if="model_cfg.visible" :model_cfg="model_cfg" :IsDicom="true" :bodyPart="bodyPart"
|
||||
:subjectVisitId="openSubjectVisitId" :modelList="modelList" :isUpload="openIsUpload"
|
||||
:visitTaskId="openVisitTaskId" :TrialModality="TrialModality" @getList="getList" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -666,9 +548,8 @@ export default {
|
|||
this.openIsUpload = isUpload
|
||||
this.openSubjectVisitId = item.SubjectVisitId || item.SourceSubjectVisitId
|
||||
this.openVisitTaskId = item.VisitTaskId
|
||||
this.model_cfg.title = `${item.SubjectCode || ''} > ${
|
||||
this.IsImageSegment ? item.VisitName : item.TaskBlindName
|
||||
}`
|
||||
this.model_cfg.title = `${item.SubjectCode || ''} > ${this.IsImageSegment ? item.VisitName : item.TaskBlindName
|
||||
}`
|
||||
this.modelList = item[list]
|
||||
this.model_cfg.visible = true
|
||||
},
|
||||
|
|
@ -801,7 +682,7 @@ export default {
|
|||
var validFilesCount = 0
|
||||
scope.uploadQueues = []
|
||||
for (var i = 0; i < checkFiles.length; ++i) {
|
||||
;(function (index) {
|
||||
; (function (index) {
|
||||
p = p.then(function () {
|
||||
if (
|
||||
checkFiles[index].name.toUpperCase().indexOf('DICOMDIR') === -1
|
||||
|
|
@ -1324,8 +1205,8 @@ export default {
|
|||
institutionName: dicomInfo.institutionName,
|
||||
patientId: dicomInfo.patientId,
|
||||
patientName: '',
|
||||
patientAge: '',
|
||||
patientSex: dicomInfo.patientSex,
|
||||
patientAge: dicomInfo.patientAge,
|
||||
patientSex: config.DicomStoreInfo.SubjectSex || dicomInfo.patientSex,
|
||||
accessionNumber: dicomInfo.accNumber,
|
||||
patientBirthDate: '',
|
||||
acquisitionTime: dicomInfo.acquisitionTime,
|
||||
|
|
@ -1409,27 +1290,23 @@ export default {
|
|||
dicomInfo.failedFileCount++
|
||||
Record.FileCount++
|
||||
} else {
|
||||
let path = `/${params.trialId}/Image/${
|
||||
params.subjectId
|
||||
}/${params.subjectVisitId}/${
|
||||
dicomInfo.visitTaskId
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
let path = `/${params.trialId}/Image/${params.subjectId
|
||||
}/${params.subjectVisitId}/${dicomInfo.visitTaskId
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
v.seriesUid +
|
||||
o.instanceUid +
|
||||
params.trialId
|
||||
)}`
|
||||
)}`
|
||||
if (scope.IsImageSegment) {
|
||||
path = `/${params.trialId}/Image/${
|
||||
params.subjectId
|
||||
}/${params.subjectVisitId}/AnnotationImage/${
|
||||
dicomInfo.visitTaskId
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
path = `/${params.trialId}/Image/${params.subjectId
|
||||
}/${params.subjectVisitId}/AnnotationImage/${dicomInfo.visitTaskId
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
v.seriesUid +
|
||||
o.instanceUid +
|
||||
params.trialId
|
||||
)}`
|
||||
)}`
|
||||
}
|
||||
if (scope.isClose) return
|
||||
let res = await dcmUpload(
|
||||
|
|
@ -1759,11 +1636,9 @@ export default {
|
|||
var token = getToken()
|
||||
let trialId = this.$route.query.trialId
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showvisitdicoms?page=upload&trialId=${trialId}&visitTaskId=${
|
||||
this.IsImageSegment ? 'undefined' : row.VisitTaskId
|
||||
}&subjectVisitId=${
|
||||
row.SourceSubjectVisitId
|
||||
}&isReading=1&TokenKey=${token}`,
|
||||
path: `/showvisitdicoms?page=upload&trialId=${trialId}&visitTaskId=${this.IsImageSegment ? 'undefined' : row.VisitTaskId
|
||||
}&subjectVisitId=${row.SourceSubjectVisitId
|
||||
}&isReading=1&TokenKey=${token}`,
|
||||
})
|
||||
this.open = window.open(routeData.href, '_blank')
|
||||
},
|
||||
|
|
|
|||
|
|
@ -531,7 +531,7 @@ export default {
|
|||
}
|
||||
},
|
||||
showSeriesImage(e, seriesIndex, series) {
|
||||
if (!isComparison) return false
|
||||
if (this.isComparison) return false
|
||||
this.activeSeriesId = series.seriesId
|
||||
workSpeedclose(true)
|
||||
// if (seriesIndex === this.currentSeriesIndex) return
|
||||
|
|
|
|||
|
|
@ -7,44 +7,21 @@
|
|||
<div style="margin: 10px 0">{{ $t('trials:uploadedDicoms:title:dicomUploaded') }}</div>
|
||||
<div class="functions" style="text-align: right">
|
||||
<!-- //批量删除已上传的影像 -->
|
||||
<el-button
|
||||
:disabled="deleteArr.length === 0"
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-delete"
|
||||
@click="handleBatchDelete"
|
||||
>{{ $t('trials:uploadedDicoms:action:delete') }}</el-button>
|
||||
<el-button :disabled="deleteArr.length === 0" type="primary" size="small" icon="el-icon-delete"
|
||||
@click="handleBatchDelete">{{ $t('trials:uploadedDicoms:action:delete') }}</el-button>
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-view"
|
||||
size="small"
|
||||
:disabled="studyList.length === 0"
|
||||
@click="handlePreviewAllFiles"
|
||||
>{{ $t('trials:uploadedDicoms:action:preview') }}</el-button>
|
||||
<el-button type="primary" icon="el-icon-view" size="small" :disabled="studyList.length === 0"
|
||||
@click="handlePreviewAllFiles">{{ $t('trials:uploadedDicoms:action:preview') }}</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="studyLoading"
|
||||
:data="studyList"
|
||||
style="width: 100%"
|
||||
:row-class-name="tableRowClassName"
|
||||
max-height="250"
|
||||
@selection-change="handleUploadedSelectionChange"
|
||||
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }"
|
||||
>
|
||||
<el-table v-loading="studyLoading" :data="studyList" 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
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadedDicoms:table:studyId')"
|
||||
min-width="80"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
>
|
||||
<el-table-column prop="StudyCode" :label="$t('trials:uploadedDicoms:table:studyId')" min-width="80"
|
||||
show-overflow-tooltip sortable>
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
placement="top"
|
||||
v-if="
|
||||
<el-tooltip placement="top" v-if="
|
||||
(() => {
|
||||
var r = false
|
||||
if (scope.row.IsHaveUploadFailed) {
|
||||
|
|
@ -60,14 +37,10 @@
|
|||
}
|
||||
return r
|
||||
})()
|
||||
"
|
||||
>
|
||||
">
|
||||
<div slot="content">{{ $t('trials:uploadDicomList:table:status4') }}</div>
|
||||
<span
|
||||
class="el-icon-warning"
|
||||
style="color: #cbb024; cursor: pointer"
|
||||
v-if="scope.row.IsHaveUploadFailed"
|
||||
></span>
|
||||
<span class="el-icon-warning" style="color: #cbb024; cursor: pointer"
|
||||
v-if="scope.row.IsHaveUploadFailed"></span>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top" v-if="!scope.row.IsCompleteClinicalData">
|
||||
<div slot="content">{{ $t('trials:crc-upload:confirm:message') }}</div>
|
||||
|
|
@ -77,115 +50,61 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<!-- 检查名称 -->
|
||||
<el-table-column
|
||||
v-if="relationInfo.IsShowStudyName"
|
||||
prop="StudyName"
|
||||
:label="$t('trials:audit:table:StudyName')"
|
||||
sortable
|
||||
/>
|
||||
<el-table-column v-if="relationInfo.IsShowStudyName" 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="Modalities" :label="$t('trials:audit:table:modality1')" sortable />
|
||||
<!-- 检查部位 -->
|
||||
<el-table-column
|
||||
prop="BodyPartForEdit"
|
||||
:label="$t('trials:uploadedDicoms:table:bodyPart')"
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
>
|
||||
<template
|
||||
slot-scope="scope"
|
||||
>{{ getBodyPart(scope.row.BodyPartForEdit, scope.row.BodyPartForEditOther) }}</template>
|
||||
<el-table-column prop="BodyPartForEdit" :label="$t('trials:uploadedDicoms:table:bodyPart')" min-width="100"
|
||||
show-overflow-tooltip sortable>
|
||||
<template slot-scope="scope">{{ getBodyPart(scope.row.BodyPartForEdit, scope.row.BodyPartForEditOther)
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<!-- 序列数量 -->
|
||||
<el-table-column
|
||||
prop="SeriesCount"
|
||||
:label="$t('trials:uploadedDicoms:table:seriesCount')"
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="SeriesCount" :label="$t('trials:uploadedDicoms:table:seriesCount')" min-width="100"
|
||||
show-overflow-tooltip sortable />
|
||||
<!-- 图像数量 -->
|
||||
<el-table-column
|
||||
prop="InstanceCount"
|
||||
:label="$t('trials:uploadedDicoms:table:instanceCount')"
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="InstanceCount" :label="$t('trials:uploadedDicoms:table:instanceCount')" min-width="100"
|
||||
show-overflow-tooltip sortable />
|
||||
<!-- 检查日期 -->
|
||||
<el-table-column
|
||||
prop="StudyTime"
|
||||
:label="$t('trials:uploadedDicoms:table:studyDate')"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
>
|
||||
<el-table-column prop="StudyTime" :label="$t('trials:uploadedDicoms:table:studyDate')" min-width="120"
|
||||
show-overflow-tooltip sortable>
|
||||
<template slot-scope="scope">
|
||||
{{
|
||||
scope.row.StudyTime
|
||||
? moment(scope.row.StudyTime).format('YYYY-MM-DD')
|
||||
: ''
|
||||
scope.row.StudyTime
|
||||
? moment(scope.row.StudyTime).format('YYYY-MM-DD')
|
||||
: ''
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 更新时间 -->
|
||||
<el-table-column
|
||||
prop="UpdateTime"
|
||||
:label="$t('trials:uploadedDicoms:table:UpdateTime')"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="UpdateTime" :label="$t('trials:uploadedDicoms:table:UpdateTime')" min-width="120"
|
||||
show-overflow-tooltip sortable />
|
||||
<!-- 上传时间 -->
|
||||
<el-table-column
|
||||
prop="UploadedTime"
|
||||
:label="$t('trials:uploadedDicoms:table:uploadedTime')"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
sortable
|
||||
/>
|
||||
<el-table-column prop="UploadedTime" :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">
|
||||
<template slot-scope="scope">
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
icon="el-icon-view"
|
||||
:disabled="scope.row.SeriesCount === 0"
|
||||
:title="$t('trials:uploadedDicoms:action:preview')"
|
||||
circle
|
||||
@click="handleViewStudy(scope.row)"
|
||||
/>
|
||||
<el-button icon="el-icon-view" :disabled="scope.row.SeriesCount === 0"
|
||||
:title="$t('trials:uploadedDicoms:action:preview')" circle @click="handleViewStudy(scope.row)" />
|
||||
<!-- 上传临床数据 -->
|
||||
<el-button
|
||||
icon="el-icon-upload2"
|
||||
v-if="
|
||||
<el-button icon="el-icon-upload2" v-if="
|
||||
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
|
||||
relationInfo.IsHaveStudyClinicalData
|
||||
"
|
||||
: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)"
|
||||
/>
|
||||
" :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)" />
|
||||
<!-- 编辑 -->
|
||||
<el-button
|
||||
icon="el-icon-edit-outline"
|
||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
||||
<el-button icon="el-icon-edit-outline" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
||||
:title="$t('common:button:edit')"
|
||||
:disabled="!isAfresh && data.SubmitState === 2 && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
|
||||
circle
|
||||
@click="handleEditStudy(scope.row)"
|
||||
/>
|
||||
circle @click="handleEditStudy(scope.row)" />
|
||||
<!-- 删除 :disabled="scope.row.IsDeleted"-->
|
||||
<el-button
|
||||
icon="el-icon-delete"
|
||||
:title="$t('trials:uploadedDicoms:action:delete')"
|
||||
circle
|
||||
<el-button 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))"
|
||||
@click="handleDeleteStudy(scope.row)"
|
||||
/>
|
||||
@click="handleDeleteStudy(scope.row)" />
|
||||
<!-- <el-button-->
|
||||
<!-- icon="el-icon-toilet-paper"-->
|
||||
<!-- circle-->
|
||||
|
|
@ -208,31 +127,18 @@
|
|||
<div id="directoryInputWrapper" class="btn btn-link file-input">
|
||||
<el-button type="primary" :disabled="btnLoading" :loading="btnLoading" size="small">
|
||||
{{
|
||||
$t('trials:uploadedDicomsicom:button:selectFolder')
|
||||
$t('trials:uploadedDicomsicom:button:selectFolder')
|
||||
}}
|
||||
</el-button>
|
||||
<input
|
||||
type="file"
|
||||
name="file"
|
||||
ref="pathClear"
|
||||
:disabled="btnLoading"
|
||||
webkitdirectory
|
||||
multiple
|
||||
title
|
||||
@change="beginScanFiles($event)"
|
||||
/>
|
||||
<input type="file" name="file" ref="pathClear" :disabled="btnLoading" webkitdirectory multiple title
|
||||
@change="beginScanFiles($event)" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="drag" ref="drag" @dragover="handleDragover" @drop="handleDrop">
|
||||
<!-- 文件列表 -->
|
||||
<el-table
|
||||
ref="dicomFilesTable"
|
||||
:data="uploadQueues"
|
||||
:row-key="(row) => row.studyIndex"
|
||||
class="dicomFiles-table"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table ref="dicomFilesTable" :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="index" width="40" />
|
||||
<el-table-column min-width="200" show-overflow-tooltip>
|
||||
|
|
@ -259,21 +165,16 @@
|
|||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
<div style="display: inline-block; margin-right: 2px">
|
||||
<span
|
||||
v-if="scope.row.dicomInfo.modality.length > 0"
|
||||
>{{ scope.row.dicomInfo.modality.join('、') }},</span>
|
||||
<span v-if="scope.row.dicomInfo.modality.length > 0">{{ scope.row.dicomInfo.modality.join('、')
|
||||
}},</span>
|
||||
<span v-else style="color: #f44336">N/A,</span>
|
||||
</div>
|
||||
<div style="display: inline-block; margin-right: 2px">
|
||||
<span
|
||||
v-if="scope.row.seriesList.length"
|
||||
>{{ scope.row.seriesList.length }} Series,</span>
|
||||
<span v-if="scope.row.seriesList.length">{{ scope.row.seriesList.length }} Series,</span>
|
||||
<span v-else style="color: #f44336">N/A,</span>
|
||||
</div>
|
||||
<div style="display: inline-block">
|
||||
<span
|
||||
v-if="scope.row.fileList.length"
|
||||
>{{ scope.row.fileList.length }} Instances</span>
|
||||
<span v-if="scope.row.fileList.length">{{ scope.row.fileList.length }} Instances</span>
|
||||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -284,9 +185,7 @@
|
|||
<span v-else style="color: #f44336">N/A,</span>
|
||||
</div>
|
||||
<div style="display: inline-block">
|
||||
<span
|
||||
v-if="scope.row.dicomInfo.description"
|
||||
>{{ scope.row.dicomInfo.description }}</span>
|
||||
<span v-if="scope.row.dicomInfo.description">{{ scope.row.dicomInfo.description }}</span>
|
||||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -306,7 +205,7 @@
|
|||
</div>
|
||||
<span>
|
||||
{{
|
||||
$t('trials:uploadDicomList:table:patientInfo')
|
||||
$t('trials:uploadDicomList:table:patientInfo')
|
||||
}}
|
||||
</span>
|
||||
</el-tooltip>
|
||||
|
|
@ -317,180 +216,135 @@
|
|||
<span v-if="scope.row.dicomInfo.patientId">
|
||||
<span style="font-weight: 500">PID:</span>
|
||||
{{
|
||||
scope.row.dicomInfo.patientId }}
|
||||
scope.row.dicomInfo.patientId }}
|
||||
</span>
|
||||
<span v-else style="color: #f44336">N/A</span>
|
||||
</div>
|
||||
<div>
|
||||
<span
|
||||
:class="[
|
||||
<span :class="[
|
||||
scope.row.dicomInfo.patientName ? '' : 'colorOfRed',
|
||||
]"
|
||||
>
|
||||
]">
|
||||
{{
|
||||
scope.row.dicomInfo.patientName
|
||||
? scope.row.dicomInfo.patientName
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientName
|
||||
? scope.row.dicomInfo.patientName
|
||||
: 'N/A'
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span
|
||||
:class="[
|
||||
<span :class="[
|
||||
scope.row.dicomInfo.patientSex ? '' : 'colorOfRed',
|
||||
]"
|
||||
>
|
||||
]">
|
||||
{{
|
||||
scope.row.dicomInfo.patientSex
|
||||
? scope.row.dicomInfo.patientSex
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientSex
|
||||
? scope.row.dicomInfo.patientSex
|
||||
: 'N/A'
|
||||
}},
|
||||
</span>
|
||||
|
||||
<span
|
||||
:class="[
|
||||
<span :class="[
|
||||
scope.row.dicomInfo.patientAge ? '' : 'colorOfRed',
|
||||
]"
|
||||
>
|
||||
]">
|
||||
{{
|
||||
scope.row.dicomInfo.patientAge
|
||||
? scope.row.dicomInfo.patientAge
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientAge
|
||||
? scope.row.dicomInfo.patientAge
|
||||
: 'N/A'
|
||||
}},
|
||||
</span>
|
||||
|
||||
<span
|
||||
:class="[
|
||||
<span :class="[
|
||||
scope.row.dicomInfo.patientBirthDate ? '' : 'colorOfRed',
|
||||
]"
|
||||
>
|
||||
]">
|
||||
{{
|
||||
scope.row.dicomInfo.patientBirthDate
|
||||
? scope.row.dicomInfo.patientBirthDate
|
||||
: 'N/A'
|
||||
scope.row.dicomInfo.patientBirthDate
|
||||
? scope.row.dicomInfo.patientBirthDate
|
||||
: 'N/A'
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:failedFileCount')"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:failedFileCount')" min-width="150"
|
||||
show-overflow-tooltip>
|
||||
<!--:percentage="
|
||||
(scope.row.dicomInfo.failedFileCount * 100) /
|
||||
scope.row.dicomInfo.fileCount
|
||||
"
|
||||
:show-text="false"--->
|
||||
<template slot-scope="scope">
|
||||
<el-progress
|
||||
color="#409eff"
|
||||
:percentage="(
|
||||
<el-progress color="#409eff" :percentage="(
|
||||
(scope.row.dicomInfo.uploadFileSize * 100) /
|
||||
(scope.row.dicomInfo.fileSize ? scope.row.dicomInfo.fileSize : 1)
|
||||
).toFixed(2) * 1
|
||||
"
|
||||
/>
|
||||
" />
|
||||
<span>
|
||||
{{ $t('trials:uploadDicomList:table:uploadNow')
|
||||
}}{{ scope.row.dicomInfo.failedFileCount }}/{{
|
||||
scope.row.dicomInfo.fileCount
|
||||
scope.row.dicomInfo.fileCount
|
||||
}}
|
||||
({{
|
||||
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
|
||||
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
|
||||
}}MB/{{
|
||||
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
|
||||
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
|
||||
}}MB)
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:status')"
|
||||
min-width="140"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:status')" min-width="140" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span
|
||||
v-if="
|
||||
<span v-if="
|
||||
!scope.row.dicomInfo.failedFileCount &&
|
||||
!scope.row.dicomInfo.isInit
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status1') }}</span>
|
||||
<span
|
||||
style="color: #409eff"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status1') }}</span>
|
||||
<span style="color: #409eff" v-else-if="
|
||||
!scope.row.dicomInfo.failedFileCount &&
|
||||
scope.row.dicomInfo.isInit &&
|
||||
btnLoading
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span
|
||||
style="color: #409eff"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span style="color: #409eff" v-else-if="
|
||||
scope.row.dicomInfo.failedFileCount <
|
||||
scope.row.dicomInfo.fileCount &&
|
||||
!scope.row.uploadState.record
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span
|
||||
style="color: #2cc368"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status2') }}</span>
|
||||
<span style="color: #2cc368" v-else-if="
|
||||
scope.row.dicomInfo.failedFileCount ===
|
||||
scope.row.dicomInfo.fileCount
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status3') }}</span>
|
||||
<span
|
||||
style="color: #f66"
|
||||
v-else-if="
|
||||
">{{ $t('trials:uploadDicomList:table:status3') }}</span>
|
||||
<span style="color: #f66" v-else-if="
|
||||
scope.row.uploadState.record &&
|
||||
scope.row.uploadState.record.fileCount === 0
|
||||
"
|
||||
>{{ $t('trials:uploadDicomList:table:status5') }}</span>
|
||||
">{{ $t('trials:uploadDicomList:table:status5') }}</span>
|
||||
<span style="color: #f66" v-else>
|
||||
{{
|
||||
$t('trials:uploadDicomList:table:Failed')
|
||||
$t('trials:uploadDicomList:table:Failed')
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="$t('trials:uploadDicomList:table:record')"
|
||||
min-width="140"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<el-table-column :label="$t('trials:uploadDicomList:table:record')" min-width="140" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip placement="top" v-if="scope.row.uploadState.record">
|
||||
<div slot="content">
|
||||
<div style="max-height: 500px; overflow-y: auto">
|
||||
{{ $t('trials:uploadDicomList:table:Existed') }}:
|
||||
<div v-if="scope.row.uploadState.record.Existed.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Existed"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #baa72a"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Existed" :key="item"
|
||||
style="font-size: 12px; color: #baa72a">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
{{ $t('trials:uploadDicomList:table:Uploaded') }}:
|
||||
<div v-if="scope.row.uploadState.record.Uploaded.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Uploaded"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #24b837"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Uploaded" :key="item"
|
||||
style="font-size: 12px; color: #24b837">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
<br />
|
||||
{{ $t('trials:uploadDicomList:table:Failed') }}:
|
||||
<div v-if="scope.row.uploadState.record.Failed.length">
|
||||
<div
|
||||
v-for="item of scope.row.uploadState.record.Failed"
|
||||
:key="item"
|
||||
style="font-size: 12px; color: #f66"
|
||||
>{{ item }}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Failed" :key="item"
|
||||
style="font-size: 12px; color: #f66">{{ item }}</div>
|
||||
</div>
|
||||
<div v-else> </div>
|
||||
</div>
|
||||
|
|
@ -498,19 +352,19 @@
|
|||
<el-button size="mini" style="cursor: pointer">
|
||||
<span style="font-size: 12px; color: #baa72a">
|
||||
{{
|
||||
scope.row.uploadState.record.Existed.length
|
||||
scope.row.uploadState.record.Existed.length
|
||||
}}
|
||||
</span>
|
||||
/
|
||||
<span style="font-size: 12px; color: #24b837">
|
||||
{{
|
||||
scope.row.uploadState.record.Uploaded.length
|
||||
scope.row.uploadState.record.Uploaded.length
|
||||
}}
|
||||
</span>
|
||||
/
|
||||
<span style="font-size: 12px; color: #f66">
|
||||
{{
|
||||
scope.row.uploadState.record.Failed.length
|
||||
scope.row.uploadState.record.Failed.length
|
||||
}}
|
||||
</span>
|
||||
</el-button>
|
||||
|
|
@ -521,33 +375,21 @@
|
|||
<template slot-scope="scope">
|
||||
<!-- 预览 -->
|
||||
<!-- :disabled="scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.fileCount && scope.row.dicomInfo.failedFileCount !== 0"-->
|
||||
<el-button
|
||||
icon="el-icon-view"
|
||||
circle
|
||||
:disabled="(scope.row.uploadState.stateCode !== '' &&
|
||||
<el-button icon="el-icon-view" circle :disabled="(scope.row.uploadState.stateCode !== '' &&
|
||||
scope.row.dicomInfo.failedFileCount <
|
||||
scope.row.dicomInfo.fileCount &&
|
||||
!scope.row.uploadState.record) ||
|
||||
btnLoading
|
||||
"
|
||||
:title="$t('trials:uploadedDicoms:action:preview')"
|
||||
size="small"
|
||||
@click="handlePreview(scope.row.dicomInfo.studyUid)"
|
||||
/>
|
||||
" :title="$t('trials:uploadedDicoms:action:preview')" size="small"
|
||||
@click="handlePreview(scope.row.dicomInfo.studyUid)" />
|
||||
<!-- 移除 -->
|
||||
<el-button
|
||||
icon="el-icon-delete"
|
||||
circle
|
||||
:title="$t('trials:uploadedDicoms:action:delete')"
|
||||
size="small"
|
||||
<el-button icon="el-icon-delete" circle :title="$t('trials:uploadedDicoms:action:delete')" size="small"
|
||||
:disabled="(scope.row.uploadState.stateCode !== '' &&
|
||||
scope.row.dicomInfo.failedFileCount <
|
||||
scope.row.dicomInfo.fileCount &&
|
||||
!scope.row.uploadState.record) ||
|
||||
btnLoading
|
||||
"
|
||||
@click="handleDelete(scope.$index, scope.row)"
|
||||
/>
|
||||
" @click="handleDelete(scope.$index, scope.row)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -560,80 +402,41 @@
|
|||
</el-button>-->
|
||||
<span style="margin-right: 10px">
|
||||
{{
|
||||
$store.state.trials.uploadTip
|
||||
$store.state.trials.uploadTip
|
||||
}}
|
||||
</span>
|
||||
<!-- 上传 -->
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:disabled="selectArr.length == 0 || !isScan"
|
||||
:loading="btnLoading"
|
||||
@click="beginUploadQueues"
|
||||
>{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
|
||||
<el-button size="small" type="primary" :disabled="selectArr.length == 0 || !isScan" :loading="btnLoading"
|
||||
@click="beginUploadQueues">{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- pacs上传 -->
|
||||
<el-tab-pane
|
||||
:label="$t('trials:uploadNonDicoms:tab:uploadPacs')"
|
||||
name="pacs"
|
||||
:disabled="btnLoading"
|
||||
v-if="relationInfo.IsPacsConnectConfiged"
|
||||
>
|
||||
<uploadDicomPacs
|
||||
v-if="uploadActiveName === 'pacs'"
|
||||
ref="dicomPacs"
|
||||
:subjectVisitId="subjectVisitId"
|
||||
:relationInfo="relationInfo"
|
||||
:subjectId="subjectId"
|
||||
@getList="getParentList"
|
||||
@petDataTip="petDataTip"
|
||||
/>
|
||||
<el-tab-pane :label="$t('trials:uploadNonDicoms:tab:uploadPacs')" name="pacs" :disabled="btnLoading"
|
||||
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-tabs>
|
||||
<!-- 预览影像模态框 -->
|
||||
<el-dialog
|
||||
v-if="previewVisible"
|
||||
:fullscreen="true"
|
||||
:show-close="true"
|
||||
:visible.sync="previewVisible"
|
||||
:title="$t('trials:uploadDicoms:title:previewLocalImage')"
|
||||
append-to-body
|
||||
>
|
||||
<el-dialog v-if="previewVisible" :fullscreen="true" :show-close="true" :visible.sync="previewVisible"
|
||||
:title="$t('trials:uploadDicoms:title:previewLocalImage')" append-to-body>
|
||||
<DicomPreview :uid="uid" :studyList="uploadQueues" />
|
||||
</el-dialog>
|
||||
<!--pet-ct临床数据上传-->
|
||||
<el-dialog v-if="petVisible" :show-close="true" :visible.sync="petVisible" append-to-body>
|
||||
<uploadPetClinicalData
|
||||
:subject-visit-id="data.Id"
|
||||
:data="data"
|
||||
:studyData="studyData"
|
||||
:allow-add-or-edit="true"
|
||||
@getStudyInfo="getStudyInfo"
|
||||
/>
|
||||
<uploadPetClinicalData :subject-visit-id="data.Id" :data="data" :studyData="studyData" :allow-add-or-edit="true"
|
||||
@getStudyInfo="getStudyInfo" />
|
||||
</el-dialog>
|
||||
<!-- 校验警告信息模态框 -->
|
||||
<el-dialog
|
||||
v-if="warning_cfg.visible"
|
||||
:visible.sync="warning_cfg.visible"
|
||||
width="500px"
|
||||
:close-on-click-modal="false"
|
||||
append-to-body
|
||||
title="Warning"
|
||||
custom-class="warning-dialog"
|
||||
>
|
||||
<el-dialog v-if="warning_cfg.visible" :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">
|
||||
<!-- Information from DICOM headers not consistent with that of this subject -->
|
||||
<div
|
||||
style="color: red; font-size: 14px; margin-bottom: 10px"
|
||||
>{{ $t('trials:uploadDicomList:message:informationConsistent') }}:</div>
|
||||
<div style="color: red; font-size: 14px; margin-bottom: 10px">{{
|
||||
$t('trials:uploadDicomList:message:informationConsistent') }}:</div>
|
||||
<div v-for="(item, i) in warningArr" :key="item.index">
|
||||
<div>{{ `(${i + 1}). ACC: ${item.accNumber}` }}</div>
|
||||
<div
|
||||
v-for="(warning, index) in item.warnings"
|
||||
:key="index"
|
||||
style="margin: 10px 0px; font-size: 13px"
|
||||
>
|
||||
<div v-for="(warning, index) in item.warnings" :key="index" style="margin: 10px 0px; font-size: 13px">
|
||||
<ul>
|
||||
<li>{{ warning }}</li>
|
||||
</ul>
|
||||
|
|
@ -641,61 +444,39 @@
|
|||
</div>
|
||||
</div>
|
||||
<div slot="footer" class="base-modal-footer">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleCancelWarnVisible"
|
||||
>{{ $t('common:button:cancel') }}</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleContinueUpload"
|
||||
>{{ $t('trials:uploadDicomList:button:upload') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="handleCancelWarnVisible">{{ $t('common:button:cancel')
|
||||
}}</el-button>
|
||||
<el-button size="small" type="primary" @click="handleContinueUpload">{{
|
||||
$t('trials:uploadDicomList:button:upload')
|
||||
}}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
v-if="editStudyInfoVisible"
|
||||
:title="$t('trials:audit:action:edit')"
|
||||
:visible.sync="editStudyInfoVisible"
|
||||
:close-on-click-modal="false"
|
||||
append-to-body
|
||||
custom-class="base-dialog-wrapper"
|
||||
width="600px"
|
||||
>
|
||||
<div
|
||||
style="
|
||||
<el-dialog v-if="editStudyInfoVisible" :title="$t('trials:audit:action:edit')" :visible.sync="editStudyInfoVisible"
|
||||
:close-on-click-modal="false" append-to-body custom-class="base-dialog-wrapper" width="600px">
|
||||
<div style="
|
||||
padding: 10px;
|
||||
border: 1px solid #e0e0e0;
|
||||
max-height: 650px;
|
||||
overflow-y: auto;
|
||||
"
|
||||
>
|
||||
">
|
||||
<el-form ref="studyForm" :model="studyForm" label-width="100px">
|
||||
<!-- 检查编号 -->
|
||||
<el-form-item :label="$t('trials:audit:table:studyId')">
|
||||
<el-input v-model="studyForm.StudyCode" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查名称 -->
|
||||
<el-form-item
|
||||
v-if="relationInfo.IsShowStudyName"
|
||||
:label="$t('trials:audit:table:StudyName')"
|
||||
prop="StudyName"
|
||||
<el-form-item v-if="relationInfo.IsShowStudyName" :label="$t('trials:audit:table:StudyName')" prop="StudyName"
|
||||
:rules="[
|
||||
{
|
||||
required: true,
|
||||
message: $t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
]">
|
||||
<el-radio-group v-model="studyForm.StudyName">
|
||||
<template v-for="m in relationInfo.StudyNameList">
|
||||
<el-radio
|
||||
v-if="m.IsChoose"
|
||||
:key="m.Name"
|
||||
:label="isEN ? m.EnName : m.Name"
|
||||
style="margin-bottom: 15px"
|
||||
/>
|
||||
<el-radio v-if="m.IsChoose" :key="m.Name" :label="isEN ? m.EnName : m.Name"
|
||||
style="margin-bottom: 15px" />
|
||||
</template>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
|
@ -704,51 +485,33 @@
|
|||
<el-input v-model="studyForm.Modalities" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查类型 -->
|
||||
<el-form-item
|
||||
v-else
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
prop="Modalities"
|
||||
:rules="[
|
||||
<el-form-item v-else :label="$t('trials:audit:table:modality')" prop="Modalities" :rules="[
|
||||
{
|
||||
required: true,
|
||||
message: $t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
]">
|
||||
<el-radio-group v-model="studyForm.Modality">
|
||||
<el-radio
|
||||
v-for="m in trialModalitys"
|
||||
v-show="m !== ''"
|
||||
:key="m"
|
||||
:label="m"
|
||||
style="margin-bottom: 15px"
|
||||
/>
|
||||
<el-radio v-for="m in trialModalitys" v-show="m !== ''" :key="m" :label="m" style="margin-bottom: 15px" />
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- 检查部位 -->
|
||||
<el-form-item
|
||||
:label="$t('trials:audit:table:bodyPart')"
|
||||
prop="BodyPartForEdit"
|
||||
:rules="[
|
||||
<el-form-item :label="$t('trials:audit:table:bodyPart')" prop="BodyPartForEdit" :rules="[
|
||||
{
|
||||
required: studyForm.BodyPartForEditOther ? false : true,
|
||||
message: $t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
]">
|
||||
<el-checkbox-group v-model="studyForm.BodyPartForEdit">
|
||||
<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-input
|
||||
:placeholder="$t('trials:audit:placeholder:BodyPartForEditOther')"
|
||||
v-model.trim="studyForm.BodyPartForEditOther"
|
||||
style="width:150px;margin-left: 30px;"
|
||||
></el-input>
|
||||
<el-input :placeholder="$t('trials:audit:placeholder:BodyPartForEditOther')"
|
||||
v-model.trim="studyForm.BodyPartForEditOther" style="width:150px;margin-left: 30px;"></el-input>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<!-- 序列数量 -->
|
||||
|
|
@ -756,38 +519,21 @@
|
|||
<el-input v-model="studyForm.SeriesCount" disabled />
|
||||
</el-form-item>
|
||||
<!-- 图像数量 -->
|
||||
<el-form-item
|
||||
v-if="studyForm.InstanceCount"
|
||||
:label="$t('trials:audit:table:instanceCount')"
|
||||
>
|
||||
<el-form-item v-if="studyForm.InstanceCount" :label="$t('trials:audit:table:instanceCount')">
|
||||
<el-input v-model="studyForm.InstanceCount" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查日期 -->
|
||||
<el-form-item :label="$t('trials:audit:table:studyDate')">
|
||||
<el-date-picker
|
||||
v-model="studyForm.StudyTime"
|
||||
disabled
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
/>
|
||||
<el-date-picker v-model="studyForm.StudyTime" disabled type="date" value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button
|
||||
:disabled="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@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>
|
||||
<el-button :disabled="btnLoading" size="small" type="primary" @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>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
|
@ -1104,7 +850,7 @@ export default {
|
|||
})
|
||||
var validFilesCount = 0
|
||||
for (var i = 0; i < files.length; ++i) {
|
||||
;(function (index) {
|
||||
; (function (index) {
|
||||
p = p.then(function () {
|
||||
if (files[index].name.toUpperCase().indexOf('DICOMDIR') === -1) {
|
||||
validFilesCount = validFilesCount + 1
|
||||
|
|
@ -1618,7 +1364,7 @@ export default {
|
|||
'trials:uploadDicomList:label:confirm'
|
||||
),
|
||||
dangerouslyUseHTMLString: true,
|
||||
callback: (action) => {},
|
||||
callback: (action) => { },
|
||||
})
|
||||
this.btnLoading = false
|
||||
}
|
||||
|
|
@ -1755,7 +1501,7 @@ export default {
|
|||
dicomUploadInProgress({
|
||||
trialId: scope.trialId,
|
||||
studyInstanceUid: dicomInfo.studyUid,
|
||||
}).then((res) => {})
|
||||
}).then((res) => { })
|
||||
}, 5000)
|
||||
scope.myInterval.push(t)
|
||||
let Record = {
|
||||
|
|
@ -1787,8 +1533,8 @@ export default {
|
|||
institutionName: dicomInfo.institutionName,
|
||||
patientId: config.DicomStoreInfo.SubjectCode,
|
||||
patientName: '',
|
||||
patientAge: '',
|
||||
patientSex: config.DicomStoreInfo.SubjectSex,
|
||||
patientAge: dicomInfo.patientAge,
|
||||
patientSex: config.DicomStoreInfo.SubjectSex || dicomInfo.patientSex,
|
||||
accessionNumber: dicomInfo.accNumber,
|
||||
patientBirthDate: '',
|
||||
acquisitionTime: dicomInfo.acquisitionTime,
|
||||
|
|
@ -1872,16 +1618,14 @@ export default {
|
|||
dicomInfo.failedFileCount++
|
||||
Record.FileCount++
|
||||
} else {
|
||||
let path = `/${params.trialId}/Image/${
|
||||
params.subjectId
|
||||
}/${params.subjectVisitId}/${
|
||||
dicomInfo.studyUid
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
let path = `/${params.trialId}/Image/${params.subjectId
|
||||
}/${params.subjectVisitId}/${dicomInfo.studyUid
|
||||
}/${scope.getGuid(
|
||||
dicomInfo.studyUid +
|
||||
v.seriesUid +
|
||||
o.instanceUid +
|
||||
params.trialId
|
||||
)}`
|
||||
)}`
|
||||
if (scope.isClose) return
|
||||
console.log(o.file)
|
||||
let res = await dcmUpload(
|
||||
|
|
@ -1902,7 +1646,7 @@ export default {
|
|||
if (
|
||||
Math.abs(
|
||||
dicomInfo.uploadFileSize -
|
||||
dicomInfo.fileSize
|
||||
dicomInfo.fileSize
|
||||
) < 5000
|
||||
) {
|
||||
dicomInfo.uploadFileSize = dicomInfo.fileSize
|
||||
|
|
@ -2275,7 +2019,7 @@ export default {
|
|||
this.studyLoading = true
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
},
|
||||
// 删除已上传的某个检查
|
||||
handleDeleteStudy(row) {
|
||||
|
|
@ -2306,7 +2050,7 @@ export default {
|
|||
this.studyLoading = true
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
},
|
||||
// cancel按钮回调
|
||||
cancel() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue