request.js 5.1 KB
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken, setTime, removeTime, removeToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import i18n from '@/assets/languages'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 1800000
})
// request拦截器
service.interceptors.request.use(config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  // if (getToken() && !isToken) {
  config.headers['Authorization'] = getToken() == null ? '1' : 'Bearer ' + getToken()// 让每个请求携带自定义token 请根据实际情况自行修改
  // }
  config.headers['Lang'] = localStorage.getItem('iClearExpLang') ? localStorage.getItem('iClearExpLang') : '1'
  config.headers['Ver'] = process.env.VUE_APP_APIVERSION
  // get请求映射params参数
  if (config.method === 'get' && config.params) {
    let url = config.url + '?';
    for (const propName of Object.keys(config.params)) {
      const value = config.params[propName];
      var part = encodeURIComponent(propName) + "=";
      if (value !== null && typeof (value) !== "undefined") {
        if (typeof value === 'object') {
          for (const key of Object.keys(value)) {
            let params = propName + '[' + key + ']';
            var subPart = encodeURIComponent(params) + "=";
            url += subPart + encodeURIComponent(value[key]) + "&";
          }
        } else {
          url += part + encodeURIComponent(value) + "&";
        }
      }
    }
    url = url.slice(0, -1);
    config.params = {};
    config.url = url;
  }
  // let token = getToken() != null ? getToken().split('.')[0] : null
  // let userType = store.getters.userData.organization ? store.getters.userData.organization.code : null
  // if ((token == '2' && userType != null && userType != 'customer') || (token == '1' && userType == 'customer')) {
  //   config.url = ''
  //   MessageBox.alert('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
  //     confirmButtonText: '重新登录',
  //     cancelButtonText: '取消',
  //     type: 'warning'
  //   }
  //   ).then(() => {
  //     store.dispatch('FedLogOut')
  //   })
  //   return config
  // } else {
  return config
  // }
}, error => {
  console.log(error)
  Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
  if (res.config.url != '/manager-server/systemAddressInfoController/findSystemAddressInfoAll') {
    setTime(new Date().getTime())
  }
  // 未设置状态码则默认成功状态
  const code = Number(res.data.code) || 200;
  // 获取错误信息
  const msg = errorCode[code] || res.data.message || errorCode['default']
  if (code === 50000) {
    removeToken()
    MessageBox.alert(i18n.t('system.loginOut'), i18n.t('system.systemTip'), {
      confirmButtonText: i18n.t('system.relogin'),
      cancelButtonText: i18n.t('system.close'),
      type: 'warning'
    }
    ).finally(() => {
      store.dispatch('FedLogOut')
    })
  } else if (code === 10005) {
    removeToken()
    MessageBox.alert('<span style="font-weight:700">系统版本已更新!</span><br/>当前版本非最新版,请退出系统后刷新您当前所使用的浏览器后,重新登录系统!</br> </br>常用浏览器的快速刷新页面操作方法有:</br>1、谷歌浏览器请按“F5键”或“Ctrl键 + R键”快速刷新页面</br>2、360浏览器跟EDGE浏览器请按“Ctrl键 + R键”快速刷新页面</br>3、IE浏览器请按“F5键”或“Ctrl键 + R键”快速刷新页面</br> </br>其它浏览器的刷新方式请根据浏览器的菜单进行操作!', i18n.t('system.systemTip'), {
      confirmButtonText: i18n.t('system.relogin'),
      cancelButtonText: i18n.t('system.close'),
      type: 'warning',
      customClass: 'systemVerError',
      dangerouslyUseHTMLString: true
    }
    ).finally(() => {
      store.dispatch('FedLogOut')
    })
  } else if (code === 500) {
    MessageBox.alert(msg, i18n.t('system.tipTitle2'), {
      dangerouslyUseHTMLString: true
    });
    return Promise.reject(new Error(msg))
  } else if (code === 530) {
    store.dispatch('FedLogOut')
  } else if (code !== 200) {
    // MessageBox.alert(msg, '注意', {
    //   dangerouslyUseHTMLString: true
    // });
    return res.data
  } else {
    return res.data
  }
},
  error => {
    removeTime()
    console.log('err' + error)
    let { message } = error;
    if (message == "Network Error") {
      message = i18n.t('system.systemError1');
    }
    else if (message.includes("timeout")) {
      message = i18n.t('system.systemError2');
    }
    else if (message.includes("Request failed with status code")) {
      message = i18n.t('system.systemError3', { a: message.substr(message.length - 3) });
    }
    Message({
      message: message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service