2025-06-17 16:01:11 +08:00
|
|
|
|
/*jshint esversion: 9 */
|
|
|
|
|
|
/**
|
|
|
|
|
|
* http请求配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
import axios from 'axios'
|
|
|
|
|
|
import { userDataStore } from '@/store/user'
|
2025-07-09 15:58:20 +08:00
|
|
|
|
import { encrypt, decrypt } from '@/utils/encrypt'
|
2025-06-27 11:23:33 +08:00
|
|
|
|
// import { useMessage } from 'naive-ui'
|
2025-06-17 16:01:11 +08:00
|
|
|
|
import router from '@/router'
|
2025-06-27 11:23:33 +08:00
|
|
|
|
import { createDiscreteApi } from 'naive-ui'
|
|
|
|
|
|
const { message } = createDiscreteApi(['message'])
|
2025-06-17 16:01:11 +08:00
|
|
|
|
|
|
|
|
|
|
let baseApiURL = import.meta.env.VITE_APP_baseApiURL //api原始链接
|
2025-06-27 11:23:33 +08:00
|
|
|
|
const timeout = 10000 //api请求超时时间
|
2025-06-17 16:01:11 +08:00
|
|
|
|
|
|
|
|
|
|
export const service = axios.create({
|
|
|
|
|
|
//可创建多个 axios实例
|
2025-06-24 18:12:02 +08:00
|
|
|
|
baseURL: '', //设置公共的请求前缀
|
2025-06-17 16:01:11 +08:00
|
|
|
|
timeout: timeout, //超时终止请求
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
service.interceptors.request.use(
|
|
|
|
|
|
(config) => {
|
|
|
|
|
|
const userData = userDataStore()
|
|
|
|
|
|
config.headers = config.headers || {}
|
2025-06-25 18:22:07 +08:00
|
|
|
|
// config.headers['token'] = userData.userInfo.token
|
|
|
|
|
|
|
|
|
|
|
|
if (userData?.userInfo?.token) {
|
|
|
|
|
|
config.headers['Authorization'] = 'Bearer ' + userData?.userInfo?.token
|
2025-07-09 15:58:20 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
config.headers['Token'] = 'test'
|
2025-06-25 18:22:07 +08:00
|
|
|
|
}
|
2025-06-17 16:01:11 +08:00
|
|
|
|
return config
|
|
|
|
|
|
},
|
|
|
|
|
|
() => {
|
|
|
|
|
|
return Promise.reject({
|
|
|
|
|
|
msg: '请求发生错误,请稍后再试',
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
let modelShow = false
|
|
|
|
|
|
service.interceptors.response.use(
|
|
|
|
|
|
(response) => {
|
2025-07-09 15:58:20 +08:00
|
|
|
|
response.data = decrypt(response.data)
|
|
|
|
|
|
console.log(
|
|
|
|
|
|
'%c🔍-- 解密后出参 --',
|
|
|
|
|
|
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 60px; border-radius: 5px; font-weight: bold;',
|
|
|
|
|
|
'',
|
|
|
|
|
|
)
|
|
|
|
|
|
console.log(
|
|
|
|
|
|
'%c原始数据:', //增加样式
|
|
|
|
|
|
'color: #FF6B6B; padding: 5px 0; border-radius: 5px; font-weight: bold;',
|
|
|
|
|
|
'',
|
|
|
|
|
|
'\n',
|
|
|
|
|
|
response.data,
|
|
|
|
|
|
)
|
|
|
|
|
|
console.log(
|
|
|
|
|
|
'%cJSON格式:',
|
|
|
|
|
|
'color: #4ECDC4; padding: 5px 0; border-radius: 5px; font-weight: bold;',
|
|
|
|
|
|
'\n',
|
|
|
|
|
|
JSON.stringify(response.data, null, 2),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2025-06-17 16:01:11 +08:00
|
|
|
|
const data = response.data
|
2025-07-09 15:58:20 +08:00
|
|
|
|
|
2025-06-17 16:01:11 +08:00
|
|
|
|
if (!data) {
|
|
|
|
|
|
return Promise.reject({
|
|
|
|
|
|
msg: '请求发生错误',
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2025-06-24 18:12:02 +08:00
|
|
|
|
const status = data?.status || response.status
|
2025-06-17 16:01:11 +08:00
|
|
|
|
switch (status) {
|
|
|
|
|
|
case 200:
|
2025-06-24 18:12:02 +08:00
|
|
|
|
// return data
|
|
|
|
|
|
return Promise.resolve(response)
|
2025-06-17 16:01:11 +08:00
|
|
|
|
case 401: //表示需要重新登录
|
|
|
|
|
|
if (!modelShow) {
|
|
|
|
|
|
modelShow = true
|
|
|
|
|
|
if (window.confirm('登录已经失效,是否重新登录?')) {
|
|
|
|
|
|
router.push({
|
|
|
|
|
|
path: '/login',
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
modelShow = false
|
|
|
|
|
|
}
|
|
|
|
|
|
return Promise.reject(data)
|
|
|
|
|
|
case 202: //表示失败,参数或其他原因
|
|
|
|
|
|
return Promise.reject(data)
|
|
|
|
|
|
case 500: //表示报错。未知原因
|
|
|
|
|
|
return Promise.reject(data)
|
|
|
|
|
|
default:
|
|
|
|
|
|
return Promise.reject(data)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-06-27 11:23:33 +08:00
|
|
|
|
(error) => {
|
2025-06-17 16:01:11 +08:00
|
|
|
|
//数据请求发生错误
|
2025-06-27 11:23:33 +08:00
|
|
|
|
message.error('请求发生错误,请稍后再试')
|
2025-06-17 16:01:11 +08:00
|
|
|
|
return Promise.reject({
|
|
|
|
|
|
msg: '请求发生错误,请稍后再试',
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
)
|