Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
|
@ -1035,7 +1035,27 @@ export function getQCVisitList(param) {
|
||||||
data: param
|
data: param
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function getImageBackList(param) {
|
||||||
|
return request({
|
||||||
|
url: `/QCList/getImageBackList`,
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getImageBackApplyUserList(params) {
|
||||||
|
return request({
|
||||||
|
url: `/QCList/getImageBackApplyUserList`,
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function auditImageBack(params) {
|
||||||
|
return request({
|
||||||
|
url: `/QCOperation/auditImageBack`,
|
||||||
|
method: 'put',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
export function getQCChallengeList(param) {
|
export function getQCChallengeList(param) {
|
||||||
return request({
|
return request({
|
||||||
url: `/QCList/getQCChallengeList`,
|
url: `/QCList/getQCChallengeList`,
|
||||||
|
@ -3308,6 +3328,13 @@ export function getReReadingApplyToBeDoneList(param) {
|
||||||
data: param
|
data: param
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function getPMImageBackToBeDoneList(param) {
|
||||||
|
return request({
|
||||||
|
url: `/PersonalWorkstation/getPMImageBackToBeDoneList`,
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function deleteClinicalForm(param) {
|
export function deleteClinicalForm(param) {
|
||||||
return request({
|
return request({
|
||||||
|
@ -3995,3 +4022,91 @@ export function deleteTrialFileType(id) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 工作台-获取稽查文档
|
||||||
|
export function getAuditDocumentData(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/getAuditDocumentData`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-新增稽查文档
|
||||||
|
export function addAuditDocument(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/addAuditDocument`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-获取当前目录层级
|
||||||
|
export function getBreadcrumbData(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/getBreadcrumbData`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-修改稽查文档
|
||||||
|
export function updateAuditDocument(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/updateAuditDocument`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-删除稽查文档
|
||||||
|
export function deleteAuditDocument(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/deleteAuditDocument`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档获取历史版本
|
||||||
|
export function getHistoricalVersion(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/getHistoricalVersion`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档设置当前版本
|
||||||
|
export function setCurrentVersion(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/setCurrentVersion`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档移动
|
||||||
|
export function movieFileOrFolder(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/movieFileOrFolder`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档复制
|
||||||
|
export function copyFileOrFolder(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/copyFileOrFolder`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档授权
|
||||||
|
export function setIsAuthorization(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/setIsAuthorization`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 工作台-稽查文档新增文件夹
|
||||||
|
export function addFolder(data) {
|
||||||
|
return request({
|
||||||
|
url: `/AuditDocument/addFolder`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
|
@ -287,4 +287,12 @@ export function forwardSVDicomImage(param) {
|
||||||
data: param
|
data: param
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// crc、iqc申请影像退回
|
||||||
|
export function requestImageBack(params) {
|
||||||
|
return request({
|
||||||
|
url: `/QCOperation/requestImageBack`,
|
||||||
|
method: 'put',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
|
@ -0,0 +1,23 @@
|
||||||
|
import Vue from "vue";
|
||||||
|
import OnlyOffice from "./index.vue";
|
||||||
|
|
||||||
|
const PreviewConstructor = Vue.extend(OnlyOffice);
|
||||||
|
|
||||||
|
const onlyOffice = options => {
|
||||||
|
const { path, type, title } = options;
|
||||||
|
if (!path) throw `path is requred.but ${path}`
|
||||||
|
const id = `OnlyOffice_${new Date().getTime()}`;
|
||||||
|
const instance = new PreviewConstructor();
|
||||||
|
instance.id = id;
|
||||||
|
instance.vm = instance.$mount();
|
||||||
|
if (instance.vm.visible) return;
|
||||||
|
document.body.appendChild(instance.vm.$el);
|
||||||
|
instance.vm.open(path, type, title);
|
||||||
|
instance.vm.$on("closed", () => {
|
||||||
|
instance.vm.docEditor = null
|
||||||
|
document.body.removeChild(instance.vm.$el);
|
||||||
|
instance.vm.$destroy();
|
||||||
|
});
|
||||||
|
return instance.vm;
|
||||||
|
}
|
||||||
|
export default onlyOffice;
|
|
@ -0,0 +1,7 @@
|
||||||
|
import OnlyOffice from "./index.vue";
|
||||||
|
import onlyOffice from "./fun";
|
||||||
|
|
||||||
|
export default Vue => {
|
||||||
|
Vue.component(OnlyOffice.name, OnlyOffice);
|
||||||
|
Vue.prototype.$onlyOffice = onlyOffice;
|
||||||
|
};
|
|
@ -0,0 +1,45 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog v-if="visible" :visible.sync="visible" :title="title" :fullscreen="true" append-to-body
|
||||||
|
custom-class="base-dialog-wrapper" @close="handleClose">
|
||||||
|
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
|
||||||
|
<iframe v-if="visible"
|
||||||
|
:src="`/static/onlyOffice/viewer.html?url=${OSSclientConfig.basePath}${path}?type=${type}&title=${title}&documentType=${documentType}&userName=${currentUser}`"
|
||||||
|
width="100%" height="99%" frameborder="0" crossorigin="anonymous" />
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import DOCUMENTTYPE from "@/utils/onlyOffice_type.js"
|
||||||
|
export default {
|
||||||
|
name: "OnlyOffice",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
visible: false,
|
||||||
|
path: null,
|
||||||
|
type: null,
|
||||||
|
title: null,
|
||||||
|
documentType: null,
|
||||||
|
currentUser: zzSessionStorage.getItem('userName'),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
open(path, type, title) {
|
||||||
|
this.path = path;
|
||||||
|
this.type = type.toLowerCase();
|
||||||
|
this.documentType = DOCUMENTTYPE[`.${this.type}`]
|
||||||
|
this.title = title;
|
||||||
|
this.visible = true;
|
||||||
|
},
|
||||||
|
handleClose() {
|
||||||
|
this.$emit("closed");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
#placeholder {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -8,61 +8,25 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--检查列表-->
|
<!--检查列表-->
|
||||||
<el-table
|
<el-table :data="list" style="width: 100%" v-adaptive="{ bottomOffset: 60 }" :loading="loading"
|
||||||
:data="list"
|
@sort-change="handleSortByColumn" :default-sort="{ prop: 'TaskBlindName', order: 'descending' }">
|
||||||
style="width: 100%"
|
|
||||||
v-adaptive="{ bottomOffset: 60 }"
|
|
||||||
:loading="loading"
|
|
||||||
@sort-change="handleSortByColumn"
|
|
||||||
:default-sort="{ prop: 'TaskBlindName', order: 'descending' }"
|
|
||||||
>
|
|
||||||
<!--受试者-->
|
<!--受试者-->
|
||||||
<el-table-column
|
<el-table-column prop="SubjectCode" :label="$t('upload:nonedicom:table:subject')" />
|
||||||
prop="SubjectCode"
|
|
||||||
:label="$t('upload:nonedicom:table:subject')"
|
|
||||||
/>
|
|
||||||
<!--任务名称-->
|
<!--任务名称-->
|
||||||
<el-table-column
|
<el-table-column prop="TaskBlindName" :label="$t('upload:nonedicom:table:taskName')" sortable="custom" />
|
||||||
prop="TaskBlindName"
|
|
||||||
:label="$t('upload:nonedicom:table:taskName')"
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!--检查类型-->
|
<!--检查类型-->
|
||||||
<el-table-column
|
<el-table-column prop="Modality" :label="$t('upload:nonedicom:table:molityType')" sortable="custom">
|
||||||
prop="Modality"
|
|
||||||
:label="$t('upload:nonedicom:table:molityType')"
|
|
||||||
sortable="custom"
|
|
||||||
>
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!--检查部位-->
|
<!--检查部位-->
|
||||||
<el-table-column
|
<el-table-column prop="BodyPart" :label="$t('upload:nonedicom:table:bodyPart')" sortable="custom" />
|
||||||
prop="BodyPart"
|
|
||||||
:label="$t('upload:nonedicom:table:bodyPart')"
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!--原文件数-->
|
<!--原文件数-->
|
||||||
<el-table-column
|
<el-table-column prop="FileCount" :label="$t('upload:nonedicom:table:fileCount')">
|
||||||
prop="FileCount"
|
|
||||||
:label="$t('upload:nonedicom:table:fileCount')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-popover
|
<el-popover v-if="scope.row.FileCount" trigger="click" placement="bottom">
|
||||||
v-if="scope.row.FileCount"
|
|
||||||
trigger="click"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<el-table :data="scope.row.FileList" height="300" size="small">
|
<el-table :data="scope.row.FileList" height="300" size="small">
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
|
||||||
prop="FileName"
|
<el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
|
||||||
:label="$t('trials:audit:table:nonDicomsFileName')"
|
|
||||||
width="200"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="FileSize"
|
|
||||||
:label="$t('trials:audit:table:nonDicomsFileSize')"
|
|
||||||
width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.FileSize && scope.row.FileSize > 0
|
scope.row.FileSize && scope.row.FileSize > 0
|
||||||
|
@ -74,27 +38,13 @@
|
||||||
<el-table-column :label="$t('common:action:action')" width="120">
|
<el-table-column :label="$t('common:action:action')" width="120">
|
||||||
<template slot-scope="files">
|
<template slot-scope="files">
|
||||||
<!-- 预览 -->
|
<!-- 预览 -->
|
||||||
<viewer
|
<viewer :ref="files.row.Path" style="margin: 0 10px"
|
||||||
:ref="files.row.Path"
|
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
|
||||||
style="margin: 0 10px"
|
<el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
|
||||||
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]"
|
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
circle
|
|
||||||
icon="el-icon-view"
|
|
||||||
:title="$t('upload:nonedicom:button:preview')"
|
|
||||||
:disabled="
|
|
||||||
files.row.FileType &&
|
|
||||||
files.row.FileType.indexOf('zip') >= 0
|
files.row.FileType.indexOf('zip') >= 0
|
||||||
"
|
" @click.native.prevent="previewFile(files.row)" />
|
||||||
@click.native.prevent="previewFile(files.row)"
|
<img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
|
||||||
/>
|
alt="Image" />
|
||||||
<img
|
|
||||||
v-show="false"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
:src="`${OSSclientConfig.basePath}${files.row.Path}`"
|
|
||||||
alt="Image"
|
|
||||||
/>
|
|
||||||
</viewer>
|
</viewer>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -109,32 +59,13 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!--后处理文件数-->
|
<!--后处理文件数-->
|
||||||
<el-table-column
|
<el-table-column prop="UploadedFileCount" :label="$t('upload:nonedicom:table:uploadFileCount')">
|
||||||
prop="UploadedFileCount"
|
|
||||||
:label="$t('upload:nonedicom:table:uploadFileCount')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-popover
|
<el-popover v-if="scope.row.UploadedFileCount" trigger="click" placement="bottom">
|
||||||
v-if="scope.row.UploadedFileCount"
|
<el-table :data="scope.row.UploadedFileList" height="300" size="small">
|
||||||
trigger="click"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<el-table
|
|
||||||
:data="scope.row.UploadedFileList"
|
|
||||||
height="300"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
|
||||||
prop="FileName"
|
<el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
|
||||||
:label="$t('trials:audit:table:nonDicomsFileName')"
|
|
||||||
width="200"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="FileSize"
|
|
||||||
:label="$t('trials:audit:table:nonDicomsFileSize')"
|
|
||||||
width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.FileSize && scope.row.FileSize > 0
|
scope.row.FileSize && scope.row.FileSize > 0
|
||||||
|
@ -146,27 +77,13 @@
|
||||||
<el-table-column :label="$t('common:action:action')" width="120">
|
<el-table-column :label="$t('common:action:action')" width="120">
|
||||||
<template slot-scope="files">
|
<template slot-scope="files">
|
||||||
<!-- 预览 -->
|
<!-- 预览 -->
|
||||||
<viewer
|
<viewer :ref="files.row.Path" style="margin: 0 10px"
|
||||||
:ref="files.row.Path"
|
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
|
||||||
style="margin: 0 10px"
|
<el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
|
||||||
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]"
|
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
circle
|
|
||||||
icon="el-icon-view"
|
|
||||||
:title="$t('upload:nonedicom:button:preview')"
|
|
||||||
:disabled="
|
|
||||||
files.row.FileType &&
|
|
||||||
files.row.FileType.indexOf('zip') >= 0
|
files.row.FileType.indexOf('zip') >= 0
|
||||||
"
|
" @click.native.prevent="previewFile(files.row)" />
|
||||||
@click.native.prevent="previewFile(files.row)"
|
<img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
|
||||||
/>
|
alt="Image" />
|
||||||
<img
|
|
||||||
v-show="false"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
:src="`${OSSclientConfig.basePath}${files.row.Path}`"
|
|
||||||
alt="Image"
|
|
||||||
/>
|
|
||||||
</viewer>
|
</viewer>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -180,75 +97,34 @@
|
||||||
<span v-else>{{ scope.row.UploadedFileCount }}</span>
|
<span v-else>{{ scope.row.UploadedFileCount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('common:action:action')" fixed="right" width="180">
|
||||||
:label="$t('common:action:action')"
|
|
||||||
fixed="right"
|
|
||||||
width="180"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!--预览--->
|
<!--预览--->
|
||||||
<el-button
|
<el-button circle :disabled="scope.row.UploadedFileCount <= 0" icon="el-icon-view"
|
||||||
circle
|
:title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" />
|
||||||
:disabled="scope.row.UploadedFileCount <= 0"
|
|
||||||
icon="el-icon-view"
|
|
||||||
:title="$t('upload:nonedicom:button:preview')"
|
|
||||||
@click.stop="handlePreviewNoneDicomFiles(scope.row)"
|
|
||||||
/>
|
|
||||||
<!--上传--->
|
<!--上传--->
|
||||||
<el-button
|
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')"
|
||||||
circle
|
@click.native.prevent="handleUpload(scope.row)" />
|
||||||
icon="el-icon-upload2"
|
|
||||||
:title="$t('upload:nonedicom:button:upload')"
|
|
||||||
@click.native.prevent="handleUpload(scope.row)"
|
|
||||||
/>
|
|
||||||
<!--删除--->
|
<!--删除--->
|
||||||
<el-button
|
<el-button :disabled="scope.row.UploadedFileCount <= 0 ||
|
||||||
:disabled="
|
|
||||||
scope.row.UploadedFileCount <= 0 ||
|
|
||||||
scope.row.ReadingTaskState === 2
|
scope.row.ReadingTaskState === 2
|
||||||
"
|
" circle icon="el-icon-delete" :title="$t('upload:nonedicom:button:delete')"
|
||||||
circle
|
@click.stop="remove(scope.row)" />
|
||||||
icon="el-icon-delete"
|
|
||||||
:title="$t('upload:nonedicom:button:delete')"
|
|
||||||
@click.stop="remove(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 预览单个图像 -->
|
<!-- 预览单个图像 -->
|
||||||
<el-dialog
|
<el-dialog v-if="imgObj.visible" :visible.sync="imgObj.visible" :title="$t('upload:nonedicom:dialogTitle:preview')"
|
||||||
v-if="imgObj.visible"
|
append-to-body width="565px">
|
||||||
:visible.sync="imgObj.visible"
|
<div v-loading="imgObj.loading" class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
|
||||||
:title="$t('upload:nonedicom:dialogTitle:preview')"
|
<el-image :src="`${OSSclientConfig.basePath}${imgObj.url}`" crossorigin="anonymous" fit="fit"
|
||||||
append-to-body
|
style="height: 500px; width: 500px" @error="imgObj.loading = false" @load="imgObj.loading = false" />
|
||||||
width="565px"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-loading="imgObj.loading"
|
|
||||||
class="base-modal-body"
|
|
||||||
style="border: 2px solid #ccc; padding: 10px"
|
|
||||||
>
|
|
||||||
<el-image
|
|
||||||
:src="`${OSSclientConfig.basePath}${imgObj.url}`"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
fit="fit"
|
|
||||||
style="height: 500px; width: 500px"
|
|
||||||
@error="imgObj.loading = false"
|
|
||||||
@load="imgObj.loading = false"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<!-- 上传非dicom文件 -->
|
<!-- 上传非dicom文件 -->
|
||||||
<el-dialog
|
<el-dialog v-if="uploadVisible" :visible.sync="uploadVisible" :close-on-click-modal="false"
|
||||||
v-if="uploadVisible"
|
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')" width="800px" append-to-body
|
||||||
:visible.sync="uploadVisible"
|
custom-class="base-dialog-wrapper" @close="resetFileDiaolg">
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')"
|
|
||||||
width="800px"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
@close="resetFileDiaolg"
|
|
||||||
>
|
|
||||||
<!-- 多文件上传 -->
|
<!-- 多文件上传 -->
|
||||||
<form id="inputForm" ref="uploadForm">
|
<form id="inputForm" ref="uploadForm">
|
||||||
<el-divider content-position="left">{{
|
<el-divider content-position="left">{{
|
||||||
|
@ -256,33 +132,15 @@
|
||||||
}}</el-divider>
|
}}</el-divider>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="upload" style="margin-right: 10px">
|
<div class="upload" style="margin-right: 10px">
|
||||||
<input
|
<input multiple="multiple" webkitdirectory="" directory accept="*/*" type="file" name="uploadFolder"
|
||||||
multiple="multiple"
|
class="select-file" title="" @change="beginScanFiles($event)" v-if="!btnLoading" />
|
||||||
webkitdirectory=""
|
|
||||||
directory
|
|
||||||
accept="*/*"
|
|
||||||
type="file"
|
|
||||||
name="uploadFolder"
|
|
||||||
class="select-file"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!btnLoading"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:uploadNonDicoms:button:selectFolder') }}
|
{{ $t('trials:uploadNonDicoms:button:selectFolder') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="upload">
|
<div class="upload">
|
||||||
<input
|
<input class="select-file" multiple="" :accept="faccept.join(',')" type="file" name="uploadFile" title=""
|
||||||
class="select-file"
|
@change="beginScanFiles($event)" v-if="!btnLoading" />
|
||||||
multiple=""
|
|
||||||
:accept="faccept.join(',')"
|
|
||||||
type="file"
|
|
||||||
name="uploadFile"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!btnLoading"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:uploadNonDicoms:button:select') }}
|
{{ $t('trials:uploadNonDicoms:button:select') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -293,82 +151,46 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<!-- 文件列表 -->
|
<!-- 文件列表 -->
|
||||||
<el-table
|
<el-table ref="filesTable" :data="fileList" class="dicomFiles-table" height="300"
|
||||||
ref="filesTable"
|
@selection-change="handleSelectionChange">
|
||||||
:data="fileList"
|
<el-table-column type="selection" width="55" :selectable="(row, index) => row.status !== 2 && !btnLoading" />
|
||||||
class="dicomFiles-table"
|
|
||||||
height="300"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column
|
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
:selectable="(row, index) => row.status !== 2 && !btnLoading"
|
|
||||||
/>
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="name" :label="$t('trials:uploadNonDicoms:table:fileName')" min-width="100" />
|
||||||
prop="name"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileName')"
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<!-- 文件大小 -->
|
<!-- 文件大小 -->
|
||||||
<el-table-column
|
<el-table-column prop="size" :label="$t('trials:uploadNonDicoms:table:fileSize')">
|
||||||
prop="size"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileSize')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.size && scope.row.size > 0
|
scope.row.size && scope.row.size > 0
|
||||||
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
||||||
: ''
|
: '0MB'
|
||||||
}}</span>
|
}}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 文件类型 -->
|
<!-- 文件类型 -->
|
||||||
<el-table-column
|
<el-table-column prop="type" :label="$t('trials:uploadNonDicoms:table:fileType')" />
|
||||||
prop="type"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileType')"
|
|
||||||
/>
|
|
||||||
<!-- 上传状态 -->
|
<!-- 上传状态 -->
|
||||||
<el-table-column
|
<el-table-column prop="status" :label="$t('trials:uploadNonDicoms:table:uploadStatus')" min-width="100">
|
||||||
prop="status"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:uploadStatus')"
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag
|
<el-tag :type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
||||||
:type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
v-if="scope.row.status || scope.row.status === 0">{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
||||||
v-if="scope.row.status || scope.row.status === 0"
|
|
||||||
>{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:uploadNonDicoms:table:failedFileCount')" min-width="150"
|
||||||
:label="$t('trials:uploadNonDicoms:table:failedFileCount')"
|
show-overflow-tooltip>
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-progress
|
<el-progress color="#409eff" :percentage="scope.row.size && scope.row.size > 0 ? ((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
||||||
color="#409eff"
|
|
||||||
:percentage="
|
|
||||||
((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
|
||||||
1
|
1
|
||||||
"
|
: ((scope.row.uploadFileSize * 100) / 1).toFixed(2) *
|
||||||
/>
|
1
|
||||||
|
" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="$t('common:action:action')">
|
<el-table-column :label="$t('common:action:action')">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button size="mini" icon="el-icon-delete" circle :disabled="btnLoading"
|
||||||
size="mini"
|
:title="$t('trials:crcUpload:action:delete')" @click="handleRemoveFile(scope.row)" />
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:disabled="btnLoading"
|
|
||||||
:title="$t('trials:crcUpload:action:delete')"
|
|
||||||
@click="handleRemoveFile(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -376,13 +198,8 @@
|
||||||
<span style="margin-right: 10px">{{
|
<span style="margin-right: 10px">{{
|
||||||
$store.state.trials.uploadTip
|
$store.state.trials.uploadTip
|
||||||
}}</span>
|
}}</span>
|
||||||
<el-button
|
<el-button size="small" type="primary" :disabled="selectArr.length == 0" :loading="btnLoading"
|
||||||
size="small"
|
@click="beginUpload">
|
||||||
type="primary"
|
|
||||||
:disabled="selectArr.length == 0"
|
|
||||||
:loading="btnLoading"
|
|
||||||
@click="beginUpload"
|
|
||||||
>
|
|
||||||
{{ $t('trials:uploadNonDicoms:action:upload') }}
|
{{ $t('trials:uploadNonDicoms:action:upload') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -588,7 +405,7 @@ export default {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
resetUploadForm() {
|
resetUploadForm() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
@ -714,8 +531,7 @@ export default {
|
||||||
if (!this.uploadVisible) return
|
if (!this.uploadVisible) return
|
||||||
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
|
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
|
||||||
file.status = 1
|
file.status = 1
|
||||||
let path = `/${this.$route.query.trialId}/TaskImage/${
|
let path = `/${this.$route.query.trialId}/TaskImage/${this.currentRow.SubjectId
|
||||||
this.currentRow.SubjectId
|
|
||||||
}/${this.currentRow.VisitTaskId}/${this.$guid()}${file.name
|
}/${this.currentRow.VisitTaskId}/${this.$guid()}${file.name
|
||||||
.substring(file.name.lastIndexOf('.'))
|
.substring(file.name.lastIndexOf('.'))
|
||||||
.toLocaleLowerCase()}`
|
.toLocaleLowerCase()}`
|
||||||
|
@ -772,7 +588,7 @@ export default {
|
||||||
(percentage, checkpoint, lastPer) => {
|
(percentage, checkpoint, lastPer) => {
|
||||||
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
||||||
if (item.uploadFileSize > file.fileSize) {
|
if (item.uploadFileSize > file.fileSize) {
|
||||||
item.uploadFileSize = file.fileSize
|
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -869,6 +685,7 @@ export default {
|
||||||
.top {
|
.top {
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload {
|
.upload {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
@ -883,6 +700,7 @@ export default {
|
||||||
background: #428bca;
|
background: #428bca;
|
||||||
border-color: #428bca;
|
border-color: #428bca;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
||||||
.select-file {
|
.select-file {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
@ -893,6 +711,7 @@ export default {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-select {
|
.btn-select {
|
||||||
//给显示在页面上的按钮写样式
|
//给显示在页面上的按钮写样式
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
@ -908,10 +727,12 @@ export default {
|
||||||
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
|
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tip {
|
.tip {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
|
|
||||||
i {
|
i {
|
||||||
margin: 3px 5px 0 0;
|
margin: 3px 5px 0 0;
|
||||||
}
|
}
|
||||||
|
|
After Width: | Height: | Size: 26 KiB |
|
@ -54,6 +54,8 @@ import upload from '@/components/element-ui/upload'
|
||||||
Vue.use(upload)
|
Vue.use(upload)
|
||||||
import Preview from '@/components/Preview/index'
|
import Preview from '@/components/Preview/index'
|
||||||
Vue.use(Preview)
|
Vue.use(Preview)
|
||||||
|
import Onlyoffice from '@/components/Preview_onlyoffice/index'
|
||||||
|
Vue.use(Onlyoffice)
|
||||||
import MFA from '@/components/MFA/index'
|
import MFA from '@/components/MFA/index'
|
||||||
Vue.use(MFA)
|
Vue.use(MFA)
|
||||||
import FB from '@/components/feedBack/index'
|
import FB from '@/components/feedBack/index'
|
||||||
|
|
|
@ -99,5 +99,27 @@ function metaDataProvider(type, imageId) {
|
||||||
columnPixelSpacing,
|
columnPixelSpacing,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (type === 'imagePixelModule') {
|
||||||
|
return {
|
||||||
|
samplesPerPixel: dataSet.uint16('x00280002'),
|
||||||
|
photometricInterpretation: dataSet.string('x00280004'),
|
||||||
|
rows: dataSet.uint16('x00280010'),
|
||||||
|
columns: dataSet.uint16('x00280011'),
|
||||||
|
bitsAllocated: dataSet.uint16('x00280100'),
|
||||||
|
bitsStored: dataSet.uint16('x00280101'),
|
||||||
|
highBit: dataSet.uint16('x00280102'),
|
||||||
|
pixelRepresentation: dataSet.uint16('x00280103'),
|
||||||
|
planarConfiguration: dataSet.uint16('x00280006'),
|
||||||
|
pixelAspectRatio: dataSet.uint16('x00280034'),
|
||||||
|
smallestPixelValue: null,
|
||||||
|
largestPixelValue: null,
|
||||||
|
redPaletteColorLookupTableDescriptor: dataSet.string('x00281101'),
|
||||||
|
greenPaletteColorLookupTableDescriptor: dataSet.string('x00281102'),
|
||||||
|
bluePaletteColorLookupTableDescriptor: dataSet.string('x00281103'),
|
||||||
|
redPaletteColorLookupTableData: dataSet.string('x00281201'),
|
||||||
|
greenPaletteColorLookupTableData: dataSet.string('x00281202'),
|
||||||
|
bluePaletteColorLookupTableData: dataSet.string('x00281203')
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
export default metaDataProvider;
|
export default metaDataProvider;
|
|
@ -0,0 +1,66 @@
|
||||||
|
let TYPES = ['word', 'cell', 'slide', 'pdf']
|
||||||
|
|
||||||
|
let DOCUMENTTYPE = {
|
||||||
|
'.doc': TYPES[0],
|
||||||
|
'.docm': TYPES[0],
|
||||||
|
'.docx': TYPES[0],
|
||||||
|
'.dot': TYPES[0],
|
||||||
|
'.dotm': TYPES[0],
|
||||||
|
'.dotx': TYPES[0],
|
||||||
|
'.epub': TYPES[0],
|
||||||
|
'.fb2': TYPES[0],
|
||||||
|
'.fodt': TYPES[0],
|
||||||
|
'.htm': TYPES[0],
|
||||||
|
'.html': TYPES[0],
|
||||||
|
'.mht': TYPES[0],
|
||||||
|
'.mhtml': TYPES[0],
|
||||||
|
'.odt': TYPES[0],
|
||||||
|
'.ott': TYPES[0],
|
||||||
|
'.pages': TYPES[0],
|
||||||
|
'.rtf': TYPES[0],
|
||||||
|
'.stw': TYPES[0],
|
||||||
|
'.sxw': TYPES[0],
|
||||||
|
'.txt': TYPES[0],
|
||||||
|
'.wps': TYPES[0],
|
||||||
|
'.wpt': TYPES[0],
|
||||||
|
'.xml': TYPES[0],
|
||||||
|
'.csv': TYPES[1],
|
||||||
|
'.et': TYPES[1],
|
||||||
|
'.ett': TYPES[1],
|
||||||
|
'.fods': TYPES[1],
|
||||||
|
'.numbers': TYPES[1],
|
||||||
|
'.ods': TYPES[1],
|
||||||
|
'.ots': TYPES[1],
|
||||||
|
'.sxc': TYPES[1],
|
||||||
|
'.xls': TYPES[1],
|
||||||
|
'.xlsb': TYPES[1],
|
||||||
|
'.xlsm': TYPES[1],
|
||||||
|
'.xlsx': TYPES[1],
|
||||||
|
'.xlt': TYPES[1],
|
||||||
|
'.xltm': TYPES[1],
|
||||||
|
'.xltx': TYPES[1],
|
||||||
|
'.xml': TYPES[1],
|
||||||
|
'.dps': TYPES[2],
|
||||||
|
'.dpt': TYPES[2],
|
||||||
|
'.fodp': TYPES[2],
|
||||||
|
'.key': TYPES[2],
|
||||||
|
'.odp': TYPES[2],
|
||||||
|
'.otp': TYPES[2],
|
||||||
|
'.pot': TYPES[2],
|
||||||
|
'.potm': TYPES[2],
|
||||||
|
'.potx': TYPES[2],
|
||||||
|
'.pps': TYPES[2],
|
||||||
|
'.ppsm': TYPES[2],
|
||||||
|
'.ppsx': TYPES[2],
|
||||||
|
'.ppt': TYPES[2],
|
||||||
|
'.pptm': TYPES[2],
|
||||||
|
'.pptx': TYPES[2],
|
||||||
|
'.sxi': TYPES[2],
|
||||||
|
'.djvu': TYPES[3],
|
||||||
|
'.docxf': TYPES[3],
|
||||||
|
'.oform': TYPES[3],
|
||||||
|
'.oxps': TYPES[3],
|
||||||
|
'.pdf': TYPES[3],
|
||||||
|
'.xps': TYPES[3]
|
||||||
|
}
|
||||||
|
export default DOCUMENTTYPE
|
|
@ -4,141 +4,57 @@
|
||||||
<el-form :inline="true" class="base-search-form">
|
<el-form :inline="true" class="base-search-form">
|
||||||
<!-- 是否需要回执 -->
|
<!-- 是否需要回执 -->
|
||||||
<el-form-item :label="$t('trials:emailManageCfg:title:isReturnRequired')" v-if="!systemLevel">
|
<el-form-item :label="$t('trials:emailManageCfg:title:isReturnRequired')" v-if="!systemLevel">
|
||||||
<el-select
|
<el-select v-model="searchData.IsReturnRequired" clearable style="width: 100px">
|
||||||
v-model="searchData.IsReturnRequired"
|
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.YesOrNo"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 是否加急 -->
|
<!-- 是否加急 -->
|
||||||
<el-form-item :label="$t('dictionary:email:label:IsUrgent')" v-if="!systemLevel">
|
<el-form-item :label="$t('dictionary:email:label:IsUrgent')" v-if="!systemLevel">
|
||||||
<el-select
|
<el-select v-model="searchData.IsUrgent" clearable style="width: 100px">
|
||||||
v-model="searchData.IsUrgent"
|
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.YesOrNo"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 是否启用 -->
|
<!-- 是否启用 -->
|
||||||
<el-form-item :label="$t('trials:emailManageCfg:table:IsEnable')" v-if="!systemLevel">
|
<el-form-item :label="$t('trials:emailManageCfg:table:IsEnable')" v-if="!systemLevel">
|
||||||
<el-select
|
<el-select v-model="searchData.IsEnable" clearable style="width: 100px">
|
||||||
v-model="searchData.IsEnable"
|
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.YesOrNo"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:auditRecord:table:criterion')" v-if="isDistinguishCriteria && !systemLevel">
|
||||||
:label="$t('trials:auditRecord:table:criterion')"
|
<el-select v-model="searchData.CriterionTypeEnum" clearable style="width: 100px">
|
||||||
v-if="isDistinguishCriteria && !systemLevel"
|
<el-option v-for="item of $d.CriterionType" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
>
|
|
||||||
<el-select
|
|
||||||
v-model="searchData.CriterionTypeEnum"
|
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.CriterionType"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('trials:emailManageCfg:form:BusinessModule')">
|
<el-form-item :label="$t('trials:emailManageCfg:form:BusinessModule')">
|
||||||
<el-select
|
<el-select v-model="searchData.BusinessModuleEnum" clearable style="width: 100px">
|
||||||
v-model="searchData.BusinessModuleEnum"
|
<el-option v-for="item of $d.BusinessModule" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.BusinessModule"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:emailManageCfg:form:BusinessScenario')">
|
||||||
:label="$t('trials:emailManageCfg:form:BusinessScenario')"
|
<el-select v-model="searchData.BusinessScenarioEnum" clearable style="width: 100px">
|
||||||
>
|
<el-option v-for="item of $d.Email_BusinessScenario" :value="item.value" :label="item.label"
|
||||||
<el-select
|
:key="item.id" />
|
||||||
v-model="searchData.BusinessScenarioEnum"
|
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.Email_BusinessScenario"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('trials:emailManageCfg:form:ToUserType')">
|
<el-form-item :label="$t('trials:emailManageCfg:form:ToUserType')">
|
||||||
<el-select
|
<el-select v-model="searchData.ToUserType" clearable style="width: 100px">
|
||||||
v-model="searchData.ToUserType"
|
<el-option v-for="item of UserTypeList" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of UserTypeList"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:emailManageCfg:form:EmailUrgent')" v-if="systemLevel === 1">
|
||||||
:label="$t('trials:emailManageCfg:form:EmailUrgent')"
|
<el-select v-model="searchData.EmailUrgentEnum" clearable style="width: 100px">
|
||||||
v-if="systemLevel === 1"
|
<el-option v-for="item of $d.EmailUrgent" :value="item.value" :label="item.label" :key="item.id" />
|
||||||
>
|
|
||||||
<el-select
|
|
||||||
v-model="searchData.EmailUrgentEnum"
|
|
||||||
clearable
|
|
||||||
style="width: 100px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.EmailUrgent"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:key="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
{{ $t('common:button:search') }}
|
{{ $t('common:button:search') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:reset') }}
|
{{ $t('common:button:reset') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
<el-form-item>
|
||||||
<span style="margin-left: auto">
|
|
||||||
<el-button type="primary" @click="handleExport">
|
<el-button type="primary" @click="handleExport">
|
||||||
{{ $t('common:button:export') }}
|
{{ $t('common:button:export') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -151,98 +67,52 @@
|
||||||
<el-button type="primary" @click="handleAdd">
|
<el-button type="primary" @click="handleAdd">
|
||||||
{{ $t('common:button:new') }}
|
{{ $t('common:button:new') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<!-- 受试者列表 -->
|
<!-- 受试者列表 -->
|
||||||
<el-table
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 45 }" :data="list" stripe height="100" style="width: 100%"
|
||||||
v-loading="loading"
|
@sort-change="handleSortByColumn">
|
||||||
v-adaptive="{ bottomOffset: 45 }"
|
|
||||||
:data="list"
|
|
||||||
stripe
|
|
||||||
height="100"
|
|
||||||
style="width: 100%"
|
|
||||||
@sort-change="handleSortByColumn"
|
|
||||||
>
|
|
||||||
<el-table-column type="index" width="40" />
|
<el-table-column type="index" width="40" />
|
||||||
<!-- Code -->
|
<!-- Code -->
|
||||||
<el-table-column
|
<el-table-column prop="Code" :label="$t('trials:emailManageCfg:title:code')" sortable="custom"
|
||||||
prop="Code"
|
show-overflow-tooltip min-width="100" />
|
||||||
:label="$t('trials:emailManageCfg:title:code')"
|
<el-table-column v-if="isDistinguishCriteria" prop="TrialReadingCriterionId"
|
||||||
sortable="custom"
|
:label="$t('trials:reviewTrack:table:criterionName')" show-overflow-tooltip sortable="custom" min-width="120">
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="isDistinguishCriteria"
|
|
||||||
prop="TrialReadingCriterionId"
|
|
||||||
:label="$t('trials:reviewTrack:table:criterionName')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="120"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('CriterionType', scope.row.CriterionTypeEnum) }}
|
{{ $fd('CriterionType', scope.row.CriterionTypeEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 邮件主题(中文) -->
|
<!-- 邮件主题(中文) -->
|
||||||
<el-table-column
|
<el-table-column prop="EmailTopicCN" :label="$t('trials:emailManageCfg:table:EmailTopicCN')" sortable="custom"
|
||||||
prop="EmailTopicCN"
|
show-overflow-tooltip min-width="160" />
|
||||||
:label="$t('trials:emailManageCfg:table:EmailTopicCN')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<!-- 邮件主题(英文) -->
|
<!-- 邮件主题(英文) -->
|
||||||
<el-table-column
|
<el-table-column prop="EmailTopic" :label="$t('trials:emailManageCfg:table:EmailTopic')" sortable="custom"
|
||||||
prop="EmailTopic"
|
show-overflow-tooltip min-width="160" />
|
||||||
:label="$t('trials:emailManageCfg:table:EmailTopic')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<!-- 业务层级 -->
|
<!-- 业务层级 -->
|
||||||
<el-table-column
|
<el-table-column prop="BusinessLevelEnum" :label="$t('dictionary:email:label:businessLevel')" sortable="custom"
|
||||||
prop="BusinessLevelEnum"
|
show-overflow-tooltip min-width="150">
|
||||||
:label="$t('dictionary:email:label:businessLevel')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="150"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('BusinessLevel', scope.row.BusinessLevelEnum) }}
|
{{ $fd('BusinessLevel', scope.row.BusinessLevelEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 业务模块 -->
|
<!-- 业务模块 -->
|
||||||
<el-table-column
|
<el-table-column prop="BusinessModuleEnum" :label="$t('dictionary:email:label:businessModule')" sortable="custom"
|
||||||
prop="BusinessModuleEnum"
|
show-overflow-tooltip min-width="160">
|
||||||
:label="$t('dictionary:email:label:businessModule')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="160"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('BusinessModule', scope.row.BusinessModuleEnum) }}
|
{{ $fd('BusinessModule', scope.row.BusinessModuleEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 业务场景 -->
|
<!-- 业务场景 -->
|
||||||
<el-table-column
|
<el-table-column prop="BusinessScenarioEnum" :label="$t('trials:emailManageCfg:table:BusinessScenarioEnum')"
|
||||||
prop="BusinessScenarioEnum"
|
sortable="custom" show-overflow-tooltip min-width="130">
|
||||||
:label="$t('trials:emailManageCfg:table:BusinessScenarioEnum')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="130"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('Email_BusinessScenario', scope.row.BusinessScenarioEnum) }}
|
{{ $fd('Email_BusinessScenario', scope.row.BusinessScenarioEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 收件人v-if="systemLevel !== 1" -->
|
<!-- 收件人v-if="systemLevel !== 1" -->
|
||||||
<el-table-column
|
<el-table-column prop="ToUserTypeList" :label="$t('trials:emailManageCfg:title:toUserTypeList')"
|
||||||
prop="ToUserTypeList"
|
show-overflow-tooltip min-width="100">
|
||||||
:label="$t('trials:emailManageCfg:title:toUserTypeList')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{
|
{{
|
||||||
scope.row.ToUserTypeList.length > 0
|
scope.row.ToUserTypeList.length > 0
|
||||||
|
@ -254,12 +124,8 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 抄送人v-if="!systemLevel" -->
|
<!-- 抄送人v-if="!systemLevel" -->
|
||||||
<el-table-column
|
<el-table-column prop="CopyUserTypeList" :label="$t('trials:emailManageCfg:title:copyUserTypeList')"
|
||||||
prop="CopyUserTypeList"
|
show-overflow-tooltip min-width="100">
|
||||||
:label="$t('trials:emailManageCfg:title:copyUserTypeList')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{
|
{{
|
||||||
scope.row.CopyUserTypeList.length > 0
|
scope.row.CopyUserTypeList.length > 0
|
||||||
|
@ -271,52 +137,27 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 加急状态 -->
|
<!-- 加急状态 -->
|
||||||
<el-table-column
|
<el-table-column prop="EmailUrgentEnum" :label="$t('dictionary:email:label:IsUrgent')" sortable="custom"
|
||||||
prop="EmailUrgentEnum"
|
show-overflow-tooltip min-width="110">
|
||||||
:label="$t('dictionary:email:label:IsUrgent')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="110"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('EmailUrgent', scope.row.EmailUrgentEnum) }}
|
{{ $fd('EmailUrgent', scope.row.EmailUrgentEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 发送周期和时间 -->
|
<!-- 发送周期和时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="EmailCron" :label="$t('trials:emailManageCfg:table:EmailCron')" sortable="custom"
|
||||||
prop="EmailCron"
|
show-overflow-tooltip min-width="180" />
|
||||||
:label="$t('trials:emailManageCfg:table:EmailCron')"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="180"
|
|
||||||
/>
|
|
||||||
<!-- 附件 -->
|
<!-- 附件 -->
|
||||||
<el-table-column
|
<el-table-column prop="FileName" :label="$t('trials:emailManageCfg:title:fileName')" show-overflow-tooltip
|
||||||
prop="FileName"
|
min-width="100" v-if="!systemLevel">
|
||||||
:label="$t('trials:emailManageCfg:title:fileName')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="100"
|
|
||||||
v-if="!systemLevel"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button v-if="scope.row.FilePath" type="text" @click="handlePreview(scope.row.FilePath)">
|
||||||
v-if="scope.row.FilePath"
|
|
||||||
type="text"
|
|
||||||
@click="handlePreview(scope.row.FilePath)"
|
|
||||||
>
|
|
||||||
{{ scope.row.FileName }}
|
{{ scope.row.FileName }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 是否需要回执 -->
|
<!-- 是否需要回执 -->
|
||||||
<el-table-column
|
<el-table-column prop="IsReturnRequired" :label="$t('trials:emailManageCfg:title:isReturnRequired')"
|
||||||
prop="IsReturnRequired"
|
show-overflow-tooltip sortable="custom" min-width="160" v-if="!systemLevel">
|
||||||
:label="$t('trials:emailManageCfg:title:isReturnRequired')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
v-if="!systemLevel"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsReturnRequired" type="danger">
|
<el-tag v-if="scope.row.IsReturnRequired" type="danger">
|
||||||
{{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
|
{{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
|
||||||
|
@ -327,14 +168,8 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 是否自动发送 -->
|
<!-- 是否自动发送 -->
|
||||||
<el-table-column
|
<el-table-column prop="IsAutoSend" :label="$t('trials:emailManageCfg:title:isAutoSend')" show-overflow-tooltip
|
||||||
prop="IsAutoSend"
|
sortable="custom" min-width="160" v-if="!systemLevel">
|
||||||
:label="$t('trials:emailManageCfg:title:isAutoSend')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
v-if="!systemLevel"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsAutoSend" type="danger">
|
<el-tag v-if="scope.row.IsAutoSend" type="danger">
|
||||||
{{ $fd('YesOrNo', scope.row.IsAutoSend) }}
|
{{ $fd('YesOrNo', scope.row.IsAutoSend) }}
|
||||||
|
@ -344,14 +179,8 @@
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column prop="IsEnable" :label="$t('trials:emailManageCfg:table:IsEnable')" show-overflow-tooltip
|
||||||
prop="IsEnable"
|
sortable="custom" min-width="160" v-if="!systemLevel">
|
||||||
:label="$t('trials:emailManageCfg:table:IsEnable')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
v-if="!systemLevel"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsEnable" type="danger">
|
<el-tag v-if="scope.row.IsEnable" type="danger">
|
||||||
{{ $fd('YesOrNo', scope.row.IsEnable) }}
|
{{ $fd('YesOrNo', scope.row.IsEnable) }}
|
||||||
|
@ -362,22 +191,12 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 更新时间 -->
|
<!-- 更新时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="UpdateTime" :label="$t('trials:emailManageCfg:title:updateTime')" show-overflow-tooltip
|
||||||
prop="UpdateTime"
|
sortable="custom" min-width="160" />
|
||||||
:label="$t('trials:emailManageCfg:title:updateTime')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<!-- 创建时间 -->
|
<!-- 创建时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="CreateTime" :label="$t('trials:emailManageCfg:title:createTime')" show-overflow-tooltip
|
||||||
prop="CreateTime"
|
sortable="custom" min-width="160" />
|
||||||
:label="$t('trials:emailManageCfg:title:createTime')"
|
<el-table-column :label="$t('common:action:action')" min-width="180" fixed="right">
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column label="Action" min-width="180" fixed="right">
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" @click="handleEdit(scope.row)">
|
<el-button type="text" @click="handleEdit(scope.row)">
|
||||||
{{ $t('common:button:edit') }}
|
{{ $t('common:button:edit') }}
|
||||||
|
@ -386,77 +205,38 @@
|
||||||
<el-button type="text" @click="handleDelete(scope.row)">
|
<el-button type="text" @click="handleDelete(scope.row)">
|
||||||
{{ $t('common:button:delete') }}
|
{{ $t('common:button:delete') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="text" @click="
|
||||||
type="text"
|
|
||||||
@click="
|
|
||||||
preview(scope.row.EmailHtmlContentCN, scope.row.EmailHtmlContent)
|
preview(scope.row.EmailHtmlContentCN, scope.row.EmailHtmlContent)
|
||||||
"
|
">{{ $t('common:button:preview') }}</el-button>
|
||||||
>{{ $t('common:button:preview') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
class="page"
|
@pagination="getList" />
|
||||||
:total="total"
|
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
<!-- 搜索框 -->
|
<!-- 搜索框 -->
|
||||||
<!-- 修改受试者状态 -->
|
<!-- 修改受试者状态 -->
|
||||||
<el-dialog
|
<el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title" width="700px"
|
||||||
v-if="editVisible"
|
fullscreen custom-class="base-dialog-wrapper">
|
||||||
:visible.sync="editVisible"
|
<EmailForm :data="rowData" :system-level="systemLevel" :isDistinguishCriteria="isDistinguishCriteria"
|
||||||
:close-on-click-modal="false"
|
@closeDialog="closeDialog" @getList="getList" @PreviewHTML="preview" />
|
||||||
:title="title"
|
|
||||||
width="700px"
|
|
||||||
fullscreen
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<EmailForm
|
|
||||||
:data="rowData"
|
|
||||||
:system-level="systemLevel"
|
|
||||||
:isDistinguishCriteria="isDistinguishCriteria"
|
|
||||||
@closeDialog="closeDialog"
|
|
||||||
@getList="getList"
|
|
||||||
@PreviewHTML="preview"
|
|
||||||
/>
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 修改受试者状态 -->
|
<!-- 修改受试者状态 -->
|
||||||
<el-dialog
|
<el-dialog v-if="attachmentVisible" :visible.sync="attachmentVisible" :close-on-click-modal="false"
|
||||||
v-if="attachmentVisible"
|
:title="$t('trials:emailManageCfg:title:fileName')" width="80%" custom-class="base-dialog-wrapper" append-to-body>
|
||||||
:visible.sync="attachmentVisible"
|
<AttachmentList :business-scenario-enum="rowData.BusinessScenarioEnum"
|
||||||
:close-on-click-modal="false"
|
:is-distinguish-criteria="rowData.IsDistinguishCriteria" @getList="getList" />
|
||||||
:title="$t('trials:emailManageCfg:title:fileName')"
|
|
||||||
width="80%"
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
append-to-body
|
|
||||||
>
|
|
||||||
<AttachmentList
|
|
||||||
:business-scenario-enum="rowData.BusinessScenarioEnum"
|
|
||||||
:is-distinguish-criteria="rowData.IsDistinguishCriteria"
|
|
||||||
@getList="getList"
|
|
||||||
/>
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<!-- 预览模板 -->
|
<!-- 预览模板 -->
|
||||||
<el-dialog
|
<el-dialog v-if="previewVisible" :visible.sync="previewVisible" :close-on-click-modal="false"
|
||||||
v-if="previewVisible"
|
:title="$t('common:button:preview')" fullscreen custom-class="base-dialog-wrapper">
|
||||||
:visible.sync="previewVisible"
|
<div style="
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="$t('common:button:preview')"
|
|
||||||
fullscreen
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<div style="min-width: 50%">
|
<div style="min-width: 50%">
|
||||||
<!-- 邮件内容模版(CN) -->
|
<!-- 邮件内容模版(CN) -->
|
||||||
<h3>{{ $t('dictionary:email:title:title1') }}</h3>
|
<h3>{{ $t('dictionary:email:title:title1') }}</h3>
|
||||||
|
@ -630,3 +410,8 @@ export default {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.box-body .search .base-search-form .el-form-item {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -9,71 +9,36 @@
|
||||||
<!-- Reset Password -->
|
<!-- Reset Password -->
|
||||||
|
|
||||||
<div class="box-wrapper" v-if="active === 0">
|
<div class="box-wrapper" v-if="active === 0">
|
||||||
<el-form
|
<el-form ref="resetForm" v-loading="formLoading" :model="form" label-width="130px" :rules="rules"
|
||||||
ref="resetForm"
|
class="demo-ruleForm" size="small">
|
||||||
v-loading="formLoading"
|
|
||||||
:model="form"
|
|
||||||
label-width="130px"
|
|
||||||
:rules="rules"
|
|
||||||
class="demo-ruleForm"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<!-- 邮箱 -->
|
<!-- 邮箱 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone">
|
||||||
:label="$t('passwordReset:form:email')"
|
|
||||||
prop="EmailOrPhone"
|
|
||||||
>
|
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<el-input
|
<el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
|
||||||
v-model="form.EmailOrPhone"
|
|
||||||
autocomplete="off"
|
|
||||||
@change="handleEmailChange"
|
|
||||||
/>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 验证码 -->
|
<!-- 验证码 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:researchForm:form:verifyCode')" required>
|
||||||
:label="$t('trials:researchForm:form:verifyCode')"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<el-form-item prop="VerificationCode">
|
<el-form-item prop="VerificationCode">
|
||||||
<el-input v-model="form.VerificationCode" autocomplete="off" />
|
<el-input v-model="form.VerificationCode" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6" style="text-align: right">
|
<el-col :span="6" style="text-align: right">
|
||||||
<el-button
|
<el-button size="small" type="primary" style="width: 80%" :disabled="sendDisabled"
|
||||||
size="small"
|
@click="handleSendCode">{{ sendTitle }}</el-button>
|
||||||
type="primary"
|
|
||||||
style="width: 80%"
|
|
||||||
:disabled="sendDisabled"
|
|
||||||
@click="handleSendCode"
|
|
||||||
>{{ sendTitle }}</el-button
|
|
||||||
>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- 校验 -->
|
<!-- 校验 -->
|
||||||
<el-button
|
<el-button size="small" type="primary" style="width: 50%; margin: auto; display: block"
|
||||||
size="small"
|
:disabled="form.VerificationCode === '' || form.EmailOrPhone === ''" @click="verifyCode">
|
||||||
type="primary"
|
|
||||||
style="width: 50%; margin: auto; display: block"
|
|
||||||
:disabled="form.VerificationCode === '' || form.EmailOrPhone === ''"
|
|
||||||
@click="verifyCode"
|
|
||||||
>
|
|
||||||
{{ $t('passwordReset:button:verify') }}
|
{{ $t('passwordReset:button:verify') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-wrapper" v-show="active === 1">
|
<div class="box-wrapper" v-show="active === 1">
|
||||||
<el-form
|
<el-form ref="resetForm2" v-loading="formLoading" :model="form"
|
||||||
ref="resetForm2"
|
:label-width="$i18n.locale === 'en' ? '180px' : '100px'" :rules="rules2" class="demo-ruleForm" size="small">
|
||||||
v-loading="formLoading"
|
|
||||||
:model="form"
|
|
||||||
:label-width="$i18n.locale === 'en' ? '180px' : '100px'"
|
|
||||||
:rules="rules2"
|
|
||||||
class="demo-ruleForm"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<!-- 用户名 -->
|
<!-- 用户名 -->
|
||||||
<el-form-item :label="$t('passwordReset:form:userName')" prop="UserId">
|
<el-form-item :label="$t('passwordReset:form:userName')" prop="UserId">
|
||||||
<el-input v-model="form.UserName" disabled />
|
<el-input v-model="form.UserName" disabled />
|
||||||
|
@ -105,27 +70,17 @@
|
||||||
<el-input v-model="form.UserType" disabled />
|
<el-input v-model="form.UserType" disabled />
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<!-- 新密码 -->
|
<!-- 新密码 -->
|
||||||
<el-form-item
|
<el-form-item class="my_new_pwd" :label="$t('passwordReset:form:password')" prop="NewPwd"
|
||||||
class="my_new_pwd"
|
style="position: relative">
|
||||||
:label="$t('passwordReset:form:password')"
|
|
||||||
prop="NewPwd"
|
|
||||||
style="position: relative"
|
|
||||||
>
|
|
||||||
<el-input v-model="form.NewPwd" show-password autocomplete="off" />
|
<el-input v-model="form.NewPwd" show-password autocomplete="off" />
|
||||||
<span style="position: absolute; right: -30px">
|
<span style="position: absolute; right: -30px">
|
||||||
<el-tooltip
|
<el-tooltip :content="$t('passwordReset:form:passwordCentent')" placement="top">
|
||||||
:content="$t('passwordReset:form:passwordCentent')"
|
|
||||||
placement="top"
|
|
||||||
>
|
|
||||||
<i class="el-icon-question" />
|
<i class="el-icon-question" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 确认密码 -->
|
<!-- 确认密码 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('passwordReset:form:confirmPassword')" prop="CheckPass">
|
||||||
:label="$t('passwordReset:form:confirmPassword')"
|
|
||||||
prop="CheckPass"
|
|
||||||
>
|
|
||||||
<el-input v-model="form.CheckPass" show-password autocomplete="off" />
|
<el-input v-model="form.CheckPass" show-password autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -135,12 +90,7 @@
|
||||||
{{ $t('passwordReset:button:cancel') }}
|
{{ $t('passwordReset:button:cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 提交 -->
|
<!-- 提交 -->
|
||||||
<el-button
|
<el-button size="small" type="primary" @click="onSubmit" style="width: 46%">
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
@click="onSubmit"
|
|
||||||
style="width: 46%"
|
|
||||||
>
|
|
||||||
{{ $t('passwordReset:button:submit') }}
|
{{ $t('passwordReset:button:submit') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -388,10 +338,14 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onCancel() {
|
onCancel() {
|
||||||
this.$refs['resetForm'].resetFields()
|
// this.$refs['resetForm'].resetFields()
|
||||||
Object.keys(this.form).forEach((key) => {
|
Object.keys(this.form).forEach((key) => {
|
||||||
this.form[key] = ''
|
this.form[key] = ''
|
||||||
})
|
})
|
||||||
|
this.sendDisabled = false
|
||||||
|
this.sendTitle = this.$t('passwordReset:button:send')
|
||||||
|
countdown = 60
|
||||||
|
clearTimeout(timer)
|
||||||
this.active = 0
|
this.active = 0
|
||||||
},
|
},
|
||||||
goBack() {
|
goBack() {
|
||||||
|
@ -404,12 +358,14 @@ export default {
|
||||||
.reset-wrapper {
|
.reset-wrapper {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reset-wrapper .el-page-header {
|
.reset-wrapper .el-page-header {
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
border: 1px solid #ebeef5;
|
border: 1px solid #ebeef5;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reset-wrapper .box-wrapper {
|
.reset-wrapper .box-wrapper {
|
||||||
width: 700px;
|
width: 700px;
|
||||||
margin: 20px auto;
|
margin: 20px auto;
|
||||||
|
@ -425,6 +381,7 @@ export default {
|
||||||
.is-error.my_new_pwd {
|
.is-error.my_new_pwd {
|
||||||
margin-bottom: 45px;
|
margin-bottom: 45px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flexBox {
|
.flexBox {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
|
@ -2,152 +2,66 @@
|
||||||
<div class="log">
|
<div class="log">
|
||||||
<div ref="leftContainer" class="left">
|
<div ref="leftContainer" class="left">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<el-form-item
|
<el-form-item :label="$t('system:loginLog:label:OptType')" prop="OptType">
|
||||||
:label="$t('system:loginLog:label:OptType')"
|
<el-select v-model="searchData.OptTypeList" clearable style="width: 200px" multiple :collapse-tags="true">
|
||||||
prop="OptType"
|
<el-option v-for="item of $d.UserOptType" :key="'UserOptType' + item.label" :value="item.value"
|
||||||
>
|
:label="item.label" />
|
||||||
<el-select
|
|
||||||
v-model="searchData.OptType"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.UserOptType"
|
|
||||||
:key="'UserOptType' + item.label"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="IP" prop="IP">
|
<el-form-item label="IP" prop="IP">
|
||||||
<el-input
|
<el-input v-model="searchData.IP" size="small" clearable style="width: 120px" />
|
||||||
v-model="searchData.IP"
|
|
||||||
size="small"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('system:loginLog:label:LoginFaildName')" prop="LoginFaildName">
|
||||||
:label="$t('system:loginLog:label:LoginFaildName')"
|
<el-input v-model="searchData.LoginFaildName" size="small" clearable style="width: 120px" />
|
||||||
prop="LoginFaildName"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="searchData.LoginFaildName"
|
|
||||||
size="small"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('system:loginLog:table:LoginUserName')" prop="LoginFaildName">
|
||||||
:label="$t('system:loginLog:table:LoginUserName')"
|
<el-input v-model="searchData.LoginUserName" size="small" clearable style="width: 120px" />
|
||||||
prop="LoginFaildName"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="searchData.LoginUserName"
|
|
||||||
size="small"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('system:loginLog:table:LoginUserType')" prop="LoginUserTypeEnum">
|
||||||
:label="$t('system:loginLog:table:LoginUserType')"
|
<el-select v-model="searchData.LoginUserTypeEnum" clearable style="width: 120px">
|
||||||
prop="LoginUserTypeEnum"
|
<el-option v-for="item of $d.UserType" :key="'UserType' + item.label" :value="item.value"
|
||||||
>
|
:label="item.label" />
|
||||||
<el-select
|
|
||||||
v-model="searchData.LoginUserTypeEnum"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.UserType"
|
|
||||||
:key="'UserType' + item.label"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('system:loginLog:label:CreateTime')">
|
<el-form-item :label="$t('system:loginLog:label:CreateTime')">
|
||||||
<el-date-picker
|
<el-date-picker v-model="datetimerange" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
v-model="datetimerange"
|
:default-time="['00:00:00', '23:59:59']" @change="handleDatetimeChange" style="width: 380px" />
|
||||||
type="datetimerange"
|
|
||||||
value-format="yyyy-MM-dd HH:mm:ss"
|
|
||||||
:default-time="['00:00:00', '23:59:59']"
|
|
||||||
@change="handleDatetimeChange"
|
|
||||||
style="width: 380px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" @click="getList">
|
<el-button type="primary" icon="el-icon-search" @click="getList">
|
||||||
{{ $t('common:button:search') }}
|
{{ $t('common:button:search') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:reset') }}
|
{{ $t('common:button:reset') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-table
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 45 }" height="100" :data="list" class="table"
|
||||||
v-loading="loading"
|
@sort-change="handleSortByColumn">
|
||||||
v-adaptive="{ bottomOffset: 45 }"
|
|
||||||
height="100"
|
|
||||||
:data="list"
|
|
||||||
class="table"
|
|
||||||
@sort-change="handleSortByColumn"
|
|
||||||
>
|
|
||||||
<el-table-column type="index" width="50">
|
<el-table-column type="index" width="50">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span
|
<span style="
|
||||||
style="
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
"
|
">
|
||||||
>
|
<el-tooltip class="item" effect="dark" :content="$t('system:loginLog:label:IsLoginUncommonly')"
|
||||||
<el-tooltip
|
placement="top" style="margin-right: 3px" v-if="scope.row.IsLoginUncommonly">
|
||||||
class="item"
|
<i v-if="scope.row.IsLoginUncommonly" class="el-icon-warning icon-i"></i>
|
||||||
effect="dark"
|
|
||||||
:content="$t('system:loginLog:label:IsLoginUncommonly')"
|
|
||||||
placement="top"
|
|
||||||
style="margin-right: 3px"
|
|
||||||
v-if="scope.row.IsLoginUncommonly"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
v-if="scope.row.IsLoginUncommonly"
|
|
||||||
class="el-icon-warning icon-i"
|
|
||||||
></i>
|
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<span>{{ scope.$index + 1 }}</span>
|
<span>{{ scope.$index + 1 }}</span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('system:loginLog:table:OptType')" prop="OptType" min-width="150"
|
||||||
:label="$t('system:loginLog:table:OptType')"
|
show-overflow-tooltip sortable="custom">
|
||||||
prop="OptType"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('UserOptType', scope.row.OptType) }}
|
{{ $fd('UserOptType', scope.row.OptType) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column label="IP" prop="IP" min-width="150" sortable="custom" show-overflow-tooltip />
|
||||||
label="IP"
|
<el-table-column :label="$t('trials:loginLog:table:IPRegion')" prop="IPRegion" min-width="120"
|
||||||
prop="IP"
|
show-overflow-tooltip sortable="custom" />
|
||||||
min-width="150"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('trials:loginLog:table:IPRegion')"
|
|
||||||
prop="IPRegion"
|
|
||||||
min-width="120"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
:label="$t('system:loginLog:table:LoginFaildName')"
|
:label="$t('system:loginLog:table:LoginFaildName')"
|
||||||
prop="LoginFaildName"
|
prop="LoginFaildName"
|
||||||
|
@ -155,20 +69,10 @@
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
sortable="custom"
|
sortable="custom"
|
||||||
/> -->
|
/> -->
|
||||||
<el-table-column
|
<el-table-column :label="$t('system:loginLog:table:LoginUserName')" prop="ActionUserName" min-width="140"
|
||||||
:label="$t('system:loginLog:table:LoginUserName')"
|
show-overflow-tooltip sortable="custom" />
|
||||||
prop="ActionUserName"
|
<el-table-column :label="$t('system:loginLog:table:Aetionlserlype')" prop="ActionUserType" min-width="100"
|
||||||
min-width="140"
|
show-overflow-tooltip sortable="custom" />
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('system:loginLog:table:Aetionlserlype')"
|
|
||||||
prop="ActionUserType"
|
|
||||||
min-width="100"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
:label="$t('system:loginLog:table:LoginUserType')"
|
:label="$t('system:loginLog:table:LoginUserType')"
|
||||||
prop="LoginUserTypeEnum"
|
prop="LoginUserTypeEnum"
|
||||||
|
@ -180,13 +84,8 @@
|
||||||
{{ $fd("UserType", scope.row.LoginUserTypeEnum) }}
|
{{ $fd("UserType", scope.row.LoginUserTypeEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<el-table-column
|
<el-table-column :label="$t('system:loginLog:table:OptUserName')" prop="TargetIdentityUserName" min-width="200"
|
||||||
:label="$t('system:loginLog:table:OptUserName')"
|
sortable="custom" show-overflow-tooltip />
|
||||||
prop="TargetIdentityUserName"
|
|
||||||
min-width="200"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
:label="$t('system:loginLog:table:OptUserType')"
|
:label="$t('system:loginLog:table:OptUserType')"
|
||||||
prop="OptUserTypeEnum"
|
prop="OptUserTypeEnum"
|
||||||
|
@ -198,36 +97,19 @@
|
||||||
{{ $fd("UserType", scope.row.OptUserTypeEnum) }}
|
{{ $fd("UserType", scope.row.OptUserTypeEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<el-table-column
|
<el-table-column :label="$t('system:loginLog:table:detail')" min-width="120" show-overflow-tooltip>
|
||||||
:label="$t('system:loginLog:table:detail')"
|
|
||||||
min-width="120"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button v-if="scope.row.JsonObj" type="text" @click="handleOpenDialog(scope.row)">
|
||||||
v-if="scope.row.JsonObj"
|
|
||||||
type="text"
|
|
||||||
@click="handleOpenDialog(scope.row)"
|
|
||||||
>
|
|
||||||
<span>{{ $t('system:loginLog:message:detail') }}</span>
|
<span>{{ $t('system:loginLog:message:detail') }}</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('system:loginLog:table:CreateTime')" prop="CreateTime" min-width="180"
|
||||||
:label="$t('system:loginLog:table:CreateTime')"
|
sortable="custom" show-overflow-tooltip />
|
||||||
prop="CreateTime"
|
|
||||||
min-width="180"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="pagination" style="text-align: right; margin-top: 5px">
|
<div class="pagination" style="text-align: right; margin-top: 5px">
|
||||||
<pagination
|
<pagination :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
:total="total"
|
@pagination="getList" />
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<detail :config="config" :JsonObj="JsonObj" />
|
<detail :config="config" :JsonObj="JsonObj" />
|
||||||
|
@ -241,6 +123,7 @@ import moment from 'moment'
|
||||||
const searchDataDefault = () => {
|
const searchDataDefault = () => {
|
||||||
return {
|
return {
|
||||||
OptType: null,
|
OptType: null,
|
||||||
|
OptTypeList: [],
|
||||||
Ip: '',
|
Ip: '',
|
||||||
LoginFaildName: '',
|
LoginFaildName: '',
|
||||||
LoginUserName: '',
|
LoginUserName: '',
|
||||||
|
@ -334,25 +217,30 @@ export default {
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 0;
|
width: 0;
|
||||||
flex-grow: 4;
|
flex-grow: 4;
|
||||||
|
|
||||||
// border-right: 1px solid #ccc;
|
// border-right: 1px solid #ccc;
|
||||||
.filter-container {
|
.filter-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-table {
|
.data-table {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 5px 0px;
|
padding: 5px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pagination-container {
|
.pagination-container {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-i {
|
.icon-i {
|
||||||
color: #f56c6c;
|
color: #f56c6c;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
|
@ -9,64 +9,28 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 研究方案号 -->
|
<!-- 研究方案号 -->
|
||||||
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
|
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
|
||||||
<el-input
|
<el-input v-model="searchData.ResearchProgramNo" style="width: 100px" clearable />
|
||||||
v-model="searchData.ResearchProgramNo"
|
|
||||||
style="width: 100px"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 试验名称 -->
|
<!-- 试验名称 -->
|
||||||
<el-form-item :label="$t('trials:trials-list:table:experimentName')">
|
<el-form-item :label="$t('trials:trials-list:table:experimentName')">
|
||||||
<el-input
|
<el-input v-model="searchData.ExperimentName" style="width: 100px" clearable />
|
||||||
v-model="searchData.ExperimentName"
|
|
||||||
style="width: 100px"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- Sponsor -->
|
<!-- Sponsor -->
|
||||||
<el-form-item :label="$t('trials:trials-list:table:sponsor')">
|
<el-form-item :label="$t('trials:trials-list:table:sponsor')">
|
||||||
<el-select
|
<el-select v-model="searchData.SponsorId" style="width: 150px" clearable>
|
||||||
v-model="searchData.SponsorId"
|
<el-option v-for="item in sponsorList" :key="item.Id" :label="item.SponsorName" :value="item.Id" />
|
||||||
style="width: 150px"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in sponsorList"
|
|
||||||
:key="item.Id"
|
|
||||||
:label="item.SponsorName"
|
|
||||||
:value="item.Id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 阅片标准 -->
|
<!-- 阅片标准 -->
|
||||||
<el-form-item
|
<el-form-item v-if="hasPermi(['role:ir'])" :label="$t('trials:trials-list:table:IR_ReadingCriterionList')">
|
||||||
v-if="hasPermi(['role:ir'])"
|
<el-select v-model="searchData.CriterionType" style="width: 150px" clearable>
|
||||||
:label="$t('trials:trials-list:table:IR_ReadingCriterionList')"
|
<el-option v-for="item in $d.CriterionType" :key="item.id" :label="item.label" :value="item.value" />
|
||||||
>
|
|
||||||
<el-select
|
|
||||||
v-model="searchData.CriterionType"
|
|
||||||
style="width: 150px"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in $d.CriterionType"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 联系人 -->
|
<!-- 联系人 -->
|
||||||
<el-form-item
|
<el-form-item v-if="hasPermi(['role:ir'])" :label="$t('trials:trials-list:table:IR_PMEmailList')">
|
||||||
v-if="hasPermi(['role:ir'])"
|
<el-input v-model="searchData.PM_EMail" style="width: 100px" clearable />
|
||||||
:label="$t('trials:trials-list:table:IR_PMEmailList')"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="searchData.PM_EMail"
|
|
||||||
style="width: 100px"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<!-- <el-button type="text" @click="isShow = !isShow">More</el-button> -->
|
<!-- <el-button type="text" @click="isShow = !isShow">More</el-button> -->
|
||||||
|
@ -75,33 +39,19 @@
|
||||||
{{ $t('common:button:search') }}
|
{{ $t('common:button:search') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- Reset -->
|
<!-- Reset -->
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:reset') }}
|
{{ $t('common:button:reset') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- Export -->
|
<!-- Export -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:export']" type="primary" icon="el-icon-download"
|
||||||
v-hasPermi="['trials:trials-list:export']"
|
:loading="exportLoading" @click="handleExportTrial">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-download"
|
|
||||||
:loading="exportLoading"
|
|
||||||
@click="handleExportTrial"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:export') }}
|
{{ $t('common:button:export') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span style="margin-left: auto">
|
<span style="margin-left: auto">
|
||||||
<!-- New -->
|
<!-- New -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:new']" icon="el-icon-plus" type="primary" @click="handleNew">
|
||||||
v-hasPermi="['trials:trials-list:new']"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
type="primary"
|
|
||||||
@click="handleNew"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:new') }}
|
{{ $t('common:button:new') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
|
@ -112,190 +62,88 @@
|
||||||
<div style="padding: 10px">
|
<div style="padding: 10px">
|
||||||
<el-form label-width="140px">
|
<el-form label-width="140px">
|
||||||
<el-form-item label="Trial ID">
|
<el-form-item label="Trial ID">
|
||||||
<el-input
|
<el-input v-model="searchData.Code" placeholder="Trial ID" style="width: 100%" clearable />
|
||||||
v-model="searchData.Code"
|
|
||||||
placeholder="Trial ID"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Indication">
|
<el-form-item label="Indication">
|
||||||
<el-input
|
<el-input v-model="searchData.Indication" placeholder="Indication" style="width: 100%" clearable />
|
||||||
v-model="searchData.Indication"
|
|
||||||
placeholder="Indication"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Assessment Criteria">
|
<el-form-item label="Assessment Criteria">
|
||||||
<el-select
|
<el-select v-model="searchData.CriterionIds" placeholder="Assessment Criteria" style="width: 100%" clearable
|
||||||
v-model="searchData.CriterionIds"
|
multiple>
|
||||||
placeholder="Assessment Criteria"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
multiple
|
|
||||||
>
|
|
||||||
<!-- <el-option
|
<!-- <el-option
|
||||||
v-for="(key,value) of dictionaryList.ReadingStandard"
|
v-for="(key,value) of dictionaryList.ReadingStandard"
|
||||||
:key="key"
|
:key="key"
|
||||||
:label="key"
|
:label="key"
|
||||||
:value="value"
|
:value="value"
|
||||||
/> -->
|
/> -->
|
||||||
<el-option
|
<el-option v-for="item of dict.type.ReadingStandard" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.ReadingStandard"
|
:value="item.value" />
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Sponsor">
|
<el-form-item label="Sponsor">
|
||||||
<el-select
|
<el-select v-model="searchData.SponsorId" placeholder="Sponsor" style="width: 100%" clearable>
|
||||||
v-model="searchData.SponsorId"
|
<el-option v-for="item in sponsorList" :key="item.Id" :label="item.SponsorName" :value="item.Id" />
|
||||||
placeholder="Sponsor"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in sponsorList"
|
|
||||||
:key="item.Id"
|
|
||||||
:label="item.SponsorName"
|
|
||||||
:value="item.Id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="CRO">
|
<el-form-item label="CRO">
|
||||||
<el-select
|
<el-select v-model="searchData.CROId" placeholder="CRO" style="width: 100%" clearable>
|
||||||
v-model="searchData.CROId"
|
<el-option v-for="item of croList" :key="item.Id" :label="item.CROName" :value="item.Id" />
|
||||||
placeholder="CRO"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of croList"
|
|
||||||
:key="item.Id"
|
|
||||||
:label="item.CROName"
|
|
||||||
:value="item.Id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Phase">
|
<el-form-item label="Phase">
|
||||||
<el-select
|
<el-select v-model="searchData.Phase" placeholder="Phase" style="width: 100%" clearable>
|
||||||
v-model="searchData.Phase"
|
<el-option v-for="item in phaseOptions" :key="item.value" :label="item.value" :value="item.value" />
|
||||||
placeholder="Phase"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in phaseOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.value"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="ReviewType">
|
<el-form-item label="ReviewType">
|
||||||
<el-select
|
<el-select v-model="searchData.ReviewTypeIds" placeholder="ReviewType" style="width: 100%" clearable
|
||||||
v-model="searchData.ReviewTypeIds"
|
multiple>
|
||||||
placeholder="ReviewType"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
multiple
|
|
||||||
>
|
|
||||||
<!-- <el-option
|
<!-- <el-option
|
||||||
v-for="(key,value) of dictionaryList.ReviewType"
|
v-for="(key,value) of dictionaryList.ReviewType"
|
||||||
:key="key"
|
:key="key"
|
||||||
:label="key"
|
:label="key"
|
||||||
:value="value"
|
:value="value"
|
||||||
/> -->
|
/> -->
|
||||||
<el-option
|
<el-option v-for="item of dict.type.ReviewType" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.ReviewType"
|
:value="item.value" />
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Modality">
|
<el-form-item label="Modality">
|
||||||
<el-select
|
<el-select v-model="searchData.ModalityIds" multiple placeholder="Modality" style="width: 100%" clearable>
|
||||||
v-model="searchData.ModalityIds"
|
|
||||||
multiple
|
|
||||||
placeholder="Modality"
|
|
||||||
style="width: 100%"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<!-- <el-option
|
<!-- <el-option
|
||||||
v-for="(key,value) of dictionaryList.ReadingType"
|
v-for="(key,value) of dictionaryList.ReadingType"
|
||||||
:key="key"
|
:key="key"
|
||||||
:label="key"
|
:label="key"
|
||||||
:value="value"
|
:value="value"
|
||||||
/> -->
|
/> -->
|
||||||
<el-option
|
<el-option v-for="item of dict.type.ReadingType" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.ReadingType"
|
:value="item.value" />
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Expedited: ">
|
<el-form-item label="Expedited: ">
|
||||||
<el-select
|
<el-select v-model="searchData.Expedited" value-key="value" clearable style="width: 100%">
|
||||||
v-model="searchData.Expedited"
|
<el-option v-for="item in expeditedOption" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
value-key="value"
|
|
||||||
clearable
|
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in expeditedOption"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="BeginDate: ">
|
<el-form-item label="BeginDate: ">
|
||||||
<el-date-picker
|
<el-date-picker v-model="searchData.BeginDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"
|
||||||
v-model="searchData.BeginDate"
|
:picker-options="beginPickerOption" :clearable="false" style="width: 100%" />
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
format="yyyy-MM-dd"
|
|
||||||
type="date"
|
|
||||||
:picker-options="beginPickerOption"
|
|
||||||
:clearable="false"
|
|
||||||
style="width: 100%"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="EndDate: ">
|
<el-form-item label="EndDate: ">
|
||||||
<el-date-picker
|
<el-date-picker v-model="searchData.EndDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"
|
||||||
v-model="searchData.EndDate"
|
:picker-options="endpickerOption" :clearable="false" style="width: 100%" />
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
format="yyyy-MM-dd"
|
|
||||||
type="date"
|
|
||||||
:picker-options="endpickerOption"
|
|
||||||
:clearable="false"
|
|
||||||
style="width: 100%"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="Attended Reviewer Type:">
|
<el-form-item label="Attended Reviewer Type:">
|
||||||
<el-select
|
<el-select v-model="searchData.AttendedReviewerType" placeholder="Attended Reviewer Type"
|
||||||
v-model="searchData.AttendedReviewerType"
|
style="width: 100%" clearable>
|
||||||
placeholder="Attended Reviewer Type"
|
<el-option v-for="item of $d.AttendedReviewerType" :key="item.value" :label="item.label"
|
||||||
style="width: 100%"
|
:value="item.value" />
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.AttendedReviewerType"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleSelectSearch"
|
<el-button type="primary" @click="handleSelectSearch">Search</el-button>
|
||||||
>Search</el-button
|
|
||||||
>
|
|
||||||
<el-button type="primary" @click="handleReset">Reset</el-button>
|
<el-button type="primary" @click="handleReset">Reset</el-button>
|
||||||
<el-button type="primary" @click="isShow = false">Back</el-button>
|
<el-button type="primary" @click="isShow = false">Back</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -305,219 +153,89 @@
|
||||||
|
|
||||||
<!-- 项目列表 -->
|
<!-- 项目列表 -->
|
||||||
<template slot="main-container">
|
<template slot="main-container">
|
||||||
<el-table
|
<el-table v-adaptive="{ bottomOffset: 60 }" v-loading="listLoading" :data="list" stripe height="100"
|
||||||
v-adaptive="{ bottomOffset: 60 }"
|
@selection-change="handleSelectChange" @sort-change="handleSortChange" @row-click="rowClick">
|
||||||
v-loading="listLoading"
|
|
||||||
:data="list"
|
|
||||||
stripe
|
|
||||||
height="100"
|
|
||||||
@selection-change="handleSelectChange"
|
|
||||||
@sort-change="handleSortChange"
|
|
||||||
@row-click="rowClick"
|
|
||||||
>
|
|
||||||
<el-table-column type="selection" align="left" width="45" />
|
<el-table-column type="selection" align="left" width="45" />
|
||||||
<el-table-column type="index" width="40" align="left" />
|
<el-table-column type="index" width="40" align="left" />
|
||||||
<el-table-column
|
<el-table-column prop="TrialCode" :label="$t('trials:trials-list:table:trialId')" show-overflow-tooltip
|
||||||
prop="TrialCode"
|
sortable="custom" width="120" />
|
||||||
:label="$t('trials:trials-list:table:trialId')"
|
<el-table-column prop="ResearchProgramNo" :label="$t('trials:trials-list:table:researchNumber')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip sortable="custom" min-width="160" />
|
||||||
sortable="custom"
|
|
||||||
width="120"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="ResearchProgramNo"
|
|
||||||
:label="$t('trials:trials-list:table:researchNumber')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column prop="ExperimentName" :label="$t('trials:trials-list:table:experimentName')"
|
||||||
prop="ExperimentName"
|
show-overflow-tooltip sortable="custom" min-width="240" />
|
||||||
:label="$t('trials:trials-list:table:experimentName')"
|
<el-table-column prop="Sponsor" :label="$t('trials:trials-list:table:sponsor')" show-overflow-tooltip
|
||||||
show-overflow-tooltip
|
sortable="custom" min-width="120" />
|
||||||
sortable="custom"
|
<el-table-column prop="TrialStatusStr" :label="$t('trials:trials-list:table:status')" show-overflow-tooltip
|
||||||
min-width="240"
|
sortable="custom" min-width="120">
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="Sponsor"
|
|
||||||
:label="$t('trials:trials-list:table:sponsor')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="120"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="TrialStatusStr"
|
|
||||||
:label="$t('trials:trials-list:table:status')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="120"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag
|
<el-tag v-if="scope.row.TrialStatusStr === 'Initializing'" type="info">{{ $fd('TrialStatusEnum',
|
||||||
v-if="scope.row.TrialStatusStr === 'Initializing'"
|
scope.row.TrialStatusStr) }}</el-tag>
|
||||||
type="info"
|
<el-tag v-if="scope.row.TrialStatusStr === 'Ongoing'" type="primary">{{ $fd('TrialStatusEnum',
|
||||||
>{{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}</el-tag
|
scope.row.TrialStatusStr) }}</el-tag>
|
||||||
>
|
<el-tag v-if="scope.row.TrialStatusStr === 'Completed'" type="warning">{{ $fd('TrialStatusEnum',
|
||||||
<el-tag
|
scope.row.TrialStatusStr) }}</el-tag>
|
||||||
v-if="scope.row.TrialStatusStr === 'Ongoing'"
|
<el-tag v-if="scope.row.TrialStatusStr === 'Stopped'" type="danger">{{ $fd('TrialStatusEnum',
|
||||||
type="primary"
|
scope.row.TrialStatusStr) }}</el-tag>
|
||||||
>{{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}</el-tag
|
|
||||||
>
|
|
||||||
<el-tag
|
|
||||||
v-if="scope.row.TrialStatusStr === 'Completed'"
|
|
||||||
type="warning"
|
|
||||||
>{{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}</el-tag
|
|
||||||
>
|
|
||||||
<el-tag
|
|
||||||
v-if="scope.row.TrialStatusStr === 'Stopped'"
|
|
||||||
type="danger"
|
|
||||||
>{{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}</el-tag
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column v-if="hasPermi(['role:pm', 'role:apm'])" prop="ExpetiedTaskCount"
|
||||||
v-if="hasPermi(['role:pm', 'role:apm'])"
|
:label="$t('trials:trials-list:table:ExpetiedTaskCount')" show-overflow-tooltip sortable="custom"
|
||||||
prop="ExpetiedTaskCount"
|
min-width="120" />
|
||||||
:label="$t('trials:trials-list:table:ExpetiedTaskCount')"
|
<el-table-column v-if="hasPermi(['role:pm', 'role:apm'])" prop="ReReadingApprovalCount"
|
||||||
show-overflow-tooltip
|
:label="$t('trials:trials-list:table:ReReadingApprovalCount')" show-overflow-tooltip sortable="custom"
|
||||||
sortable="custom"
|
min-width="180" />
|
||||||
min-width="120"
|
<el-table-column v-if="hasPermi(['role:pm', 'role:apm'])" prop="PendingReconciliationCount"
|
||||||
/>
|
:label="$t('trials:trials-list:table:PendingReconciliationCount')" show-overflow-tooltip sortable="custom"
|
||||||
<el-table-column
|
min-width="140" />
|
||||||
v-if="hasPermi(['role:pm', 'role:apm'])"
|
<el-table-column v-if="hasPermi(['role:pm', 'role:apm'])" prop="PendingResponseCount"
|
||||||
prop="ReReadingApprovalCount"
|
:label="$t('trials:trials-list:table:PendingResponseCount')" show-overflow-tooltip sortable="custom"
|
||||||
:label="$t('trials:trials-list:table:ReReadingApprovalCount')"
|
min-width="140" />
|
||||||
show-overflow-tooltip
|
<el-table-column v-if="hasPermi(['role:crc', 'role:cra'])" prop="CRC_UrgentCount"
|
||||||
sortable="custom"
|
:label="$t('trials:trials-list:table:CRC_UrgentCount')" show-overflow-tooltip sortable="custom"
|
||||||
min-width="180"
|
min-width="160" />
|
||||||
/>
|
<el-table-column v-if="hasPermi(['role:crc', 'role:cra'])" prop="CRC_QCQuestionCount"
|
||||||
<el-table-column
|
:label="$t('trials:trials-list:table:CRC_QCQuestionCount')" show-overflow-tooltip sortable="custom"
|
||||||
v-if="hasPermi(['role:pm', 'role:apm'])"
|
min-width="160" />
|
||||||
prop="PendingReconciliationCount"
|
<el-table-column v-if="hasPermi(['role:crc', 'role:cra'])" prop="CRC_CheckQuestionCount"
|
||||||
:label="$t('trials:trials-list:table:PendingReconciliationCount')"
|
:label="$t('trials:trials-list:table:CRC_CheckQuestionCount')" show-overflow-tooltip sortable="custom"
|
||||||
show-overflow-tooltip
|
min-width="160" />
|
||||||
sortable="custom"
|
<el-table-column v-if="hasPermi(['role:ir'])" prop="IR_ReadingCriterionList"
|
||||||
min-width="140"
|
:label="$t('trials:trials-list:table:IR_ReadingCriterionList')" show-overflow-tooltip min-width="160">
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:pm', 'role:apm'])"
|
|
||||||
prop="PendingResponseCount"
|
|
||||||
:label="$t('trials:trials-list:table:PendingResponseCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="140"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:crc', 'role:cra'])"
|
|
||||||
prop="CRC_UrgentCount"
|
|
||||||
:label="$t('trials:trials-list:table:CRC_UrgentCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:crc', 'role:cra'])"
|
|
||||||
prop="CRC_QCQuestionCount"
|
|
||||||
:label="$t('trials:trials-list:table:CRC_QCQuestionCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:crc', 'role:cra'])"
|
|
||||||
prop="CRC_CheckQuestionCount"
|
|
||||||
:label="$t('trials:trials-list:table:CRC_CheckQuestionCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:ir'])"
|
|
||||||
prop="IR_ReadingCriterionList"
|
|
||||||
:label="$t('trials:trials-list:table:IR_ReadingCriterionList')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="160"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.IR_ReadingCriterionList.join(', ') }}
|
{{ scope.row.IR_ReadingCriterionList.join(', ') }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column v-if="hasPermi(['role:ir'])" prop="IR_UrgentCount"
|
||||||
v-if="hasPermi(['role:ir'])"
|
:label="$t('trials:trials-list:table:IR_UrgentCount')" show-overflow-tooltip sortable="custom"
|
||||||
prop="IR_UrgentCount"
|
min-width="160" />
|
||||||
:label="$t('trials:trials-list:table:IR_UrgentCount')"
|
<el-table-column v-if="hasPermi(['role:ir'])" prop="IR_UnReadCount"
|
||||||
show-overflow-tooltip
|
:label="$t('trials:trials-list:table:IR_UnReadCount')" show-overflow-tooltip sortable="custom"
|
||||||
sortable="custom"
|
min-width="160" />
|
||||||
min-width="160"
|
<el-table-column v-if="hasPermi(['role:ir'])" prop="IR_TotalReadCount"
|
||||||
/>
|
:label="$t('trials:trials-list:table:IR_TotalReadCount')" show-overflow-tooltip sortable="custom"
|
||||||
<el-table-column
|
min-width="170" />
|
||||||
v-if="hasPermi(['role:ir'])"
|
<el-table-column v-if="hasPermi(['role:ir'])" prop="IR_PMEmailList"
|
||||||
prop="IR_UnReadCount"
|
:label="$t('trials:trials-list:table:IR_PMEmailList')" show-overflow-tooltip min-width="170">
|
||||||
:label="$t('trials:trials-list:table:IR_UnReadCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:ir'])"
|
|
||||||
prop="IR_TotalReadCount"
|
|
||||||
:label="$t('trials:trials-list:table:IR_TotalReadCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="170"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:ir'])"
|
|
||||||
prop="IR_PMEmailList"
|
|
||||||
:label="$t('trials:trials-list:table:IR_PMEmailList')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
min-width="170"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.IR_PMEmailList.join(', ') }}
|
{{ scope.row.IR_PMEmailList.join(', ') }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column v-if="hasPermi(['role:iqc'])" prop="IQC_UrgentCount"
|
||||||
v-if="hasPermi(['role:iqc'])"
|
:label="$t('trials:trials-list:table:IQC_UrgentCount')" show-overflow-tooltip sortable="custom"
|
||||||
prop="IQC_UrgentCount"
|
min-width="140" />
|
||||||
:label="$t('trials:trials-list:table:IQC_UrgentCount')"
|
<el-table-column v-if="hasPermi(['role:iqc'])" prop="IQC_ToBeClaimedCount"
|
||||||
show-overflow-tooltip
|
:label="$t('trials:trials-list:table:IQC_ToBeClaimedCount')" show-overflow-tooltip sortable="custom"
|
||||||
sortable="custom"
|
min-width="140" />
|
||||||
min-width="140"
|
<el-table-column v-if="hasPermi(['role:iqc'])" prop="IQC_AuditToBeDealedCount"
|
||||||
/>
|
:label="$t('trials:trials-list:table:IQC_AuditToBeDealedCount')" show-overflow-tooltip sortable="custom"
|
||||||
<el-table-column
|
min-width="140" />
|
||||||
v-if="hasPermi(['role:iqc'])"
|
<el-table-column v-if="hasPermi(['role:iqc'])" prop="IQC_QuestionToBeDealedCount"
|
||||||
prop="IQC_ToBeClaimedCount"
|
:label="$t('trials:trials-list:table:IQC_QuestionToBeDealedCount')" show-overflow-tooltip sortable="custom"
|
||||||
:label="$t('trials:trials-list:table:IQC_ToBeClaimedCount')"
|
min-width="160" />
|
||||||
show-overflow-tooltip
|
<el-table-column v-if="hasPermi(['role:mim'])" prop="MIM_UrgentCount"
|
||||||
sortable="custom"
|
:label="$t('trials:trials-list:table:MIM_UrgentCount')" show-overflow-tooltip sortable="custom"
|
||||||
min-width="140"
|
min-width="160" />
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:iqc'])"
|
|
||||||
prop="IQC_AuditToBeDealedCount"
|
|
||||||
:label="$t('trials:trials-list:table:IQC_AuditToBeDealedCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="140"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:iqc'])"
|
|
||||||
prop="IQC_QuestionToBeDealedCount"
|
|
||||||
:label="$t('trials:trials-list:table:IQC_QuestionToBeDealedCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:mim'])"
|
|
||||||
prop="MIM_UrgentCount"
|
|
||||||
:label="$t('trials:trials-list:table:MIM_UrgentCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
v-if="hasPermi(['role:mim'])"
|
v-if="hasPermi(['role:mim'])"
|
||||||
prop="MIM_UrgentCount"
|
prop="MIM_UrgentCount"
|
||||||
|
@ -526,61 +244,23 @@
|
||||||
sortable="custom"
|
sortable="custom"
|
||||||
min-width="160"
|
min-width="160"
|
||||||
/> -->
|
/> -->
|
||||||
<el-table-column
|
<el-table-column v-if="hasPermi(['role:mim'])" prop="MIM_PendingReviewCount"
|
||||||
v-if="hasPermi(['role:mim'])"
|
:label="$t('trials:trials-list:table:MIM_PendingReviewCount')" show-overflow-tooltip sortable="custom"
|
||||||
prop="MIM_PendingReviewCount"
|
min-width="160" />
|
||||||
:label="$t('trials:trials-list:table:MIM_PendingReviewCount')"
|
<el-table-column v-if="hasPermi(['role:mim'])" prop="MIM_PendingResponseCount"
|
||||||
show-overflow-tooltip
|
:label="$t('trials:trials-list:table:MIM_PendingResponseCount')" show-overflow-tooltip sortable="custom"
|
||||||
sortable="custom"
|
min-width="160" />
|
||||||
min-width="160"
|
<el-table-column v-if="hasPermi(['role:spm', 'role:cpm'])" prop="SPM_ReReadingApprovalCount"
|
||||||
/>
|
:label="$t('trials:trials-list:table:SPM_ReReadingApprovalCount')" show-overflow-tooltip sortable="custom"
|
||||||
<el-table-column
|
min-width="160" />
|
||||||
v-if="hasPermi(['role:mim'])"
|
<el-table-column v-if="hasPermi(['role:spm', 'role:cpm'])" prop="SPM_ReviewerSelectApprovalCount" :label="$t('trials:trials-list:table:SPM_ReviewerSelectApprovalCount')
|
||||||
prop="MIM_PendingResponseCount"
|
" show-overflow-tooltip sortable="custom" min-width="160" />
|
||||||
:label="$t('trials:trials-list:table:MIM_PendingResponseCount')"
|
<el-table-column prop="CreateTime" :label="$t('trials:trials-list:table:createDate')" show-overflow-tooltip
|
||||||
show-overflow-tooltip
|
sortable="custom" width="180" />
|
||||||
sortable="custom"
|
<el-table-column :label="$t('common:action:action')" width="260" align="left" fixed="right">
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:spm', 'role:cpm'])"
|
|
||||||
prop="SPM_ReReadingApprovalCount"
|
|
||||||
:label="$t('trials:trials-list:table:SPM_ReReadingApprovalCount')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
v-if="hasPermi(['role:spm', 'role:cpm'])"
|
|
||||||
prop="SPM_ReviewerSelectApprovalCount"
|
|
||||||
:label="
|
|
||||||
$t('trials:trials-list:table:SPM_ReviewerSelectApprovalCount')
|
|
||||||
"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
min-width="160"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="CreateTime"
|
|
||||||
:label="$t('trials:trials-list:table:createDate')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
width="180"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('common:action:action')"
|
|
||||||
width="260"
|
|
||||||
align="left"
|
|
||||||
fixed="right"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:panel']" circle icon="el-icon-info" :disabled="(scope.row.TrialStatusStr === 'Initializing' &&
|
||||||
v-hasPermi="['trials:trials-list:panel']"
|
|
||||||
circle
|
|
||||||
icon="el-icon-info"
|
|
||||||
:disabled="
|
|
||||||
(scope.row.TrialStatusStr === 'Initializing' &&
|
|
||||||
!hasPermi(['role:pm'])) ||
|
!hasPermi(['role:pm'])) ||
|
||||||
scope.row.IsDeleted ||
|
scope.row.IsDeleted ||
|
||||||
((scope.row.TrialStatusStr === 'Completed' ||
|
((scope.row.TrialStatusStr === 'Completed' ||
|
||||||
|
@ -588,40 +268,25 @@
|
||||||
!(
|
!(
|
||||||
hasPermi(['role:qa']) ||
|
hasPermi(['role:qa']) ||
|
||||||
hasPermi(['role:ea']) ||
|
hasPermi(['role:ea']) ||
|
||||||
hasPermi(['role:pm'])
|
hasPermi(['role:pm']) ||
|
||||||
|
hasPermi(['role:op']) ||
|
||||||
|
hasPermi(['role:dev']) ||
|
||||||
|
hasPermi(['role:admin'])
|
||||||
))
|
))
|
||||||
"
|
" :title="$t('trials:trials-list:action:panel')" @click.stop="handleDetail(scope.row)" />
|
||||||
:title="$t('trials:trials-list:action:panel')"
|
|
||||||
@click.stop="handleDetail(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 编辑项目基本信息 -->
|
<!-- 编辑项目基本信息 -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:edit']" circle icon="el-icon-edit-outline"
|
||||||
v-hasPermi="['trials:trials-list:edit']"
|
:disabled="scope.row.IsDeleted" :title="$t('trials:trials-list:action:edit')"
|
||||||
circle
|
@click.stop="handleEdit(scope.row)" />
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
:disabled="scope.row.IsDeleted"
|
|
||||||
:title="$t('trials:trials-list:action:edit')"
|
|
||||||
@click.stop="handleEdit(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 修改项目状态 -->
|
<!-- 修改项目状态 -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:status']" circle icon="el-icon-edit"
|
||||||
v-hasPermi="['trials:trials-list:status']"
|
:disabled="scope.row.IsDeleted" :title="$t('trials:trials-list:action:status')"
|
||||||
circle
|
@click.stop="handleStatus(scope.row)" />
|
||||||
icon="el-icon-edit"
|
|
||||||
:disabled="scope.row.IsDeleted"
|
|
||||||
:title="$t('trials:trials-list:action:status')"
|
|
||||||
@click.stop="handleStatus(scope.row)"
|
|
||||||
/>
|
|
||||||
<!--项目文档-->
|
<!--项目文档-->
|
||||||
<el-button
|
<el-button v-hasPermi="[
|
||||||
v-hasPermi="[
|
|
||||||
'trials:trials-panel:trial-summary:trial-document:inspect',
|
'trials:trials-panel:trial-summary:trial-document:inspect',
|
||||||
'trials:trials-panel:trial-summary:trial-document:manage',
|
'trials:trials-panel:trial-summary:trial-document:manage',
|
||||||
]"
|
]" circle icon="el-icon-folder-opened" :disabled="(scope.row.TrialStatusStr === 'Initializing' &&
|
||||||
circle
|
|
||||||
icon="el-icon-folder-opened"
|
|
||||||
:disabled="
|
|
||||||
(scope.row.TrialStatusStr === 'Initializing' &&
|
|
||||||
!hasPermi(['role:pm'])) ||
|
!hasPermi(['role:pm'])) ||
|
||||||
scope.row.IsDeleted ||
|
scope.row.IsDeleted ||
|
||||||
((scope.row.TrialStatusStr === 'Completed' ||
|
((scope.row.TrialStatusStr === 'Completed' ||
|
||||||
|
@ -631,22 +296,11 @@
|
||||||
hasPermi(['role:ea']) ||
|
hasPermi(['role:ea']) ||
|
||||||
hasPermi(['role:pm'])
|
hasPermi(['role:pm'])
|
||||||
))
|
))
|
||||||
"
|
" :title="$t('trials:trials-list:action:trialDocument')" @click.stop="toTrialDocument(scope.row)" />
|
||||||
:title="$t('trials:trials-list:action:trialDocument')"
|
|
||||||
@click.stop="toTrialDocument(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 废除项目 -->
|
<!-- 废除项目 -->
|
||||||
<el-button
|
<el-button v-hasPermi="['trials:trials-list:abolish']" circle icon="el-icon-delete" :disabled="scope.row.IsDeleted ||
|
||||||
v-hasPermi="['trials:trials-list:abolish']"
|
|
||||||
circle
|
|
||||||
icon="el-icon-delete"
|
|
||||||
:disabled="
|
|
||||||
scope.row.IsDeleted ||
|
|
||||||
scope.row.TrialStatusStr !== 'Initializing'
|
scope.row.TrialStatusStr !== 'Initializing'
|
||||||
"
|
" :title="$t('trials:trials-list:action:abolition')" @click.stop="handleAbandon(scope.row)" />
|
||||||
:title="$t('trials:trials-list:action:abolition')"
|
|
||||||
@click.stop="handleAbandon(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 代办详情-->
|
<!-- 代办详情-->
|
||||||
<!-- <el-button-->
|
<!-- <el-button-->
|
||||||
<!-- v-hasPermi="['trials:trials-list:abolish']"-->
|
<!-- v-hasPermi="['trials:trials-list:abolish']"-->
|
||||||
|
@ -661,61 +315,26 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
class="page"
|
@pagination="getList" />
|
||||||
:total="total"
|
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 新增/编辑项目 -->
|
<!-- 新增/编辑项目 -->
|
||||||
<el-dialog
|
<el-dialog v-if="dialogVisible" :visible.sync="dialogVisible" :title="title" :fullscreen="true" append-to-body
|
||||||
v-if="dialogVisible"
|
custom-class="base-dialog-wrapper">
|
||||||
:visible.sync="dialogVisible"
|
<TrialForm :trial-id="currentId" @getList="getList" @closeDialog="closeDialog" />
|
||||||
:title="title"
|
|
||||||
:fullscreen="true"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<TrialForm
|
|
||||||
:trial-id="currentId"
|
|
||||||
@getList="getList"
|
|
||||||
@closeDialog="closeDialog"
|
|
||||||
/>
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 修改项目状态 -->
|
<!-- 修改项目状态 -->
|
||||||
<el-dialog
|
<el-dialog v-if="statusVisible" :visible.sync="statusVisible" :close-on-click-modal="false"
|
||||||
v-if="statusVisible"
|
:title="$t('trials:trials-list:dialogTitle:changeStatus')" width="700px" custom-class="base-dialog-wrapper"
|
||||||
:visible.sync="statusVisible"
|
append-to-body>
|
||||||
:close-on-click-modal="false"
|
<TrialStatusForm :data="currentRow" @closeDialog="closeStatusDialog" @getList="getList" />
|
||||||
:title="$t('trials:trials-list:dialogTitle:changeStatus')"
|
|
||||||
width="700px"
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
append-to-body
|
|
||||||
>
|
|
||||||
<TrialStatusForm
|
|
||||||
:data="currentRow"
|
|
||||||
@closeDialog="closeStatusDialog"
|
|
||||||
@getList="getList"
|
|
||||||
/>
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog v-if="doneDialogVisible" :visible.sync="doneDialogVisible" :title="doneTitle" :fullscreen="true"
|
||||||
v-if="doneDialogVisible"
|
append-to-body custom-class="base-dialog-wrapper">
|
||||||
:visible.sync="doneDialogVisible"
|
<DoneList :trial-id="currentId" @getList="getList" @closeDialog="doneDialogVisible = false" />
|
||||||
:title="doneTitle"
|
|
||||||
:fullscreen="true"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<DoneList
|
|
||||||
:trial-id="currentId"
|
|
||||||
@getList="getList"
|
|
||||||
@closeDialog="doneDialogVisible = false"
|
|
||||||
/>
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
</template>
|
</template>
|
||||||
|
@ -897,7 +516,7 @@ export default {
|
||||||
this.$confirm(res.ErrorMessage, {
|
this.$confirm(res.ErrorMessage, {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: (action) => {},
|
callback: (action) => { },
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -922,7 +541,7 @@ export default {
|
||||||
this.currentRow = { ...row }
|
this.currentRow = { ...row }
|
||||||
this.abandonTrial()
|
this.abandonTrial()
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
// 废除项目
|
// 废除项目
|
||||||
abandonTrial() {
|
abandonTrial() {
|
||||||
|
@ -954,7 +573,10 @@ export default {
|
||||||
!(
|
!(
|
||||||
this.hasPermi(['role:qa']) ||
|
this.hasPermi(['role:qa']) ||
|
||||||
this.hasPermi(['role:ea']) ||
|
this.hasPermi(['role:ea']) ||
|
||||||
this.hasPermi(['role:pm'])
|
this.hasPermi(['role:pm']) ||
|
||||||
|
hasPermi(['role:op']) ||
|
||||||
|
hasPermi(['role:dev']) ||
|
||||||
|
hasPermi(['role:admin'])
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return
|
return
|
||||||
|
|
|
@ -2,31 +2,14 @@
|
||||||
<BaseContainer>
|
<BaseContainer>
|
||||||
<template slot="search-container">
|
<template slot="search-container">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:loginLog:table:optType')" prop="OptType">
|
||||||
:label="$t('trials:loginLog:table:optType')"
|
<el-select v-model="searchData.OptTypeList" clearable multiple :collapse-tags="true" style="width: 200px">
|
||||||
prop="OptType"
|
<el-option v-for="item of $d.UserOptType" v-show="item.value !== 3 && item.value !== 10 && item.value !== 9"
|
||||||
>
|
:key="'UserOptType' + item.label" :value="item.value" :label="item.label" />
|
||||||
<el-select
|
|
||||||
v-model="searchData.OptType"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.UserOptType"
|
|
||||||
v-show="item.value !== 3 && item.value !== 10 && item.value !== 9"
|
|
||||||
:key="'UserOptType' + item.label"
|
|
||||||
:value="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="IP" prop="IP">
|
<el-form-item label="IP" prop="IP">
|
||||||
<el-input
|
<el-input v-model="searchData.IP" size="small" clearable style="width: 120px" />
|
||||||
v-model="searchData.IP"
|
|
||||||
size="small"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item
|
<!-- <el-form-item
|
||||||
:label="$t('trials:loginLog:table:incorrectUserName')"
|
:label="$t('trials:loginLog:table:incorrectUserName')"
|
||||||
|
@ -40,108 +23,52 @@
|
||||||
style="width: 120px"
|
style="width: 120px"
|
||||||
/>
|
/>
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:loginLog:table:userName')" prop="LoginUserName" v-if="!isMine">
|
||||||
:label="$t('trials:loginLog:table:userName')"
|
|
||||||
prop="LoginUserName"
|
|
||||||
v-if="!isMine"
|
|
||||||
>
|
|
||||||
<el-select v-model="searchData.IdentityUserId" clearable style="width: 120px">
|
<el-select v-model="searchData.IdentityUserId" clearable style="width: 120px">
|
||||||
<el-option
|
<el-option v-for="item of trialUserList" :key="item.IdentityUserId" :value="item.IdentityUserId"
|
||||||
v-for="item of trialUserList"
|
:label="item.UserName" />
|
||||||
:key="item.IdentityUserId"
|
|
||||||
:value="item.IdentityUserId"
|
|
||||||
:label="item.UserName"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:loginLog:table:optUserName')" prop="TargetIdentityUserId" v-if="!isMine">
|
||||||
:label="$t('trials:loginLog:table:optUserName')"
|
|
||||||
prop="TargetIdentityUserId"
|
|
||||||
v-if="!isMine"
|
|
||||||
>
|
|
||||||
<el-select v-model="searchData.TargetIdentityUserId" clearable style="width: 120px">
|
<el-select v-model="searchData.TargetIdentityUserId" clearable style="width: 120px">
|
||||||
<el-option
|
<el-option v-for="item of trialUserList" :key="item.IdentityUserId" :value="item.IdentityUserId"
|
||||||
v-for="item of trialUserList"
|
:label="item.UserName" />
|
||||||
:key="item.IdentityUserId"
|
|
||||||
:value="item.IdentityUserId"
|
|
||||||
:label="item.UserName"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:loginLog:table:userType')" prop="OptType" v-if="!isMine">
|
||||||
:label="$t('trials:loginLog:table:userType')"
|
<el-select v-model="searchData.LoginUserType" clearable style="width: 120px">
|
||||||
prop="OptType"
|
<el-option v-for="item of $d.UserType" v-show="item.value !== 7 && item.value !== 8"
|
||||||
v-if="!isMine"
|
:key="'UserType' + item.label" :value="item.label" :label="item.label" />
|
||||||
>
|
|
||||||
<el-select
|
|
||||||
v-model="searchData.LoginUserType"
|
|
||||||
clearable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item of $d.UserType"
|
|
||||||
v-show="item.value !== 7 && item.value !== 8"
|
|
||||||
:key="'UserType' + item.label"
|
|
||||||
:value="item.label"
|
|
||||||
:label="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('trials:loginLog:table:createTime')">
|
<el-form-item :label="$t('trials:loginLog:table:createTime')">
|
||||||
<el-date-picker
|
<el-date-picker v-model="datetimerange" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
|
||||||
v-model="datetimerange"
|
|
||||||
type="datetimerange"
|
|
||||||
:default-time="['00:00:00', '23:59:59']"
|
|
||||||
:start-placeholder="$t('trials:loginLog:table:beginTime')"
|
:start-placeholder="$t('trials:loginLog:table:beginTime')"
|
||||||
:end-placeholder="$t('trials:loginLog:table:endTime')"
|
:end-placeholder="$t('trials:loginLog:table:endTime')" value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
value-format="yyyy-MM-dd HH:mm:ss"
|
@change="handleDatetimeChange" />
|
||||||
@change="handleDatetimeChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
{{ $t('common:button:search') }}
|
{{ $t('common:button:search') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 重置 -->
|
<!-- 重置 -->
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:reset') }}
|
{{ $t('common:button:reset') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
<template slot="main-container">
|
<template slot="main-container">
|
||||||
<el-table
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: isMine ? 80 : 60 }" height="100" :data="list"
|
||||||
v-loading="loading"
|
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
|
||||||
v-adaptive="{ bottomOffset: isMine ? 80 : 60 }"
|
|
||||||
height="100"
|
|
||||||
:data="list"
|
|
||||||
class="table"
|
|
||||||
@sort-change="handleSortByColumn"
|
|
||||||
:default-sort="{ prop: 'CreateTime', order: 'descending' }"
|
|
||||||
>
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:loginLog:table:optType')" prop="OptType" min-width="90"
|
||||||
:label="$t('trials:loginLog:table:optType')"
|
show-overflow-tooltip sortable="custom">
|
||||||
prop="OptType"
|
|
||||||
min-width="90"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ $fd('UserOptType', scope.row.OptType) }}
|
{{ $fd('UserOptType', scope.row.OptType) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column label="IP" prop="IP" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
label="IP"
|
|
||||||
prop="IP"
|
|
||||||
min-width="90"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
:label="$t('trials:loginLog:table:IPRegion')"
|
:label="$t('trials:loginLog:table:IPRegion')"
|
||||||
prop="IPRegion"
|
prop="IPRegion"
|
||||||
|
@ -157,20 +84,10 @@
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
sortable="custom"
|
sortable="custom"
|
||||||
/> -->
|
/> -->
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:loginLog:table:userName')" prop="ActionUserName" min-width="90"
|
||||||
:label="$t('trials:loginLog:table:userName')"
|
show-overflow-tooltip sortable="custom" />
|
||||||
prop="ActionUserName"
|
<el-table-column :label="$t('trials:loginLog:table:Aetionlserlype')" prop="ActionUserType" min-width="100"
|
||||||
min-width="90"
|
show-overflow-tooltip sortable="custom" />
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('trials:loginLog:table:Aetionlserlype')"
|
|
||||||
prop="ActionUserType"
|
|
||||||
min-width="100"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
:label="$t('trials:loginLog:table:userType')"
|
:label="$t('trials:loginLog:table:userType')"
|
||||||
prop="LoginUserTypeEnum"
|
prop="LoginUserTypeEnum"
|
||||||
|
@ -182,14 +99,8 @@
|
||||||
{{ $fd('UserType', scope.row.LoginUserTypeEnum) }}
|
{{ $fd('UserType', scope.row.LoginUserTypeEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<el-table-column
|
<el-table-column v-if="!isMine" :label="$t('trials:loginLog:table:optUserName')" prop="TargetIdentityUserName"
|
||||||
v-if="!isMine"
|
min-width="120" show-overflow-tooltip sortable="custom" />
|
||||||
:label="$t('trials:loginLog:table:optUserName')"
|
|
||||||
prop="TargetIdentityUserName"
|
|
||||||
min-width="120"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
v-if="!isMine"
|
v-if="!isMine"
|
||||||
:label="$t('trials:loginLog:table:optUserType')"
|
:label="$t('trials:loginLog:table:optUserType')"
|
||||||
|
@ -202,37 +113,19 @@
|
||||||
{{ $fd('UserType', scope.row.OptUserTypeEnum) }}
|
{{ $fd('UserType', scope.row.OptUserTypeEnum) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:loginLog:table:detail')" min-width="80" show-overflow-tooltip>
|
||||||
:label="$t('trials:loginLog:table:detail')"
|
|
||||||
min-width="80"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button v-if="scope.row.JsonObj" type="text" @click="handleOpenDialog(scope.row)">
|
||||||
v-if="scope.row.JsonObj"
|
|
||||||
type="text"
|
|
||||||
@click="handleOpenDialog(scope.row)"
|
|
||||||
>
|
|
||||||
<span>{{ $t('trials:loginLog:message:detail') }}</span>
|
<span>{{ $t('trials:loginLog:message:detail') }}</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:loginLog:table:createTime')" prop="CreateTime" min-width="90"
|
||||||
:label="$t('trials:loginLog:table:createTime')"
|
show-overflow-tooltip sortable="custom" />
|
||||||
prop="CreateTime"
|
|
||||||
min-width="90"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
class="page"
|
@pagination="getList" />
|
||||||
:total="total"
|
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
<detail :config="config" :JsonObj="JsonObj" />
|
<detail :config="config" :JsonObj="JsonObj" />
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
|
@ -247,6 +140,7 @@ const searchDataDefault = () => {
|
||||||
return {
|
return {
|
||||||
TrialId: '',
|
TrialId: '',
|
||||||
OptType: null,
|
OptType: null,
|
||||||
|
OptTypeList: [],
|
||||||
Ip: '',
|
Ip: '',
|
||||||
LoginFaildName: '',
|
LoginFaildName: '',
|
||||||
LoginUserName: '',
|
LoginUserName: '',
|
||||||
|
|
|
@ -10,43 +10,20 @@
|
||||||
)
|
)
|
||||||
}}</el-divider>
|
}}</el-divider>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div
|
<div class="upload" style="margin-right: 10px" :disabled="limitLength" v-if="!limitLength">
|
||||||
class="upload"
|
<input multiple="multiple" webkitdirectory="" directory accept="*/*" type="file" name="uploadFolder"
|
||||||
style="margin-right: 10px"
|
class="select-file" title="" @change="beginScanFiles($event)" v-if="
|
||||||
:disabled="limitLength"
|
|
||||||
v-if="!limitLength"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
multiple="multiple"
|
|
||||||
webkitdirectory=""
|
|
||||||
directory
|
|
||||||
accept="*/*"
|
|
||||||
type="file"
|
|
||||||
name="uploadFolder"
|
|
||||||
class="select-file"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="
|
|
||||||
!loading &&
|
!loading &&
|
||||||
(!limitLength ||
|
(!limitLength ||
|
||||||
(fileList.length < limitLength && limitLength > 1))
|
(fileList.length < limitLength && limitLength > 1))
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:trialDocument:button:selectFolder') }}
|
{{ $t('trials:trialDocument:button:selectFolder') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="upload">
|
<div class="upload">
|
||||||
<input
|
<input class="select-file" multiple="" :accept="faccept.join(',')" type="file" name="uploadFile" title=""
|
||||||
class="select-file"
|
@change="beginScanFiles($event)" v-if="!loading && (!limitLength || fileList.length < limitLength)" />
|
||||||
multiple=""
|
|
||||||
:accept="faccept.join(',')"
|
|
||||||
type="file"
|
|
||||||
name="uploadFile"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!loading && (!limitLength || fileList.length < limitLength)"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:trialDocument:button:select') }}
|
{{ $t('trials:trialDocument:button:select') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -54,82 +31,45 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<!-- 文件列表 -->
|
<!-- 文件列表 -->
|
||||||
<el-table
|
<el-table ref="filesTable" :data="fileList" class="dicomFiles-table" height="300"
|
||||||
ref="filesTable"
|
@selection-change="handleSelectionChange">
|
||||||
:data="fileList"
|
<el-table-column type="selection" width="55" :selectable="(row, index) => row.status !== 2 && !loading" />
|
||||||
class="dicomFiles-table"
|
|
||||||
height="300"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column
|
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
:selectable="(row, index) => row.status !== 2 && !loading"
|
|
||||||
/>
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="name" :label="$t('trials:trialDocument:table:fileName')" min-width="100" />
|
||||||
prop="name"
|
|
||||||
:label="$t('trials:trialDocument:table:fileName')"
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<!-- 文件大小 -->
|
<!-- 文件大小 -->
|
||||||
<el-table-column
|
<el-table-column prop="size" :label="$t('trials:trialDocument:table:fileSize')">
|
||||||
prop="size"
|
|
||||||
:label="$t('trials:trialDocument:table:fileSize')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.size && scope.row.size > 0
|
scope.row.size && scope.row.size > 0
|
||||||
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
||||||
: ''
|
: '0MB'
|
||||||
}}</span>
|
}}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 文件类型 -->
|
<!-- 文件类型 -->
|
||||||
<el-table-column
|
<el-table-column prop="type" :label="$t('trials:trialDocument:table:fileType')" />
|
||||||
prop="type"
|
|
||||||
:label="$t('trials:trialDocument:table:fileType')"
|
|
||||||
/>
|
|
||||||
<!-- 上传状态 -->
|
<!-- 上传状态 -->
|
||||||
<el-table-column
|
<el-table-column prop="status" :label="$t('trials:trialDocument:table:uploadStatus')" min-width="100">
|
||||||
prop="status"
|
|
||||||
:label="$t('trials:trialDocument:table:uploadStatus')"
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag
|
<el-tag :type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
||||||
:type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
v-if="scope.row.status || scope.row.status === 0">{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
||||||
v-if="scope.row.status || scope.row.status === 0"
|
|
||||||
>{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:trialDocument:table:failedFileCount')" min-width="150"
|
||||||
:label="$t('trials:trialDocument:table:failedFileCount')"
|
show-overflow-tooltip>
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-progress
|
<el-progress color="#409eff" :percentage="scope.row.size && scope.row.size > 0 ? ((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
||||||
color="#409eff"
|
|
||||||
:percentage="
|
|
||||||
((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
|
||||||
1
|
1
|
||||||
"
|
: ((scope.row.uploadFileSize * 100) / 1).toFixed(2) *
|
||||||
/>
|
1" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="$t('common:action:action')">
|
<el-table-column :label="$t('common:action:action')">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button size="mini" icon="el-icon-delete" circle :disabled="loading"
|
||||||
size="mini"
|
:title="$t('trials:trialDocument:action:delete')" @click="handleRemoveFile(scope.row)" />
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:disabled="loading"
|
|
||||||
:title="$t('trials:trialDocument:action:delete')"
|
|
||||||
@click="handleRemoveFile(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -139,13 +79,8 @@
|
||||||
<span style="margin-right: 10px">{{
|
<span style="margin-right: 10px">{{
|
||||||
$store.state.trials.uploadTip
|
$store.state.trials.uploadTip
|
||||||
}}</span>
|
}}</span>
|
||||||
<el-button
|
<el-button size="small" type="primary" :disabled="selectArr.length == 0" :loading="loading"
|
||||||
size="small"
|
@click="beginUpload">
|
||||||
type="primary"
|
|
||||||
:disabled="selectArr.length == 0"
|
|
||||||
:loading="loading"
|
|
||||||
@click="beginUpload"
|
|
||||||
>
|
|
||||||
{{ $t('trials:trialDocument:action:upload') }}
|
{{ $t('trials:trialDocument:action:upload') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -265,11 +200,11 @@ export default {
|
||||||
type: extendName.split('.')[1],
|
type: extendName.split('.')[1],
|
||||||
status: 0,
|
status: 0,
|
||||||
file: files[i],
|
file: files[i],
|
||||||
id: `${files[i].lastModified}${
|
id: `${files[i].lastModified}${files[i].name
|
||||||
files[i].name
|
|
||||||
}${new Date().getTime()}${i + 1}`,
|
}${new Date().getTime()}${i + 1}`,
|
||||||
fileType: files[i].type,
|
fileType: files[i].type,
|
||||||
uploadFileSize: 0,
|
uploadFileSize: 0,
|
||||||
|
webkitRelativePath: files[i].webkitRelativePath
|
||||||
}
|
}
|
||||||
this.fileList.push(obj)
|
this.fileList.push(obj)
|
||||||
this.$refs.filesTable.toggleRowSelection(obj, true)
|
this.$refs.filesTable.toggleRowSelection(obj, true)
|
||||||
|
@ -300,7 +235,7 @@ export default {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
// 开始上传文件
|
// 开始上传文件
|
||||||
async beginUpload() {
|
async beginUpload() {
|
||||||
|
@ -348,7 +283,8 @@ export default {
|
||||||
FileName: file.name,
|
FileName: file.name,
|
||||||
FilePath: this.$getObjectName(res.url),
|
FilePath: this.$getObjectName(res.url),
|
||||||
FileSize: file.size,
|
FileSize: file.size,
|
||||||
FileFormat: fileType,
|
FileFormat: fileType.split('.')[1],
|
||||||
|
catalogue: file.webkitRelativePath
|
||||||
})
|
})
|
||||||
let flag = arr.every((item) => item.status === 2)
|
let flag = arr.every((item) => item.status === 2)
|
||||||
if (flag) {
|
if (flag) {
|
||||||
|
@ -390,7 +326,7 @@ export default {
|
||||||
(percentage, checkpoint, lastPer) => {
|
(percentage, checkpoint, lastPer) => {
|
||||||
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
||||||
if (item.uploadFileSize > file.fileSize) {
|
if (item.uploadFileSize > file.fileSize) {
|
||||||
item.uploadFileSize = file.fileSize
|
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -431,7 +367,6 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
this.fileInput.accept = this.faccept.join(',')
|
this.fileInput.accept = this.faccept.join(',')
|
||||||
}
|
}
|
||||||
console.log(this.fileInput)
|
|
||||||
this.fileInput.click()
|
this.fileInput.click()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -481,6 +416,7 @@ export default {
|
||||||
background: #428bca;
|
background: #428bca;
|
||||||
border-color: #428bca;
|
border-color: #428bca;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
||||||
.select-file {
|
.select-file {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
@ -491,6 +427,7 @@ export default {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-select {
|
.btn-select {
|
||||||
//给显示在页面上的按钮写样式
|
//给显示在页面上的按钮写样式
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
v-for="(item, index) of siteOptions"
|
v-for="(item, index) of siteOptions"
|
||||||
:key="index"
|
:key="index"
|
||||||
:label="item.TrialSiteCode"
|
:label="item.TrialSiteCode"
|
||||||
:value="item.SiteId"
|
:value="item.TrialSiteId"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
|
@ -2,93 +2,40 @@
|
||||||
<div v-loading="loading" class="non-dicom-wrapper">
|
<div v-loading="loading" class="non-dicom-wrapper">
|
||||||
<!-- <h4 class="box-title">既往放疗史</h4> -->
|
<!-- <h4 class="box-title">既往放疗史</h4> -->
|
||||||
<div style="text-align: right">
|
<div style="text-align: right">
|
||||||
<el-button
|
<el-button v-if="allowAddOrEdit" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']" icon="el-icon-plus"
|
||||||
v-if="allowAddOrEdit"
|
type="primary" size="small" @click.native.prevent="handleAdd">
|
||||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
@click.native.prevent="handleAdd"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:new') }}
|
{{ $t('common:button:new') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button icon="el-icon-view" type="primary" size="small" :disabled="nonDicomStudyList.length === 0"
|
||||||
icon="el-icon-view"
|
@click="handlePreviewAllVisitFiles">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
:disabled="nonDicomStudyList.length === 0"
|
|
||||||
@click="handlePreviewAllVisitFiles"
|
|
||||||
>
|
|
||||||
{{ $t('trials:uploadNonDicoms:button:preview') }}
|
{{ $t('trials:uploadNonDicoms:button:preview') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table
|
<el-table :data="nonDicomStudyList" style="width: 100%" :default-sort="{ prop: 'CreateTime', order: 'ascending' }"
|
||||||
:data="nonDicomStudyList"
|
:row-class-name="tableRowClassName">
|
||||||
style="width: 100%"
|
|
||||||
:default-sort="{ prop: 'CreateTime', order: 'ascending' }"
|
|
||||||
:row-class-name="tableRowClassName"
|
|
||||||
>
|
|
||||||
<!-- 检查编号 -->
|
<!-- 检查编号 -->
|
||||||
<el-table-column
|
<el-table-column prop="CodeView" :label="$t('trials:uploadNonDicoms:table:studyId')" sortable />
|
||||||
prop="CodeView"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:studyId')"
|
|
||||||
sortable
|
|
||||||
/>
|
|
||||||
<!-- 检查名称 -->
|
<!-- 检查名称 -->
|
||||||
<el-table-column
|
<el-table-column v-if="relationInfo.IsShowStudyName" prop="StudyName"
|
||||||
v-if="relationInfo.IsShowStudyName"
|
:label="$t('trials:uploadNonDicoms:table:StudyName')" sortable />
|
||||||
prop="StudyName"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:StudyName')"
|
|
||||||
sortable
|
|
||||||
/>
|
|
||||||
<!-- 检查类型 -->
|
<!-- 检查类型 -->
|
||||||
<el-table-column
|
<el-table-column prop="Modality" :label="$t('trials:uploadNonDicoms:table:modality')" sortable />
|
||||||
prop="Modality"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:modality')"
|
|
||||||
sortable
|
|
||||||
/>
|
|
||||||
<!-- 检查部位 -->
|
<!-- 检查部位 -->
|
||||||
<el-table-column
|
<el-table-column prop="BodyPart" :label="$t('trials:uploadNonDicoms:table:bodyPart')" sortable>
|
||||||
prop="BodyPart"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:bodyPart')"
|
|
||||||
sortable
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ getBodyPart(scope.row.BodyPart) }}
|
{{ getBodyPart(scope.row.BodyPart) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 文件 -->
|
<!-- 文件 -->
|
||||||
<el-table-column
|
<el-table-column prop="FileCount" :label="$t('trials:uploadNonDicoms:table:files')" sortable>
|
||||||
prop="FileCount"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:files')"
|
|
||||||
sortable
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-popover
|
<el-popover v-if="scope.row.FileCount" trigger="click" placement="bottom" popper-class="imgTable">
|
||||||
v-if="scope.row.FileCount"
|
<el-table v-loading="filesLoading" :data="nonDicomfilesList" height="300" size="small"
|
||||||
trigger="click"
|
:row-class-name="tableRowClassName">
|
||||||
placement="bottom"
|
|
||||||
popper-class="imgTable"
|
|
||||||
>
|
|
||||||
<el-table
|
|
||||||
v-loading="filesLoading"
|
|
||||||
:data="nonDicomfilesList"
|
|
||||||
height="300"
|
|
||||||
size="small"
|
|
||||||
:row-class-name="tableRowClassName"
|
|
||||||
>
|
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="FileName" :label="$t('trials:uploadNonDicoms:table:fileName')" width="200" />
|
||||||
prop="FileName"
|
<el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileName')"
|
|
||||||
width="200"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="FileSize"
|
|
||||||
:label="$t('trials:audit:table:nonDicomsFileSize')"
|
|
||||||
width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.FileSize && scope.row.FileSize > 0
|
scope.row.FileSize && scope.row.FileSize > 0
|
||||||
|
@ -101,71 +48,38 @@
|
||||||
<template slot-scope="files">
|
<template slot-scope="files">
|
||||||
<div style="display: flex">
|
<div style="display: flex">
|
||||||
<!-- 预览 -->
|
<!-- 预览 -->
|
||||||
<viewer
|
<viewer v-if="files.row.type !== 'MP4'" :ref="files.row.FullFilePath" style="margin: 0 10px"
|
||||||
v-if="files.row.type !== 'MP4'"
|
|
||||||
:ref="files.row.FullFilePath"
|
|
||||||
style="margin: 0 10px"
|
|
||||||
:images="[
|
:images="[
|
||||||
`${OSSclientConfig.basePath}${files.row.FullFilePath}`,
|
`${OSSclientConfig.basePath}${files.row.FullFilePath}`,
|
||||||
]"
|
]">
|
||||||
>
|
<el-button icon="el-icon-view" circle :title="$t('trials:uploadNonDicoms:action:preview')"
|
||||||
<el-button
|
size="small" :disabled="files.row.FileType &&
|
||||||
icon="el-icon-view"
|
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:preview')"
|
|
||||||
size="small"
|
|
||||||
:disabled="
|
|
||||||
files.row.FileType &&
|
|
||||||
files.row.FileType.indexOf('zip') >= 0
|
files.row.FileType.indexOf('zip') >= 0
|
||||||
"
|
" @click.native.prevent="handlePreviewImg(files.row)">
|
||||||
@click.native.prevent="handlePreviewImg(files.row)"
|
|
||||||
>
|
|
||||||
</el-button>
|
</el-button>
|
||||||
<img
|
<img v-show="false" crossorigin="anonymous"
|
||||||
v-show="false"
|
:src="`${OSSclientConfig.basePath}${files.row.FullFilePath}`" alt="Image" />
|
||||||
crossorigin="anonymous"
|
|
||||||
:src="`${OSSclientConfig.basePath}${files.row.FullFilePath}`"
|
|
||||||
alt="Image"
|
|
||||||
/>
|
|
||||||
</viewer>
|
</viewer>
|
||||||
|
|
||||||
<el-button
|
<el-button v-if="files.row.type === 'MP4'" icon="el-icon-view" circle
|
||||||
v-if="files.row.type === 'MP4'"
|
:title="$t('trials:uploadNonDicoms:action:preview')" size="small" :disabled="files.row.FileType &&
|
||||||
icon="el-icon-view"
|
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:preview')"
|
|
||||||
size="small"
|
|
||||||
:disabled="
|
|
||||||
files.row.FileType &&
|
|
||||||
files.row.FileType.indexOf('zip') >= 0
|
files.row.FileType.indexOf('zip') >= 0
|
||||||
"
|
" @click.native.prevent="handleLookVideo(scope.row)" />
|
||||||
@click.native.prevent="handleLookVideo(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<el-button
|
<el-button v-if="allowAddOrEdit" v-hasPermi="[
|
||||||
v-if="allowAddOrEdit"
|
|
||||||
v-hasPermi="[
|
|
||||||
'trials:trials-panel:visit:crc-upload:delete',
|
'trials:trials-panel:visit:crc-upload:delete',
|
||||||
]"
|
]" icon="el-icon-delete" circle :title="$t('trials:uploadNonDicoms:action:delete')" size="small"
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:delete')"
|
|
||||||
size="small"
|
|
||||||
@click.native.prevent="
|
@click.native.prevent="
|
||||||
files.row.type === 'MP4'
|
files.row.type === 'MP4'
|
||||||
? hadnleDeleteVideo(scope.row)
|
? hadnleDeleteVideo(scope.row)
|
||||||
: handleDeleteFile(files.row.Id)
|
: handleDeleteFile(files.row.Id)
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="reference" class="name-wrapper">
|
<div slot="reference" class="name-wrapper">
|
||||||
<el-button
|
<el-button type="text" @click.native.prevent="handleGetFilesList(scope.row)">
|
||||||
type="text"
|
|
||||||
@click.native.prevent="handleGetFilesList(scope.row)"
|
|
||||||
>
|
|
||||||
{{ scope.row.FileCount }}
|
{{ scope.row.FileCount }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -174,46 +88,23 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 检查日期 -->
|
<!-- 检查日期 -->
|
||||||
<el-table-column
|
<el-table-column prop="ImageDate" :label="$t('trials:uploadNonDicoms:table:studyDate')" sortable>
|
||||||
prop="ImageDate"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:studyDate')"
|
|
||||||
sortable
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ moment(scope.row.ImageDate).format('YYYY-MM-DD') }}
|
{{ moment(scope.row.ImageDate).format('YYYY-MM-DD') }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 更新时间 -->
|
<!-- 更新时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="UpdateTime" :label="$t('trials:uploadNonDicoms:table:updateTime')" sortable />
|
||||||
prop="UpdateTime"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:updateTime')"
|
|
||||||
sortable
|
|
||||||
/>
|
|
||||||
<!-- 创建时间 -->
|
<!-- 创建时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="CreateTime" :label="$t('trials:uploadNonDicoms:table:CreateTime')" sortable />
|
||||||
prop="CreateTime"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:CreateTime')"
|
|
||||||
sortable
|
|
||||||
/>
|
|
||||||
<el-table-column :label="$t('common:action:action')" min-width="200">
|
<el-table-column :label="$t('common:action:action')" min-width="200">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- 预览 -->
|
<!-- 预览 -->
|
||||||
<el-button
|
<el-button icon="el-icon-view" circle :title="$t('trials:uploadNonDicoms:action:preview')"
|
||||||
icon="el-icon-view"
|
:disabled="scope.row.FileCount === 0" @click.native.prevent="handlePreviewAllFiles(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:preview')"
|
|
||||||
:disabled="scope.row.FileCount === 0"
|
|
||||||
@click.native.prevent="handlePreviewAllFiles(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 上传 -->
|
<!-- 上传 -->
|
||||||
<el-button
|
<el-button v-if="allowAddOrEdit" icon="el-icon-upload2" circle :disabled="scope.row.IsDeleted"
|
||||||
v-if="allowAddOrEdit"
|
:title="$t('trials:uploadNonDicoms:action:upload')" @click.native.prevent="handleUpload(scope.row)" />
|
||||||
icon="el-icon-upload2"
|
|
||||||
circle
|
|
||||||
:disabled="scope.row.IsDeleted"
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:upload')"
|
|
||||||
@click.native.prevent="handleUpload(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 上传视频 -->
|
<!-- 上传视频 -->
|
||||||
<!-- <el-button
|
<!-- <el-button
|
||||||
v-if="( allowAddOrEdit)"
|
v-if="( allowAddOrEdit)"
|
||||||
|
@ -223,156 +114,86 @@
|
||||||
@click.native.prevent="handleUploadVideo(scope.row)"
|
@click.native.prevent="handleUploadVideo(scope.row)"
|
||||||
/> -->
|
/> -->
|
||||||
<!-- 编辑 -->
|
<!-- 编辑 -->
|
||||||
<el-button
|
<el-button v-if="allowAddOrEdit" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
||||||
v-if="allowAddOrEdit"
|
icon="el-icon-edit-outline" circle :title="$t('trials:uploadNonDicoms:action:edit')"
|
||||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
@click.native.prevent="handleEdit(scope.row)" />
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:edit')"
|
|
||||||
@click.native.prevent="handleEdit(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<el-button
|
<el-button v-if="allowAddOrEdit" v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
||||||
v-if="allowAddOrEdit"
|
icon="el-icon-delete" circle :title="$t('trials:uploadNonDicoms:action:delete')"
|
||||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
@click.native.prevent="handleDelete(scope.row)" />
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:title="$t('trials:uploadNonDicoms:action:delete')"
|
|
||||||
@click.native.prevent="handleDelete(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 编辑 -->
|
<!-- 编辑 -->
|
||||||
<el-dialog
|
<el-dialog v-if="dialogVisible" :visible.sync="dialogVisible" :close-on-click-modal="false" :title="title"
|
||||||
v-if="dialogVisible"
|
width="600px" append-to-body custom-class="base-dialog-wrapper">
|
||||||
:visible.sync="dialogVisible"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="title"
|
|
||||||
width="600px"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<el-form ref="editForm" :model="form" label-width="100px">
|
<el-form ref="editForm" :model="form" label-width="100px">
|
||||||
<div class="base-dialog-body">
|
<div class="base-dialog-body">
|
||||||
<!-- 检查编号 -->
|
<!-- 检查编号 -->
|
||||||
<el-form-item
|
<el-form-item v-if="!!form.CodeView" :label="$t('trials:uploadNonDicoms:table:studyId')">
|
||||||
v-if="!!form.CodeView"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:studyId')"
|
|
||||||
>
|
|
||||||
<el-input v-model="form.CodeView" disabled />
|
<el-input v-model="form.CodeView" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 检查名称 -->
|
<!-- 检查名称 -->
|
||||||
<el-form-item
|
<el-form-item v-if="relationInfo.IsShowStudyName" :label="$t('trials:uploadNonDicoms:table:StudyName')"
|
||||||
v-if="relationInfo.IsShowStudyName"
|
prop="StudyName" :rules="[
|
||||||
:label="$t('trials:uploadNonDicoms:table:StudyName')"
|
|
||||||
prop="StudyName"
|
|
||||||
:rules="[
|
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('common:ruleMessage:specify'),
|
message: $t('common:ruleMessage:specify'),
|
||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
},
|
},
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
<el-radio-group v-model="form.StudyName">
|
<el-radio-group v-model="form.StudyName">
|
||||||
<template v-for="m in relationInfo.StudyNameList">
|
<template v-for="m in relationInfo.StudyNameList">
|
||||||
<el-radio
|
<el-radio v-if="m.IsChoose" :key="m.Name" :label="isEN ? m.EnName : m.Name" style="line-height: 40px" />
|
||||||
v-if="m.IsChoose"
|
|
||||||
:key="m.Name"
|
|
||||||
:label="isEN ? m.EnName : m.Name"
|
|
||||||
style="line-height: 40px"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 检查类型 -->
|
<!-- 检查类型 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:uploadNonDicoms:table:modality')" prop="Modality" :rules="[
|
||||||
:label="$t('trials:uploadNonDicoms:table:modality')"
|
|
||||||
prop="Modality"
|
|
||||||
:rules="[
|
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('common:ruleMessage:specify'),
|
message: $t('common:ruleMessage:specify'),
|
||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
},
|
},
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
<el-radio-group v-model="form.Modality">
|
<el-radio-group v-model="form.Modality">
|
||||||
<template v-for="m in trialModalitys">
|
<template v-for="m in trialModalitys">
|
||||||
<el-radio
|
<el-radio v-if="m !== ''" :key="m" :label="m" style="line-height: 40px" />
|
||||||
v-if="m !== ''"
|
|
||||||
:key="m"
|
|
||||||
:label="m"
|
|
||||||
style="line-height: 40px"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 检查部位 -->
|
<!-- 检查部位 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:uploadNonDicoms:table:bodyPart')" prop="BodyParts" :rules="[
|
||||||
:label="$t('trials:uploadNonDicoms:table:bodyPart')"
|
|
||||||
prop="BodyParts"
|
|
||||||
:rules="[
|
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('common:ruleMessage:specify'),
|
message: $t('common:ruleMessage:specify'),
|
||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
},
|
},
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
<el-checkbox-group v-model="form.BodyParts">
|
<el-checkbox-group v-model="form.BodyParts">
|
||||||
<el-checkbox
|
<el-checkbox v-for="bodyPart in trialBodyPartTypes" :key="bodyPart" :label="bodyPart">{{
|
||||||
v-for="bodyPart in trialBodyPartTypes"
|
|
||||||
:key="bodyPart"
|
|
||||||
:label="bodyPart"
|
|
||||||
>{{
|
|
||||||
$fd('Bodypart', bodyPart, 'Code', BodyPart, 'Name')
|
$fd('Bodypart', bodyPart, 'Code', BodyPart, 'Name')
|
||||||
}}</el-checkbox
|
}}</el-checkbox>
|
||||||
>
|
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 检查日期 -->
|
<!-- 检查日期 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:uploadNonDicoms:table:studyDate')" prop="ImageDate" :rules="[
|
||||||
:label="$t('trials:uploadNonDicoms:table:studyDate')"
|
|
||||||
prop="ImageDate"
|
|
||||||
:rules="[
|
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('common:ruleMessage:specify'),
|
message: $t('common:ruleMessage:specify'),
|
||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
},
|
},
|
||||||
]"
|
]">
|
||||||
>
|
<el-date-picker v-model="form.ImageDate" type="date" :picker-options="pickerOption"
|
||||||
<el-date-picker
|
value-format="yyyy-MM-dd" format="yyyy-MM-dd" style="width: 100%" />
|
||||||
v-model="form.ImageDate"
|
|
||||||
type="date"
|
|
||||||
:picker-options="pickerOption"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
format="yyyy-MM-dd"
|
|
||||||
style="width: 100%"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
|
||||||
class="base-dialog-footer"
|
|
||||||
style="text-align: right; margin-top: 10px"
|
|
||||||
>
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button
|
<el-button size="small" type="primary" :disabled="btnLoading" @click="dialogVisible = false">
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
:disabled="btnLoading"
|
|
||||||
@click="dialogVisible = false"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:cancel') }}
|
{{ $t('common:button:cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
:loading="btnLoading"
|
|
||||||
@click="handleSave"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:save') }}
|
{{ $t('common:button:save') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -381,16 +202,9 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 上传非dicom文件 -->
|
<!-- 上传非dicom文件 -->
|
||||||
<el-dialog
|
<el-dialog v-if="uploadVisible" :visible.sync="uploadVisible" :close-on-click-modal="false"
|
||||||
v-if="uploadVisible"
|
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')" width="800px" append-to-body
|
||||||
:visible.sync="uploadVisible"
|
custom-class="base-dialog-wrapper" @close="resetFileDiaolg">
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')"
|
|
||||||
width="800px"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
@close="resetFileDiaolg"
|
|
||||||
>
|
|
||||||
<!-- 多文件上传 -->
|
<!-- 多文件上传 -->
|
||||||
<form id="inputForm" ref="uploadForm">
|
<form id="inputForm" ref="uploadForm">
|
||||||
<el-divider content-position="left">{{
|
<el-divider content-position="left">{{
|
||||||
|
@ -401,33 +215,15 @@
|
||||||
}}</el-divider>
|
}}</el-divider>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="upload" style="margin-right: 10px">
|
<div class="upload" style="margin-right: 10px">
|
||||||
<input
|
<input multiple="multiple" webkitdirectory="" directory accept="*/*" type="file" name="uploadFolder"
|
||||||
multiple="multiple"
|
class="select-file" title="" @change="beginScanFiles($event)" v-if="!btnLoading" />
|
||||||
webkitdirectory=""
|
|
||||||
directory
|
|
||||||
accept="*/*"
|
|
||||||
type="file"
|
|
||||||
name="uploadFolder"
|
|
||||||
class="select-file"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!btnLoading"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:uploadNonDicoms:button:selectFolder') }}
|
{{ $t('trials:uploadNonDicoms:button:selectFolder') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="upload">
|
<div class="upload">
|
||||||
<input
|
<input class="select-file" multiple="" :accept="faccept.join(',')" type="file" name="uploadFile" title=""
|
||||||
class="select-file"
|
@change="beginScanFiles($event)" v-if="!btnLoading" />
|
||||||
multiple=""
|
|
||||||
:accept="faccept.join(',')"
|
|
||||||
type="file"
|
|
||||||
name="uploadFile"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!btnLoading"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
<div class="btn-select">
|
||||||
{{ $t('trials:uploadNonDicoms:button:select') }}
|
{{ $t('trials:uploadNonDicoms:button:select') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -435,82 +231,46 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<!-- 文件列表 -->
|
<!-- 文件列表 -->
|
||||||
<el-table
|
<el-table ref="filesTable" :data="fileList" class="dicomFiles-table" height="300"
|
||||||
ref="filesTable"
|
@selection-change="handleSelectionChange">
|
||||||
:data="fileList"
|
<el-table-column type="selection" width="55" :selectable="(row, index) => row.status !== 2 && !btnLoading" />
|
||||||
class="dicomFiles-table"
|
|
||||||
height="300"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column
|
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
:selectable="(row, index) => row.status !== 2 && !btnLoading"
|
|
||||||
/>
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="name" :label="$t('trials:uploadNonDicoms:table:fileName')" min-width="100" />
|
||||||
prop="name"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileName')"
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<!-- 文件大小 -->
|
<!-- 文件大小 -->
|
||||||
<el-table-column
|
<el-table-column prop="size" :label="$t('trials:uploadNonDicoms:table:fileSize')">
|
||||||
prop="size"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileSize')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{
|
<span>{{
|
||||||
scope.row.size && scope.row.size > 0
|
scope.row.size && scope.row.size > 0
|
||||||
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
||||||
: ''
|
: '0MB'
|
||||||
}}</span>
|
}}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 文件类型 -->
|
<!-- 文件类型 -->
|
||||||
<el-table-column
|
<el-table-column prop="type" :label="$t('trials:uploadNonDicoms:table:fileType')" />
|
||||||
prop="type"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:fileType')"
|
|
||||||
/>
|
|
||||||
<!-- 上传状态 -->
|
<!-- 上传状态 -->
|
||||||
<el-table-column
|
<el-table-column prop="status" :label="$t('trials:uploadNonDicoms:table:uploadStatus')" min-width="100">
|
||||||
prop="status"
|
|
||||||
:label="$t('trials:uploadNonDicoms:table:uploadStatus')"
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag
|
<el-tag :type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
||||||
:type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
v-if="scope.row.status || scope.row.status === 0">{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
||||||
v-if="scope.row.status || scope.row.status === 0"
|
|
||||||
>{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column :label="$t('trials:uploadNonDicoms:table:failedFileCount')" min-width="150"
|
||||||
:label="$t('trials:uploadNonDicoms:table:failedFileCount')"
|
show-overflow-tooltip>
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-progress
|
<el-progress color="#409eff" :percentage="scope.row.size && scope.row.size > 0 ? ((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
||||||
color="#409eff"
|
|
||||||
:percentage="
|
|
||||||
((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
|
||||||
1
|
1
|
||||||
"
|
: ((scope.row.uploadFileSize * 100) / 1).toFixed(2) *
|
||||||
/>
|
1
|
||||||
|
" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="$t('common:action:action')">
|
<el-table-column :label="$t('common:action:action')">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button size="mini" icon="el-icon-delete" circle :disabled="btnLoading"
|
||||||
size="mini"
|
:title="$t('trials:crcUpload:action:delete')" @click="handleRemoveFile(scope.row)" />
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:disabled="btnLoading"
|
|
||||||
:title="$t('trials:crcUpload:action:delete')"
|
|
||||||
@click="handleRemoveFile(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -518,13 +278,8 @@
|
||||||
<span style="margin-right: 10px">{{
|
<span style="margin-right: 10px">{{
|
||||||
$store.state.trials.uploadTip
|
$store.state.trials.uploadTip
|
||||||
}}</span>
|
}}</span>
|
||||||
<el-button
|
<el-button size="small" type="primary" :disabled="selectArr.length == 0" :loading="btnLoading"
|
||||||
size="small"
|
@click="beginUpload">
|
||||||
type="primary"
|
|
||||||
:disabled="selectArr.length == 0"
|
|
||||||
:loading="btnLoading"
|
|
||||||
@click="beginUpload"
|
|
||||||
>
|
|
||||||
{{ $t('trials:uploadNonDicoms:action:upload') }}
|
{{ $t('trials:uploadNonDicoms:action:upload') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -544,25 +299,11 @@
|
||||||
<upload-videos @uploadOver="uploadOver" />
|
<upload-videos @uploadOver="uploadOver" />
|
||||||
</el-dialog> -->
|
</el-dialog> -->
|
||||||
<!-- 预览非DICOM视频文件 -->
|
<!-- 预览非DICOM视频文件 -->
|
||||||
<el-dialog
|
<el-dialog v-if="lookVideoVisible" :visible.sync="lookVideoVisible" upload-video-visible
|
||||||
v-if="lookVideoVisible"
|
:close-on-click-modal="false" :title="$t('trials:uploadNonDicoms:title:xflookvideo')" width="480px" append-to-body
|
||||||
:visible.sync="lookVideoVisible"
|
custom-class="base-dialog-wrapper">
|
||||||
upload-video-visible
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="$t('trials:uploadNonDicoms:title:xflookvideo')"
|
|
||||||
width="480px"
|
|
||||||
append-to-body
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
>
|
|
||||||
<div style="display: flex; justify-content: center">
|
<div style="display: flex; justify-content: center">
|
||||||
<video
|
<video v-if="lookVideoVisible" id="video" controls crossorigin="anonymous" width="400" height="270">
|
||||||
v-if="lookVideoVisible"
|
|
||||||
id="video"
|
|
||||||
controls
|
|
||||||
crossorigin="anonymous"
|
|
||||||
width="400"
|
|
||||||
height="270"
|
|
||||||
>
|
|
||||||
<source :src="currentRow.VideoUrl" type="video/mp4" />
|
<source :src="currentRow.VideoUrl" type="video/mp4" />
|
||||||
</video>
|
</video>
|
||||||
</div>
|
</div>
|
||||||
|
@ -572,27 +313,12 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog
|
<el-dialog v-if="previewImgVisible" :visible.sync="previewImgVisible"
|
||||||
v-if="previewImgVisible"
|
:title="$t('trials:uploadNonDicoms:dialogTitle:preview')" append-to-body width="565px">
|
||||||
:visible.sync="previewImgVisible"
|
<div v-loading="imageLoading" class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
|
||||||
:title="$t('trials:uploadNonDicoms:dialogTitle:preview')"
|
<el-image :src="`${OSSclientConfig.basePath}${imgUrl}`" crossorigin="anonymous" fit="fit"
|
||||||
append-to-body
|
style="height: 500px; width: 500px" @error="imageLoading = false" @load="imageLoading = false"
|
||||||
width="565px"
|
:preview-src-list="[`${OSSclientConfig.basePath}${imgUrl}`]" />
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-loading="imageLoading"
|
|
||||||
class="base-modal-body"
|
|
||||||
style="border: 2px solid #ccc; padding: 10px"
|
|
||||||
>
|
|
||||||
<el-image
|
|
||||||
:src="`${OSSclientConfig.basePath}${imgUrl}`"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
fit="fit"
|
|
||||||
style="height: 500px; width: 500px"
|
|
||||||
@error="imageLoading = false"
|
|
||||||
@load="imageLoading = false"
|
|
||||||
:preview-src-list="[`${OSSclientConfig.basePath}${imgUrl}`]"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
@ -839,7 +565,7 @@ export default {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
// 打开上传文件弹窗
|
// 打开上传文件弹窗
|
||||||
handleUpload(row) {
|
handleUpload(row) {
|
||||||
|
@ -962,8 +688,7 @@ export default {
|
||||||
type: extendName.split('.')[1],
|
type: extendName.split('.')[1],
|
||||||
status: 0,
|
status: 0,
|
||||||
file: files[i],
|
file: files[i],
|
||||||
id: `${files[i].lastModified}${
|
id: `${files[i].lastModified}${files[i].name
|
||||||
files[i].name
|
|
||||||
}${new Date().getTime()}${i + 1}`,
|
}${new Date().getTime()}${i + 1}`,
|
||||||
fileType: files[i].type,
|
fileType: files[i].type,
|
||||||
uploadFileSize: 0,
|
uploadFileSize: 0,
|
||||||
|
@ -1024,7 +749,7 @@ export default {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
// 获取待上传文件信息
|
// 获取待上传文件信息
|
||||||
handleSelectionChange(selection) {
|
handleSelectionChange(selection) {
|
||||||
|
@ -1070,8 +795,7 @@ export default {
|
||||||
if (!this.uploadVisible) return
|
if (!this.uploadVisible) return
|
||||||
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
|
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
|
||||||
file.status = 1
|
file.status = 1
|
||||||
let path = `/${this.trialId}/Image/${this.data.SubjectId}/${
|
let path = `/${this.trialId}/Image/${this.data.SubjectId}/${this.data.Id
|
||||||
this.data.Id
|
|
||||||
}/${this.$guid()}${file.name
|
}/${this.$guid()}${file.name
|
||||||
.substring(file.name.lastIndexOf('.'))
|
.substring(file.name.lastIndexOf('.'))
|
||||||
.toLocaleLowerCase()}`
|
.toLocaleLowerCase()}`
|
||||||
|
@ -1128,7 +852,7 @@ export default {
|
||||||
(percentage, checkpoint, lastPer) => {
|
(percentage, checkpoint, lastPer) => {
|
||||||
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
||||||
if (item.uploadFileSize > file.fileSize) {
|
if (item.uploadFileSize > file.fileSize) {
|
||||||
item.uploadFileSize = file.fileSize
|
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -1271,7 +995,7 @@ export default {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => { })
|
||||||
},
|
},
|
||||||
// 预览
|
// 预览
|
||||||
handlePreview(row) {
|
handlePreview(row) {
|
||||||
|
@ -1338,6 +1062,7 @@ export default {
|
||||||
background: #428bca;
|
background: #428bca;
|
||||||
border-color: #428bca;
|
border-color: #428bca;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
||||||
.select-file {
|
.select-file {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
@ -1348,6 +1073,7 @@ export default {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-select {
|
.btn-select {
|
||||||
//给显示在页面上的按钮写样式
|
//给显示在页面上的按钮写样式
|
||||||
width: 90px;
|
width: 90px;
|
||||||
|
@ -1363,6 +1089,7 @@ export default {
|
||||||
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
|
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.non-dicom-wrapper {
|
.non-dicom-wrapper {
|
||||||
::v-deep .delete-row {
|
::v-deep .delete-row {
|
||||||
text-decoration-line: line-through;
|
text-decoration-line: line-through;
|
||||||
|
|
|
@ -0,0 +1,440 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer class="reuploa-audit-wrapper">
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:siteId')">
|
||||||
|
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width: 120px"
|
||||||
|
placeholder="">
|
||||||
|
<el-option v-for="(item, index) of siteOptions" :key="index" :label="item.TrialSiteCode"
|
||||||
|
:value="item.TrialSiteId" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 受试者编号 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:subjectId')">
|
||||||
|
<el-input v-model="searchData.SubjectCode" style="width: 100px" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 访视名称 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:visitName')">
|
||||||
|
<el-select v-model="searchData.VisitPlanArray" style="width: 200px" clearable multiple
|
||||||
|
:collapse-tags="true" placeholder="">
|
||||||
|
<el-option v-for="(item, index) of visitPlanOptions" :key="index" :label="item.VisitName"
|
||||||
|
:value="item.VisitNum">
|
||||||
|
<span style="float: left">{{ item.VisitName }}</span>
|
||||||
|
</el-option>
|
||||||
|
<el-option key="Other" label="Out of Plan" value="1.11" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 申请人 -->
|
||||||
|
<el-form-item class="my_multiple" :label="$t('trials:reuploadAudit:table:CreateUserId')">
|
||||||
|
<el-select v-model="searchData.CreateUserId" style="width: 140px" clearable placeholder="">
|
||||||
|
<el-option v-for="(item) of userOptions" :key="item.CreateUserId" :label="item.FullName"
|
||||||
|
:value="item.CreateUserId">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 申请人角色 -->
|
||||||
|
<el-form-item class="my_multiple" :label="$t('trials:reuploadAudit:table:ApplyUserRole')">
|
||||||
|
<el-select v-model="searchData.ApplyUserRole" style="width: 140px" clearable placeholder="">
|
||||||
|
<el-option v-for="(item) of $d.ImageBackApplyEnum" :key="item.id" :label="item.label"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 申请时间 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:createTime')">
|
||||||
|
<el-date-picker v-model="timeListC" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="datetimerange" :default-time="['00:00:00', '23:59:59']" @change="changeTimeListC"
|
||||||
|
style="width: 360px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 审核状态 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:auditState')" class="my_multiple">
|
||||||
|
<el-select v-model="searchData.ImageBackState" clearable style="width: 140px" placeholder="">
|
||||||
|
<el-option v-for="item of $d.ImageBackstateEnum" :key="item.id" :value="item.value"
|
||||||
|
:label="item.label" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 审核通过时间 -->
|
||||||
|
<el-form-item :label="$t('trials:reuploadAudit:table:auditTime')">
|
||||||
|
<el-date-picker v-model="timeList" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="datetimerange" :default-time="['00:00:00', '23:59:59']" @change="changeTimeList"
|
||||||
|
style="width: 360px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<!-- 查询 -->
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
|
{{ $t('common:button:search') }}
|
||||||
|
</el-button>
|
||||||
|
<!-- 重置 -->
|
||||||
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
|
{{ $t('common:button:reset') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 重传审批列表 -->
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table ref="reuploadAuditList" v-loading="loading" v-adaptive="{ bottomOffset: 60 }" :data="list" stripe
|
||||||
|
height="100" @sort-change="handleSortByColumn">
|
||||||
|
<!-- 是否加急 -->
|
||||||
|
<el-table-column prop="IsUrgent" :label="$t('trials:reuploadAudit:table:isUrgent')"
|
||||||
|
show-overflow-tooltip width="120" sortable="custom">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button v-if="
|
||||||
|
scope.row.IsUrgent &&
|
||||||
|
hasPermi(['trials:trials-panel:visit:reuploa-audit:set-urgent'])
|
||||||
|
" type="danger" size="mini" :disabled="!(userTypeEnumInt === 1 || userTypeEnumInt === 3)"
|
||||||
|
@click="handleUrgentStatus(scope.row)">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsUrgent) }}
|
||||||
|
</el-button>
|
||||||
|
<el-button v-else-if="
|
||||||
|
!scope.row.IsUrgent &&
|
||||||
|
hasPermi(['trials:trials-panel:visit:reuploa-audit:set-urgent'])
|
||||||
|
" size="mini" type="primary" :disabled="!(userTypeEnumInt === 1 || userTypeEnumInt === 3)"
|
||||||
|
@click="handleUrgentStatus(scope.row)">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsUrgent) }}
|
||||||
|
</el-button>
|
||||||
|
<span v-else>
|
||||||
|
<el-tag v-if="scope.row.IsUrgent" type="danger">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsUrgent) }}
|
||||||
|
</el-tag>
|
||||||
|
<el-tag v-else type="primary">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsUrgent) }}
|
||||||
|
</el-tag>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-table-column prop="TrialSiteCode" :label="$t('trials:reuploadAudit:table:siteId')"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<!-- 受试者编号 -->
|
||||||
|
<el-table-column prop="SubjectCode" :label="$t('trials:reuploadAudit:table:subjectId')"
|
||||||
|
show-overflow-tooltip sortable="custom" width="120px" />
|
||||||
|
<!-- 访视名称 -->
|
||||||
|
<el-table-column prop="VisitName" :label="$t('trials:reuploadAudit:table:visitName')"
|
||||||
|
show-overflow-tooltip sortable="custom">
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 最晚拍片日期 -->
|
||||||
|
<el-table-column prop="LatestScanDate" :label="$t('trials:reuploadAudit:table:lScanDate')"
|
||||||
|
show-overflow-tooltip width="170" sortable="custom">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tooltip class="item" effect="dark" :content="`${scope.row.EarliestScanDate
|
||||||
|
? moment(scope.row.EarliestScanDate).format('YYYY-MM-DD')
|
||||||
|
: ''
|
||||||
|
} ~ ${scope.row.LatestScanDate
|
||||||
|
? moment(scope.row.LatestScanDate).format('YYYY-MM-DD')
|
||||||
|
: ''
|
||||||
|
}`" placement="top">
|
||||||
|
<span>
|
||||||
|
{{
|
||||||
|
scope.row.LatestScanDate
|
||||||
|
? moment(scope.row.LatestScanDate).format('YYYY-MM-DD')
|
||||||
|
: ''
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 提交时间 -->
|
||||||
|
<el-table-column prop="SubmitTime" :label="$t('trials:reuploadAudit:table:SubmitTime')"
|
||||||
|
show-overflow-tooltip sortable="custom" width="150px" />
|
||||||
|
<!-- 申请人 -->
|
||||||
|
<el-table-column prop="CreateUserFullName" :label="$t('trials:reuploadAudit:table:createUserFullName')"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<!-- 申请人角色 -->
|
||||||
|
<el-table-column prop="ApplyUserRole" :label="$t('trials:reuploadAudit:table:applyUserRole')"
|
||||||
|
show-overflow-tooltip sortable="custom" width="120px">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ $fd('ImageBackApplyEnum',
|
||||||
|
scope.row.ApplyUserRole) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 申请时间 -->
|
||||||
|
<el-table-column prop="CreateTime" :label="$t('trials:reuploadAudit:table:createTime')"
|
||||||
|
show-overflow-tooltip sortable="custom" width="150px" />
|
||||||
|
<!-- 审核状态 -->
|
||||||
|
<el-table-column prop="ImageBackState" :label="$t('trials:reuploadAudit:table:imageBackState')"
|
||||||
|
show-overflow-tooltip sortable="custom">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag :type="['warning', '', 'danger'][scope.row.ImageBackState]">{{ $fd('ImageBackstateEnum',
|
||||||
|
scope.row.ImageBackState) }}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 审核时间 -->
|
||||||
|
<el-table-column prop="AuditTime" :label="$t('trials:reuploadAudit:table:auditTime')"
|
||||||
|
show-overflow-tooltip sortable="custom" width="150px" />
|
||||||
|
<el-table-column :label="$t('common:action:action')" fixed="right">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button :title="$t('trials:reuploadAudit:button:auditYes')" circle
|
||||||
|
:disabled="scope.row.ImageBackState > 0" icon="el-icon-check" size="mini"
|
||||||
|
@click="audit(scope.row, 1)" />
|
||||||
|
<el-button :title="$t('trials:reuploadAudit:button:auditNo')"
|
||||||
|
:disabled="scope.row.ImageBackState > 0" circle icon="el-icon-close" size="mini"
|
||||||
|
@click="audit(scope.row, 2)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
|
@pagination="getList" />
|
||||||
|
</template>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getImageBackList,
|
||||||
|
getTrialSiteSelect,
|
||||||
|
auditImageBack,
|
||||||
|
getImageBackApplyUserList,
|
||||||
|
getTrialVisitStageSelect
|
||||||
|
} from '@/api/trials'
|
||||||
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
import moment from 'moment'
|
||||||
|
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
TrialId: null,
|
||||||
|
TrialSiteId: null,
|
||||||
|
SubjectCode: null,
|
||||||
|
CreateUserId: null,
|
||||||
|
ApplyUserRole: null,
|
||||||
|
ApplyBeginTime: null,
|
||||||
|
ApplyEndTime: null,
|
||||||
|
ImageBackState: null,
|
||||||
|
AuditBeginTime: null,
|
||||||
|
AuditEndTime: null,
|
||||||
|
VisitName: null,
|
||||||
|
VisitPlanArray: [],
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
Asc: true,
|
||||||
|
SortField: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'QcCheck',
|
||||||
|
components: {
|
||||||
|
BaseContainer,
|
||||||
|
Pagination
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
total: 0,
|
||||||
|
list: [],
|
||||||
|
loading: false,
|
||||||
|
siteOptions: [],
|
||||||
|
userOptions: [],
|
||||||
|
visitPlanOptions: [],
|
||||||
|
timeListC: [],
|
||||||
|
timeList: [],
|
||||||
|
trialId: null,
|
||||||
|
moment
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
list(val) {
|
||||||
|
this.doLayout()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.trialId = this.$route.query.trialId
|
||||||
|
this.getList()
|
||||||
|
this.getSite()
|
||||||
|
this.getUser()
|
||||||
|
this.getVisitPlanOptions()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async audit(row, state) {
|
||||||
|
try {
|
||||||
|
let message = this.$t("trials:reuploadAudit:confirmMessage:imageBack").replace("xxx", this.$fd("ImageBackstateEnum", state))
|
||||||
|
let confirm = await this.$confirm(message)
|
||||||
|
if (!confirm) return false
|
||||||
|
let params = {
|
||||||
|
IamgeBackRecordId: row.Id,
|
||||||
|
IsAgree: state === 1 ? true : false
|
||||||
|
}
|
||||||
|
this.loading = true
|
||||||
|
let res = await auditImageBack(params)
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
this.loading = true
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
getImageBackList(this.searchData)
|
||||||
|
.then((res) => {
|
||||||
|
this.loading = false
|
||||||
|
this.list = res.Result.CurrentPageData
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
this.OtherInfo = res.OtherInfo
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取site下拉框数据
|
||||||
|
getSite() {
|
||||||
|
getTrialSiteSelect(this.trialId).then((res) => {
|
||||||
|
this.siteOptions = res.Result
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取访视下拉框数据
|
||||||
|
getVisitPlanOptions() {
|
||||||
|
getTrialVisitStageSelect(this.trialId).then((res) => {
|
||||||
|
this.visitPlanOptions = res.Result
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取申请人下拉框数据
|
||||||
|
getUser() {
|
||||||
|
getImageBackApplyUserList({
|
||||||
|
TrialId: this.trialId
|
||||||
|
}).then((res) => {
|
||||||
|
this.userOptions = res.Result
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doLayout() {
|
||||||
|
const scope = this
|
||||||
|
this.$nextTick(() => {
|
||||||
|
scope.$refs.reuploadAuditList.doLayout()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 重置
|
||||||
|
handleReset() {
|
||||||
|
this.searchData = searchDataDefault()
|
||||||
|
this.timeList = []
|
||||||
|
this.getList()
|
||||||
|
this.timeListC = []
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.reuploadAuditList.clearSort()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 查询
|
||||||
|
handleSearch() {
|
||||||
|
this.searchData.PageIndex = 1
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.searchData.Asc = true
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop
|
||||||
|
this.searchData.PageIndex = 1
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
changeTimeList() {
|
||||||
|
if (this.timeList) {
|
||||||
|
this.searchData.AuditBeginTime = this.timeList[0]
|
||||||
|
this.searchData.AuditEndTime = this.timeList[1]
|
||||||
|
} else {
|
||||||
|
this.searchData.AuditBeginTime = null
|
||||||
|
this.searchData.AuditEndTime = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
changeTimeListC() {
|
||||||
|
if (this.timeListC) {
|
||||||
|
this.searchData.ApplyBeginTime = this.timeListC[0]
|
||||||
|
this.searchData.ApplyEndTime = this.timeListC[1]
|
||||||
|
} else {
|
||||||
|
this.searchData.ApplyBeginTime = null
|
||||||
|
this.searchData.ApplyEndTime = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.reuploa-audit-wrapper {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.remark {
|
||||||
|
position: absolute;
|
||||||
|
left: 5px;
|
||||||
|
bottom: 7px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.qc-dialog {
|
||||||
|
.el-dialog__headerbtn {
|
||||||
|
top: 10px;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dialog__body {
|
||||||
|
height: calc(100% - 70px);
|
||||||
|
padding: 0 10px;
|
||||||
|
|
||||||
|
.qc-dialog-body {
|
||||||
|
padding: 10px 20px;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-breadcrumb {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #428bca;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-title {
|
||||||
|
padding: 12px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background-color: #dcdfe6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-primary-circle {
|
||||||
|
display: inline-block;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 18px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 1px solid #f56c6c;
|
||||||
|
color: #f56c6c;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.manuals-dialog-container {
|
||||||
|
margin-top: 50px !important;
|
||||||
|
width: 75%;
|
||||||
|
height: 80%;
|
||||||
|
|
||||||
|
.el-dialog__body {
|
||||||
|
padding: 10px;
|
||||||
|
height: calc(100% - 50px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dialog__header {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.manuals-full-dialog-container {
|
||||||
|
.el-dialog__body {
|
||||||
|
padding: 10px;
|
||||||
|
height: calc(100% - 50px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dialog__header {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,120 @@
|
||||||
|
<template>
|
||||||
|
<div class="reuploadAudit-wrapper">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<!-- 重阅审批 -->
|
||||||
|
<h3>{{ $t('trials:trials-panel:attachments:reuploadAudit') }}</h3>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12" style="text-align:right;">
|
||||||
|
<h3>
|
||||||
|
<Pagination class="page" :total="total" :page.sync="listQuery.pageIndex"
|
||||||
|
:limit.sync="listQuery.pageSize" layout="total, sizes, prev, pager, next" :background="false"
|
||||||
|
style="display: inline-block;" @pagination="getList" />
|
||||||
|
<!-- 重置 -->
|
||||||
|
<el-button icon="el-icon-refresh-left" size="small" circle :title="$t('common:button:reset')"
|
||||||
|
@click="handleReset" />
|
||||||
|
</h3>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-table ref="needSignDocList" v-loading="listLoading" :data="list" :show-header="true"
|
||||||
|
v-adaptive="{ bottomOffset: 45 }" height="100" @sort-change="handleSortByColumn">
|
||||||
|
<el-table-column type="index" width="40" />
|
||||||
|
<!-- 项目编号 -->
|
||||||
|
<el-table-column :label="$t('trials:workbench:table:trialId')" prop="TrialCode" show-overflow-tooltip
|
||||||
|
sortable="custom" />
|
||||||
|
<!-- 试验名称 -->
|
||||||
|
<el-table-column :label="$t('trials:workbench:table:experimentName')" prop="ExperimentName"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<!-- 研究方案号 -->
|
||||||
|
<el-table-column :label="$t('trials:workbench:table:researchNo')" prop="ResearchProgramNo"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<!-- 加急量 -->
|
||||||
|
<el-table-column :label="$t('trials:sysDocBeSigned:table:UrgentCount')" prop="UrgentCount"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<!-- 待审批量 -->
|
||||||
|
<el-table-column :label="$t('trials:sysDocBeSigned:table:ToBeApprovalCount')" prop="ToBeApprovalCount"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<el-table-column :label="$t('common:action:action')" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button icon="el-icon-edit-outline" circle
|
||||||
|
:disabled="!!~trialIdList.indexOf(scope.row.TrialId) || isSignSystemDoc"
|
||||||
|
:title="$t('trials:researchRecord:action:view')" @click="handleAudit(scope.row)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getPMImageBackToBeDoneList } from '@/api/trials'
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
pageIndex: 1,
|
||||||
|
pageSize: 20,
|
||||||
|
asc: true,
|
||||||
|
sortField: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'ReuploadAudit',
|
||||||
|
components: { Pagination },
|
||||||
|
props: {
|
||||||
|
trialIdList: {
|
||||||
|
type: Array,
|
||||||
|
default() { return [] }
|
||||||
|
},
|
||||||
|
isSignSystemDoc: {
|
||||||
|
type: Boolean,
|
||||||
|
default() { return false }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
listLoading: false,
|
||||||
|
list: [],
|
||||||
|
listQuery: searchDataDefault(),
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
this.listLoading = true
|
||||||
|
getPMImageBackToBeDoneList(this.listQuery).then(res => {
|
||||||
|
this.listLoading = false
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
this.list = res.Result.CurrentPageData
|
||||||
|
}).catch(() => { this.listLoading = false })
|
||||||
|
},
|
||||||
|
handleAudit(row) {
|
||||||
|
this.$router.push({ path: `/trials/trials-panel/visit/reupload-audit?trialId=${row.TrialId}&trialCode=${row.TrialCode}&researchProgramNo=${row.ResearchProgramNo}` })
|
||||||
|
},
|
||||||
|
handleReset() {
|
||||||
|
this.listQuery = searchDataDefault()
|
||||||
|
this.getList()
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.needSignDocList.clearSort()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.listQuery.asc = true
|
||||||
|
} else {
|
||||||
|
this.listQuery.asc = false
|
||||||
|
}
|
||||||
|
this.listQuery.sortField = column.prop
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.reuploadAudit-wrapper {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,14 +1,17 @@
|
||||||
<template>
|
<template>
|
||||||
<div id="contextmenu" class="contextmenu" v-show="visible">
|
<div id="contextmenu" class="contextmenu" v-show="visible" :style="{
|
||||||
|
'z-index': zIndex
|
||||||
|
}">
|
||||||
|
|
||||||
<div class="contextmenu__item" @click="handleMenu('open')" v-show="checkList.length <= 1">
|
<div class="contextmenu__item" @click="handleMenu('open')" v-show="checkList.length <= 1">
|
||||||
<i class="icon el-icon-right icon_open" />
|
<i class="icon el-icon-right icon_open" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:open') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:open') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="contextmenu__item" @click="handleMenu('download')">
|
<div class="contextmenu__item" @click="handleMenu('downLoad')">
|
||||||
<i class="icon icon_download" />
|
<i class="icon icon_download" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:download') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:download') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<template v-if="['file', 'files', 'folder'].includes(type)">
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="contextmenu__item" @click="handleMenu('copy')">
|
<div class="contextmenu__item" @click="handleMenu('copy')">
|
||||||
<i class="icon icon_copy" />
|
<i class="icon icon_copy" />
|
||||||
|
@ -18,6 +21,10 @@
|
||||||
<i class="icon icon_shear" />
|
<i class="icon icon_shear" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:shear') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:shear') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="contextmenu__item" @click="handleMenu('stickup')" v-if="checkList.length <= 1 && isCopy">
|
||||||
|
<i class="icon icon_stickup" />
|
||||||
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:stickup') }}</span>
|
||||||
|
</div>
|
||||||
<div class="contextmenu__item" @click="handleMenu('rename')" v-show="checkList.length <= 1">
|
<div class="contextmenu__item" @click="handleMenu('rename')" v-show="checkList.length <= 1">
|
||||||
<i class="icon icon_rename" />
|
<i class="icon icon_rename" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:rename') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:rename') }}</span>
|
||||||
|
@ -26,11 +33,29 @@
|
||||||
<i class="icon icon_del" />
|
<i class="icon icon_del" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:del') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:del') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="line" v-show="checkList.length <= 1"></div>
|
</template>
|
||||||
<div class="contextmenu__item" @click="handleMenu('Stats')" v-show="checkList.length <= 1">
|
<template v-if="checkList.length <= 1 && type === 'file'">
|
||||||
|
<div class="line"></div>
|
||||||
|
<div class="contextmenu__item" @click="handleMenu('version')">
|
||||||
<i class="icon el-icon-warning-outline icon_Stats" />
|
<i class="icon el-icon-warning-outline icon_Stats" />
|
||||||
<span>{{ $t('trials:trials-workbench:auditDocument:menu:Stats') }}</span>
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:version') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-if="type === 'version' || type === 'c_version'">
|
||||||
|
<div class="line"></div>
|
||||||
|
<div class="contextmenu__item" @click="handleMenu('setVersion')" v-if="type === 'version'">
|
||||||
|
<i class="icon el-icon-document-checked icon_Stats" />
|
||||||
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:setVersion') }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="contextmenu__item" @click="handleMenu('delVersion')" v-if="type === 'version'">
|
||||||
|
<i class="icon el-icon-delete icon_Stats" />
|
||||||
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:delVersion') }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="contextmenu__item" @click="handleMenu('delAllVersion')">
|
||||||
|
<i class="icon el-icon-delete-solid icon_Stats" />
|
||||||
|
<span>{{ $t('trials:trials-workbench:auditDocument:menu:delAllVersion') }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -43,15 +68,25 @@ export default {
|
||||||
default: () => {
|
default: () => {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
isCopy: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false
|
visible: false,
|
||||||
|
type: 'file',
|
||||||
|
zIndex: 9,
|
||||||
|
rowData: {}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
init(row, column, event) {
|
init(event, row, type, zIndex = 9) {
|
||||||
|
this.rowData = row
|
||||||
|
this.type = type
|
||||||
|
this.zIndex = zIndex
|
||||||
// 设置菜单出现的位置
|
// 设置菜单出现的位置
|
||||||
// 具体显示位置根据自己需求进行调节
|
// 具体显示位置根据自己需求进行调节
|
||||||
this.visible = true
|
this.visible = true
|
||||||
|
@ -77,7 +112,7 @@ export default {
|
||||||
this.$emit("foo");
|
this.$emit("foo");
|
||||||
},
|
},
|
||||||
handleMenu(item) {
|
handleMenu(item) {
|
||||||
this.$emit("handleMenu", item);
|
this.$emit("handleMenu", { key: item, row: this.rowData });
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -121,7 +156,6 @@ export default {
|
||||||
background-position: top 0 right 0;
|
background-position: top 0 right 0;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
box-shadow: 0 0 0 .5px #88888830, 0 10px 40px 0 #88888840;
|
box-shadow: 0 0 0 .5px #88888830, 0 10px 40px 0 #88888840;
|
||||||
z-index: 9;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.contextmenu__item:hover {
|
.contextmenu__item:hover {
|
||||||
|
@ -219,4 +253,16 @@ export default {
|
||||||
.icon_Stats {
|
.icon_Stats {
|
||||||
color: #1890ff;
|
color: #1890ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*粘贴*/
|
||||||
|
.icon_stickup {
|
||||||
|
color: #1890ff;
|
||||||
|
display: inline-block;
|
||||||
|
background-image: url(@/assets/stickup.png);
|
||||||
|
background-position: 0 0;
|
||||||
|
background-size: 16px 16px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
height: 16px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -0,0 +1,444 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog title="" :visible.sync="visible" :close-on-click-modal="false" :close-on-press-escape="false"
|
||||||
|
:before-close="handleClose" width="450px" center>
|
||||||
|
<div class="auditDocumentDetail">
|
||||||
|
<div class="header">
|
||||||
|
<div class="file_icon">
|
||||||
|
<i class="name_folder" v-if="!rowData.AuditDocumentTypeEnum"></i>
|
||||||
|
<img v-else-if="['png', 'jpg', 'jpeg'].includes(rowData.FileFormat.toLowerCase())"
|
||||||
|
:src="OSSclientConfig.basePath + rowData.FilePath" alt="" class="name_image">
|
||||||
|
<i :class="`name_${rowData.FileFormat}`" v-else></i>
|
||||||
|
</div>
|
||||||
|
<div class="file_name">
|
||||||
|
<div class="name">
|
||||||
|
<span class="name-text">{{ rowData.Name }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="desc">
|
||||||
|
<span class="size">{{ formatFileSize(rowData) }}</span>
|
||||||
|
<span v-if="rowData.AuditDocumentTypeEnum">, </span>
|
||||||
|
<span class="time">{{ rowData.UpdateTime }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||||
|
<el-tab-pane :label="$t('trials:trials-workbench:auditDocument:detail:tabs:versions')"
|
||||||
|
name="versions" v-if="rowData.AuditDocumentTypeEnum === 1">
|
||||||
|
<div class="versions_top">
|
||||||
|
<div class="title">{{
|
||||||
|
$t('trials:trials-workbench:auditDocument:detail:title:historicalVersion') }}
|
||||||
|
</div>
|
||||||
|
<div class="btnBox">
|
||||||
|
<el-button icon="el-icon-refresh" circle size="small"
|
||||||
|
@click.stop="getHistoricalVersion" />
|
||||||
|
<el-button icon="el-icon-upload2" plain size="small" @click.stop="openFile">{{
|
||||||
|
$t('trials:trials-workbench:auditDocument:detail:title:uploadNewVersion')
|
||||||
|
}}</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="versions_content" v-loading="loading">
|
||||||
|
<div class="item" v-for="item of versionList" :key="item.Id">
|
||||||
|
<div class="item_line">
|
||||||
|
<div class="version current_version" v-if="item.IsCurrentVersion">
|
||||||
|
<span>{{
|
||||||
|
$t('trials:trials-workbench:auditDocument:detail:title:currentVersion')
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="version" v-else>
|
||||||
|
<span>v{{ item.Version }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="mtime">{{ item.CreateTime }}</div>
|
||||||
|
<div class="size">{{ formatFileSize(item) }}</div>
|
||||||
|
<div class="add_desc" @click.stop="openMenu($event, item, 'c_version')"
|
||||||
|
v-if="item.IsCurrentVersion">
|
||||||
|
<i class="el-icon-more" />
|
||||||
|
</div>
|
||||||
|
<div class="add_desc" @click.stop="openMenu($event, item, 'version')" v-else>
|
||||||
|
<i class="el-icon-more" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane :label="$t('trials:trials-workbench:auditDocument:detail:tabs:Stats')" name="Stats"
|
||||||
|
v-if="false">
|
||||||
|
<div class="p">
|
||||||
|
<div class="title">{{ $t('trials:trials-workbench:auditDocument:detail:title:path') }}</div>
|
||||||
|
<div class="content">{shareItem:8}/周会/20250324-工作总结及后续工作.pptx</div>
|
||||||
|
</div>
|
||||||
|
<div class="p" v-if="!rowData.AuditDocumentTypeEnum">
|
||||||
|
<div class="title">{{ $t('trials:trials-workbench:auditDocument:detail:title:contain') }}
|
||||||
|
</div>
|
||||||
|
<div class="content">4项 (2文件, 2文件夹)</div>
|
||||||
|
</div>
|
||||||
|
<div class="p" v-else>
|
||||||
|
<div class="title">{{ $t('trials:trials-workbench:auditDocument:detail:title:size') }}</div>
|
||||||
|
<div class="content">{{ formatFileSize(rowData) }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="p">
|
||||||
|
<div class="title">{{ $t('trials:trials-workbench:auditDocument:detail:title:updateTime') }}
|
||||||
|
</div>
|
||||||
|
<div class="content">{{ rowData.UpdateTime }}</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getHistoricalVersion } from '@/api/trials'
|
||||||
|
export default {
|
||||||
|
name: "auditDocumentDetail",
|
||||||
|
props: {
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
rowData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeName: 'versions',
|
||||||
|
versionList: [],
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// mounted() {
|
||||||
|
// this.getHistoricalVersion()
|
||||||
|
// },
|
||||||
|
watch: {
|
||||||
|
rowData: {
|
||||||
|
handler() {
|
||||||
|
this.getHistoricalVersion()
|
||||||
|
},
|
||||||
|
deep: true,
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleClick() { },
|
||||||
|
openMenu(e, row, type) {
|
||||||
|
this.$emit('openContextmenu', { e, row, type, zIndex: 3000 })
|
||||||
|
},
|
||||||
|
handleClose() {
|
||||||
|
this.$emit("update:visible", false)
|
||||||
|
},
|
||||||
|
delAll() {
|
||||||
|
let ids = []
|
||||||
|
this.versionList.forEach(item => {
|
||||||
|
if (!item.IsCurrentVersion) {
|
||||||
|
ids.push(item.Id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.$emit('delData', ids)
|
||||||
|
},
|
||||||
|
// 获取历史版本
|
||||||
|
async getHistoricalVersion() {
|
||||||
|
if (!this.rowData || !this.rowData.Id) return false
|
||||||
|
try {
|
||||||
|
let data = {
|
||||||
|
Id: this.rowData.Id
|
||||||
|
}
|
||||||
|
this.loading = true
|
||||||
|
let res = await getHistoricalVersion(data)
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.versionList = res.Result
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.loading = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
openFile() {
|
||||||
|
let faccept = `.${this.rowData.FileFormat}`
|
||||||
|
this.$emit('openFileNewVersion', faccept)
|
||||||
|
},
|
||||||
|
// 格式化文件大小
|
||||||
|
formatFileSize(row) {
|
||||||
|
if (!row.FileSize) return ''
|
||||||
|
if (row.FileSize < 1000) {
|
||||||
|
return row.FileSize + "B"
|
||||||
|
}
|
||||||
|
if (row.FileSize < 1000 * 1024) {
|
||||||
|
return (row.FileSize / 1024).toFixed(2) + "KB"
|
||||||
|
}
|
||||||
|
if (row.FileSize < 1000 * 1000 * 1024) {
|
||||||
|
return (row.FileSize / 1000 / 1024).toFixed(2) + "MB"
|
||||||
|
}
|
||||||
|
if (row.FileSize < 1000 * 1000 * 1000 * 1024) {
|
||||||
|
return (row.FileSize / 1000 / 1000 / 1024).toFixed(2) + "GB"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
::v-deep .el-dialog__header {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-dialog__body {
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-tabs__nav-wrap::after {
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auditDocumentDetail {
|
||||||
|
.header {
|
||||||
|
padding: 0 10px 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom: 1px solid #f6f8ff;
|
||||||
|
|
||||||
|
.file_icon {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
i {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
font-size: 42px;
|
||||||
|
line-height: 60px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-style: normal;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_image {
|
||||||
|
max-width: 90%;
|
||||||
|
max-height: 100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_pdf {
|
||||||
|
background-image: url(@/assets/file_icon/pdf.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_docx {
|
||||||
|
background-image: url(@/assets/file_icon/docx.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_doc {
|
||||||
|
background-image: url(@/assets/file_icon/doc.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_zip {
|
||||||
|
background-image: url(@/assets/file_icon/zip.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_pptx {
|
||||||
|
background-image: url(@/assets/file_icon/pptx.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_ppt {
|
||||||
|
background-image: url(@/assets/file_icon/ppt.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_xlsx {
|
||||||
|
background-image: url(@/assets/file_icon/xlsx.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_xls {
|
||||||
|
background-image: url(@/assets/file_icon/xls.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name_folder {
|
||||||
|
background-image: url(@/assets/file_icon/folder.png);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file_name {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
word-break: break-word;
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: middle;
|
||||||
|
max-height: 60px;
|
||||||
|
line-height: 18px;
|
||||||
|
margin-top: 7px;
|
||||||
|
width: calc(100% - 170px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.name {
|
||||||
|
max-height: 35px;
|
||||||
|
width: 100%;
|
||||||
|
line-height: 18px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
|
||||||
|
.name-text {
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.desc {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #aaa;
|
||||||
|
padding-top: 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
max-height: 500px;
|
||||||
|
|
||||||
|
.p {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: #999;
|
||||||
|
text-align: left;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 25px;
|
||||||
|
width: 27%;
|
||||||
|
margin-right: 1%;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
word-break: break-word;
|
||||||
|
color: #444;
|
||||||
|
width: 72%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 5px 0 0 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.versions_top {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 40px;
|
||||||
|
border-bottom: 1px solid #f3f3f3;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnBox {
|
||||||
|
flex: 1 0 0%;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.versions_content {
|
||||||
|
max-height: calc(100% - 50px);
|
||||||
|
|
||||||
|
.item {
|
||||||
|
padding: 0;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: all .2s;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: #91d5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_line {
|
||||||
|
background: #fafafa;
|
||||||
|
padding: 5px 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
transition: all .2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #e6f7ff;
|
||||||
|
border-color: #e6f7ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px;
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
span {
|
||||||
|
background: #22b66c;
|
||||||
|
border-color: #1c9458;
|
||||||
|
color: #fff;
|
||||||
|
padding: 3px 4px;
|
||||||
|
min-width: 25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.current_version {
|
||||||
|
span {
|
||||||
|
background: #1890ff;
|
||||||
|
border-color: #007cee;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mtime {
|
||||||
|
color: #999;
|
||||||
|
margin-right: 0;
|
||||||
|
line-height: 22px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size {
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 1px 1px 1px 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add_desc {
|
||||||
|
position: absolute;
|
||||||
|
right: 5px;
|
||||||
|
top: 3px;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
line-height: 25px;
|
||||||
|
color: #666;
|
||||||
|
background: #77777715;
|
||||||
|
border-radius: 2px;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #c3e2ff;
|
||||||
|
color: #1890ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,509 +0,0 @@
|
||||||
<template>
|
|
||||||
<base-model :config="config">
|
|
||||||
<div slot="dialog-body">
|
|
||||||
<!-- 多文件上传 -->
|
|
||||||
<form id="inputForm" ref="uploadForm">
|
|
||||||
<el-divider content-position="left">{{
|
|
||||||
$t('trials:trialDocument:label:fileType').replace(
|
|
||||||
'xxx',
|
|
||||||
faccept.join('/')
|
|
||||||
)
|
|
||||||
}}</el-divider>
|
|
||||||
<div class="form-group">
|
|
||||||
<div
|
|
||||||
class="upload"
|
|
||||||
style="margin-right: 10px"
|
|
||||||
:disabled="limitLength"
|
|
||||||
v-if="!limitLength"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
multiple="multiple"
|
|
||||||
webkitdirectory=""
|
|
||||||
directory
|
|
||||||
accept="*/*"
|
|
||||||
type="file"
|
|
||||||
name="uploadFolder"
|
|
||||||
class="select-file"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="
|
|
||||||
!loading &&
|
|
||||||
(!limitLength ||
|
|
||||||
(fileList.length < limitLength && limitLength > 1))
|
|
||||||
"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
|
||||||
{{ $t('trials:trialDocument:button:selectFolder') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="upload">
|
|
||||||
<input
|
|
||||||
class="select-file"
|
|
||||||
multiple=""
|
|
||||||
:accept="faccept.join(',')"
|
|
||||||
type="file"
|
|
||||||
name="uploadFile"
|
|
||||||
title=""
|
|
||||||
@change="beginScanFiles($event)"
|
|
||||||
v-if="!loading && (!limitLength || fileList.length < limitLength)"
|
|
||||||
/>
|
|
||||||
<div class="btn-select">
|
|
||||||
{{ $t('trials:trialDocument:button:select') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<!-- 文件列表 -->
|
|
||||||
<el-table
|
|
||||||
ref="filesTable"
|
|
||||||
:data="fileList"
|
|
||||||
class="dicomFiles-table"
|
|
||||||
height="300"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column
|
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
:selectable="(row, index) => row.status !== 2 && !loading"
|
|
||||||
/>
|
|
||||||
<el-table-column type="index" width="50" />
|
|
||||||
<!-- 文件名称 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="name"
|
|
||||||
:label="$t('trials:trialDocument:table:fileName')"
|
|
||||||
min-width="100"
|
|
||||||
/>
|
|
||||||
<!-- 文件大小 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="size"
|
|
||||||
:label="$t('trials:trialDocument:table:fileSize')"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{
|
|
||||||
scope.row.size && scope.row.size > 0
|
|
||||||
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
|
|
||||||
: ''
|
|
||||||
}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 文件类型 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="type"
|
|
||||||
:label="$t('trials:trialDocument:table:fileType')"
|
|
||||||
/>
|
|
||||||
<!-- 上传状态 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="status"
|
|
||||||
:label="$t('trials:trialDocument:table:uploadStatus')"
|
|
||||||
min-width="100"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag
|
|
||||||
:type="['warning', 'info', 'success', 'danger'][scope.row.status]"
|
|
||||||
v-if="scope.row.status || scope.row.status === 0"
|
|
||||||
>{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('trials:trialDocument:table:failedFileCount')"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-progress
|
|
||||||
color="#409eff"
|
|
||||||
:percentage="
|
|
||||||
((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
|
|
||||||
1
|
|
||||||
"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column :label="$t('common:action:action')">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
size="mini"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
:disabled="loading"
|
|
||||||
:title="$t('trials:trialDocument:action:delete')"
|
|
||||||
@click="handleRemoveFile(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
<div slot="dialog-footer">
|
|
||||||
<div style="text-align: right; padding: 10px 0px">
|
|
||||||
<span style="margin-right: 10px">{{
|
|
||||||
$store.state.trials.uploadTip
|
|
||||||
}}</span>
|
|
||||||
<el-button
|
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
:disabled="selectArr.length == 0"
|
|
||||||
:loading="loading"
|
|
||||||
@click="beginUpload"
|
|
||||||
>
|
|
||||||
{{ $t('trials:trialDocument:action:upload') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</base-model>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import baseModel from '@/components/BaseModel'
|
|
||||||
import { deepClone } from '@/utils/index.js'
|
|
||||||
import store from '@/store'
|
|
||||||
export default {
|
|
||||||
name: 'uploadFiles',
|
|
||||||
props: {
|
|
||||||
config: {
|
|
||||||
required: true,
|
|
||||||
default: () => {
|
|
||||||
return {
|
|
||||||
visible: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
faccept: {
|
|
||||||
type: Array,
|
|
||||||
default: () => {
|
|
||||||
return []
|
|
||||||
},
|
|
||||||
},
|
|
||||||
uploadPath: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
limitLength: {
|
|
||||||
type: Number,
|
|
||||||
default: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
'base-model': baseModel,
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
loading: false,
|
|
||||||
fileList: [],
|
|
||||||
selectArr: [],
|
|
||||||
isFail: false,
|
|
||||||
successFileList: [],
|
|
||||||
fileInput: null,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
// 获取待上传文件信息
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.selectArr = selection
|
|
||||||
},
|
|
||||||
// 扫描待上传文件
|
|
||||||
beginScanFiles(e) {
|
|
||||||
if (this.fileInput) {
|
|
||||||
this.fileInput = null
|
|
||||||
}
|
|
||||||
var files = [...e.target.files]
|
|
||||||
if (this.limitLength && this.fileList.length >= this.limitLength)
|
|
||||||
return this.$message.warning(
|
|
||||||
this.$t('trials:trialDocument:message:limitLength')
|
|
||||||
)
|
|
||||||
var sameFiles = []
|
|
||||||
files.forEach((file) => {
|
|
||||||
var extendName = file.name
|
|
||||||
.substring(file.name.lastIndexOf('.'))
|
|
||||||
.toLocaleLowerCase()
|
|
||||||
if (
|
|
||||||
this.faccept.indexOf(extendName) !== -1 &&
|
|
||||||
this.fileList.findIndex((v) => v.name === file.name) > -1
|
|
||||||
) {
|
|
||||||
sameFiles.push(file.name)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
var scope = this
|
|
||||||
if (sameFiles.length > 0) {
|
|
||||||
const h = this.$createElement
|
|
||||||
var msg = this.$t('trials:trialDocument:message:exsitSameFile').replace(
|
|
||||||
'xxx',
|
|
||||||
sameFiles.join(', ')
|
|
||||||
)
|
|
||||||
this.$msgbox({
|
|
||||||
message: h('div', { style: 'maxHeight:300px;overflow: auto;' }, [
|
|
||||||
h('p', null, msg),
|
|
||||||
h(
|
|
||||||
'p',
|
|
||||||
null,
|
|
||||||
this.$t('trials:trialDocument:message:isContinueUpload')
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
type: 'warning',
|
|
||||||
showCancelButton: true,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
scope.pendingUploadQuene(files)
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
scope.resetUploadForm()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
scope.pendingUploadQuene(files)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pendingUploadQuene(files) {
|
|
||||||
for (var i = 0; i < files.length; ++i) {
|
|
||||||
const fileName = files[i].name
|
|
||||||
var extendName = fileName
|
|
||||||
.substring(fileName.lastIndexOf('.'))
|
|
||||||
.toLocaleLowerCase()
|
|
||||||
if (this.faccept.indexOf(extendName) !== -1) {
|
|
||||||
files[i].id = `${files[i].lastModified}${files[i].name}`
|
|
||||||
let obj = {
|
|
||||||
name: files[i].name,
|
|
||||||
size: files[i].size,
|
|
||||||
type: extendName.split('.')[1],
|
|
||||||
status: 0,
|
|
||||||
file: files[i],
|
|
||||||
id: `${files[i].lastModified}${
|
|
||||||
files[i].name
|
|
||||||
}${new Date().getTime()}${i + 1}`,
|
|
||||||
fileType: files[i].type,
|
|
||||||
uploadFileSize: 0,
|
|
||||||
}
|
|
||||||
this.fileList.push(obj)
|
|
||||||
this.$refs.filesTable.toggleRowSelection(obj, true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.resetUploadForm()
|
|
||||||
},
|
|
||||||
resetUploadForm() {
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.uploadForm.reset()
|
|
||||||
})
|
|
||||||
},
|
|
||||||
handleRemoveFile(row) {
|
|
||||||
this.$confirm(this.$t('trials:trialDocument:message:delete'), {
|
|
||||||
type: 'warning',
|
|
||||||
distinguishCancelAndClose: true,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
this.fileList.splice(
|
|
||||||
this.fileList.findIndex((item) => item.id === row.id),
|
|
||||||
1
|
|
||||||
)
|
|
||||||
let flag = this.successFileList.some((item) => item.id === row.id)
|
|
||||||
if (flag) {
|
|
||||||
this.successFileList.splice(
|
|
||||||
this.successFileList.findIndex((item) => item.id === row.id),
|
|
||||||
1
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {})
|
|
||||||
},
|
|
||||||
// 开始上传文件
|
|
||||||
async beginUpload() {
|
|
||||||
this.loading = true
|
|
||||||
this.isFail = false
|
|
||||||
const fileMaxSize = 1024 * 1024 * 1024 * 2 // 1G
|
|
||||||
var currentFilesSize = 0
|
|
||||||
this.selectArr.forEach((item) => {
|
|
||||||
currentFilesSize += item.size
|
|
||||||
})
|
|
||||||
if (currentFilesSize / fileMaxSize > 1) {
|
|
||||||
// 'Upload file size cannot exceed 1G'
|
|
||||||
this.$alert(this.$t('trials:trialDocument:message:uploadSize'))
|
|
||||||
this.loading = false
|
|
||||||
} else {
|
|
||||||
this.selectArr.forEach((item) => (item.status = 0))
|
|
||||||
let num = this.selectArr.length > 6 ? 6 : this.selectArr.length
|
|
||||||
let funArr = []
|
|
||||||
for (let i = 0; i < num; i++) {
|
|
||||||
funArr.push(this.handleUploadTask(this.selectArr, i))
|
|
||||||
}
|
|
||||||
if (funArr.length > 0) {
|
|
||||||
let res = await Promise.all(funArr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 并发上传
|
|
||||||
async handleUploadTask(arr, index) {
|
|
||||||
if (!this.config.visible) return
|
|
||||||
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
|
|
||||||
file.status = 1
|
|
||||||
let fileType = file.name
|
|
||||||
.substring(file.name.lastIndexOf('.'))
|
|
||||||
.toLocaleLowerCase()
|
|
||||||
// let fileName = file.name
|
|
||||||
// .substring(0, file.name.lastIndexOf('.'))
|
|
||||||
// .toLocaleLowerCase()
|
|
||||||
let path = `${this.uploadPath}/${this.$guid()}${fileType}`
|
|
||||||
file.curPath = path
|
|
||||||
const fileData = await this.fileToBlob(file.file)
|
|
||||||
let res = await this.fileToOss(path, fileData, file)
|
|
||||||
if (res) {
|
|
||||||
file.status = 2
|
|
||||||
this.successFileList.push({
|
|
||||||
FileName: file.name,
|
|
||||||
FilePath: this.$getObjectName(res.url),
|
|
||||||
FileSize: file.size,
|
|
||||||
FileFormat: fileType,
|
|
||||||
})
|
|
||||||
let flag = arr.every((item) => item.status === 2)
|
|
||||||
if (flag) {
|
|
||||||
return this.submitFile(this.successFileList)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
file.status = 3
|
|
||||||
}
|
|
||||||
let flag = arr.every((item) => item.status > 1)
|
|
||||||
if (flag) {
|
|
||||||
let failFileList = arr.filter((item) => item.status === 3)
|
|
||||||
if (failFileList && failFileList.length > 0) {
|
|
||||||
this.$refs.filesTable.clearSelection()
|
|
||||||
failFileList.forEach((row) => {
|
|
||||||
row.uploadFileSize = 0
|
|
||||||
this.$refs.filesTable.toggleRowSelection(row)
|
|
||||||
})
|
|
||||||
this.isFail = true
|
|
||||||
this.submitFile(this.successFileList, true)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let ind = arr.findIndex((item) => item.status === 0)
|
|
||||||
if (ind >= 0) {
|
|
||||||
return this.handleUploadTask(arr, ind)
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// file上传到oss
|
|
||||||
async fileToOss(path, file, item) {
|
|
||||||
try {
|
|
||||||
let res = await this.OSSclient.multipartUpload(
|
|
||||||
{
|
|
||||||
path,
|
|
||||||
file,
|
|
||||||
speed: true,
|
|
||||||
},
|
|
||||||
(percentage, checkpoint, lastPer) => {
|
|
||||||
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
|
|
||||||
if (item.uploadFileSize > file.fileSize) {
|
|
||||||
item.uploadFileSize = file.fileSize
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if (res) {
|
|
||||||
return res
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.log(err)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
submitFile(list, isReLoad = false) {
|
|
||||||
if (!this.config.visible) return
|
|
||||||
if (!isReLoad) {
|
|
||||||
this.reset()
|
|
||||||
}
|
|
||||||
let arr = deepClone(list)
|
|
||||||
this.$emit('uplaodFile', arr)
|
|
||||||
},
|
|
||||||
reset() {
|
|
||||||
this.loading = false
|
|
||||||
this.selectArr = []
|
|
||||||
this.successFileList = []
|
|
||||||
this.OSSclient.close()
|
|
||||||
this.$emit('close')
|
|
||||||
},
|
|
||||||
openFile(isFolder = false) {
|
|
||||||
this.fileInput = document.createElement('input')
|
|
||||||
this.fileInput.type = 'file'
|
|
||||||
this.fileInput.addEventListener('change', this.beginScanFiles)
|
|
||||||
if (isFolder) {
|
|
||||||
this.fileInput.accept = '*/*'
|
|
||||||
//webkitdirectory directory
|
|
||||||
this.fileInput.webkitdirectory = 'webkitdirectory'
|
|
||||||
this.fileInput.directory = 'directory'
|
|
||||||
} else {
|
|
||||||
this.fileInput.accept = this.faccept.join(',')
|
|
||||||
}
|
|
||||||
console.log(this.fileInput)
|
|
||||||
this.fileInput.click()
|
|
||||||
},
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
isFail() {
|
|
||||||
if (this.isFail) {
|
|
||||||
this.$confirm(this.$t('trials:trialDocument:failUpload'), {
|
|
||||||
type: 'warning',
|
|
||||||
distinguishCancelAndClose: true,
|
|
||||||
confirmButtonText: this.$t('common:button:confirm'),
|
|
||||||
cancelButtonText: this.$t('common:button:cancel'),
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
this.beginUpload()
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
this.loading = false
|
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
loading() {
|
|
||||||
store.dispatch('trials/setUnLock', this.loading)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.openFile(this.config.isFolder)
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
store.dispatch('trials/setUnLock', false)
|
|
||||||
this.OSSclient.close()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.upload {
|
|
||||||
display: inline-block;
|
|
||||||
height: 30px;
|
|
||||||
width: 90px;
|
|
||||||
padding: 2px 10px;
|
|
||||||
line-height: 23px;
|
|
||||||
position: relative;
|
|
||||||
text-decoration: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
background: #428bca;
|
|
||||||
border-color: #428bca;
|
|
||||||
color: #fff;
|
|
||||||
.select-file {
|
|
||||||
height: 30px;
|
|
||||||
width: 90px;
|
|
||||||
position: absolute;
|
|
||||||
overflow: hidden;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
opacity: 0;
|
|
||||||
font-size: 0;
|
|
||||||
}
|
|
||||||
.btn-select {
|
|
||||||
//给显示在页面上的按钮写样式
|
|
||||||
width: 90px;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 24px;
|
|
||||||
overflow: hidden;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -238,7 +238,7 @@
|
||||||
:reading-id="selected.ReadingId"
|
:reading-id="selected.ReadingId"
|
||||||
:clinical-form-id="selected.ClinicalFormId"
|
:clinical-form-id="selected.ClinicalFormId"
|
||||||
:open-type="'look'"
|
:open-type="'look'"
|
||||||
@close=""
|
@close="false"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -138,6 +138,15 @@
|
||||||
}}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.PM_ReReadingApprovalCount }}</span>
|
}}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.PM_ReReadingApprovalCount }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 重传审批 -->
|
||||||
|
<div class="my_select_box" :class="{ selected: selected === 'ReuploadAudit' }" tab-data="ReuploadAudit"
|
||||||
|
@click="selected = 'ReuploadAudit'" v-if="hasPermi(['trials:trials-workbench:ReuploadAudit'])">
|
||||||
|
<div class="my_select_box_content">
|
||||||
|
<span class="el-icon-document-checked" style="padding: 4px;margin: 4px;color: #6698ff"></span>
|
||||||
|
<span class="my_select_box_content_text">{{ $t('trials:trials-panel:attachments:ReuploadAudit')
|
||||||
|
}}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.PM_ImageBackApprovalCount }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- 阅片人筛选 -->
|
<!-- 阅片人筛选 -->
|
||||||
<div class="my_select_box" :class="{ selected: selected === 'ReviewerScreen' }" tab-data="ReviewerScreen"
|
<div class="my_select_box" :class="{ selected: selected === 'ReviewerScreen' }" tab-data="ReviewerScreen"
|
||||||
@click="selected = 'ReviewerScreen'" v-if="hasPermi(['trials:trials-workbench:reviewerScreen'])">
|
@click="selected = 'ReviewerScreen'" v-if="hasPermi(['trials:trials-workbench:reviewerScreen'])">
|
||||||
|
@ -331,7 +340,7 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- 稽查文档 -->
|
<!-- 稽查文档 -->
|
||||||
<div class="my_select_box" :class="{ selected: selected === 'viewAuditDocument' }"
|
<div class="my_select_box" :class="{ selected: selected === 'viewAuditDocument' }"
|
||||||
tab-data="viewAuditDocument" @click="selected = 'viewAuditDocument'"
|
tab-data="viewAuditDocument" @click="handleClick('viewAuditDocument')"
|
||||||
v-if="hasPermi(['trials:trials-workbench:viewAuditDocument'])">
|
v-if="hasPermi(['trials:trials-workbench:viewAuditDocument'])">
|
||||||
<div class="my_select_box_content">
|
<div class="my_select_box_content">
|
||||||
<span class="el-icon-folder-checked" style="padding: 4px;margin: 4px;color: #6698ff"></span>
|
<span class="el-icon-folder-checked" style="padding: 4px;margin: 4px;color: #6698ff"></span>
|
||||||
|
@ -349,7 +358,7 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- 稽查文档管理 -->
|
<!-- 稽查文档管理 -->
|
||||||
<div class="my_select_box" :class="{ selected: selected === 'updateAuditDocument' }"
|
<div class="my_select_box" :class="{ selected: selected === 'updateAuditDocument' }"
|
||||||
tab-data="updateAuditDocument" @click="selected = 'updateAuditDocument'"
|
tab-data="updateAuditDocument" @click="handleClick('updateAuditDocument')"
|
||||||
v-if="hasPermi(['trials:trials-workbench:updateAuditDocument'])">
|
v-if="hasPermi(['trials:trials-workbench:updateAuditDocument'])">
|
||||||
<div class="my_select_box_content">
|
<div class="my_select_box_content">
|
||||||
<span class="el-icon-folder-checked" style="padding: 4px;margin: 4px;color: #6698ff"></span>
|
<span class="el-icon-folder-checked" style="padding: 4px;margin: 4px;color: #6698ff"></span>
|
||||||
|
@ -375,6 +384,9 @@
|
||||||
<!-- 重阅审批 -->
|
<!-- 重阅审批 -->
|
||||||
<RereadApproval v-if="selected === 'RereadApproval'" :trial-id-list="trialIdList"
|
<RereadApproval v-if="selected === 'RereadApproval'" :trial-id-list="trialIdList"
|
||||||
:is-sign-system-doc="tabList.SysWaitSignDocCount > 0 && !isTestUser" />
|
:is-sign-system-doc="tabList.SysWaitSignDocCount > 0 && !isTestUser" />
|
||||||
|
<!-- 重c传审批 -->
|
||||||
|
<ReuploadAudit v-if="selected === 'ReuploadAudit'" :trial-id-list="trialIdList"
|
||||||
|
:is-sign-system-doc="tabList.SysWaitSignDocCount > 0 && !isTestUser" />
|
||||||
<!-- 阅片人筛选 -->
|
<!-- 阅片人筛选 -->
|
||||||
<ReviewerScreen v-if="selected === 'ReviewerScreen'" :trial-id-list="trialIdList"
|
<ReviewerScreen v-if="selected === 'ReviewerScreen'" :trial-id-list="trialIdList"
|
||||||
:is-sign-system-doc="tabList.SysWaitSignDocCount > 0 && !isTestUser" />
|
:is-sign-system-doc="tabList.SysWaitSignDocCount > 0 && !isTestUser" />
|
||||||
|
@ -559,6 +571,7 @@ import MedicalAudit from './components/medicalAudit'
|
||||||
import NeedSignedTrialDoc from './components/NeedSignedTrialDoc'
|
import NeedSignedTrialDoc from './components/NeedSignedTrialDoc'
|
||||||
import auditDocument from "./components/auditDocument"
|
import auditDocument from "./components/auditDocument"
|
||||||
import generalTraining from "./components/generalTraining"
|
import generalTraining from "./components/generalTraining"
|
||||||
|
import ReuploadAudit from "./components/ReuploadAudit"
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import './index.css'
|
import './index.css'
|
||||||
|
|
||||||
|
@ -593,7 +606,8 @@ export default {
|
||||||
MedicalFeedback,
|
MedicalFeedback,
|
||||||
MedicalAudit,
|
MedicalAudit,
|
||||||
NeedSignedTrialDoc,
|
NeedSignedTrialDoc,
|
||||||
NeedSignedSysDoc
|
NeedSignedSysDoc,
|
||||||
|
ReuploadAudit
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -634,6 +648,12 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
handleClick(key) {
|
||||||
|
this.selected = null;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.selected = key
|
||||||
|
})
|
||||||
|
},
|
||||||
getUserInfo() {
|
getUserInfo() {
|
||||||
getUser().then(async res => {
|
getUser().then(async res => {
|
||||||
this.user = res.Result
|
this.user = res.Result
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
width: 99%;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<title></title>
|
||||||
|
<!-- 引入外部JavaScript文件 -->
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://onlyoffice.test.extimaging.com/web-apps/apps/api/documents/api.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="placeholder"></div>
|
||||||
|
<script language="javascript" type="text/javascript">
|
||||||
|
var obj = {}
|
||||||
|
var str = window.location.search.substr(1)
|
||||||
|
str = str.split('?')[1]
|
||||||
|
var url = window.location.search.substr(1).split('?')[0].split('=')[1]
|
||||||
|
var arrList = str.split('&')
|
||||||
|
arrList.forEach(function (item) {
|
||||||
|
var arr = item.split('=')
|
||||||
|
obj[arr[0]] = window.decodeURIComponent(arr[1])
|
||||||
|
})
|
||||||
|
var docEditor = new window.DocsAPI.DocEditor("placeholder", {
|
||||||
|
type: "embedded",
|
||||||
|
"document": {
|
||||||
|
"fileType": obj.type,
|
||||||
|
"key": "Khirz6zTPdfd7" + Date.now(),
|
||||||
|
"title": obj.title,
|
||||||
|
"url": url,
|
||||||
|
},
|
||||||
|
// editorConfig: {
|
||||||
|
// lang:'zh'
|
||||||
|
|
||||||
|
// },
|
||||||
|
"documentType": obj.documentType,
|
||||||
|
"height": "100%",
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -24,10 +24,10 @@ module.exports = defineConfig({
|
||||||
productionSourceMap: false,
|
productionSourceMap: false,
|
||||||
devServer: {
|
devServer: {
|
||||||
port: '8080',
|
port: '8080',
|
||||||
headers: {
|
// headers: {
|
||||||
'Cross-Origin-Opener-Policy': 'same-origin',
|
// 'Cross-Origin-Opener-Policy': 'same-origin',
|
||||||
'Cross-Origin-Embedder-Policy': 'require-corp'
|
// 'Cross-Origin-Embedder-Policy': 'require-corp'
|
||||||
},
|
// },
|
||||||
// open: true,
|
// open: true,
|
||||||
client: {
|
client: {
|
||||||
overlay: {
|
overlay: {
|
||||||
|
|