<template>
|
<div class="my-upload">
|
<div v-if="pictureList.length > 0" class="image-box">
|
<div v-for="image in pictureList" class="image-box-item">
|
<i @click="handleDeletePicture(image)" class="el-icon-delete image-delete-icon"></i>
|
<el-image :key="image" class="image-content" :src="image" ></el-image>
|
</div>
|
</div>
|
<el-upload
|
:file-list="fileList"
|
action="/sccg/file/medias"
|
:multiple="multiple"
|
:show-file-list="flag"
|
:before-upload="beforeUpload"
|
:limit="limit"
|
:on-success="handleSuccess"
|
:on-error="handleError"
|
:list-type="listType"
|
:on-remove="handleRemove"
|
:headers="getToken()">
|
<div class="upload-btn">
|
<i class="el-icon-plus"></i>
|
<span>上传图片</span>
|
</div>
|
</el-upload>
|
</div>
|
</template>
|
<script>
|
export default {
|
data() {
|
return {
|
// 文件列表
|
fileList: [],
|
// 是否显示文件列表
|
flag: false,
|
// 多选
|
multiple: false,
|
// 限制
|
limit: 4,
|
// 文件列表类型
|
listType: 'picture-card'
|
};
|
},
|
methods: {
|
// 上传之前回调
|
beforeUpload(rawFile) {
|
if (rawFile.type !== 'image/png' && rawFile.type !== 'image/svg+xml' && rawFile.type !== 'image/jpg' && rawFile.type !== 'image/jpeg') {
|
this.$message.error('图片必须是 jpg/svg/jpeg/png 格式!')
|
return false
|
} else if (rawFile.size / 1024 / 1024 > 5) {
|
this.$message.error('上传图片不能超过 5MB!')
|
return false
|
}
|
return true
|
},
|
// 上传成功回调
|
handleSuccess(res, file, filelist) {
|
if(res.data.url1){
|
this.$emit('setPictureUrl',{url:res.data.url1});
|
}
|
else if(res.data.url2){
|
this.$emit('setPictureUrl',{url:res.data.url2});
|
}
|
else if(res.data.url3){
|
this.$emit('setPictureUrl',{url:res.data.url3});
|
}
|
else{
|
this.$emit('setPictureUrl',{url:res.data.url4});
|
}
|
},
|
// 上传失败回调
|
handleError(err, file, fileList) {
|
this.$message({
|
type:'error',
|
message:err
|
})
|
},
|
// 获取token
|
getToken() {
|
const token = sessionStorage.getItem('token');
|
const tokenHead = sessionStorage.getItem('tokenHead');
|
if (token && tokenHead) {
|
return { Authorization: tokenHead + token }
|
}
|
},
|
// 移除文件
|
handleRemove(file, fileList){
|
this.$emit('delPictureUrl',{url:file.response.data.url1});
|
},
|
|
handleDeletePicture(imageUrl) {
|
this.$emit('delPictureUrl', { url: imageUrl });
|
}
|
},
|
props: {
|
// 返回上传成功图片地址
|
setPictureUrl:{
|
type:Function,
|
default:()=>{}
|
},
|
delPictureUrl:{
|
type:Function,
|
default:()=>{}
|
},
|
pictureList: {
|
type: Array,
|
default: () => []
|
}
|
},
|
}
|
</script>
|
<style lang="scss" scoped>
|
.my-upload {
|
display: flex;
|
flex-wrap: nowrap;
|
justify-content: flex-start;
|
margin-right: 5px;
|
|
.upload-btn {
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
align-items: center;
|
border-radius: 4px;
|
width: 100px;
|
height: 100px;
|
|
&:hover i{
|
color: #409eff;
|
}
|
|
i {
|
font-size: 30px;
|
font-weight: 650;
|
}
|
|
span {
|
line-height: 22px;
|
}
|
}
|
.image-box {
|
display: flex;
|
height: 100px;
|
margin: 0 10px;
|
|
.image-content {
|
width: 100px;
|
height: 100px;
|
}
|
.image-delete-icon {
|
position: relative;
|
bottom: calc(100% - 50px);
|
left: calc(100% - 50px);
|
opacity: 0;
|
}
|
|
.image-box-item:hover {
|
color: #ffffff;
|
opacity: .5;
|
.image-delete-icon {
|
z-index: 2;
|
opacity: 1;
|
}
|
}
|
}
|
|
:deep(.el-upload--picture-card) {
|
width: 100px;
|
height: 100px;
|
}
|
:deep(.el-upload-list__item){
|
width: 100px;
|
height: 100px;
|
}
|
}
|
</style>
|