request.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import axios from 'axios'
  2. import { ElMessage } from 'element-plus'
  3. import { useUserStore } from '../stores/user'
  4. // 创建axios实例
  5. const service = axios.create({
  6. baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
  7. timeout: 1115000
  8. })
  9. // 请求拦截器
  10. service.interceptors.request.use(
  11. config => {
  12. const userStore = useUserStore()
  13. // console.log('userStore.token',userStore.token)
  14. if (userStore.token) {
  15. config.headers['Token'] = `${userStore.token}`
  16. config.headers['Authorization'] = `Bearer ${userStore.token}`
  17. }
  18. return config
  19. },
  20. error => {
  21. console.error('请求错误:', error)
  22. return Promise.reject(error)
  23. }
  24. )
  25. // 响应拦截器
  26. service.interceptors.response.use(
  27. response => {
  28. const res = response.data
  29. // 这里可以根据后端的数据结构进行调整
  30. if (res.code === 200||res.code === 0) {
  31. return res.data
  32. } else {
  33. const userStore = useUserStore()
  34. if (res.code) {
  35. switch (res.code) {
  36. case 401:
  37. ElMessage.error(res.msg || '登录已过期,请重新登录')
  38. userStore.logout()
  39. // 跳转到登录页
  40. window.location.href = '/login'
  41. break
  42. case 403:
  43. ElMessage.error(res.msg || '没有权限访问')
  44. break
  45. case 404:
  46. ElMessage.error(res.msg || '请求的资源不存在')
  47. break
  48. case 500:
  49. ElMessage.error(res.msg || '服务器错误')
  50. break
  51. default:
  52. ElMessage.error(error.msg)
  53. }
  54. }
  55. // ElMessage.error(res.message || '请求失败')
  56. // return Promise.reject(new Error(res.message || '请求失败'))
  57. }
  58. },
  59. error => {
  60. console.error('响应错误:', error)
  61. const userStore = useUserStore()
  62. if (error.response) {
  63. switch (error.response.status) {
  64. case 401:
  65. ElMessage.error('登录已过期,请重新登录')
  66. userStore.logout()
  67. // 跳转到登录页
  68. window.location.href = '/login'
  69. break
  70. case 403:
  71. ElMessage.error('没有权限访问')
  72. break
  73. case 404:
  74. ElMessage.error('请求的资源不存在')
  75. break
  76. case 500:
  77. ElMessage.error('服务器错误')
  78. break
  79. default:
  80. ElMessage.error(error.msg)
  81. }
  82. }
  83. return Promise.reject(error)
  84. }
  85. )
  86. // 封装GET请求
  87. export function get(url, params) {
  88. return service({
  89. url,
  90. method: 'get',
  91. params
  92. })
  93. }
  94. // 封装POST请求
  95. export function post(url, data, config = {}) {
  96. return service({
  97. url,
  98. method: 'post',
  99. data,
  100. ...config
  101. })
  102. }
  103. // 封装PUT请求
  104. export function put(url, data) {
  105. return service({
  106. url,
  107. method: 'put',
  108. data
  109. })
  110. }
  111. // 封装DELETE请求
  112. export function del(url, params) {
  113. return service({
  114. url,
  115. method: 'delete',
  116. params
  117. })
  118. }
  119. export default service