118 lines
3.5 KiB
Vue
118 lines
3.5 KiB
Vue
|
|
<template>
|
|||
|
|
<el-upload
|
|||
|
|
class="upload-demo"
|
|||
|
|
:action="actionUrl"
|
|||
|
|
:on-preview="handlePreview"
|
|||
|
|
:on-remove="handleRemove"
|
|||
|
|
:before-remove="beforeRemove"
|
|||
|
|
:multiple="multiple"
|
|||
|
|
:limit="limit"
|
|||
|
|
:on-exceed="handleExceed"
|
|||
|
|
:file-list="fileList"
|
|||
|
|
:headers="headers"
|
|||
|
|
:on-success="handleSuccess"
|
|||
|
|
:data="uploadData"
|
|||
|
|
:before-upload="beforeUpload"
|
|||
|
|
>
|
|||
|
|
<slot name="default">
|
|||
|
|
<el-button size="small" type="primary">点击上传</el-button>
|
|||
|
|
</slot>
|
|||
|
|
<!-- <div slot="tip" class="el-upload__tip">{{ uploadTip }}</div> -->
|
|||
|
|
</el-upload>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { getToken } from '@/utils/auth'
|
|||
|
|
export default {
|
|||
|
|
name: 'UploadFile',
|
|||
|
|
props: {
|
|||
|
|
fileList: {
|
|||
|
|
type: Array,
|
|||
|
|
default: () => [],
|
|||
|
|
},
|
|||
|
|
actionUrl: {
|
|||
|
|
type: String,
|
|||
|
|
default: 'https://jsonplaceholder.typicode.com/posts/',
|
|||
|
|
},
|
|||
|
|
limit: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 3,
|
|||
|
|
},
|
|||
|
|
// uploadTip: {
|
|||
|
|
// type: String,
|
|||
|
|
// default: '只能上传jpg/png文件,且不超过500kb'
|
|||
|
|
// },
|
|||
|
|
multiple: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: true,
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
uploadImgUrl:
|
|||
|
|
process.env.VUE_APP_BASE_API + '/dev-api' + this.actionUrl,
|
|||
|
|
headers: {
|
|||
|
|
Authorization: 'Bearer ' + getToken(),
|
|||
|
|
},
|
|||
|
|
uploadData: {
|
|||
|
|
fileType: 'ma',
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
handleRemove(file, fileList) {
|
|||
|
|
this.$emit('remove', file, fileList)
|
|||
|
|
},
|
|||
|
|
handleSuccess(response, file, fileList) {
|
|||
|
|
this.$emit('success', response, fileList)
|
|||
|
|
},
|
|||
|
|
handlePreview(file) {
|
|||
|
|
this.$emit('preview', file)
|
|||
|
|
},
|
|||
|
|
handleExceed(files, fileList) {
|
|||
|
|
// this.$message.warning(
|
|||
|
|
// `当前已选择 ${this.limit} 个文件,本次选择了 ${
|
|||
|
|
// files.length
|
|||
|
|
// } 个文件,共选择了 ${files.length + fileList.length} 个文件`,
|
|||
|
|
// )
|
|||
|
|
// this.$emit('exceed', files, fileList)
|
|||
|
|
|
|||
|
|
this.$message.error(`最多只能上传${this.limit}个文件!`)
|
|||
|
|
},
|
|||
|
|
beforeRemove(file, fileList) {
|
|||
|
|
// return this.$confirm(`确定移除 ${file.name} ?`)
|
|||
|
|
// .then(() => {
|
|||
|
|
// this.$emit('before-remove', file, fileList)
|
|||
|
|
// })
|
|||
|
|
// .catch(() => {})
|
|||
|
|
},
|
|||
|
|
beforeUpload(file) {
|
|||
|
|
const isJPGorPNG =
|
|||
|
|
file.type == 'image/png' ||
|
|||
|
|
file.type == 'image/jpg' ||
|
|||
|
|
file.type == 'image/jpeg' ||
|
|||
|
|
file.type == 'application/pdf' ||
|
|||
|
|
file.type ==
|
|||
|
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
|
|||
|
|
file.type == 'application/msword'
|
|||
|
|
const isLt5M = file.size / 1024 / 1024 < 10 // 小于 5MB
|
|||
|
|
if (!isJPGorPNG) {
|
|||
|
|
this.$message.error(
|
|||
|
|
'只能上传 jpg、jpeg、png 、.pdf、.doc、.docx 格式的文件!',
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
if (!isLt5M) {
|
|||
|
|
this.$message.error('上传图片大小不能超过 10MB')
|
|||
|
|
}
|
|||
|
|
return isJPGorPNG && isLt5M
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped>
|
|||
|
|
.upload-demo .el-upload__tip {
|
|||
|
|
margin-top: 10px;
|
|||
|
|
}
|
|||
|
|
</style>
|