/** * 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: 1000, }) } export default service