您当前的位置: 首页 >  小程序

【03】

暂无认证

  • 1浏览

    0关注

    196博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

【03】 发布时间:2020-07-17 09:24:43 ,浏览量:1

小程序检测更新
// 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}
   */
  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

关注
打赏
1657344724
查看更多评论
立即登录/注册

微信扫码登录

0.0433s