yangyin
2024-08-29 2c41dc4162446120feae6a09ecf1d07118850f88
utils/api.js
@@ -1,10 +1,10 @@
import weappJwt from './weapp-jwt.js';
const utils = require('../utils/util.js')
let Constant = require('../utils/constant.js')
let app = getApp()
let ACCESS_TOKEN_KEY = 'AccessToken'
let API = (params) => {
  // console.log(params,2)
  let tokenInfo = wx.getStorageSync(ACCESS_TOKEN_KEY)
  // console.log(tokenInfo, 3)
  let currentDateTime = new Date().getTime()
  if (!tokenInfo) {
    wx.reLaunch({
@@ -12,14 +12,34 @@
    })
    return
  }
  //设置登录时间为七天 判断token是否失效
  let effectiveTime = 7 * 60 * 60 * 24 * 1000
  // 判断当前时间与token存入的时间相比较,如果大于七天则重新登录
  if (((currentDateTime - tokenInfo.ExpreTime) > effectiveTime) && tokenInfo.isNeedToken) {
  const token = tokenInfo.Token;
  const refresh_token = tokenInfo.RefreshToken
  if (!refresh_token) {
    wx.reLaunch({
      url: '/login/login/index',
    })
    return
  }
  //解析token
  const jwt_token = decryptJWT(token);
  // 获取token失效时间
  const exp_token = getJWTDate(jwt_token.exp).getTime();
  // token失效状态
  const isExpireByToken = currentDateTime >= exp_token
  //解析refreshtoken
  const jwt_refresh_token = decryptJWT(refresh_token);
  // 获取refreshToken失效时间
  const exp_refresh_token = getJWTDate(jwt_refresh_token.exp).getTime();
  // refreshToken失效状态
  const isExpireByRefreshToken = currentDateTime >= exp_refresh_token
  // 判断 token和refreshToken是否都失效,都失效则跳转登录
  if ((isExpireByToken && isExpireByRefreshToken) && tokenInfo.isNeedToken) {
    RefreshToken()
  }
  // 判断 token 失效但refreshToken没失效
  if ((!isExpireByToken && isExpireByRefreshToken) && tokenInfo.isNeedToken) {
    tokenInfo.Token = refresh_token
    wx.setStorageSync(ACCESS_TOKEN_KEY, tokenInfo)
  }
  let defaultParams = {
    url: '',
@@ -32,7 +52,6 @@
    fail: function () {},
    complete: function () {}
  }
  let requestParam = Object.assign(defaultParams, params)
  // 判断是否要添加token
  if (tokenInfo.isNeedToken == true) {
@@ -45,18 +64,34 @@
    header: requestParam.header,
    success: res => {
      let result = res.data
      if (result.data != undefined && result.data == 401) {
      if (result.Data != undefined && result.Data == 401) {
        RefreshToken()
        return
      }
      if (result.code && result.code != 0) {
        wx.showToast({
          title: result.message,
          icon: 'error',
          duration: 1500
        })
        RefreshToken()
        return
      if (result.Code && result.Code != 0) {
        if (result.Code == -3) {
          wx.showModal({
            title: result.Message,
            complete: (res) => {
              if (res.cancel) {
              }
              if (res.confirm) {
              }
            }
          })
        } else {
          wx.showToast({
            title: result.Message,
            icon: 'error',
            duration: 1500
          })
          RefreshToken()
          return
        }
      }
      requestParam.success(res)
    },
@@ -70,91 +105,76 @@
}
const RefreshToken = () => {
  wx.reLaunch({
    url: '/login/login/index',
  })
  return
  // 获取账户信息
  // let accountInfo = JSON.parse(wx.getStorageSync("AccountInfo"))
  // console.log(accountInfo,60)
  let accountInfo = wx.getStorageSync("AccountInfo")
  // 获取登录的用户信息
  // let userInfo = wx.getStorageSync("LoginUserInfo");
  // let sysInfo = app.globalData.sysInfo;
  // console.log('打印userInfo', userInfo)
  // let data = {
  //   SoftType: Constant.SoftType,
  //   SoftTag: Constant.SoftTag,
  //   LoginName: accountInfo.LoginName,
  //   LoginPwd: accountInfo.LoginPwd,
  //   CorpID: Constant.CorpID,
  //   WxCode: accountInfo.WxCode,
  //   UJsCode: accountInfo.UJsCode, //是否就是jsCode有待确认
  //   UAvatarUrl: userInfo == null ? "" : userInfo.avatarUrl,
  //   UCity: userInfo == null ? "" : userInfo.city,
  //   UProvince: userInfo == null ? "" : userInfo.province,
  //   UNickName: userInfo == null ? "" : userInfo.nickName,
  //   UGender: userInfo == null ? "" : userInfo.gender + "",
  //   SBrand: sysInfo.brand,
  //   SModel: sysInfo.model,
  //   SPlatform: sysInfo.platform,
  //   SVersion: sysInfo.version
  // }
  let data = {
    LoginName: accountInfo.phone,
    LoginPwd: accountInfo.password,
    Software: Constant.Software
  }
  // console.log(JSON.stringify(data),110)
  // wx.request({
  //   url: Constant.BASE_SERVER_URL + "User/UserLogin/FromCorpWechatApplet@V1.0",
  //   method: 'POST',
  //   data: data,
  //   header: {
  //     'content-type': 'application/json'
  //   },
  //   fail: function (err) { //请求失败
  //     wx.showModal({
  //       content: '网络信号不好',
  //       showCancel: false,
  //       confirmColor: "#39b5de"
  //     });
  //   },
  //   success: function (res) {
  //     console.log(res, "新的token信息")
  wx.request({
    url: Constant.BASE_AUTH_URL + "Auth/User/Login/LoginSoftwareStandardBySystemAccount@V1.0",
    method: 'POST',
    data: data,
    header: {
      'content-type': 'application/json'
    },
    fail: function (err) { //请求失败
      wx.showModal({
        content: '网络信号不好',
        showCancel: false,
        confirmColor: "#39b5de"
      });
    },
    success: function (res) {
      // console.log(res, "新的token信息")
      var result = res.data;
      // console.log(result);
      if (result.Code != 0) {
        wx.showToast({
          title: 'token获取失败,请重新登录',
          icon: "none",
          duration: 2000
        })
        return;
      }
      var return_data = result.Data;
      if (return_data.Status != 0) {
        wx.showToast({
          title: 'token获取失败,请重新登录',
          icon: "none",
          duration: 2000
        })
        return;
      }
      let Token = return_data.AccessToken
      let RefreshToken = return_data.RefreshToken
      let isNeedToken = false //是否需要Token 当Token失效的时候 判断是否跳转登录
      if (Token) {
        isNeedToken = true
      }
      let ExpreTime = new Date().getTime() //获取当前时间戳
      wx.setStorageSync('AccessToken', {
        Token: Token,
        RefreshToken: RefreshToken,
        ExpreTime: ExpreTime,
        isNeedToken: isNeedToken,
      })
    }
  })
}
  //     var result = res.data;
  //     // console.log(result);
  //     if (result.Code != 0) {
  //       wx.showToast({
  //         title: 'token获取失败,请重新登录',
  //         icon: "none",
  //         duration: 2000
  //       })
  //       return;
  //     }
//解密 JWT token 的信息
function decryptJWT(token) {
  //     var return_data = result.Data;
  //     if (return_data.Status != 0) {
  //       wx.showToast({
  //         title: 'token获取失败,请重新登录',
  //         icon: "none",
  //         duration: 2000
  //       })
  //       return;
  //     }
  //     let Token = return_data.Token
  //     let isNeedToken = false //是否需要Token 当Token失效的时候 判断是否跳转登录
  //     if (Token) {
  //       isNeedToken = true
  //     }
  //     let ExpreTime = new Date().getTime() //获取当前时间戳
  token = weappJwt(token)
  return token
}
  //     wx.setStorageSync('AccessToken', {
  //       Token: Token,
  //       ExpreTime: ExpreTime,
  //       isNeedToken: isNeedToken
  //     })
  //     wx.setStorageSync("AccountInfo", JSON.stringify(data))
  //     // 获取新的token后重新调用接口
  //     apiCb(params)
  //   }
  // });
//将 JWT 时间戳转换成 Date
function getJWTDate(timestamp) {
  return new Date(timestamp * 1000);
}
export default API