Files
yshop-pro-uniapp/utils/wechatUtils.js

207 lines
5.2 KiB
JavaScript
Raw Normal View History

2023-11-15 19:59:37 +08:00
/**
* @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获取encryptedDataiv
*/
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)
})
}