You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.2 KiB
133 lines
3.2 KiB
<template> |
|
<view class="upload"> |
|
<view class="list"> |
|
<view class="item interval" v-for="(item,index) in fileList" :key="index"> |
|
<image :src="item" v-if="item"></image> |
|
<view class="icon-close" @click.stop="handleRemove(index)"> |
|
<uni-icon type="closeempty" size="20" color="#fff"></uni-icon> |
|
</view> |
|
</view> |
|
<view class="item" @click="chooseImage" v-if="fileList.length<limit"> |
|
<uni-icon type="image" size="30" color="#cccccd"></uni-icon> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
export default { |
|
props: { |
|
limit: { |
|
type: Number, |
|
default: 5 |
|
}, |
|
url: { |
|
type: String, |
|
required: true |
|
}, |
|
name: { |
|
type: String, |
|
default: 'file' |
|
}, |
|
formData: { |
|
type: Object, |
|
default () { |
|
return {} |
|
} |
|
}, |
|
header: { |
|
type: Object, |
|
default () { |
|
return {} |
|
} |
|
}, |
|
fileList: { |
|
type: Array, |
|
default () { |
|
return [] |
|
} |
|
} |
|
}, |
|
data() { |
|
return {} |
|
}, |
|
methods: { |
|
chooseImage() { |
|
uni.chooseImage({ |
|
success: (chooseImageRes) => { |
|
const uploadTask = uni.uploadFile({ |
|
url: 'https://www.huorantech.cn/api-guarantee/dg-apply-amount-info/uploadFile', |
|
name: 'file', |
|
filePath: chooseImageRes.tempFilePaths[0], |
|
header: { |
|
"Content-Type": "multipart/form-data", |
|
"token":"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxIiwic3ViIjoidG9rZW4iLCJpc3MiOiJBZG1pbiIsImlhdCI6MTYxMTcxMjUwNiwiZXhwIjoxNjExNzk4OTA2fQ.Hp6r0Abux__NoAp-8ssmcz4FPdiW_BRdNoXX5UDw_1w" |
|
}, |
|
timeOut:30000, |
|
success: (uploadFileRes) => { |
|
console.log(uploadFileRes) |
|
this.$emit('on-success', JSON.parse(uploadFileRes.data)) |
|
}, |
|
fail: (err) => { |
|
this.$emit('on-error', err) |
|
} |
|
}) |
|
uploadTask.onProgressUpdate((res) => { |
|
this.$emit('on-process', res) |
|
}) |
|
} |
|
}) |
|
}, |
|
handleRemove(index) { |
|
this.$emit('on-remove', index) |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.upload { |
|
.list { |
|
display: flex; |
|
flex-wrap: wrap; |
|
.item { |
|
position: relative; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
width: 140rpx; |
|
height: 140rpx; |
|
border-radius: 8rpx; |
|
border: 2rpx solid #D9D9D9; |
|
background-color: #f3f3f3; |
|
margin-bottom: 20rpx; |
|
&.interval { |
|
margin-right: 16rpx; |
|
border: none; |
|
} |
|
image { |
|
width: 100%; |
|
height: 100%; |
|
border-radius: 8rpx; |
|
margin: 0; |
|
} |
|
.icon-close { |
|
position: absolute; |
|
top: 0; |
|
right: 0; |
|
width: 28rpx; |
|
height: 28rpx; |
|
background-color: red; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
border-radius: 0 8rpx 0 0; |
|
} |
|
.icon { |
|
width: 48rpx; |
|
height: 48rpx; |
|
} |
|
} |
|
} |
|
} |
|
</style>
|
|
|