Skip to content

host.js

javascript
// 配置地址 host.js

// const HOST = "https://xxxx.com"; //生成环境
const HOST = 'http://xxxxx.com' // 测试环境

export default HOST

addr.js

javascript
// 接口统一管理 addr.js

import HOST from './host'

const addr = {
  LOGIN: `${HOST}/login`, // 登录
  LOGOUT: `${HOST}/logout`, // 退出
}

export default addr

https.js

javascript
// 方法请求统一处理 https.js
// TODO: 可以统一处理下get post逻辑

class Http {
  constructor() {
    this.requestParameter = {
      url: '',
      data: {},
      method: 'GET',
      header: {
        'content-type': 'application/x-www-form-urlencoded',
      },
    }
  }
  async get(url, data) {
    return new Promise((resolve, reject) => {
      wx.request(
        Object.assign({}, this.requestParameter, {
          url: url,
          data: data,
          fail: (e) => {
            console.log(
              `\u8BF7\u6C42\u5931\u8D25\uFF01\r\n \u9519\u8BEF\u4FE1\u606F\uFF1A${e.errMsg}`
            )
            resolve('')
          },
          success: (e) => {
            if (e.statusCode == 200) {
              if (res.isok) {
                resolve(res)
              } else {
                reject(res.Msg || '接口异常')
              }
            } else {
              resolve('')
            }
          },
        })
      )
    })
  }
  async post(url, data) {
    return new Promise((resolve, reject) => {
      wx.request(
        Object.assign({}, this.requestParameter, {
          url: url,
          data: data,
          method: 'POST',
          fail: (e) => {
            console.log(e)
            resolve('')
          },
          success: (res) => {
            if (res.statusCode == 200) {
              if (res.data.isok) {
                resolve(res)
              } else {
                reject(res.data.Msg || '接口异常')
              }
            } else {
              reject(res.errMsg)
            }
          },
        })
      )
    })
  }
}

export default Http

tools.js

javascript
// 工具库 tools.js

var Tools = function () {}

//显示弹窗(确定)
Tools.showModalCancle = function (msg, title = '') {
  return new Promise(function (resolve, reject) {
    wx.showModal({
      title: title || '提示',
      content: msg,
      showCancel: false,
      success: (res) => {
        resolve(res)
      },
    })
  })
}

export default Tools

service.js

javascript
// 请求方法封装 service.js

import addr from '../addr'
import Http from '../https'
import { tools } from '../core'

export default class Service extends Http {
  constructor() {
    super()
    this.loginFailCount = 3
  }
  // 检测是否登录
  static sessionCheck() {
    return new Promise((resolve, reject) => {
      wx.checkSession({
        async success() {
          resolve(await Service.login())
        },
        async fail() {
          resolve(await Service.login())
        },
      })
    })
  }
  // 调取微信code
  static login() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            resolve(res.code)
          } else {
            console.log(res, 'code')
            resolve(false)
          }
        },
        fail: (e) => {
          console.log(e, 'code')
          tools.showModalCancle(e.errMsg)
        },
      })
    })
  }

  // 登录成功逻辑信息
  static async processLoginSuccess(data) {
    // TODO: 处理用户信息逻辑
    return data
  }

  // 登录失败逻辑信息
  static async processLoginAbnor() {
    if (this.loginFailCount <= 0) {
      await tools.showModalCancle('请尝试刷新页面')
      this.loginFailCount = 3
      return
    }
    this.loginFailCount--
    return await Service._getUserInfo()
  }

  // 获取用户信息
  static async _getUserInfo() {
    const code = await Service.sessionCheck()
    let errMsg = ''
    if (code) {
      const { data } = await new Http().post(addr.MiniGetSign, { code })
      if (data) {
        if (data.isok) {
          return await Service.processLoginSuccess(data)
        } else if (!data.isok) {
          return await Service.processLoginAbnor()
        }
      } else {
        errMsg = '服务器异常'
      }
    } else {
      errMsg = 'login获取code失败'
    }
    await tools.showModalCancle(errMsg || '未知的错误信息')
  }

  // 微信返回coke
  async getSessionCheck() {
    const code = await Service.sessionCheck()
    return code
  }

  /**
   * @method 获取登录信息接口
   * @param {*}
   */
  async getUserInfo() {
    if (global.userInfo) return global.userInfo
    return await Service._getUserInfo()
  }

  /**
   * @method 退出登录
   * @param {*}
   */
  async logout(params) {
    return await this.post(addr.LOGOUT, params)
  }
}

core.js

javascript
// 提供组件引入js调用接口与工具方法

import Service from './service/service'
import Tools from '../tools.js'

class Core {
  constructor() {
    this.service = new Service()
    this.tools = Tools
  }
}

const core = new Core()
const service = core.service
const tools = core.tools

export default core
export { service, tools }