You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<template> <div class="module-box single-img"> <div class="single-img__box"> <el-upload drag :action="fileUploadApi.fileUpload" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :show-file-list="false" > <img v-if="imageUrl" :src="imageUrl" class="single-img__img"> <i v-else class="el-icon-upload"> <div class="el-upload__text"><em>选择图片</em></div> <div class="el-upload__tip" slot="tip">{{tip}}</div> </i> </el-upload> <div class="overlay" v-if="imageUrl"> <i class="iconfont icon-chakan" @click="showImage"></i> <i class="iconfont icon-shanchu1" @click="delImage"></i> </div> </div> <el-dialog title="图片展示" :visible.sync="dialogVisible"> <img width="100%" :src="dialogImageUrl" alt=""> </el-dialog> </div> </template>
<script> import api from '@@/components/canvasShow/config/api' import {sendReqMixin} from '@@/components/canvasShow/config/mixin' export default { name: 'tool-single-img', mixins: [sendReqMixin], data () { return { dialogVisible: false, dialogImageUrl: '', fileUploadApi: { fileUpload: '' } } }, props: { imageUrl: { type: String, default: '' }, tip: { type: String, default: '建议尺寸: 1080*900px, 高度自适应' } }, mounted () { console.log(api) this.fileUploadApi = api }, methods: { handleAvatarSuccess (res, file) { this.$emit('update:imageUrl', res.data.url) }, beforeAvatarUpload (file) { const isLt1M = file.size / 1024 / 1024 < 1 if (!isLt1M) { this.$message.error('上传图片大小不能超过 1MB!') } return isLt1M }, showImage () { this.dialogImageUrl = this.imageUrl this.dialogVisible = true }, delImage () { this.$emit('update:imageUrl', '') } } } </script>
<style lang="scss" scoped> .single-img{ &__box{ position: relative; ::v-deep .el-upload{ width: 100%; } ::v-deep .el-upload-dragger{ width: 100%; .el-upload__text{ line-height: 40px; } .el-upload__tip{ line-height: 1em; } } .overlay{ display: none; } &:hover .overlay{ position: absolute; top:0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.3); color: #fff; display: flex; justify-content: center; align-items: center; .iconfont{ padding: 5px; margin: 0 5px; font-size: 20px; cursor: pointer; } } } &__img{ position: absolute; max-width: 100%; height: 100%; max-height: 100%; margin: auto; top: 0; right: 0; bottom: 0; left: 0; } } </style>
|