request.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import axios from 'axios'
  2. import { ElMessage, ElMessageBox } from 'element-plus'
  3. import { ACCESS_TOKEN, TOKEN_PREFIX } from '@/utils/constants'
  4. import { useUserStore } from '@/stores/user'
  5. import { logout } from '@/utils/micro'
  6. const request = axios.create({
  7. baseURL: import.meta.env.VITE_BASE_API,
  8. timeout: 1000
  9. })
  10. // 异常拦截处理器
  11. const errorHandler = (error: any) => {
  12. const status = error.response.status
  13. const data = error.response.data
  14. if (status === 400) {
  15. ElMessage.error(data.msg)
  16. } else if (status === 401) {
  17. ElMessageBox.confirm('无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
  18. type: 'error',
  19. closeOnClickModal: false,
  20. center: true,
  21. confirmButtonText: '重新登录'
  22. }).then(() => {
  23. logout()
  24. })
  25. } else if (status === 403) {
  26. ElMessage.error('无权限访问')
  27. } else if (status === 404) {
  28. ElMessage.error('接口不存在')
  29. } else if (status === 500) {
  30. ElMessage.error('服务器错误')
  31. }
  32. return Promise.reject(error.response)
  33. }
  34. request.interceptors.request.use(config => {
  35. const userStore = useUserStore()
  36. const token = TOKEN_PREFIX + userStore.token
  37. config.headers = config.headers || {}
  38. if (token) {
  39. config.headers[ACCESS_TOKEN] = token
  40. }
  41. return config
  42. })
  43. request.interceptors.response.use(res => {
  44. const data = res.data
  45. if (data.success || data.code === 200) {
  46. return data
  47. } else {
  48. if (data.code === 201 && data.msg === '登录超时,请登录') {
  49. logout()
  50. } else {
  51. ElMessage.error(data.msg)
  52. }
  53. return Promise.reject(data)
  54. }
  55. }, errorHandler)
  56. export default request