hi-ucs/front/src/utils/request.js

185 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios'
import {
// baseURL,
contentType,
debounce,
requestTimeout,
// successCode,
tokenName,
} from '@/config'
import store from '@/store'
import qs from 'qs'
import router from '@/router'
// import { isArray } from '@/utils/validate'
import { message } from 'ant-design-vue'
import { getAccessToken, setAccessToken } from '@/utils/accessToken'
let loadingInstance
/**
* @author chuzhixin 1204505056@qq.com
* @description 处理code异常
* @param {*} code
* @param {*} msg
*/
const handleCode = (code, msg, res) => {
// debugger
switch (code) {
case 401:
store.dispatch('user/resetAll').catch(() => {})
break
case 403:
router.push({ path: '/401' }).catch(() => {})
break
case 500:
message.error(msg || '接口异常')
break
case 302:
// window.location.href = redirect
break
}
}
/**
* @author chuzhixin 1204505056@qq.com
* @description axios初始化
*/
const instance = axios.create({
baseURL: window.SITE_CONFIG.apiURL,
timeout: requestTimeout,
headers: {
'Content-Type': contentType,
},
})
/**
* @author chuzhixin 1204505056@qq.com
* @description axios请求拦截器
*/
instance.interceptors.request.use(
(config) => {
// debugger
const token = getAccessToken()
if (token) config.headers[tokenName] = token
if (
config.data &&
config.headers['Content-Type'] ===
'application/x-www-form-urlencoded;charset=UTF-8'
)
config.data = qs.stringify(config.data)
if (debounce.some((item) => config.url.includes(item))) {
//这里写加载动画
}
if (!config.headers.REQUESTURI) {
config.headers.REQUESTURI = window.location.href
}
return config
},
(error) => {
return Promise.reject(error)
}
)
/**
* @author chuzhixin 1204505056@qq.com
* @description axios响应拦截器
*/
instance.interceptors.response.use(
(response) => {
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
response['Access-Control-Expose-Headers'] = 'redirect'
const { code, message } = response.data
if (response.headers.token) {
setAccessToken(response.headers.token)
}
if (response.headers.redirect) {
window.location.replace(response.headers.redirect)
return
}
if (response.headers.redirect === '/#/login') {
var keys = document.cookie.match(/[^ =;]+(?=\=)/g)
if (keys) {
for (var i = keys.length; i--; ) {
document.cookie =
keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString() //清除当前域名下的,例如m.kevis.com
document.cookie =
keys[i] +
'=0;path=/;domain=' +
document.domain +
';expires=' +
new Date(0).toUTCString() //清除当前域名下的,例如 .m.kevis.com
document.cookie =
keys[i] +
'=0;path=/;domain=kevis.com;expires=' +
new Date(0).toUTCString() //清除一级域名下的或指定的,例如 .kevis.com
}
}
console.log('已清除')
setTimeout(() => {
location.reload()
}, 1000)
}
handleCode(code, message, response.headers)
if (loadingInstance) loadingInstance.close()
// const { data, config } = response
// const { code, msg } = data
// 操作正常Code数组
// const codeVerificationArray = isArray(successCode)
// ? [...successCode]
// : [...[successCode]]
// 是否操作正常
// if (codeVerificationArray.includes(code)) {
return response
// } else {
// handleCode(code, msg)
// return Promise.reject(
// 'vue-admin-beautiful请求异常拦截:' +
// JSON.stringify({ url: config.url, code, msg }) || 'Error'
// )
// }
},
(error) => {
// debugger
console.log('接口error', error)
if (loadingInstance) loadingInstance.close()
const { response, message } = error
if (error.response) {
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
if (response.headers.token) {
setAccessToken(response.headers.token)
}
if (response.headers.redirect) {
window.location.replace(response.headers.redirect)
return Promise.resolve()
}
const { status, data } = response
handleCode(status, data.msg || message, response.headers.redirect)
return Promise.reject(error)
} else {
let { message } = error
if (message === 'Network Error') {
message = '后端接口连接异常'
}
if (message.includes('timeout')) {
message = '后端接口请求超时'
}
if (message.includes('Request failed with status code')) {
const code = message.substr(message.length - 3)
message = '后端接口' + code + '异常'
}
message.error(message || `后端接口未知异常`)
return Promise.reject(error)
}
}
)
export default instance