|
|
@ -1,14 +1,16 @@
|
|
|
|
<script setup>
|
|
|
|
<script setup>
|
|
|
|
import {formatNumber, processDot} from "@/utils/ruoyi.js";
|
|
|
|
import {downloadWithUrl, formatNumber, processDot} from "@/utils/ruoyi.js";
|
|
|
|
import FileUploader from "@/components/fileUploader/index.vue";
|
|
|
|
import FileUploader from "@/components/fileUploader/index.vue";
|
|
|
|
import EventBus from "@/utils/EventBus.js";
|
|
|
|
|
|
|
|
import {isArray} from "@/utils/validate.js";
|
|
|
|
import {isArray} from "@/utils/validate.js";
|
|
|
|
|
|
|
|
import { saveAs } from 'file-saver'
|
|
|
|
|
|
|
|
import {ElLoading} from "element-plus";
|
|
|
|
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
const props = defineProps({
|
|
|
|
// 基因文件类型,1=Gnome 2=Annotation 3=Molecular maker 4=Gene Expression Level(FPKM)
|
|
|
|
// 基因文件类型,1=Gnome 2=Annotation 3=Molecular maker 4=Gene Expression Level(FPKM)
|
|
|
|
geneFileType: Number,
|
|
|
|
geneFileType: Number,
|
|
|
|
formData:Object
|
|
|
|
formData:Object,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
const loading = ref(false)
|
|
|
|
const emit = defineEmits(['delFile','uploadSuccess'])
|
|
|
|
const emit = defineEmits(['delFile','uploadSuccess'])
|
|
|
|
const modelValue = defineModel({type: Array})
|
|
|
|
const modelValue = defineModel({type: Array})
|
|
|
|
const formatFileSize = (fileSize)=>{
|
|
|
|
const formatFileSize = (fileSize)=>{
|
|
|
@ -23,6 +25,7 @@ const delFile = (item,index) => {
|
|
|
|
const uploadRef = ref(null)
|
|
|
|
const uploadRef = ref(null)
|
|
|
|
const uploadFile = (data) => {
|
|
|
|
const uploadFile = (data) => {
|
|
|
|
if (modelValue.value.length>0){
|
|
|
|
if (modelValue.value.length>0){
|
|
|
|
|
|
|
|
loading.value = true
|
|
|
|
uploadRef.value.startUpload({
|
|
|
|
uploadRef.value.startUpload({
|
|
|
|
// 关联主键id
|
|
|
|
// 关联主键id
|
|
|
|
tableId:data.id,
|
|
|
|
tableId:data.id,
|
|
|
@ -38,6 +41,7 @@ const uploadFile = (data) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const uploadSuccess = () => {
|
|
|
|
const uploadSuccess = () => {
|
|
|
|
|
|
|
|
loading.value = false
|
|
|
|
emit('uploadSuccess')
|
|
|
|
emit('uploadSuccess')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
defineExpose({
|
|
|
|
defineExpose({
|
|
|
@ -60,11 +64,16 @@ const beforeUpload = (options) => {
|
|
|
|
})
|
|
|
|
})
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const downloadFile = (item) => {
|
|
|
|
|
|
|
|
let service = ElLoading.service({ text: "正在下载数据,请稍候", });
|
|
|
|
|
|
|
|
saveAs(item.url,item.fileName);
|
|
|
|
|
|
|
|
service.close()
|
|
|
|
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<file-uploader @upload-success="uploadSuccess" ref="uploadRef" v-model="modelValue" @beforeUpload="beforeUpload"/>
|
|
|
|
<file-uploader v-if="!props.isView" @upload-success="uploadSuccess" ref="uploadRef" v-model="modelValue" @beforeUpload="beforeUpload"/>
|
|
|
|
<div v-for="(item, index) in showFileList" style="margin-top: 10px">
|
|
|
|
<div v-for="(item, index) in showFileList" style="margin-top: 10px">
|
|
|
|
<div class="file-list-item">
|
|
|
|
<div class="file-list-item">
|
|
|
|
<div class="file-list-title">
|
|
|
|
<div class="file-list-title">
|
|
|
@ -72,21 +81,41 @@ const beforeUpload = (options) => {
|
|
|
|
<svg-icon class-name="annex-icon" icon-class="annex"></svg-icon> {{ item.fileName }}
|
|
|
|
<svg-icon class-name="annex-icon" icon-class="annex"></svg-icon> {{ item.fileName }}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="file-size">
|
|
|
|
<div class="file-size">
|
|
|
|
{{formatFileSize(item.fileSize)}} KB <i-close-one theme="outline" size="24" fill="#d73833" class="file-close-icon" @click="delFile(item,index)"/>
|
|
|
|
{{formatFileSize(item.fileSize)}} KB
|
|
|
|
|
|
|
|
<i-close-one v-if="!props.isView && !loading" theme="outline" size="24" fill="#d73833" class="file-close-icon" @click="delFile(item,index)"/>
|
|
|
|
|
|
|
|
<i-download-one v-if="props.isView" theme="outline" size="24" fill="#939393" class="file-close-icon" @click="downloadFile(item,index)"/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="file-remark">
|
|
|
|
<div class="file-remark">
|
|
|
|
<el-input placeholder="请输入文件说明" v-model="item.fileMemo"></el-input>
|
|
|
|
<el-input :placeholder="props.isView?'--':'请输入文件说明'" v-model="item.fileMemo" :readonly="props.isView"></el-input>
|
|
|
|
<el-progress
|
|
|
|
<el-progress
|
|
|
|
v-if="item.startUpload"
|
|
|
|
v-if="item.startUpload && !item.indeterminate"
|
|
|
|
striped
|
|
|
|
striped
|
|
|
|
striped-flowx
|
|
|
|
striped-flowx
|
|
|
|
:indeterminate="item.indeterminate"
|
|
|
|
:indeterminate="item.indeterminate"
|
|
|
|
:percentage="item.percent"
|
|
|
|
:percentage="item.percent"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
|
|
|
|
<el-progress
|
|
|
|
|
|
|
|
v-if="item.indeterminate"
|
|
|
|
|
|
|
|
:format="()=>'计算MD5'"
|
|
|
|
|
|
|
|
indeterminate
|
|
|
|
|
|
|
|
:percentage="50"
|
|
|
|
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div v-if="showFileList.length === 0 && isView">
|
|
|
|
|
|
|
|
<el-result class="empty-file">
|
|
|
|
|
|
|
|
<template #icon>
|
|
|
|
|
|
|
|
<img src="@/assets/images/empty-image.png" height="94" width="199"/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template #extra>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
暂无数据
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
</el-result>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
@ -109,6 +138,7 @@ const beforeUpload = (options) => {
|
|
|
|
border-radius: 10px;
|
|
|
|
border-radius: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.file-list-item{
|
|
|
|
.file-list-item{
|
|
|
|
|
|
|
|
color: rgba(0,0,0,0.65);
|
|
|
|
margin: 10px 0;
|
|
|
|
margin: 10px 0;
|
|
|
|
border-bottom: 1px solid #e6e6e6;
|
|
|
|
border-bottom: 1px solid #e6e6e6;
|
|
|
|
.annex-icon{
|
|
|
|
.annex-icon{
|
|
|
@ -147,4 +177,9 @@ const beforeUpload = (options) => {
|
|
|
|
height: 48px;
|
|
|
|
height: 48px;
|
|
|
|
width: 48px;
|
|
|
|
width: 48px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.empty-file{
|
|
|
|
|
|
|
|
color: rgba(0,0,0,0.65);
|
|
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
|
|
margin-top: 30px;
|
|
|
|
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</style>
|