_util.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Interface data format used to return a unified format
  2. import type { DefaultBodyType, StrictRequest } from 'msw';
  3. import { ResultEnum } from '@/enums/httpEnum';
  4. import { uniqueSlash } from '@/utils/urlUtils';
  5. const baseApiUrl = new URL(import.meta.env.VITE_BASE_API_URL, location.origin).toString();
  6. /**
  7. * msw 官方不支持配置 baseUrl, 需要自己手动处理
  8. * @see https://github.com/mswjs/msw/issues/397#issuecomment-751230924
  9. */
  10. export const serverApi = (path: string) => {
  11. return uniqueSlash(baseApiUrl + path);
  12. };
  13. export function resultSuccess<T = Recordable>(data: T, { message = 'ok' } = {}) {
  14. return {
  15. code: ResultEnum.SUCCESS,
  16. data,
  17. message,
  18. type: 'success',
  19. };
  20. }
  21. export function resultPageSuccess<T = any>(
  22. page: number,
  23. pageSize: number,
  24. list: T[],
  25. { message = 'ok' } = {},
  26. ) {
  27. const pageData = pagination(page, pageSize, list);
  28. return {
  29. ...resultSuccess({
  30. items: pageData,
  31. meta: {
  32. currentPage: ~~page,
  33. totalItems: list.length,
  34. totalPages: Math.ceil(list.length / pageSize),
  35. },
  36. }),
  37. message,
  38. };
  39. }
  40. export function resultError(
  41. message = 'Request failed',
  42. { code = ResultEnum.ERROR, data = null } = {},
  43. ) {
  44. return {
  45. code,
  46. data,
  47. message,
  48. type: 'error',
  49. };
  50. }
  51. export function pagination<T = any>(pageNo: number, pageSize: number, array: T[]): T[] {
  52. const offset = (pageNo - 1) * Number(pageSize);
  53. return offset + Number(pageSize) >= array.length
  54. ? array.slice(offset, array.length)
  55. : array.slice(offset, offset + Number(pageSize));
  56. }
  57. export interface requestParams {
  58. method: string;
  59. body: any;
  60. headers?: { authorization?: string };
  61. query: any;
  62. }
  63. /**
  64. * @description 本函数用于从request数据中获取token,请根据项目的实际情况修改
  65. *
  66. */
  67. export function getRequestToken({ headers }: requestParams): string | undefined {
  68. return headers?.authorization;
  69. }
  70. export const getQuery = (request: StrictRequest<DefaultBodyType>) => {
  71. const url = new URL(request.url);
  72. return Object.fromEntries<any>(url.searchParams.entries());
  73. };