request.js 2.4 KB
const axios = require('axios')
import store from '@/store/modules/login'
import { Notify } from 'vant'

const instance = axios.create({
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
  },
})

instance.interceptors.request.use((config) => {
  config.headers = config.headers || {}
  if (config.headers && config.headers.constructor == String) {
    try {
      config.headers = JSON.parse(config.headers)
    } catch (e) {
      Notify({
        type: 'danger',
        message: `请求头部不是有效的JSON格式:${config.headers}`,
      })
      throw e
    }
  }
  const currentUser = store.state.currentUser

  currentUser &&
    currentUser.token &&
    !config.headers.Authorization &&
    (config.headers.Authorization = `Bearer ${currentUser.token}`)
  return config
})

instance.interceptors.response.use(
  (response) => {
    const { data, config, headers } = response

    if (config) {
      const { responseType } = config
      // 请求的返回值类型为arraybuffer时返回headers
      if (responseType && responseType == 'arraybuffer') {
        return { data, headers }
      }
    }

    if (headers) {
      // 附件下载,需要返回 headers
      const content = headers['content-disposition']
      if (content && content.startsWith('attachment;')) {
        return { data, headers }
      }
    }

    return data
  },
  (error) => {
    // 处理响应失败
    const errorMessage =
      error &&
      error.response &&
      error.response.data &&
      error.response.data.message
        ? error.response.data.message
        : error.message
    if (error && error.response && error.response.status === 500) {
      if (error.response.data && error.response.data.message) {
        Notify({ type: 'danger', message: error.response.data.message })
      } else if (
        error.response.config.url.indexOf(
          'dataTemplate/v1/exportByBtnSetting'
        ) != -1
      ) {
        return Promise.reject(error)
      } else {
        Notify({ type: 'danger', message: error.message })
      }
    } else if (
      error &&
      error.isAxiosError &&
      error.response &&
      error.response.status != 403
    ) {
      Notify({ type: 'danger', message: errorMessage })
    } else if (errorMessage && typeof errorMessage != 'undefined') {
      Notify({ type: 'danger', message: errorMessage })
    }
    return Promise.reject(error)
  }
)

export default instance