|
|
|
@ -2,254 +2,125 @@
|
|
|
|
|
<div class="study-info">
|
|
|
|
|
<div class="functions" style="text-align: right">
|
|
|
|
|
<!-- 删除 -->
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
"
|
|
|
|
|
v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
|
|
|
|
:disabled="deleteArr.length === 0"
|
|
|
|
|
type="primary"
|
|
|
|
|
size="small"
|
|
|
|
|
icon="el-icon-delete"
|
|
|
|
|
@click="handleBatchDelete"
|
|
|
|
|
>
|
|
|
|
|
<el-button v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
" v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']" :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"
|
|
|
|
|
size="small"
|
|
|
|
|
:disabled="studyList.length === 0"
|
|
|
|
|
icon="el-icon-view"
|
|
|
|
|
@click="handlePreviewAllFiles"
|
|
|
|
|
>
|
|
|
|
|
<el-button type="primary" size="small" :disabled="studyList.length === 0" icon="el-icon-view"
|
|
|
|
|
@click="handlePreviewAllFiles">
|
|
|
|
|
{{ $t('trials:uploadedDicoms:action:preview') }}
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
<el-table
|
|
|
|
|
v-loading="studyLoading"
|
|
|
|
|
:data="studyList"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
height="300"
|
|
|
|
|
:row-class-name="tableRowClassName"
|
|
|
|
|
@selection-change="handleSelectionChange"
|
|
|
|
|
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column
|
|
|
|
|
v-if="!(data.SubmitState * 1 === 2) || data.IsQCConfirmedReupload"
|
|
|
|
|
type="selection"
|
|
|
|
|
width="55"
|
|
|
|
|
/>
|
|
|
|
|
<el-table v-loading="studyLoading" :data="studyList" style="width: 100%" height="300"
|
|
|
|
|
:row-class-name="tableRowClassName" @selection-change="handleSelectionChange"
|
|
|
|
|
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }">
|
|
|
|
|
<el-table-column v-if="!(data.SubmitState * 1 === 2) || data.IsQCConfirmedReupload" type="selection" width="55" />
|
|
|
|
|
<!-- 检查编号 -->
|
|
|
|
|
<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 />
|
|
|
|
|
<!-- 检查名称 -->
|
|
|
|
|
<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="ModalityForEdit" :label="$t('trials:audit:table:modality')" sortable />
|
|
|
|
|
<!-- 检查类型 -->
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="Modalities"
|
|
|
|
|
:label="$t('trials:audit:table:modality1')"
|
|
|
|
|
sortable
|
|
|
|
|
/>
|
|
|
|
|
<el-table-column prop="Modalities" :label="$t('trials:audit:table:modality1')" sortable />
|
|
|
|
|
<!-- 检查部位 -->
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="BodyPartForEdit"
|
|
|
|
|
:label="$t('trials:uploadedDicoms:table:bodyPart')"
|
|
|
|
|
sortable
|
|
|
|
|
min-width="100"
|
|
|
|
|
show-overflow-tooltip
|
|
|
|
|
>
|
|
|
|
|
<el-table-column prop="BodyPartForEdit" :label="$t('trials:uploadedDicoms:table:bodyPart')" sortable
|
|
|
|
|
min-width="100" show-overflow-tooltip>
|
|
|
|
|
<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')"
|
|
|
|
|
sortable
|
|
|
|
|
min-width="100"
|
|
|
|
|
show-overflow-tooltip
|
|
|
|
|
/>
|
|
|
|
|
<el-table-column prop="SeriesCount" :label="$t('trials:uploadedDicoms:table:seriesCount')" sortable
|
|
|
|
|
min-width="100" show-overflow-tooltip />
|
|
|
|
|
<!-- 图像数量 -->
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="InstanceCount"
|
|
|
|
|
:label="$t('trials:uploadedDicoms:table:instanceCount')"
|
|
|
|
|
sortable
|
|
|
|
|
min-width="100"
|
|
|
|
|
show-overflow-tooltip
|
|
|
|
|
/>
|
|
|
|
|
<el-table-column prop="InstanceCount" :label="$t('trials:uploadedDicoms:table:instanceCount')" sortable
|
|
|
|
|
min-width="100" show-overflow-tooltip />
|
|
|
|
|
<!-- 检查日期 -->
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="StudyTime"
|
|
|
|
|
:label="$t('trials:uploadedDicoms:table:studyDate')"
|
|
|
|
|
sortable
|
|
|
|
|
min-width="120"
|
|
|
|
|
show-overflow-tooltip
|
|
|
|
|
>
|
|
|
|
|
<el-table-column prop="StudyTime" :label="$t('trials:uploadedDicoms:table:studyDate')" sortable min-width="120"
|
|
|
|
|
show-overflow-tooltip>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{ 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')"
|
|
|
|
|
sortable
|
|
|
|
|
min-width="120"
|
|
|
|
|
show-overflow-tooltip
|
|
|
|
|
/>
|
|
|
|
|
<el-table-column
|
|
|
|
|
:label="$t('common:action:action')"
|
|
|
|
|
min-width="100"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column prop="UploadedTime" :label="$t('trials:uploadedDicoms:table:uploadedTime')" sortable
|
|
|
|
|
min-width="120" show-overflow-tooltip />
|
|
|
|
|
<el-table-column :label="$t('common:action:action')" min-width="100">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<!-- 预览 -->
|
|
|
|
|
<el-button
|
|
|
|
|
icon="el-icon-view"
|
|
|
|
|
:disabled="scope.row.SeriesCount === 0 || scope.row.IsDeleted"
|
|
|
|
|
:title="$t('trials:uploadedDicoms:action:preview')"
|
|
|
|
|
circle
|
|
|
|
|
@click="handleViewStudy(scope.row)"
|
|
|
|
|
/>
|
|
|
|
|
<el-button icon="el-icon-view" :disabled="scope.row.SeriesCount === 0 || scope.row.IsDeleted"
|
|
|
|
|
:title="$t('trials:uploadedDicoms:action:preview')" circle @click="handleViewStudy(scope.row)" />
|
|
|
|
|
<!-- 预览PET-CT数据 -->
|
|
|
|
|
<el-button
|
|
|
|
|
icon="el-icon-folder"
|
|
|
|
|
:title="$t('trials:audit:tab:clinicalData')"
|
|
|
|
|
v-if="
|
|
|
|
|
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
|
|
|
|
|
relationInfo.IsHaveStudyClinicalData
|
|
|
|
|
"
|
|
|
|
|
circle
|
|
|
|
|
:disabled="scope.row.IsDeleted"
|
|
|
|
|
@click="handlePreviewClinicalData(scope.row)"
|
|
|
|
|
/>
|
|
|
|
|
<el-button icon="el-icon-folder" :title="$t('trials:audit:tab:clinicalData')" v-if="
|
|
|
|
|
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
|
|
|
|
|
relationInfo.IsHaveStudyClinicalData
|
|
|
|
|
" circle :disabled="scope.row.IsDeleted" @click="handlePreviewClinicalData(scope.row)" />
|
|
|
|
|
<!-- 编辑 -->
|
|
|
|
|
<el-button
|
|
|
|
|
icon="el-icon-edit-outline"
|
|
|
|
|
v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
"
|
|
|
|
|
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
|
|
|
|
title="编辑"
|
|
|
|
|
circle
|
|
|
|
|
:disabled="scope.row.IsDeleted"
|
|
|
|
|
@click="handleEditStudy(scope.row)"
|
|
|
|
|
/>
|
|
|
|
|
<el-button icon="el-icon-edit-outline" v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']" title="编辑" circle
|
|
|
|
|
:disabled="scope.row.IsDeleted" @click="handleEditStudy(scope.row)" />
|
|
|
|
|
<!-- 删除 -->
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
"
|
|
|
|
|
v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
|
|
|
|
icon="el-icon-delete"
|
|
|
|
|
:title="$t('trials:uploadedDicoms:action:delete')"
|
|
|
|
|
circle
|
|
|
|
|
@click="handleDeleteStudy(scope.row)"
|
|
|
|
|
/>
|
|
|
|
|
<el-button v-if="
|
|
|
|
|
data.SubmitState * 1 < 2 ||
|
|
|
|
|
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
|
|
|
|
" v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']" icon="el-icon-delete"
|
|
|
|
|
:title="$t('trials:uploadedDicoms:action:delete')" circle @click="handleDeleteStudy(scope.row)" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
<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="studyForm.IsDicomData"
|
|
|
|
|
:label="$t('trials:audit:table:modality')"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item v-if="studyForm.IsDicomData" :label="$t('trials:audit:table:modality')">
|
|
|
|
|
<el-input v-model="studyForm.Modalities" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<!-- 检查类型 -->
|
|
|
|
|
<el-form-item
|
|
|
|
|
v-else
|
|
|
|
|
:label="$t('trials:audit:table:modality')"
|
|
|
|
|
prop="Modalities"
|
|
|
|
|
:rules="[
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
message: $t('common:ruleMessage:specify'),
|
|
|
|
|
trigger: 'blur',
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
>
|
|
|
|
|
<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.Modalities">
|
|
|
|
|
<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="[
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
message: $t('common:ruleMessage:specify'),
|
|
|
|
|
trigger: 'blur',
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item :label="$t('trials:audit:table:bodyPart')" prop="BodyPartForEdit" :rules="[
|
|
|
|
|
{
|
|
|
|
|
required: 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')
|
|
|
|
|
}}</el-checkbox
|
|
|
|
|
>
|
|
|
|
|
<el-checkbox v-for="bodyPart in trialBodyPartTypes" :key="bodyPart" :label="bodyPart">{{
|
|
|
|
|
$fd('Bodypart', bodyPart, 'Code', BodyPart, 'Name')
|
|
|
|
|
}}</el-checkbox>
|
|
|
|
|
</el-checkbox-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<!-- 序列数量 -->
|
|
|
|
@ -257,57 +128,28 @@
|
|
|
|
|
<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"
|
|
|
|
|
>
|
|
|
|
|
<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"
|
|
|
|
|
>
|
|
|
|
|
<el-button :loading="btnLoading" size="small" type="primary" @click="handleUpdateStudyInfo">
|
|
|
|
|
{{ $t('common:button:save') }}
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</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="rowData"
|
|
|
|
|
:allow-add-or-edit="false"
|
|
|
|
|
/>
|
|
|
|
|
<el-dialog v-if="petVisible" :show-close="true" :visible.sync="petVisible" append-to-body>
|
|
|
|
|
<uploadPetClinicalData :subject-visit-id="data.Id" :data="data" :studyData="rowData" :allow-add-or-edit="false" />
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
@ -360,8 +202,8 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async mounted() {
|
|
|
|
|
this.getStudyInfo()
|
|
|
|
|
this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId)
|
|
|
|
|
this.getStudyInfo()
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// 预览临床数据
|
|
|
|
@ -449,7 +291,7 @@ export default {
|
|
|
|
|
this.studyLoading = true
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {})
|
|
|
|
|
.catch(() => { })
|
|
|
|
|
},
|
|
|
|
|
// 预览所有影像
|
|
|
|
|
handlePreviewAllFiles() {
|
|
|
|
@ -491,7 +333,7 @@ export default {
|
|
|
|
|
this.studyLoading = true
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {})
|
|
|
|
|
.catch(() => { })
|
|
|
|
|
},
|
|
|
|
|
getBodyPart(bodyPart, other) {
|
|
|
|
|
if (!bodyPart && !other) return ''
|
|
|
|
|