效果如下图所示:
完整代码如下图所示:
<template>
<view>
<!-- 表单上传组件 -->
<u-form-item :label="label" borderBottom ref="item1" :label-width="labelWidth">
<u-upload
:fileList="fileList1"
@afterRead="afterRead"
@delete="deletePic"
name="1"
multiple
:maxCount="10"
></u-upload>
</u-form-item>
</view>
</template>
<script>
// 引入接口文件
import { uploadPhoto } from '@/request/api.js'
export default {
data() {
return {
showselectPopup:false,
fileList1:[],
}
},
props:{
label:{
type:String,
required: true
},
labelWidth:{
type:Number,
default: 80
},
// 选择其默认值
selectedData:{
type:String,
},
},
created() {
},
methods: {
// 删除图片
deletePic(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
// 新增图片
async afterRead(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: 'https://test*********', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
formData: {
user: 'test'
},
success: (res) => {
setTimeout(() => {
resolve(res.data.data)
}, 1000)
}
});
})
},
}
}
</script>
<style>
</style>
只需要修改请求地址,即可用。