118 lines
2.8 KiB
Vue
118 lines
2.8 KiB
Vue
<template>
|
||
<section class="AiAvatar">
|
||
<el-row type="flex" v-if="type=='rect'">
|
||
<div class="image-box">
|
||
<el-image v-if="value" :src="value" :preview-src-list="preview?[value]:null"/>
|
||
<div style="margin: 36px auto;" v-else>
|
||
<i class="iconfont iconProfile_Picture"></i>
|
||
<div style="color: #666;font-size: 12px;">暂无照片</div>
|
||
</div>
|
||
</div>
|
||
<div v-if="editable" class="upload-box">
|
||
<el-upload ref="avatarUploader" action :http-request="uploadAvatar" :limit="1" :show-file-list="false"
|
||
:before-upload="f=>file=f" :on-change="()=>$refs.avatarUploader.clearFiles()"
|
||
:accept="accept">
|
||
<el-button size="mini">上传图片</el-button>
|
||
<div class="upload-tip" slot="tip">图片必须小于10MB,仅限jpg/png/jpeg格式</div>
|
||
</el-upload>
|
||
</div>
|
||
</el-row>
|
||
<el-avatar v-else-if="type=='circle'" :src="value">
|
||
<slot v-if="!value"/>
|
||
</el-avatar>
|
||
</section>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: "AiAvatar",
|
||
model: {
|
||
prop: "value",
|
||
event: "change"
|
||
},
|
||
props: {
|
||
value: {type: String, default: ""},
|
||
instance: Function,
|
||
editable: {type: Boolean, default: true},
|
||
bid: String,
|
||
preview: {type: Boolean, default: true},
|
||
type: {default: "rect"}
|
||
},
|
||
data() {
|
||
return {
|
||
file: null,
|
||
accept: ".jpg,.png,.jpeg"
|
||
}
|
||
},
|
||
methods: {
|
||
uploadAvatar() {
|
||
const fileType = this.file.name.split(".")[1]
|
||
if (fileType && this.accept.indexOf(fileType.toLocaleLowerCase()) > -1) {
|
||
let formData = new FormData()
|
||
formData.append('bizId', this.bid)
|
||
formData.append('bizType', '2')
|
||
formData.append('file', this.file)
|
||
this.instance.post("/admin/file/add", formData).then(res => {
|
||
if (res.data) {
|
||
const fileInfo = res.data[0]
|
||
this.$emit("change", fileInfo.split(";")[0], fileInfo);
|
||
this.$message.success("上传成功")
|
||
}
|
||
})
|
||
} else {
|
||
this.$message.error("上传文件格式错误!")
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.AiAvatar {
|
||
font-size: 12px;
|
||
line-height: initial;
|
||
|
||
.iconProfile_Picture {
|
||
color: #89b;
|
||
}
|
||
|
||
:deep(.el-avatar) {
|
||
background: #26f;
|
||
}
|
||
|
||
.image-box {
|
||
width: 104px !important;
|
||
height: 120px;
|
||
text-align: center;
|
||
background-color: #f5f5f5;
|
||
border: 1px solid rgba(208, 212, 220, 1);
|
||
border-radius: 2px;
|
||
padding: 0;
|
||
|
||
.iconfont {
|
||
font-size: 32px
|
||
}
|
||
|
||
.el-image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
}
|
||
|
||
.upload-box {
|
||
width: 104px;
|
||
margin-left: 8px;
|
||
|
||
.el-button {
|
||
width: 104px;
|
||
height: 32px;
|
||
}
|
||
|
||
.upload-tip {
|
||
padding: 8px 0 0 10px;
|
||
color: #999999;
|
||
}
|
||
}
|
||
}
|
||
</style>
|