request.js 3.44 KB
import axios from 'axios'
import {Message, MessageBox} from 'element-ui'
import {getToken} from '@/utils/auth'


const getParams = () => {
  let map = {};
  let query = window.location.search.substring(1);
  if (query == '') {
    query = document.location.href
    let args = query.split('?');
    let arr = [];
    if (args && args.length > 1) {
      arr = args[1].split('&')
    }
    for (let i = 0; i < arr.length; i++) {
      let pair = arr[i].split("=");
      map[pair[0]] = pair[1];
    }
    return map;
  }
  let vars = query.split("&");
  for (let i = 0; i < vars.length; i++) {
    let pair = vars[i].split("=");
    map[pair[0]] = pair[1];
  }
  return map;
}
const getVal = (key) => {
  if(key){
    let val = getParams()[key];
    if(!val){
      val = localStorage.getItem(key);
    }

    if(val){
      localStorage.setItem(key,val);
    }
    return val;
  }
  return '';
}

// 创建axios实例
const service = axios.create({
  baseURL: process.env.BASE_API,// api 的 base_url
  timeout: 120000 // 请求超时时间
})

// request拦截器
service.interceptors.request.use(
  config => {
    config.headers['Authorization'] = (getToken() == null || getToken() == undefined) ? '' : getToken()

    // 平台token
    let mjToken = getVal('AuthVal');
    if (mjToken) {
      let hash = btoa(window.location.hash);
      let url = config.url;
      let userId = getVal('userId');
      let userName = getVal('nickName');

      switch (config.method) {
        case 'post':
          config.headers.AuthorizationMj = "BearerMj " + mjToken + ""
          config.headers.MjUserId = userId;
          config.headers.MjUserName = encodeURIComponent(userName);
          config.headers.MjHash = hash;
          break;
        default:
          var access_token  = `accessToken=${mjToken}&MjUserId=${userId}&MjUserName=${userName}&MjHash=${hash}`;
          if (url.indexOf('?') === -1) {
            url += '?' + access_token;
          } else {
            url += '&' + access_token;
          }
          config.url = url;
      }
    }


    return config
  },
  error => {
    // Do something with request error
    Promise.reject(error)
  }
)

// response 拦截器
service.interceptors.response.use(
  response => {
    /**
     * code为非20000是抛错 可结合自己业务进行修改
     */
    const res = response.data
    // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
    if (res.code == '50008' || res.code == '50012' || res.code == '50014') {
      MessageBox.confirm(
        '你已被登出,可以取消继续留在该页面,或者重新登录',
        '重新登录',
        {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }
      ).then(() => {
        sessionStorage.clear()
        localStorage.clear()
        window.location.href = "/";
      })
    } else if (res.code !== '200') {
      Message({
        message: res.message,
        type: 'error',
        duration: 5 * 1000
      })
      return response.data
    } else {
      return response.data
    }
  },
  error => {
    //start lsq 超时用console输出信息 2022-03-14
    if (error.code == 'ECONNABORTED' && error.message.indexOf('timeout') != -1) {
      console.log(error.message)
    } else {
      Message({
        message: error.message,
        type: 'error',
        duration: 5 * 1000
      })
    }
    //end lsq 2022-03-14
    return Promise.reject(error)
  }
)

export default service