1
0

request.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * 该文件可自行根据业务逻辑进行调整
  3. */
  4. import type { HttpResponse } from '@vben/request';
  5. import { preferences } from '@vben/preferences';
  6. import { RequestClient } from '@vben/request';
  7. import { message } from 'ant-design-vue';
  8. import { useAccessStore } from '#/store';
  9. /**
  10. * 创建请求实例
  11. * Create a request instance
  12. */
  13. function createRequestClient() {
  14. const client = new RequestClient({
  15. baseURL: import.meta.env.VITE_GLOB_API_URL,
  16. // 为每个请求携带 Authorization
  17. makeAuthorization: () => {
  18. return {
  19. // 默认
  20. key: 'Authorization',
  21. tokenHandler: () => {
  22. const accessStore = useAccessStore();
  23. return {
  24. refreshToken: `${accessStore.refreshToken}`,
  25. token: `${accessStore.accessToken}`,
  26. };
  27. },
  28. unAuthorizedHandler: async () => {
  29. const accessStore = useAccessStore();
  30. accessStore.setAccessToken(null);
  31. if (preferences.app.loginExpiredMode === 'modal') {
  32. accessStore.openLoginExpiredModal = true;
  33. } else {
  34. // 退出登录
  35. await accessStore.logout();
  36. }
  37. },
  38. };
  39. },
  40. makeErrorMessage: (msg) => message.error(msg),
  41. });
  42. client.addResponseInterceptor<HttpResponse>((response) => {
  43. const { data: responseData, status } = response;
  44. const { code, data, message: msg } = responseData;
  45. if (status >= 200 && status < 400 && code === 0) {
  46. return data;
  47. }
  48. throw new Error(msg);
  49. });
  50. return client;
  51. }
  52. const requestClient = createRequestClient();
  53. // 其他配置的请求方法
  54. // const { request: xxxRequest } = createRequest();
  55. export { requestClient };