|
|
@@ -1,18 +1,17 @@
|
|
|
<template>
|
|
|
<view>
|
|
|
<div class="upload-box">
|
|
|
- <ul>
|
|
|
- <li class="list_img" v-for="(item,index) in showImgList" :key="index"
|
|
|
- :style="{ width: size + 'rpx', height: size + 'rpx' }">
|
|
|
- <view class="iconfont icondelete" @click="delImg(index)"></view>
|
|
|
- <image :src="item" @click="viewImg(item)"
|
|
|
- :style="{ width: size + 'rpx', height: size + 'rpx' }" :mode="imgMode" ></image>
|
|
|
- </li>
|
|
|
- <li v-if="showImgList.length < num" class="uploadImg" @click="chooseImage"
|
|
|
- :style="{ width: size + 'rpx', height: size + 'rpx' }">
|
|
|
- <view class="iconfont icontupiantianjia"></view>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
+ <slot>
|
|
|
+ <ul>
|
|
|
+ <li class="list_img" v-for="(item,index) in showImgList" :key="index" :style="{ width: size + 'rpx', height: size + 'rpx' }">
|
|
|
+ <view class="iconfont icondelete" @click="delImg(index)"></view>
|
|
|
+ <img :src="item" @click="viewImg(item)" :style="{ width: size + 'rpx', height: size + 'rpx' }" :mode="imgMode" />
|
|
|
+ </li>
|
|
|
+ <li v-if="showImgList.length < num" class="uploadImg" @click="chooseImage" :style="{ width: size + 'rpx', height: size + 'rpx' }">
|
|
|
+ <view class="iconfont icontupiantianjia"></view>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </slot>
|
|
|
</div>
|
|
|
</view>
|
|
|
</template>
|
|
|
@@ -23,7 +22,7 @@ export default {
|
|
|
props: {
|
|
|
// 传入的图片数组
|
|
|
imgList: {
|
|
|
- type: Array,
|
|
|
+ type: Array,
|
|
|
default: () => []
|
|
|
},
|
|
|
manualDel: {
|
|
|
@@ -65,11 +64,13 @@ export default {
|
|
|
type: Boolean,
|
|
|
default: false
|
|
|
},
|
|
|
- multiple: { // 是否多图上传
|
|
|
+ multiple: {
|
|
|
+ // 是否多图上传
|
|
|
type: Boolean,
|
|
|
default: true
|
|
|
},
|
|
|
- disabled: { // 是否只读
|
|
|
+ disabled: {
|
|
|
+ // 是否只读
|
|
|
type: Boolean,
|
|
|
default: false
|
|
|
},
|
|
|
@@ -77,11 +78,16 @@ export default {
|
|
|
imgMode: {
|
|
|
type: String,
|
|
|
default: 'scaleToFill'
|
|
|
+ },
|
|
|
+ uploadPicApi: {
|
|
|
+ type: Function,
|
|
|
+ default: uploadPic
|
|
|
}
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- showImgList: [],
|
|
|
+ resultData: {},
|
|
|
+ showImgList: [],
|
|
|
base64ImgList: [],
|
|
|
xssarr: ['data:', 'text', 'txt', 'html', 'js', 'css', 'json', 'exe', 'sql', 'xml', 'doc', 'docx']
|
|
|
}
|
|
|
@@ -111,16 +117,18 @@ export default {
|
|
|
await that.blobToBase64(tempFilePaths)
|
|
|
await that.autoUploadImg()
|
|
|
await that.postMsg()
|
|
|
+ return this.showImgList
|
|
|
},
|
|
|
|
|
|
postMsg() {
|
|
|
this.$emit('update:imgList', this.showImgList)
|
|
|
this.$emit('chooseImage', this.showImgList)
|
|
|
+ this.$emit('resultData', this.resultData)
|
|
|
},
|
|
|
|
|
|
autoUploadImg() {
|
|
|
- let that = this
|
|
|
- let base64ImgList = that.base64ImgList
|
|
|
+ let that = this
|
|
|
+ let base64ImgList = that.base64ImgList
|
|
|
let params = {}
|
|
|
if (base64ImgList.length === 1) {
|
|
|
params['file[content]'] = base64ImgList[0]
|
|
|
@@ -130,16 +138,15 @@ export default {
|
|
|
})
|
|
|
}
|
|
|
return new Promise((resolve, reject) => {
|
|
|
- uploadPic({
|
|
|
+ this.uploadPicApi({
|
|
|
...params,
|
|
|
relative_path: 1
|
|
|
}).then(res => {
|
|
|
- if (res.status === 'success') {
|
|
|
- that.showImgList = [
|
|
|
- ...that.showImgList,
|
|
|
- ...res.data.image_url.reverse()
|
|
|
- ]
|
|
|
- this.$emit('currentUpload', res.data.image_url.reverse())
|
|
|
+ if (res.code === 1) {
|
|
|
+ let imgArr = [res.data.url]
|
|
|
+ that.showImgList = [...that.showImgList, ...imgArr]
|
|
|
+ that.resultData = res.data
|
|
|
+ this.$emit('currentUpload', imgArr)
|
|
|
this.$emit('getResult', that.showImgList)
|
|
|
resolve(that.showImgList)
|
|
|
} else {
|
|
|
@@ -184,7 +191,7 @@ export default {
|
|
|
// #endif
|
|
|
}
|
|
|
},
|
|
|
- WEIXINb64(blob) {
|
|
|
+ WEIXINb64(blob) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
uni.getFileSystemManager().readFile({
|
|
|
filePath: blob, // 选择图片返回的相对路径
|
|
|
@@ -206,20 +213,22 @@ export default {
|
|
|
'Access-Control-Allow-Origin': '*',
|
|
|
'Content-Type': 'text/plain'
|
|
|
}),
|
|
|
- 'mode': 'no-cors'
|
|
|
- }).then(data => {
|
|
|
- const blob = data.blob()
|
|
|
- return blob
|
|
|
- }).then(async(blob) => {
|
|
|
- let reader = new FileReader()
|
|
|
- reader.readAsDataURL(blob)
|
|
|
- return await new Promise((res, reg) => {
|
|
|
- reader.onloadend = function() {
|
|
|
- const data = reader.result
|
|
|
- res(data)
|
|
|
- }
|
|
|
- })
|
|
|
+ mode: 'no-cors'
|
|
|
})
|
|
|
+ .then(data => {
|
|
|
+ const blob = data.blob()
|
|
|
+ return blob
|
|
|
+ })
|
|
|
+ .then(async blob => {
|
|
|
+ let reader = new FileReader()
|
|
|
+ reader.readAsDataURL(blob)
|
|
|
+ return await new Promise((res, reg) => {
|
|
|
+ reader.onloadend = function() {
|
|
|
+ const data = reader.result
|
|
|
+ res(data)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
},
|
|
|
|
|
|
// 上传图片
|
|
|
@@ -252,7 +261,7 @@ export default {
|
|
|
|
|
|
for (let i = 0; i < tempFiles.length; i++) {
|
|
|
// 大于1.5m就不让上传
|
|
|
- let fileSize = tempFiles[i].size
|
|
|
+ let fileSize = tempFiles[i].size
|
|
|
if (fileSize > 1024 * 1024 * 1.5) {
|
|
|
uni.showToast({
|
|
|
title: '过滤不能大于1.5m的文件',
|
|
|
@@ -318,14 +327,13 @@ export default {
|
|
|
uni.compressImage({
|
|
|
src: image,
|
|
|
quality: 80,
|
|
|
- complete: res => {
|
|
|
- }
|
|
|
+ complete: res => {}
|
|
|
})
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
imgList(val) {
|
|
|
- console.log('监听')
|
|
|
+ console.log('监听')
|
|
|
this.showImgList = [...val]
|
|
|
}
|
|
|
}
|
|
|
@@ -366,8 +374,8 @@ export default {
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
color: #fff;
|
|
|
- padding: 0 2px;
|
|
|
- background-color: rgba(0, 0, 0, .45);
|
|
|
+ padding: 0 2px;
|
|
|
+ background-color: rgba(0, 0, 0, 0.45);
|
|
|
}
|
|
|
}
|
|
|
}
|