1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-12 22:29:59 +08:00

81 lines
1.9 KiB
Vue

<template>
<el-upload
:ref="metadata.columnName"
action="https://jsonplaceholder.typicode.com/posts/"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
:disabled="isDisabled"
:class="cssClassStyle"
>
<img v-if="value" :src="value" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon" />
</el-upload>
</template>
<script>
import fieldMixin from '@/components/ADempiere/Field/mixin/mixinField.js'
export default {
name: 'FieldImage',
mixins: [fieldMixin],
computed: {
cssClassStyle() {
let styleClass = ' custom-field-image '
if (!this.isEmptyValue(this.metadata.cssClassName)) {
styleClass += this.metadata.cssClassName
}
return styleClass
}
},
methods: {
handleAvatarSuccess(res, file) {
this.value = URL.createObjectURL(file.raw)
// TODO: define one method to control change value
this.handleFieldChange({ value: this.value })
},
beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg'
const isPNG = file.type === 'image/png'
// const isGIF = file.type === 'image/gif'
// const isBMP = file.type === 'image/bmp'
const isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message.error(this.$t('components.imageError'))
}
return isJPG + isPNG + isLt2M
}
}
}
</script>
<style scoped>
.custom-field-image .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.custom-field-image .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>