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

162 lines
4.6 KiB
JavaScript
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.

/*
* @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