// components/upload/index.js import { ServerBasePath } from '~/services/_utils/request' Component({ /** * 组件的属性列表 */ properties: { mediaType: { type: Array, value: ['image'], }, max: { type: Number, value: 1, }, lable: { type: String, value: "", }, fileList: { type: Array, value: [], }, }, /** * 组件的初始数据 */ data: { fileList: [] }, /** * 组件的方法列表 */ methods: { // 子组件中触发自定义事件并传递数据 // triggerEventToParent() { // const dataToPass = this.data.fileList; // 获取要传递的值 // this.triggerEvent('customEvent', dataToPass); // 触发自定义事件,并传递值 // }, handleAdd(e) { const { fileList } = this.data; const { files } = e.detail; // 方法1:选择完所有图片之后,统一上传,因此选择完就直接展示 // this.setData({ // fileList: [...fileList, ...files], // 此时设置了 fileList 之后才会展示选择的图片 // }); // 方法2:每次选择图片都上传,展示每次上传图片的进度 files.forEach(file => this.onUpload(file)) }, onUpload(file) { const { fileList } = this.data; this.setData({ fileList: [...fileList, { ...file, status: 'loading' }], }); const { length } = fileList; const task = wx.uploadFile({ url: ServerBasePath + '/Common/UploadFile', // 仅为示例,非真实的接口地址 filePath: file.url, name: 'file', formData: { fileDir: 'Shops' }, success: (res) => { this.setData({ [`fileList[${length}].url`]: JSON.parse(res.data).data.url, [`fileList[${length}].status`]: 'done', }); // this.triggerEventToParent() }, }); task.onProgressUpdate((res) => { this.setData({ [`fileList[${length}].percent`]: res.progress, }); }); }, handleRemove(e) { const { index } = e.detail; const { fileList } = this.data; fileList.splice(index, 1); this.setData({ fileList, }); }, } })