Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details

main
caiyiling 2026-05-07 11:10:45 +08:00
commit e0dd443d84
4 changed files with 265 additions and 642 deletions

View File

@ -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;

View File

@ -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>&nbsp;</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>&nbsp;</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>&nbsp;</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')
},

View File

@ -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

View File

@ -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>&nbsp;</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>&nbsp;</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>&nbsp;</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() {