Merge branch 'master' of https://gitee.com/yudaocode/yudao-mall-uniapp
						commit
						1978484071
					
				|  | @ -60,7 +60,7 @@ | |||
| 
 | ||||
|   // 加载更多 | ||||
|   function loadMore() { | ||||
|     if (state.loadStatus !== 'noMore') { | ||||
|     if (loadStatus.value !== 'noMore') { | ||||
|       activityPageParams.pageNo += 1; | ||||
|       getActivityList(); | ||||
|     } | ||||
|  |  | |||
|  | @ -63,7 +63,7 @@ | |||
|   import { showShareModal } from '@/sheep/hooks/useModal'; | ||||
|   import SpuApi from '@/sheep/api/product/spu'; | ||||
|   import BrokerageApi from '@/sheep/api/trade/brokerage'; | ||||
|   import { fen2yuan } from '../../sheep/hooks/useGoods'; | ||||
|   import { fen2yuan } from '@/sheep/hooks/useGoods'; | ||||
| 
 | ||||
|   const state = reactive({ | ||||
|     pagination: { | ||||
|  | @ -105,19 +105,29 @@ | |||
|       pageSize: state.pagination.pageSize, | ||||
|       pageNo: state.pagination.pageNo, | ||||
|     }); | ||||
| 
 | ||||
|     if (code !== 0) { | ||||
|       state.loadStatus = 'error'; // 处理错误状态 | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // 使用 Promise.all 来等待所有佣金请求完成 | ||||
|     await Promise.all( | ||||
|       data.list.map(async (item) => { | ||||
|         try { | ||||
|           const res = await BrokerageApi.getProductBrokeragePrice(item.id); | ||||
|           item.brokerageMinPrice = res.data.brokerageMinPrice; | ||||
|           item.brokerageMaxPrice = res.data.brokerageMaxPrice; | ||||
|         } catch (error) { | ||||
|           console.error(`获取商品【${item.name}】的佣金时出错:`, error); | ||||
|         } | ||||
|       }), | ||||
|     ); | ||||
| 
 | ||||
|     // 在所有请求完成后合并列表和更新状态 | ||||
|     state.pagination.list = _.concat(state.pagination.list, data.list); | ||||
|     state.pagination.total = data.total; | ||||
|     state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore'; | ||||
|     // 补充分佣金额 | ||||
|     data.list.forEach((item) => { | ||||
|       BrokerageApi.getProductBrokeragePrice(item.id).then((res) => { | ||||
|         item.brokerageMinPrice = res.data.brokerageMinPrice; | ||||
|         item.brokerageMaxPrice = res.data.brokerageMaxPrice; | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   onLoad(() => { | ||||
|  |  | |||
|  | @ -128,7 +128,7 @@ | |||
|     state.loadStatus = 'loading'; | ||||
|     let { code, data } = await BrokerageApi.getBrokerageRecordPage({ | ||||
|       pageSize: state.pagination.pageSize, | ||||
|       pageNo: state.pagination.pageSize, | ||||
|       pageNo: state.pagination.pageNo, | ||||
|       bizType: 1, // 获得推广佣金 | ||||
|       status: state.currentTab > 0 ? state.currentTab : undefined, | ||||
|     }); | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
|             <image class="goods-img" :src="item.picUrl" mode="aspectFit" /> | ||||
|           </view> | ||||
|           <view class="goods-content"> | ||||
|             <view class="goods-title ss-line-1 ss-m-b-28">{{ item.title }}</view> | ||||
|             <view class="goods-title ss-line-1 ss-m-b-28">{{ item.name }}</view> | ||||
|             <view class="goods-price">¥{{ fen2yuan(item.price) }}</view> | ||||
|           </view> | ||||
|         </view> | ||||
|  |  | |||
|  | @ -204,32 +204,46 @@ async function uploadFiles(choosePromise, { onChooseFile, onUploadProgress }) { | |||
| 
 | ||||
|   // 如果是前端直连上传
 | ||||
|   if (UPLOAD_TYPE.CLIENT === import.meta.env.SHOPRO_UPLOAD_TYPE) { | ||||
|     for (const file of files) { | ||||
|       // 1.1 获取文件预签名地址
 | ||||
|       const { data: presignedInfo } = await FileApi.getFilePresignedUrl(file.name); | ||||
|       // 1.2 获取二进制文件对象
 | ||||
|       const fileBuffer = await convertToArrayBuffer(file); | ||||
|       // 1.3 上传文件
 | ||||
|       await uni.request({ | ||||
|         url: presignedInfo.uploadUrl, // 预签名的上传 URL
 | ||||
|         method: 'PUT', // 使用 PUT 方法
 | ||||
|         header: { | ||||
|           'Content-Type': file.fileType + '/' + file.name.substring(file.name.lastIndexOf('.') + 1), // 设置内容类型
 | ||||
|         }, | ||||
|         data: fileBuffer, // 文件的路径,适用于小程序
 | ||||
|         success: (res) => { | ||||
|           // 1.4. 记录文件信息到后端(异步)
 | ||||
|           createFile(presignedInfo, file); | ||||
|           // 1.5. 重新赋值
 | ||||
|           file.url = presignedInfo.url; | ||||
|           console.log('上传成功:', res); | ||||
|         }, | ||||
|         fail: (err) => { | ||||
|           console.error('上传失败:', err); | ||||
|         }, | ||||
|       }); | ||||
|     } | ||||
|     return files; | ||||
|     // 为上传创建一组 Promise
 | ||||
|     const uploadPromises = files.map(async (file) => { | ||||
|       try { | ||||
|         // 1.1 获取文件预签名地址
 | ||||
|         const { data: presignedInfo } = await FileApi.getFilePresignedUrl(file.name); | ||||
|         // 1.2 获取二进制文件对象
 | ||||
|         const fileBuffer = await convertToArrayBuffer(file); | ||||
| 
 | ||||
|         // 返回上传的 Promise
 | ||||
|         return new Promise((resolve, reject) => { | ||||
|           uni.request({ | ||||
|             url: presignedInfo.uploadUrl, // 预签名的上传 URL
 | ||||
|             method: 'PUT', // 使用 PUT 方法
 | ||||
|             header: { | ||||
|               'Content-Type': | ||||
|                 file.fileType + '/' + file.name.substring(file.name.lastIndexOf('.') + 1), // 设置内容类型
 | ||||
|             }, | ||||
|             data: fileBuffer, // 文件的路径,适用于小程序
 | ||||
|             success: (res) => { | ||||
|               // 1.4. 记录文件信息到后端(异步)
 | ||||
|               createFile(presignedInfo, file); | ||||
|               // 1.5. 重新赋值
 | ||||
|               file.url = presignedInfo.url; | ||||
|               console.log('上传成功:', res); | ||||
|               resolve(file); | ||||
|             }, | ||||
|             fail: (err) => { | ||||
|               console.error('上传失败:', err); | ||||
|               reject(err); | ||||
|             }, | ||||
|           }); | ||||
|         }); | ||||
|       } catch (error) { | ||||
|         console.error('上传失败:', error); | ||||
|         throw error; | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     // 等待所有上传完成
 | ||||
|     return await Promise.all(uploadPromises); // 返回已上传的文件列表
 | ||||
|   } else { | ||||
|     // 后端上传
 | ||||
|     for (let file of files) { | ||||
|  |  | |||
|  | @ -44,13 +44,7 @@ | |||
| 
 | ||||
| <script> | ||||
|   import { chooseAndUploadFile, uploadCloudFiles } from './choose-and-upload-file.js'; | ||||
|   import { | ||||
|     get_file_ext, | ||||
|     get_extname, | ||||
|     get_files_and_is_max, | ||||
|     get_file_info, | ||||
|     get_file_data, | ||||
|   } from './utils.js'; | ||||
|   import { get_extname, get_files_and_is_max, get_file_data } from './utils.js'; | ||||
|   import uploadImage from './upload-image.vue'; | ||||
|   import uploadFile from './upload-file.vue'; | ||||
|   import sheep from '@/sheep'; | ||||
|  | @ -352,22 +346,21 @@ | |||
|       /** | ||||
|        * 选择文件并上传 | ||||
|        */ | ||||
|       chooseFiles() { | ||||
|       async chooseFiles() { | ||||
|         const _extname = get_extname(this.fileExtname); | ||||
|         // 获取后缀 | ||||
|         uniCloud | ||||
|           .chooseAndUploadFile({ | ||||
|             type: this.fileMediatype, | ||||
|             compressed: false, | ||||
|             sizeType: this.sizeType, | ||||
|             // TODO 如果为空,video 有问题 | ||||
|             extension: _extname.length > 0 ? _extname : undefined, | ||||
|             count: this.limitLength - this.files.length, //默认9 | ||||
|             onChooseFile: this.chooseFileCallback, | ||||
|             onUploadProgress: (progressEvent) => { | ||||
|               this.setProgress(progressEvent, progressEvent.index); | ||||
|             }, | ||||
|           }) | ||||
|         await chooseAndUploadFile({ | ||||
|           type: this.fileMediatype, | ||||
|           compressed: false, | ||||
|           sizeType: this.sizeType, | ||||
|           // TODO 如果为空,video 有问题 | ||||
|           extension: _extname.length > 0 ? _extname : undefined, | ||||
|           count: this.limitLength - this.files.length, //默认9 | ||||
|           onChooseFile: this.chooseFileCallback, | ||||
|           onUploadProgress: (progressEvent) => { | ||||
|             this.setProgress(progressEvent, progressEvent.index); | ||||
|           }, | ||||
|         }) | ||||
|           .then((result) => { | ||||
|             this.setSuccessAndError(result); | ||||
|           }) | ||||
|  | @ -587,7 +580,7 @@ | |||
|             path: v.path, | ||||
|             size: v.size, | ||||
|             fileID: v.fileID, | ||||
|             url: v.path, | ||||
|             url: v.url, | ||||
|           }); | ||||
|         }); | ||||
|         return newFilesData; | ||||
|  |  | |||
|  | @ -17,12 +17,11 @@ export const get_file_ext = (name) => { | |||
|  */ | ||||
| export const get_extname = (fileExtname) => { | ||||
|   if (!Array.isArray(fileExtname)) { | ||||
|     let extname = fileExtname.replace(/(\[|\])/g, ''); | ||||
|     let extname = fileExtname.replace(/([\[\]])/g, ''); | ||||
|     return extname.split(','); | ||||
|   } else { | ||||
|     return fileExtname; | ||||
|   } | ||||
|   return []; | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  | @ -91,7 +90,7 @@ export const get_file_data = async (files, type = 'image') => { | |||
|     extname: extname || '', | ||||
|     cloudPath: files.cloudPath, | ||||
|     fileType: files.fileType, | ||||
|     url: files.path || files.path, | ||||
|     url: files.url || files.path, | ||||
|     size: files.size, //单位是字节
 | ||||
|     image: {}, | ||||
|     path: files.path, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 YunaiV
						YunaiV