我們在開發(fā)原生小程序時愕撰,對微信提供的api總需要占位置且重復度極高礁蔗,這邊我整理了一下常用的api進行封裝
export?default?class?wxapi?{
????/*
????*微信小程序API類
????*/
????//?加載
????showLoading(
????????title?=?'加載中...',
????????mask?=?true
????)?{
????????wx.showLoading({
????????????title,
????????????mask
????????})
????}
????//?提示
????showToast(
????????title,
????????icon?=?'none',
????????sucFn?=?()?=>?{
????????},
????????duration?=?2000,
????????mask?=?true
????)?{
????????wx.showToast({
????????????title,
????????????icon,
????????????duration,
????????????mask,
????????????success:?()?=>?{
????????????????return?setTimeout(sucFn,?duration)
????????????}
????????})
????}
????//?彈窗
????showModal(
????????content,
????????sucFn?=?()?=>?{
????????},
????????title?=?'提示',
????????showCancel?=?true,
????????confirmText?=?'確定',
????????cancelText?=?'取消'
????)?{wx.showModal({
????????????title,
????????????content,
????????????confirmText,
????????????cancelText,
????????????showCancel,
????????????success:?res?=>?{
????????????????return?sucFn(res)
????????????}
????????})
????}
????//?操作菜單
????showActionSheet(
????????itemList,
????????sucFn?=?()?=>?{
????????},
????)?{
????????wx.showActionSheet({
????????????itemList,
????????????success:?res?=>?{
????????????????return?sucFn(res.tapIndex)
????????????}
????????})
????}
????//?路由
????navTo(url,?isSub?=?false)?{
????????wx.navigateTo({
????????????url:?isSub???`/subPackage/pages/${url}`?:?`/pages/${url}`?
????????})
????}
????redTo(url,?isSub?=?false)?{
????????wx.redirectTo({
????????????url:?isSub???`/subPackage/pages/${url}`?:?`/pages/${url}`
????????})
????}
????tabTo(url)?{
????????wx.switchTab({
????????????url:?isSub???`/subPackage/pages/${url}`?:?`/pages/${url}`
????????})
????}
????relTo(url,?isSub?=?false)?{
????????wx.relaunch({
????????????url:?isSub???`/subPackage/pages/${url}`?:?`/pages/${url}`
????????})
????}
????navBack(
????????delta?=?1,
????????sucFn?=?()?=>?{
????????},
????)?{
????????wx.navigateBack({
????????????delta,
????????????success:?()?=>?{
????????????????return?sucFn
????????????}
????????})
????}
????//?登錄
????login()?{
????????return?new?Promise(resolve?=>?{
????????????wx.login({
????????????????success:?res?=>?{
????????????????????resolve(res.code)
????????????????}
????????????})
????????})
????}
????//?上傳文件
????uploadFile(url,?filePath,?name,?formData?=?{})?{
????????return?new?Promise(resolve?=>?{
????????????wx.uploadFile({
????????????????url:?config.apiBaseUrl?+?url,
????????????????filePath,
????????????????name,
????????????????header:?{
????????????????????'content-type':?'application/x-www-form-urlencoded',
????????????????????'appid':?config.appid,
????????????????????'Authorization':?userUtil.getKey('token')
????????????????},
????????????????formData,
????????????????success:?res?=>?{
????????????????????resolve(res.data)
????????????????},
????????????????fail:?()?=>?{
????????????????????resolve('')
????????????????}
????????????})
????????})
????}
????//?選擇圖片
????chooseImage(count)?{
????????return?new?Promise(resolve?=>?{
????????????wx.chooseImage({
????????????????count,
????????????????success:?res?=>?{
????????????????????resolve(res.tempFilePaths)
????????????????},
????????????????fail:?()?=>?{
????????????????????resolve('')
????????????????}
????????????})
????????})
????}
????//?授權
????getSetting()?{
????????return?new?Promise(resolve?=>?{
????????????wx.getSetting({
????????????????success:?res?=>?{
????????????????????resolve(res.authSetting)
????????????????}
????????????})
????????})
????}
????openSetting()?{
????????return?new?Promise(resolve?=>?{
????????????wx.openSetting({
????????????????success:?res?=>?{
????????????????????resolve(res.authSetting)
????????????????}
????????????})
????????})
????}
????//?收貨地址
????chooseAddress()?{
????????return?new?Promise(resolve?=>?{
????????????wx.chooseAddress({
????????????????success:?res?=>?{
????????????????????resolve(res)
????????????????}
????????????})
????????})
????}
????//?設置標題
????setTitle(title)?{
????????wx.setNavigationBarTitle({
????????????title
????????})
????}
????//?獲取圖片信息
????getImageInfo(src)?{
????????return?new?Promise(resolve?=>?{
????????????wx.getImageInfo({
????????????????src,
????????????????success:?res?=>?{
????????????????????console.log(res)
????????????????????resolve(res)
????????????????},
????????????????fail:?()?=>?{
????????????????????resolve('')
????????????????}
????????????})
????????})
????}
????//?獲取某項授權
????async?getSomeSetting(setting,?doSomething,?callback)?{
????????//?獲取授權信息
????????const?auth?=?await?this.getSetting();
????????if?(auth)?{
????????????if?(Object.keys(auth).indexOf(setting.type)?===?-1?||?auth[setting.type])?{
????????????????return?doSomething()
????????????}?else?if?(!auth[setting.type])?{
????????????????this.showModal(`你已拒絕${setting.name}授權骆膝,請按確定前往新頁面選中"${setting.name}"重新授權`,?res?=>?{
????????????????????if?(res.confirm)?{
????????????????????????this.openSettingAfter(doSomething);
????????????????????????if?(arguments.length?>?2)?return?callback()
????????????????????}
????????????????})
????????????}
????????}
????}
????//?獲取某項授權
????async?checkAuthorizationSetting(setting)?{
????????const?auth?=?await?this.getSetting();
????????if?(auth?&&?auth[setting.type])?return?true;
????????this.showModal(`您已拒絕${setting.name}授權惶傻,請按確定前往新頁面選中"${setting.name}"重新授權`,?async?res?=>?{
????????????if?(res.confirm)?{
????????????????let?auth?=?await?this.openSetting();
????????????????return?auth?&&?auth[setting.type];
????????????}
????????????return?false;
????????})
????????return?false;
????}
????//?打開微信授權頁面
????async?openSettingAfter(doSomething)?{
????????const?scope?=?await?this.openSetting();
????????if?(scope['scope.address'])?return?doSomething()
????}
????showTabBar(animation?=?true)?{
????????wx.showTabBar({
????????????animation:?animation
????????})
????}
????hideTabBar(animation?=?true)?{
????????wx.hideTabBar({
????????????animation:?animation
????????})
????}
}
使用時直接引用 例如:
import?wxapi?from?'./utils/wxapi';
wxapi:?new?wxapi(),?//常用的微信接口封裝
app.wxapi.showLoading('加載中~');