/** * @FileDescription: 微信工具类 * @Author: kahu * @Date: 2023/6/29 * @LastEditors: kahu * @LastEditTime: 2023/6/29 */ /** * 拍摄或从手机相册中选择图片或视频 * @param options * @param options.count 数量 最大选取数量 最多可以选择的文件个数,基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件 * @param options.mediaType 选取类型 image图片 video视频 * @param options.sourceType 选取的方式 album相册 camera相机 * @param options.maxDuration 录取视频的最大秒数,时间范围为 3s 至 60s 之间。不限制相册 * @param options.sizeType 是否压缩所选内容,基础库2.25.0前仅对 mediaType 为 image 时有效,2.25.0及以后对全量 mediaType 有效 * @param options.camera 拍摄时候的摄像头,仅在 sourceType 为 camera 时生效,使用前置或后置摄像头 */ export function wxChooseMedia(options={}){ return new Promise((resolve, reject) => { const mergeOptions = { count:9, mediaType:['image','video'], sourceType:['album','camera'], maxDuration:10, sizeType:['original','compressed'], camera:'back', ...options, success:(res)=>{ resolve(res) }, fail:(err)=>{ reject(err) } } wx.chooseMedia(mergeOptions) }) } /** * 调用微信接口编辑图片 * @param src 被编辑图片的临时路径 */ export function wxEditImage(src){ return new Promise((resolve, reject)=>{ wx.editImage({ src, success:(res)=>{ resolve(res.tempFilePath) }, fail:(err)=>{ reject(err) } }) }) } /** * 调用微信接口裁剪图片 * @param options * @param options.src 被裁剪图片的临时路径 * @param options.cropScale 裁剪比例 */ export function wxCropImage(options){ return new Promise((resolve, reject) => { const mergeOptions = { cropScale:'1:1', ...options, success:(res)=>{ resolve(res.tempFilePath) }, fail:(err)=>{ reject(err) } } wx.cropImage(mergeOptions) }) } /** * 调用微信接口处理视频 * @param options * @param options.filePath 视频的本地路径 * @param options.minDuration 视频的最小长度 * @param options.maxDuration 视频的最大长度 * @return { Promise<{duration:number,size:number,tempFilePath:string,tempThumbPath:string}> } */ export function wxEditVideo(options){ return new Promise((resolve, reject)=>{ if(options.minDuration>=options.maxDuration)return reject('MaxDuration Must Greater Than MinDuration') wx.openVideoEditor({ ...options, success:(res)=>{ resolve(res) }, fail:(err)=>{ reject(err) } }) }) } /** * 获取视频的详情 * @param src */ export function wxGetVideoInfo(src){ return new Promise((resolve, reject)=>{ wx.getVideoInfo({ src, success:(res)=>{ resolve(res) }, fail:(err)=>{ reject(err) } }) }) } /** * 获取照片的详情 * @param src */ export function wxGetImageInfo(src){ return new Promise((resolve, reject)=>{ wx.getImageInfo({ src, success:(res)=>{ resolve(res) }, fail:(err)=>{ reject(err) } }) }) } /** * 调用微信login获取code */ export function wxLogin(){ return new Promise((resolve, reject)=>{ uni.login({ provider: 'weixin', success: (res) => { resolve(res.code) }, fail: (err) => { reject({ message:'微信login方法出现错误', data:err }) } }) }) } /** * 调用微信getUserProfile获取encryptedData、iv */ export function wxGetUserProfile(){ return new Promise((resolve, reject)=> { uni.getUserProfile({ desc: '用于完善用户信息', success: ({ encryptedData, iv }) => { resolve({encryptedData,iv}) }, fail:(err)=>{ console.log(err) reject({ message:'微信getUserProfile方法出现错误', data:err }) } }) }) } /** * 调用地图获取位置信息 * @param params */ export function wxChooseLocation(params){ return new Promise((resolve, reject)=>{ const obj = { success(e){ resolve(e) }, fail(err){ console.log(err) reject({ message:'微信ChooseLocation方法出现错误', data:err }) } } Object.keys(params).forEach(key=>{ // @ts-ignore obj[key] = params[key] }) uni.chooseLocation(obj) }) }