import axios from 'axios' import { ElMessage } from 'element-plus' axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: import.meta.env.VITE_APP_BASE_API, // 超时 timeout: 10000 }) // request拦截器 service.interceptors.request.use(config => { // 过滤掉参数值为空的参数项 if (config.params) { config.params = filterEmptyParams(config.params); } if (config.data && typeof config.data === 'object') { // 根据Content-Type处理不同格式的数据 if (config.headers['Content-Type'] === 'application/x-www-form-urlencoded') { // 表单编码数据需要特殊处理 config.data = filterFormData(config.data); } else { config.data = filterEmptyParams(config.data); } } return config }, error => { console.log(error) Promise.reject(error) }) /** * 过滤空值参数 * @param {Object} params 参数对象 * @returns {Object} 过滤后的参数对象 */ function filterEmptyParams(params) { const filtered = {}; for (const key in params) { const value = params[key]; // 保留非空值:非null、非undefined、非空字符串、非空数组 if (value !== null && value !== undefined && value !== '') { if (Array.isArray(value) && value.length === 0) { continue; // 跳过空数组 } filtered[key] = value; } } return filtered; } /** * 过滤表单编码数据 * @param {Object|string} data 表单数据 * @returns {string} 过滤后的表单字符串 */ function filterFormData(data) { if (typeof data === 'string') { // 如果是字符串,尝试解析为URLSearchParams const params = new URLSearchParams(data); for (const [key, value] of params.entries()) { if (value === '' || value === 'null' || value === 'undefined') { params.delete(key); } } return params.toString(); } else if (typeof data === 'object') { // 如果是对象,先过滤空值再转换为URLSearchParams const filtered = filterEmptyParams(data); return new URLSearchParams(filtered).toString(); } return data; } // 响应拦截器 service.interceptors.response.use(res => { const code = res.data.errorCode || 0 const msg = res.data.errorMsg || '' if (code === 20000) { ElMessage({ message: msg, type: 'error' }) } else { return Promise.resolve(res.data) } }, error => { console.log('err' + error) let { message } = error ElMessage({ message: message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) export default service