No Description

index.vue 4.2KB

    <template> <div class="upload-box"> <div class="el-upload-list el-upload-list--picture-card"> <div class="el-upload-list__item is-success" v-for="(imgIt,imgIndex) in imageUrl" :key="imgIt.index" :style="{ width: uploadImg.width, height: uploadImg.height }"> <img class="flex-img__image" :src="imgIt" :style="{ maxWidth: uploadImg.width, maxHeight: uploadImg.height }"> <label class="el-upload-list__item-status-label"> <i class="el-icon-upload-success el-icon-check"></i> </label> <span class="el-upload-list__item-actions"> <span class="el-upload-list__item-delete"> <i class="el-icon-delete" @click.stop="handleRemove(imgIndex)"></i> </span> </span> </div> </div> <el-upload class="avatar-uploader" :action="uploadImg.url" v-show="!plusShow" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :style="{ width: uploadImg.width, height: uploadImg.height }"> <i class="el-icon-plus avatar-uploader-icon" :style="{ width: uploadImg.width, height: uploadImg.height, lineHeight: uploadImg.height }"> <div slot="tip" class="el-upload__tip" align="center" :style="{ width: uploadImg.width }"> <div>{{uploadImg.tip || ''}}</div> <div>PNG/JPG/JPEG格式<br />2M以内</div> </div> </i> </el-upload> </div> </template> <script> /* 使用说明 * imgsArr: [], // 数据动态回显图片数组 * uploadImg: { * url: uploadLogo, // upload--action * tip: '上传平台LOGO图片', // 上传图片的提示tip * width: '280px', * height: '200px', * fun: 'uploadfun', * limit: 3 //最多可以传输数量 * } */ import util from '@/libs/util' export default { props: ['upImgsStr', 'uploadImg'], data() { return { imageUrl: util.strToArr(this.upImgsStr) || [] } }, watch: { upImgsStr(value) { console.log(value) this.imageUrl = util.strToArr(value) }, imageUrl(value) { const list = util.arrToStr(value) this.$emit('uploadfun', list) } }, computed: { limitNum() { return this.uploadImg.limit || 1 }, plusShow() { // 当图片多于N张的时候,就隐藏上传框 if (this.imageUrl) { return this.imageUrl.length >= this.limitNum } else { return false } } }, methods: { handleRemove(index) { this.imageUrl.splice(index, 1) }, handleAvatarSuccess(res) { this.imageUrl.push(res.data.uri) }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg' const isPNG = file.type === 'image/png' const isLt2M = file.size / 1024 / 1024 < 2 if (!isJPG && !isPNG) { this.$message.error('只能上传jpg/jpeg/png格式的图片,请重新上传') } if (!isLt2M) { this.$message.error('图片大小不能超过2MB,请重新上传') } return isJPG && isLt2M } } } </script> <style> .upload-box { display: flex; } .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; display: flex; justify-content: center; align-items: center; } .el-upload--picture-card { width: 100%; height: 100%; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; text-align: center; } .el-icon-plus:before { bottom: 10%; position: relative; } .avatar { display: block; } .el-upload__tip { position: absolute; bottom: 12%; padding: 10px; line-height: 16px; z-index: 0; } .el-upload-list--picture-card { overflow: hidden; } .el-upload-list--picture-card .el-upload-list__item { float: left; display: flex; justify-content: center; align-items: center; height: auto; } .el-upload-list--picture-card .el-upload-list__item-thumbnail { width: auto; height: auto; max-width: 100%; max-height: 100%; } </style>