|
|
|
@ -0,0 +1,78 @@ |
|
|
|
// src/utils/myAxios.js
|
|
|
|
import axios from 'axios' |
|
|
|
import { ElMessage } from 'element-plus' |
|
|
|
import {createRouter as router} from "vue-router"; // 假设使用 Element Plus 的提示组件(可替换为其他 UI 库)
|
|
|
|
|
|
|
|
// 创建 axios 实例
|
|
|
|
const myAxios = axios.create({ |
|
|
|
baseURL: import.meta.env.VITE_API_BASE_URL, // 从环境变量获取基础地址(推荐)
|
|
|
|
timeout: 10000, // 超时时间(10秒)
|
|
|
|
headers: { |
|
|
|
'Content-Type': 'application/json;charset=utf-8' // 默认请求头
|
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
// 请求拦截器:添加 token、处理请求前逻辑
|
|
|
|
myAxios.interceptors.request.use( |
|
|
|
(config) => { |
|
|
|
// 示例:从本地存储获取 token 并添加到请求头
|
|
|
|
const token = localStorage.getItem('token') |
|
|
|
if (token) { |
|
|
|
config.headers.Authorization = `Bearer ${token}` |
|
|
|
}else { |
|
|
|
router.push('/login') |
|
|
|
} |
|
|
|
return config |
|
|
|
}, |
|
|
|
(error) => { |
|
|
|
// 请求错误时的处理(如参数错误)
|
|
|
|
ElMessage.error('请求参数错误') |
|
|
|
return Promise.reject(error) |
|
|
|
} |
|
|
|
) |
|
|
|
|
|
|
|
// 响应拦截器:处理响应数据、统一错误提示
|
|
|
|
myAxios.interceptors.response.use( |
|
|
|
(response) => { |
|
|
|
const res = response.data |
|
|
|
|
|
|
|
// 假设后端接口规范:成功时 code=200,其他为错误
|
|
|
|
if (res.code !== 200) { |
|
|
|
// 错误提示(根据后端消息提示,或自定义)
|
|
|
|
ElMessage.error(res.message || '操作失败') |
|
|
|
return Promise.reject(new Error(res.message || 'Error')) |
|
|
|
} else { |
|
|
|
// 只返回数据部分(过滤响应体中的其他字段)
|
|
|
|
return res.data |
|
|
|
} |
|
|
|
}, |
|
|
|
(error) => { |
|
|
|
// 网络错误或服务器错误处理
|
|
|
|
let message = '网络异常,请稍后重试' |
|
|
|
if (error.response) { |
|
|
|
// 根据 HTTP 状态码自定义提示
|
|
|
|
switch (error.response.status) { |
|
|
|
case 401: |
|
|
|
message = '未授权,请重新登录' |
|
|
|
// 示例:跳转到登录页(需导入 router)
|
|
|
|
// router.push('/login')
|
|
|
|
break |
|
|
|
case 403: |
|
|
|
message = '没有权限访问' |
|
|
|
break |
|
|
|
case 404: |
|
|
|
message = '接口不存在' |
|
|
|
break |
|
|
|
case 500: |
|
|
|
message = '服务器内部错误' |
|
|
|
break |
|
|
|
default: |
|
|
|
message = `请求错误(${error.response.status})` |
|
|
|
} |
|
|
|
} |
|
|
|
ElMessage.error(message) |
|
|
|
return Promise.reject(error) |
|
|
|
} |
|
|
|
) |
|
|
|
|
|
|
|
export default myAxios |