小程序常用功能封装

解决代码统一调用问题,避免重复性在不同的page写这些代码,记录一下

加密封装【jsencrypt.js、enctypt.js】:

import JSEncrypt from './jsencrypt'   //引入

// 加密
export function encrypt(key, txt) {
  const encryptor = new JSEncrypt()
  encryptor.setPublicKey(key) // 设置公钥
  return encryptor.encrypt(txt) // 对数据加密
}

API调用文件封装【api.js】:

const http = require('./http');
const system = require('./system');
const upload = require('./upload');
const download = require('./download');
/* 
 * 上传接口
 */
const uploadFile = (path) => {
  return upload('/xxx', path)
}
/* 
 * 客户下单 - 提交
 */
const getApply = (data) => {
  return http('/xxx', data)
}

module.exports = {
  uploadFile: uploadFile,
  getApply: getApply
}

系统环境封装【system.js】:

/* 
 * token名称
 */
let token = "my_system";
/* 
 * 设置token
 */
const setToken = (user) => {
  wx.setStorage({
    key: token,
    data: user
  })
}
/* 
 * 获取token
 */
const getToken = () => {
  return wx.getStorageSync(token)
}
/* 
 * 删除token
 */
const removeToken = () => {
  wx.removeStorageSync(token)
}
/* 
 * 是否客户端
 */
const KHD = () => {
  var value = getToken()
  if (value && value.platformAppId === 'customer') {
    return true;
  }
  return false;
}

/** 判定服务请求环境 */
const getHost = () => {
  let envVersion = wx.getAccountInfoSync().miniProgram.envVersion;
  let host = ''
  switch (envVersion) {
    case "develop":
      host = "https://xxx"
      break;
    case "trial":
      host = "https://xxx"
      break;
    case "release":
      host = "https://xxx"
      break;
  }
  return host
}
module.exports = {
  setToken: setToken,
  getToken: getToken,
  removeToken: removeToken,
  KHD: KHD,
  host: getHost
}

请求封装【http.js】:

const access = require('./token.js');
const system = require('./system.js');
const request = (url, data, method = "POST") => {
  return new Promise((resolve, reject) => {
    let _time = setTimeout(() => {
      wx.showLoading({
        mask: true,
        title: '请求中'
      });
    }, 800);
    let _access = access.getToken();
    let _system = system.getToken();
    wx.request({
      url: system.host() + url,
      data: data,
      method: method,
      dataType: "json",
      header: {
        'content-type': 'application/json; charset=utf-8',
        "accessToken": _access && _access.token ? _access.token : "",
        "platformAppId": _system ? _system.platformAppId : "",
        "matrixId": _system ? _system.matrixId : "",
      },
      success(res) {
        if (res.data.code == 0) {
          resolve(res.data.data);
          return;
        }

        console.log("")
        console.log("------------【start】------------")
        console.log("---------请求地址------------")
        console.log(url)
        console.log("---------请求头部信息------------")
        console.log(JSON.stringify({
          'content-type': 'application/json; charset=utf-8',
          "accessToken": _access && _access.token ? _access.token : "",
          "platformAppId": _system ? _system.platformAppId : "",
          "matrixId": _system ? _system.matrixId : "",
        }))
        console.log("---------请求数据------------")
        console.log(JSON.stringify(data))
        console.log("---------返回错误------------")
        console.log(JSON.stringify(res))
        console.log("------------【end】------------")
        console.log("");

        if (res.data.code == 11) {
          access.removeToken();
          wx.showModal({
            title: "提示",
            content: "登录态失效,请重新打开小程序",
            showCancel: false
          });
          reject();
          return;
        }
        if (res.data.message) {
          wx.showModal({
            title: "提示",
            content: res.data.message,
            showCancel: false
          });
        } else {
          wx.showModal({
            title: "提示",
            content: "网络繁忙,请稍后再试!",
            showCancel: false
          });
        }
        reject();
      },
      fail(e) {
        reject(e);
      },
      complete() {
        clearTimeout(_time)
        wx.hideLoading()
      }
    });
  });
}
module.exports = request

登录态封装【token.js】:

/* 
 * token名称
 */
let token = "my_token";
/* 
 * 设置token
 */
const setToken = (user) => {
  wx.setStorage({
    key: token,
    data: user
  })
}
/* 
 * 获取token
 */
const getToken = () => {
  return wx.getStorageSync(token)
}
/* 
 * 删除token
 */
const removeToken = () => {
  wx.removeStorageSync(token)
}
/* 
 * 是否登录
 */
const isLogin = () => {
  try {
    var value = getToken()
    if (value && value.token) {
      return true;
    }
    return false;
  } catch (e) {
    return false;
  }
}
module.exports = {
  setToken: setToken,
  getToken: getToken,
  removeToken: removeToken,
  isLogin: isLogin
}

下载封装【download.js】:

const access = require('./token.js');
const system = require('./system.js');
const request = (url, filename) => {
  return new Promise((resolve, reject) => {
    let _time = setTimeout(() => {
      wx.showLoading({
        mask: true,
        title: '下载中'
      });
    }, 800);
    let _access = access.getToken();
    let _system = system.getToken();
    wx.downloadFile({
      url: system.host() + url,
      filePath: wx.env.USER_DATA_PATH + '/' + filename,
      header: {
        'content-type': 'application/json; charset=utf-8',
        "accessToken": _access ? _access.token : "",
        "platformAppId": _system ? _system.platformAppId : "",
        "matrixId": _system ? _system.matrixId : "",
      },
      success: res => {
        if (res.statusCode === 200) {
          resolve(res.filePath)
          return;
        }
        reject();
      },
      fail: () => {
        reject();
      },
      complete: () => {
        clearTimeout(_time)
        wx.hideLoading()
      }
    })
  })
}
module.exports = request

上传封装【upload.js】:

const access = require('./token.js');
const system = require('./system.js');
const request = (url, path) => {
  return new Promise((resolve, reject) => {
    let _time = setTimeout(() => {
      wx.showLoading({
        mask: true,
        title: '上传中'
      });
    }, 800);
    let _access = access.getToken();
    let _system = system.getToken();
    wx.uploadFile({
      url: system.host() + url,
      filePath: path,
      name: 'file',
      formData: { objectId: "3", serviceName: 'uniapp' },
      header: {
        'content-type': 'application/json; charset=utf-8',
        "accessToken": _access ? _access.token : "",
        "platformAppId": _system ? _system.platformAppId : "",
        "matrixId": _system ? _system.matrixId : "",
      },
      success: res => {
        let _data = JSON.parse(res.data);
        if (_data.success) {
          resolve(_data.data);
          return;
        }
        wx.showToast({
          title: _data.message,
          icon: 'none',
        });
        reject();
      },
      fail: () => {
        reject();
      },
      complete: () => {
        clearTimeout(_time)
        wx.hideLoading()
      }
    })
  })
}
module.exports = request