request.ts 1.6 KB

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