初始化代码
This commit is contained in:
134
src/utils/request.js
Normal file
134
src/utils/request.js
Normal file
@ -0,0 +1,134 @@
|
||||
/**
|
||||
* axios 封装
|
||||
*/
|
||||
import axios from 'axios'
|
||||
import {ElMessage, ElMessageBox} from 'element-plus'
|
||||
import {tansParams} from '@/utils/index'
|
||||
import {getToken, removeToken, removeUserTenantInfo} from '@/utils/auth'
|
||||
|
||||
// 配置基础URL
|
||||
const baseURL = window.config?.baseUrl || 'http://work.rangutech.cn:9131'
|
||||
|
||||
// 设置默认请求头
|
||||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
|
||||
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
baseURL,
|
||||
timeout: 10000, // 添加合理的超时时间
|
||||
})
|
||||
|
||||
// 请求拦截器
|
||||
service.interceptors.request.use(
|
||||
(config) => {
|
||||
// 是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
|
||||
// 添加token到请求头
|
||||
if (getToken() && !isToken) {
|
||||
config.headers.Authorization = `Bearer ${getToken()}`
|
||||
}
|
||||
|
||||
// GET请求参数处理
|
||||
if (config.method?.toLowerCase() === 'get' && config.params) {
|
||||
const urlParams = tansParams(config.params)
|
||||
config.url = `${config.url}?${urlParams}`
|
||||
config.params = {}
|
||||
}
|
||||
|
||||
return config
|
||||
},
|
||||
(error) => {
|
||||
console.error('Request error:', error)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(
|
||||
(response) => {
|
||||
const {data, config} = response
|
||||
|
||||
// 处理二进制数据响应
|
||||
if (
|
||||
config.responseType === 'blob' ||
|
||||
config.responseType === 'arraybuffer'
|
||||
) {
|
||||
return data
|
||||
}
|
||||
|
||||
// 正常响应处理
|
||||
if (response.status === 200) {
|
||||
return data
|
||||
}
|
||||
|
||||
// 异常响应处理
|
||||
return Promise.reject(response)
|
||||
},
|
||||
(error) => {
|
||||
const {config, response, message} = error
|
||||
|
||||
console.error('Response error:', {config, response, message})
|
||||
|
||||
// 处理认证错误
|
||||
if (response && [401, 471, 472].includes(response.status)) {
|
||||
handleAuthError(config, response)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
|
||||
// 处理网络错误
|
||||
handleNetworkError(message)
|
||||
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
/**
|
||||
* 处理认证错误
|
||||
*/
|
||||
function handleAuthError(config, response) {
|
||||
const excludeUrls = ['/Token/Logout', '/Token/Access']
|
||||
|
||||
if (!excludeUrls.includes(config.url)) {
|
||||
ElMessageBox.confirm(
|
||||
'登录状态已过期,您可以继续留在该页面,或者重新登录',
|
||||
'系统提示',
|
||||
{
|
||||
confirmButtonText: '重新登录',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
removeToken()
|
||||
removeUserTenantInfo()
|
||||
// 这里需要导入store
|
||||
// store.dispatch('LogOut').then(() => {});
|
||||
window.location.reload() // 简单重载页面
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户取消操作
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理网络错误
|
||||
*/
|
||||
function handleNetworkError(message) {
|
||||
let errorMsg = message
|
||||
|
||||
if (message === 'Network Error') {
|
||||
errorMsg = '网络连接异常,请检查网络设置'
|
||||
} else if (message.includes('timeout')) {
|
||||
errorMsg = '请求超时,请稍后重试'
|
||||
}
|
||||
|
||||
ElMessage({
|
||||
message: errorMsg,
|
||||
type: 'error',
|
||||
duration: 5 * 1000,
|
||||
})
|
||||
}
|
||||
|
||||
export default service
|
||||
Reference in New Issue
Block a user