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

162 lines
4.6 KiB
JavaScript
Raw Normal View History

2022-06-14 09:32:49 +08:00
/*
* @Author: hisense.wuhongjian
* @Date: 2022-05-11 20:03:41
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-06-06 13:08:06
* @Description: 告诉大家这是什么
*/
import axios from 'axios'
import Cookies from 'js-cookie'
import router from '@/router'
import qs from 'qs'
import { clearLoginInfo } from '@/utils'
import isPlainObject from 'lodash/isPlainObject'
const http = axios.create({
baseURL: window.SITE_CONFIG.apiURL,
// baseURL: 'http://15.2.21.238:8888/renren-admin/',
timeout: 1000 * 180,
withCredentials: true
})
const handleCode = (code, msg, redirect) => {
switch (code) {
case 401:
// message.error(msg || '登录失效')
// store.dispatch('user/resetAll').catch(() => {})
// // location.reload()
if (redirect) {
window.location.href = redirect
}
break
case 403:
router.push({ path: '/401' }).catch(() => {})
break
case 500:
// message.error(msg || '接口异常')
break
case 302:
window.location.href = redirect
break
}
}
/**
* 请求拦截
*/
http.interceptors.request.use(config => {
config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'
config.headers.token = Cookies.get('ucsToken') || ''
// 默认参数
var defaults = {}
// 防止缓存GET请求默认带_t参数
if (config.method === 'get') {
config.params = {
...config.params,
...{ _t: new Date().getTime() }
}
}
if (isPlainObject(config.params)) {
config.params = {
...defaults,
...config.params
}
}
if (isPlainObject(config.data)) {
config.data = {
...defaults,
...config.data
}
if (/^application\/x-www-form-urlencoded/.test(config.headers['content-type'])) {
config.data = qs.stringify(config.data)
}
}
// get序列化
config.paramsSerializer = function (params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
}
config.headers.REQUESTURI = window.location.href
return config
}, error => {
return Promise.reject(error)
})
/**
* 响应拦截
*/
http.interceptors.response.use(response => {
if (response.data.code === 401 || response.data.code === 10001) {
clearLoginInfo()
router.replace({ name: 'login' })
return Promise.reject(response.data.msg)
}
return response
}, error => {
console.error(error)
return Promise.reject(error)
})
http.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) {
Cookies.set('ucsToken', response.headers.token)
}
if (response.headers.redirect) {
window.location.href = response.headers.redirect
}
handleCode(code, message, response.headers.redirect)
// 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) => {
console.log('接口error', error)
const { response, message } = error
if (error.response && error.response.data) {
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
if (response.headers.redirect) {
window.location.href = response.headers.redirect
return Promise.reject(error)
}
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 http