Files
love-nav-vue/src/components/setting/system/Upload.vue
2023-12-27 16:44:51 +08:00

186 lines
4.4 KiB
Vue

<template>
<el-upload
class="avatar-uploader"
action="#"
:show-file-list="false"
:http-request="selectPicUpload"
:auto-upload="true"
:before-upload="beforeAvatarUpload"
name="multipartFile"
>
<img v-if="imageUrl" width="200px" height="200px" :src="'data:image/jpg;base64,'+imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</template>
<script>
import axios from "axios";
import Vue from "vue";
export default {
name: "UploadComponent",
components: {},
props:{
configName:String,
},
data() {
return {
imageUrl: '',
}
},
mounted() {
this.getImage(this.configName);
},
created() {
},
computed: {},
methods: {
//上传图标事件
selectPicUpload(obj) {
let fd = new FormData(); //参数的格式是formData格式的
fd.append("multipartFile", obj.file); //参数
if (localStorage.getItem('userRole') === '0'&&localStorage.getItem('Authorization')) {
if(this.configName){
let _this = this;
axios({
method: 'post',
url: '/upload/uploadfile',
params:{
cate:'img',
name: this.configName,
},
data:fd,
}).then(function (res) {
if(res.data.code!==200){
Vue.prototype.$notify.error({
title: '错误',
message: "上传失败!",
offset: 0
});
}else {
Vue.prototype.$notify({
title: '成功',
message: ('i', {style: 'color: teal'}, "上传成功!"),
type: 'success',
offset: 0
});
_this.getImage(_this.configName);
}
}).catch((error) => {
// console.log(error)
// Vue.prototype.$notify.error({
// title: '错误',
// message: error,
// offset: 0
// });
})
}else{
return false;
}
} else {
Vue.prototype.$notify.error({
title: '错误',
message: '登录状态失效,请重新登录!',
offset: 0
});
}
},
getImage(name){
let _this=this;
if (localStorage.getItem('userRole') ==='0' && localStorage.getItem('Authorization')) {
if(name){
axios({
method: 'get',
url: '/api/getAttachment',
responseType: 'arraybuffer',
params: {
name:name
},
}).then(function (res) {
if(res!==undefined){
_this.imageUrl=btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')), 'base64';
}else{
return false;
}
}).catch((error) => {
// Vue.prototype.$notify.error({
// title: '错误',
// message: error,
// offset: 0
// });
})
}else{
return false;
// Vue.prototype.$notify.error({
// title: '错误',
// message: "不存在!",
// offset: 0
// });
}
} else {
Vue.prototype.$notify.error({
title: '错误',
message: '登录状态失效,请重新登录!',
offset: 0
});
}
},
beforeAvatarUpload(file) {
const isJPG = file.type === "image/jpeg";
const isJPG2 = file.type === "image/jpg";
const isPNG = file.type === "image/png";
// const isGif = file.type === "image/gif";
const isLt5M = file.size / 1024 / 1024 < 5;
if (!isJPG && !isJPG2 && !isPNG) {
this.$message.warning("只支持jpg,png,jpeg,gif格式图片");
}
if (!isLt5M) {
this.$message.warning("请上传5MB以内的图片!");
}
return (isJPG || isJPG2 || isPNG) && isLt5M;
},
}
}
</script>
<style scoped>
.avatar-uploader .el-upload {
border: 1px dashed var(--theme-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: var(--border-color);
}
.avatar-uploader-icon {
font-size: 28px;
color: var(--theme-color);
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>