129 lines
3.0 KiB
129 lines
3.0 KiB
<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>
|