request.js 1.95 KB
import axios from 'axios'
import { Message } from 'element-ui'
import Cookie from '@/utils/Cookie'
import md5 from 'blueimp-md5'
import { param2 } from '@/utils'

const Service = axios.create({
  baseURL: window._vionConfig.apiUrl,
  timeout: 0,
  withCredentials: true
})

// create signature
function generateSignature({ method, params, data }) {
  const suffix = '4c413628731691abc99eb2fca5f69aab'
  const signalStr =
    method.toUpperCase() +
    (params ? param2(params) : '') +
    (data ? JSON.stringify(data) : '') +
    suffix
  return md5(signalStr)
}

Service.interceptors.request.use(
  config => {
    let language = localStorage.getItem('lang'),
      aToken = Cookie.get('atoken')
    config.headers['signature'] = generateSignature(config)
    if (language) {
      let languageObj = {
        mall_CN: 'zh-CN,zh;q=0.9',
        zh_CN: 'zh-CN,zh;q=0.9',
        en_US: 'en-US,en;q=0.5',
        zh_TW: 'zh-TW,zh;q=0.3'
      }
      languageObj[language] &&
        (config.headers['Accept-Language'] = languageObj[language])
    }
    aToken && (config.headers.Authorization = aToken)
  },
  error => {
    Message({
      type: 'error',
      message: error
    })
    return Promise.reject(error)
  }
)

Service.interceptors.response.use(
  response => {
    if (response.data && !response.data.success) {
      if (response.data.ecode && response.data.ecode !== 200) {
        // 跳转首页
        Message({
          showClose: true,
          message: response.data.enote,
          type: 'error'
        })
        return
      } else {
        // 非标准返回体
        if (response.status === 200) {
          return response
        }
      }
      if (response.data.code === 500) {
        Message({
          showClose: true,
          message: response.data.msg,
          type: 'error'
        })
      }
      return Promise.reject(response.data.msg)
    }
    return response
  },
  error => {
    return Promise.reject(error)
  }
)

export default Service