import axios from 'axios' // import store from '@/store' // import { getToken } from '@/utils/auth' import { loginUrl } from '@/apiConfig/requestIP.js' import { Encrypt } from '@/utils/crypto-js.js' import { message } from '@/utils/mesDebounce' import router from '@/router/index.js' import store from '@/store/index.js' // create an axios instance const service = axios.create({ baseURL: '/apis', // url = base url + request url timeout: 5000, // request timeout withCredentials: true }) service.interceptors.request.use( config => { config.headers['secret'] = Encrypt() // config.retry = 2// 如果请求超时,重试次数 // config.retryInterval = 1000 // 重试间隔 return config }, error => { return Promise.reject(error) } ) service.interceptors.response.use( response => { const res = response.data if (typeof res.code !== 'undefined' && res.code !== 200 && res.code !== 0) { message({ message: res.msg || 'Error', type: 'error', duration: 5 * 1000 }) } else if (typeof res.retCode !== 'undefined' && res.retCode !== 0) { message({ message: res.retMsg || 'Error', type: 'error', duration: 5 * 1000 }) } return res }, error => { if (error && error.response) { switch (error.response.status) { case 400: error.message = '错误请求' break case 401: error.message = '未授权,请重新登录' break case 404: error.message = '请求错误,未找到该资源' break case 405: error.message = '请求方法未允许' break default: error.message = '服务出现异常,请稍后再试或联系管理员' } if (error.response.status !== 403) { message({ message: error.message, type: 'warning', duration: 5 * 1000 }) } if (error.response.status === 401) { location.href = loginUrl } else if (error.response.status === 403) { store.dispatch('global/setBizId', -1) store.dispatch('global/setBizName', '') router.push({ name: 'notAccess' }) } } return Promise.reject(error) } ) // function axiosRetryInterceptor(res) { // const config = res.config // // 无网络状态或者请求超时 // if (!config || !config.retry) return Promise.reject(res) // // 记录重新请求的次数 // config.retryCount = config.retryCount || 0 // // 检查重新请求的次数是否超过我们设定的请求次数 // if (config.retryCount >= config.retry) { // return Promise.reject(res) // } // // 重新请求的次数自增 // config.retryCount += 1 // // 创建新的Promise来处理重新请求的间隙 // const back = new Promise(function(resolve) { // console.log('接口' + config.url + '请求超时,重新请求') // setTimeout(function() { // resolve() // }, config.retryInterval || 500) // }) // // 返回axios的实体,重试请求 // return back.then(function() { // return service(config) // }) // } export default service