123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- <template>
- <div class="upload-container">
- <el-upload
- :data="dataObj"
- :multiple="false"
- :show-file-list="false"
- :on-success="handleImageSuccess"
- class="image-uploader"
- drag
- action="https://httpbin.org/post"
- >
- <i class="el-icon-upload" />
- <div class="el-upload__text">
- 将文件拖到此处,或<em>点击上传</em>
- </div>
- </el-upload>
- <div class="image-preview">
- <div v-show="imageUrl.length>1" class="image-preview-wrapper">
- <img :src="imageUrl+'?imageView2/1/w/200/h/200'">
- <div class="image-preview-action">
- <i class="el-icon-delete" @click="rmImage" />
- </div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import { getToken } from '@/api/qiniu'
- export default {
- name: 'SingleImageUpload',
- props: {
- value: {
- type: String,
- default: ''
- }
- },
- data() {
- return {
- tempUrl: '',
- dataObj: { token: '', key: '' }
- }
- },
- computed: {
- imageUrl() {
- return this.value
- }
- },
- methods: {
- rmImage() {
- this.emitInput('')
- },
- emitInput(val) {
- this.$emit('input', val)
- },
- handleImageSuccess() {
- 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(err => {
- console.log(err)
- reject(false)
- })
- })
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- @import "~@/styles/mixin.scss";
- .upload-container {
- width: 100%;
- position: relative;
- @include clearfix;
- .image-uploader {
- width: 60%;
- float: left;
- }
- .image-preview {
- width: 200px;
- height: 200px;
- position: relative;
- border: 1px dashed #d9d9d9;
- float: left;
- margin-left: 50px;
- .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>
|