request.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { message } from 'ant-design-vue'
  2. import axios, { AxiosInstance, AxiosResponse } from 'axios'
  3. import defaultSetting from '../../config/defaultSetting'
  4. import { useModule } from '@/hooks'
  5. import { useUserStore } from '@/store'
  6. export const instance = axios.create({
  7. baseURL: '',
  8. timeout: 100000
  9. })
  10. /**
  11. * 该函数捕获一个错误并返回一个被拒绝的承诺。
  12. * @param {any} error - `error` 参数是 `any` 类型,这意味着它可以是任何数据类型。它用作 `catchErr` 函数的输入参数。
  13. * @returns `catchErr` 函数返回一个被拒绝的 Promise,并传递了 `error` 参数作为拒绝的原因。
  14. */
  15. const catchErr = (response: AxiosResponse) => {
  16. const { data } = response
  17. if (data.code === 500) {
  18. message.error(data.msg)
  19. } else if (data.code === 400) {
  20. message.error(data.msg)
  21. }
  22. }
  23. /**
  24. * 登录失效后重定向地址
  25. */
  26. const redirectUrl = () => {
  27. window.open(defaultSetting.logout + `?redirectUrl=${useModule().path}`)
  28. }
  29. instance.interceptors.request.use(config => {
  30. config.headers.Authentication = useUserStore().userInfo.token
  31. return config
  32. }, function (error) {
  33. return Promise.reject(error)
  34. })
  35. instance.interceptors.response.use(function (response) {
  36. catchErr(response)
  37. if (response.status === 403) {
  38. redirectUrl()
  39. }
  40. return response.data
  41. }, error => Promise.reject(error))
  42. export const setBaseUrl = (baseURL: string) => instance.defaults.baseURL = baseURL
  43. export default function request <T> (config: any) {
  44. return instance.request<AxiosInstance, SERVICE.Response<T>>(config)
  45. }