deepchart后台管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.9 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
4 months ago
5 months ago
5 months ago
  1. // src/utils/myAxios.js
  2. import axios from 'axios'
  3. import { ElMessage } from 'element-plus'
  4. import router from '../router/index';
  5. // 创建 axios 实例
  6. const myAxios = axios.create({
  7. baseURL: import.meta.env.VITE_API_BASE_URL, // 从环境变量获取基础地址(推荐)
  8. timeout: 10000, // 超时时间(10秒)
  9. headers: {
  10. 'Content-Type': 'application/json;charset=utf-8' // 默认请求头
  11. }
  12. })
  13. // 请求拦截器:添加 token、处理请求前逻辑
  14. myAxios.interceptors.request.use(
  15. (config) => {
  16. const isLoginApi = config.url === '/login';
  17. // 示例:从本地存储获取 token 并添加到请求头
  18. if (!isLoginApi) {
  19. const token = localStorage.getItem('token');
  20. if (token) {
  21. config.headers.Authorization = `Bearer ${token}`;
  22. } else {
  23. router.push('/login');
  24. }
  25. }
  26. return config
  27. },
  28. (error) => {
  29. // 请求错误时的处理(如参数错误)
  30. ElMessage.error('请求参数错误')
  31. return Promise.reject(error)
  32. }
  33. )
  34. // 响应拦截器:处理响应数据、统一错误提示
  35. myAxios.interceptors.response.use(
  36. (response) => {
  37. // 如果响应类型是 blob,直接返回整个 response.data
  38. if (response.config.responseType === 'blob' || response.headers['content-type']?.includes('application/pdf')) {
  39. return response.data;
  40. }
  41. const res = response.data
  42. // 假设后端接口规范:成功时 code=200,其他为错误
  43. if (res.code !== 200) {
  44. if( res.code == 401){
  45. localStorage.removeItem('token');
  46. router.push('/login')
  47. }
  48. // 错误提示(根据后端消息提示,或自定义)
  49. ElMessage.error(res.msg || '操作失败')
  50. return Promise.reject(new Error(res.msg || 'Error'))
  51. } else {
  52. // 只返回数据部分(过滤响应体中的其他字段)
  53. return res.data
  54. }
  55. },
  56. (error) => {
  57. // 网络错误或服务器错误处理
  58. let message = '网络异常,请稍后重试'
  59. if (error.response) {
  60. // 根据 HTTP 状态码自定义提示
  61. switch (error.response.status) {
  62. case 401:
  63. message = '未授权,请重新登录'
  64. // router.push('/login')
  65. break
  66. case 403:
  67. message = '没有权限访问'
  68. break
  69. case 404:
  70. message = '接口不存在'
  71. break
  72. case 500:
  73. message = '服务器内部错误'
  74. break
  75. default:
  76. message = `请求错误(${error.response.status}`
  77. }
  78. }
  79. ElMessage.error(message)
  80. return Promise.reject(error)
  81. }
  82. )
  83. export default myAxios