123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <template>
- <div class="singleImageUpload2 upload-container">
- <el-upload class="image-uploader" :data="dataObj" drag :multiple="false" :show-file-list="false" action="https://httpbin.org/post"
- :on-success="handleImageScucess">
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">Drag或<em>点击上传</em></div>
- </el-upload>
- <div v-show="imageUrl.length>0" class="image-preview">
- <div class="image-preview-wrapper" v-show="imageUrl.length>1">
- <img :src="imageUrl">
- <div class="image-preview-action">
- <i @click="rmImage" class="el-icon-delete"></i>
- </div>
- </div>
- </div>
- </div>
- </template>
-
- <script>
- import { getToken } from '@/api/qiniu'
-
- export default {
- name: 'singleImageUpload2',
- props: {
- value: String
- },
- computed: {
- imageUrl() {
- return this.value
- }
- },
- data() {
- return {
- tempUrl: '',
- dataObj: { token: '', key: '' }
- }
- },
- methods: {
- rmImage() {
- this.emitInput('')
- },
- emitInput(val) {
- this.$emit('input', val)
- },
- handleImageScucess() {
- this.emitInput(this.tempUrl)
- },
- beforeUpload() {
- const _self = this
- return new Promise((resolve, reject) => {
- getToken().then(response => {
- const key = response.data.qiniu_key
- const token = response.data.qiniu_token
- _self._data.dataObj.token = token
- _self._data.dataObj.key = key
- this.tempUrl = response.data.qiniu_url
- resolve(true)
- }).catch(() => {
- reject(false)
- })
- })
- }
- }
- }
- </script>
-
- <style rel="stylesheet/scss" lang="scss" scoped>
- .upload-container {
- width: 100%;
- height: 100%;
- position: relative;
- .image-uploader {
- height: 100%;
- }
- .image-preview {
- width: 100%;
- height: 100%;
- position: absolute;
- left: 0px;
- top: 0px;
- border: 1px dashed #d9d9d9;
- .image-preview-wrapper {
- position: relative;
- width: 100%;
- height: 100%;
- img {
- width: 100%;
- height: 100%;
- }
- }
- .image-preview-action {
- position: absolute;
- width: 100%;
- height: 100%;
- left: 0;
- top: 0;
- cursor: default;
- text-align: center;
- color: #fff;
- opacity: 0;
- font-size: 20px;
- background-color: rgba(0, 0, 0, .5);
- transition: opacity .3s;
- cursor: pointer;
- text-align: center;
- line-height: 200px;
- .el-icon-delete {
- font-size: 36px;
- }
- }
- &:hover {
- .image-preview-action {
- opacity: 1;
- }
- }
- }
- }
- </style>
|