常用工具函数(小程序篇)

小程序检测更新

// app.js
App({
	onLaunch: function () {
		this.appUpDate()
	},
	appUpDate () {
    let self = this
    const updateManager = wx.getUpdateManager()
    //1. 检查小程序是否有新版本发布
    updateManager.onCheckForUpdate(function(res) {
      // 请求完新版本信息的回调
      if (res.hasUpdate) {
        //检测到新版本,需要更新,给出提示
        wx.showModal({
          title: '更新提示',
          content: '检测到新版本,是否下载新版本并重启小程序?',
          confirmColor: '#f4af23',
          success: function(res) {
            if (res.confirm) {
              //2. 用户确定下载更新小程序,小程序下载及更新静默进行
              self.downLoadAndUpdate(updateManager)
            }
          }
        })
      }
    })
  },
  downLoadAndUpdate: function (updateManager){
    let that = this
    wx.showLoading({title: '下载更新包...'});
    //静默下载更新小程序新版本
    updateManager.onUpdateReady(function () {
      wx.hideLoading()
      //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
      updateManager.applyUpdate()
    })
    updateManager.onUpdateFailed(function () {
      wx.hideLoading()
      // 新的版本下载失败
      that.showModal('版本下载失败~,请您删除当前小程序,重新搜索打开哟~')
    })
  }
}

封装全局请求

  /**
   * 封装请求
   * @param data
   * @returns {Promise<res>}
   */
  request(data) {
    // 备份数据 用于用于登录失效 无感登录重新发送请求数据
    let spareData = JSON.parse(JSON.stringify(data))
    let that = this
    let cookie = wx.getStorageSync('cookie')
    return new Promise((resolve, reject) => {
      data.url = this.requestUrl + data.url
      data.header = {...data.header}
      /**
       * 登录接口不带cookie 如果带了后端不会返回
       */
      if (data.url.indexOf('/management/platform/user/login?code') === -1){
        data.header.cookie = cookie
      }
      wx.request({
        ...data,
        success(res) {
          if (res.statusCode === 200) {
            that.globalData.noLogin = false
            resolve(res)
          } else {
            if (res.data.errorCode === 400002) {
              that.clearUserData()
              // 需要过滤的接口 获取课程列表
              let filterUrl = '/course/query/by/class/user?schoolTermId'
              if (filterUrl.indexOf(data.url.split(that.requestUrl)[1].split('=')[0]) !== -1) {
                reject(res)
                return
              }
              /**
               * 未登录 跳转登录页面
               */
              if (!that.globalData.needAuth) {
                that.loginIn(() => {
                  that.globalData.needAuth = true
                  that.request(spareData).then((res2) => {
                    that.globalData.needAuth = false
                    resolve(res2)
                  }).catch(() => {
                    reject()
                  })
                })
              } else {
                let pages = getCurrentPages();
                let currPage = {};
                if (pages.length) {
                  currPage = pages[pages.length - 1];
                }
                /**
                 *获取当前页面的路由
                 * 过滤不必要跳转的路由
                 */
                let route = currPage.route
                let filterRouters = ['pages/personal/personal', 'pages/onload/onload']
                if (filterRouters.indexOf(route) === -1) {
                  reject()
                  if (!that.globalData.noLogin){
                    wx.navigateTo({
                      url: '/pages/login/login'
                    })
                  }
                that.globalData.noLogin = true
                }else {
                  reject()
                }
              }
            }else {
              that.showModal(res.data.message || res.data.errorMessage)
              reject(res)
            }
          }
        },
        fail(res) {
          that.showModal('请求失败,原因可能是服务器异常或本地网络异常')
          reject()
        }
      })
    })
  },
  • 以上代码可根据业务场景进行修改(我的业务场景就是这样的)

封装授权

  /**
   * 封装授权
   * @param power
   * @param choose
   * @param modalContent
   * @param callback
   */
  authorizeFunc(power, choose,params, modalContent, callback) {
    /**
     * power需要授予 scope.invoiceTitle
     * choose 原生方法 chooseInvoiceTitle
     */
    let that = this;
    //查看是否授权
    wx.getSetting({
      success(res) {
        if (res.authSetting[power]) {
          console.log(123)
          // 进入选择
          wx[choose]({
            ...params,
            success(res) {
              callback(res)
            },
            fail(){
              callback(res)
            }
          })
        } else {
          // 没有授权 直接弹出授权
          wx[choose]({
            ...params,
            success(res) {
              callback(res)
            },
            // 授权失败 场景1:已授权但未选择就退出,场景2:未授权
            fail() {
              // 再次判断有没有授权
              wx.getSetting({
                success(res) {
                  if (!res.authSetting[power]) {
                    // 打开设置
                    wx.showModal({
                      title: '提示',
                      confirmColor: '#f4af23',
                      content: modalContent,
                      success(res) {
                        if (res.confirm) {
                          wx.openSetting({
                            success(res) {
                              if (res.authSetting[power]) {
                                that.authorizeFunc(power, choose,params, modalContent, callback)
                              }
                            }
                          })
                        }
                      }
                    })
                  }
                }
              })
            }
          })
        }
      }
    })
  },
  • 以上代码支持大部分授权 (获取手机号等特殊授权请另行写代码,有的变量没写上只需要在对应的地方定义一个默认值即可)

确定不来Q群交流一下? 867364698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值