125 lines
3.8 KiB
Vue
125 lines
3.8 KiB
Vue
<template>
|
||
<div>
|
||
<el-upload
|
||
action="#"
|
||
:limit="limit"
|
||
:file-list="fileList"
|
||
:show-file-list="true" :auto-upload="false"
|
||
list-type="picture-card"
|
||
:accept="accept"
|
||
:on-change="fileChange"
|
||
:class="{ disabled: uploadDisabled }"
|
||
>
|
||
<!-- 文件格式下载,图片格式预览 -->
|
||
<div slot="file" slot-scope="{file}">
|
||
<img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
|
||
<span class="el-upload-list__item-actions">
|
||
<span v-if="updataIf(file)" class="el-upload-list__item-delete" @click="handleDownload(file)">
|
||
<i class="el-icon-download" />
|
||
</span>
|
||
<span v-else class="el-upload-list__item-preview" @click="picturePreview(file)">
|
||
<i class="el-icon-zoom-in" />
|
||
</span>
|
||
<span class="el-upload-list__item-delete" @click="fileRemove(file)">
|
||
<i class="el-icon-delete" />
|
||
</span>
|
||
</span>
|
||
</div>
|
||
|
||
<i class="el-icon-plus avatar-uploader-icon"></i>
|
||
</el-upload>
|
||
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { downloadFile } from '@/utils/download'
|
||
export default {
|
||
name: "uploadFile",
|
||
data() {
|
||
return {
|
||
fileList:[],
|
||
|
||
}
|
||
},
|
||
props: {
|
||
limit: {
|
||
type: [String, Number],
|
||
default: ""
|
||
},
|
||
uploadList: {
|
||
type: Array,
|
||
default: function() {
|
||
return []
|
||
}
|
||
},
|
||
accept: {
|
||
type: String,
|
||
default: ".png, .jpg, .jpeg"
|
||
},
|
||
},
|
||
computed: {
|
||
//图片上传超出限制,隐藏上传框
|
||
uploadDisabled() {
|
||
return this.fileList.length >= Number(this.limit)
|
||
},
|
||
},
|
||
methods: {
|
||
fileChange(file, fileList){
|
||
if(file.size > 1024 * 1024 * 10){
|
||
this.$message.warning('文件大小不能超过10Mb')
|
||
fileList = fileList.filter(item => {
|
||
return item.uid != file.uid
|
||
})
|
||
}
|
||
fileList.forEach(file=>{
|
||
if(file.name.split('.')[1] === 'doc'||file.name.split('.')[1] === 'docx'||file.name.split('.')[1] === 'pdf'){
|
||
file.url = require('../../assets/file.png')
|
||
}
|
||
})
|
||
this.fileList = fileList;
|
||
this.$emit('update:uploadList',this.fileList)
|
||
},
|
||
fileRemove(file) {
|
||
let sum = 0
|
||
this.fileList.forEach((item, index) => {
|
||
if (item.uid == file.uid) { sum = index }
|
||
})
|
||
this.fileList.splice(sum, 1)
|
||
// this.$emit('uploadList', this.fileList)
|
||
this.$emit('update:uploadList',this.fileList)
|
||
},
|
||
handleDownload(file) {
|
||
downloadFile({ fileName: file.name, fileData: file.raw, fileType: 'application/vnd.ms-excel;charset=utf-8' })
|
||
},
|
||
//上传组件-图片查看
|
||
picturePreview(file) {
|
||
this.$emit('picturePreview', file)
|
||
},
|
||
// 判断文件类型,图片预览,文件下载
|
||
updataIf(e) {
|
||
if (e.fileName) {
|
||
if (e.fileName.split('.')[1] === 'png' || e.fileName.split('.')[1] === 'jpeg' || e.fileName.split('.')[1] === 'jpg') {
|
||
return false
|
||
} else {
|
||
return true
|
||
}
|
||
} else {
|
||
if (e.name.split('.')[1] === 'png' || e.name.split('.')[1] === 'jpeg' || e.name.split('.')[1] === 'jpg') {
|
||
return false
|
||
} else {
|
||
return true
|
||
}
|
||
}
|
||
},
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
::v-deep.disabled {
|
||
.el-upload--picture-card {
|
||
display: none;
|
||
}
|
||
}
|
||
</style> |