Commit 40e13195 authored by 杜欣's avatar 杜欣

build

parents c7036702 1a917ef4
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<div
class="preview-wrap"
@click="preview">
<img :src="silders" >
</div>
</template>
<script>
export default {
props: {
silders: ''
},
methods: {
preview() {
this.$emit('input', false)
}
}
}
</script>
<style lang="less" scoped>
.preview-wrap {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .4);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template lang="html"> <template lang="html">
<div class="upload-image-wrap" ref="uploadImage"> <div
ref="uploadImage"
class="upload-image-wrap">
<div v-if="multiple"> <div v-if="multiple">
<ul class="upload-image-items" v-if="currImages.length"> <ul
<li class="upload-image-item" v-for="(item, inx) in currImages" :disabled="disabled"> v-if="currImages.length"
<div class="image-inner" v-resize="item"></div> class="upload-image-items">
<div class="image-after" @click.stop="deleteImage(inx)"></div> <li
v-for="(item, inx) in currImages"
:disabled="disabled"
class="upload-image-item">
<div
v-resize="item"
class="image-inner"/>
<div class="image-after">
<span @click.stop="deleteImage(inx)"/>
<span @click.stop="lookImage(item)"/>
</div>
</li> </li>
<li class="upload-image-item upload-icon"> <li class="upload-image-item upload-icon">
<upload-img class="multiple" @upload-img="onUpload" @uploaded="onUploaded" @error="onUploadError"> <upload-img
<slot></slot> class="multiple"
@upload-img="onUpload"
@uploaded="onUploaded"
@error="onUploadError">
<slot/>
</upload-img> </upload-img>
</li> </li>
</ul> </ul>
<div class="upload-icon" v-else> <div
<upload-img class="multiple" @upload-img="onUpload" @uploaded="onUploaded" @error="onUploadError"> v-else
<slot></slot> class="upload-icon">
<upload-img
class="multiple"
@upload-img="onUpload"
@uploaded="onUploaded"
@error="onUploadError">
<slot/>
</upload-img> </upload-img>
</div> </div>
<preview-img
v-if="isflag"
v-model="isflag"
:silders="silders"/>
</div> </div>
<div v-else> <div v-else>
<div class="upload-icon single-upload"> <div class="upload-icon single-upload">
<div class="single-upload-icon" v-resize="currImages"> <div
v-resize="currImages"
class="single-upload-icon">
<span v-if="currImages">修改图片</span> <span v-if="currImages">修改图片</span>
</div> </div>
<div :class="{ hide: currImages != false }" class="single-upload-body"> <div
<upload-img class="multiple" @upload-img="onSingleUpload" @uploaded="onUploaded" @error="onUploadError"> :class="{ hide: currImages != false }"
<slot v-if="currImages == false"></slot> class="single-upload-body">
<upload-img
class="multiple"
@upload-img="onSingleUpload"
@uploaded="onUploaded"
@error="onUploadError">
<slot v-if="currImages == false"/>
</upload-img> </upload-img>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
// import './webuploader' // import './webuploader'
import Resize from '@/components/Upload/utils/resizeImage' import Resize from '@/components/Upload/utils/resizeImage'
import UploadImg from '@/components/Upload/UploadImgBox' import UploadImg from '@/components/Upload/UploadImgBox'
import PreviewImg from '@/components/PreviewImg'
export default { export default {
data () {
return {
inputValue: this.value
}
},
directives: { directives: {
Resize Resize
}, },
components: {
PreviewImg,
UploadImg
},
props: { props: {
value: { value: {
type: [Array, String] type: [Array, String]
...@@ -57,28 +91,35 @@ export default { ...@@ -57,28 +91,35 @@ export default {
disabled: Boolean, disabled: Boolean,
multiple: Boolean multiple: Boolean
}, },
watch: { data() {
value (newVal) { return {
this.inputValue = newVal inputValue: this.value,
isflag: false,
silders: ''
} }
}, },
computed: { computed: {
currImages () { currImages() {
if (this.multiple && Array.isArray(this.inputValue)) { if (this.multiple && Array.isArray(this.inputValue)) {
let images = [...this.inputValue] const images = [...this.inputValue]
return images.length ? images : [] return images.length ? images : []
} else { } else {
return this.inputValue || '' return this.inputValue || ''
} }
} }
}, },
watch: {
value(newVal) {
this.inputValue = newVal
}
},
methods: { methods: {
// 上传中... // 上传中...
onUpload (res) { onUpload(res) {
if (!res.data.file_url) return if (!res.data.file_url) return
console.log(this.inputValue) console.log(this.inputValue)
let content = this.inputValue.length const content = this.inputValue.length
let limit = Number(this.limit) const limit = Number(this.limit)
if (limit && content >= limit) { if (limit && content >= limit) {
this.$emit('limit', content) this.$emit('limit', content)
} else { } else {
...@@ -86,26 +127,28 @@ export default { ...@@ -86,26 +127,28 @@ export default {
this.$emit('input', this.inputValue) this.$emit('input', this.inputValue)
} }
}, },
onSingleUpload (res) { onSingleUpload(res) {
if (!res.data.file_url) return if (!res.data.file_url) return
this.inputValue = res.data.file_url this.inputValue = res.data.file_url
this.$emit('input', res.data.file_url) this.$emit('input', res.data.file_url)
}, },
// 上传完成 // 上传完成
onUploaded (res) { onUploaded(res) {
}, },
onUploadError (error) { onUploadError(error) {
console.log(error) console.log(error)
}, },
deleteImage (inx) { deleteImage(inx) {
this.inputValue.splice(inx, 1) this.inputValue.splice(inx, 1)
this.$emit('input', this.inputValue) this.$emit('input', this.inputValue)
}
}, },
components: {
UploadImg lookImage(item) {
this.isflag = true
this.silders = item
}
} }
} }
</script> </script>
...@@ -164,11 +207,42 @@ export default { ...@@ -164,11 +207,42 @@ export default {
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -50%); transform: translate(-100%, -50%);
width: 18px; width: 18px;
height: 18px; height: 18px;
background: url('../../assets/image/svg/uploadDelete.svg') 50% 50% no-repeat; background: url('../../assets/image/svg/uploadDelete.svg') 50% 50% no-repeat;
} }
&:before {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(50%, -50%);
width: 18px;
height: 18px;
background: url('../../assets/image/svg/magnifier.png') no-repeat;
background-size: 18px;
}
span{
&:first-child{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-80%, -50%);
width: 30px;
height: 30px;
z-index: 999;
}
&:last-child{
position: absolute;
left: 50%;
top: 50%;
transform: translate(10%, -50%);
width: 30px;
height: 30px;
z-index: 999;
}
}
} }
&[disabled]::before { &[disabled]::before {
position: absolute; position: absolute;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment