list.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { faker } from '@faker-js/faker';
  2. import { eventHandler, getQuery } from 'h3';
  3. import { verifyAccessToken } from '~/utils/jwt-utils';
  4. import { getMenuIds, MOCK_MENU_LIST } from '~/utils/mock-data';
  5. import { unAuthorizedResponse, usePageResponseSuccess } from '~/utils/response';
  6. const formatterCN = new Intl.DateTimeFormat('zh-CN', {
  7. timeZone: 'Asia/Shanghai',
  8. year: 'numeric',
  9. month: '2-digit',
  10. day: '2-digit',
  11. hour: '2-digit',
  12. minute: '2-digit',
  13. second: '2-digit',
  14. });
  15. const menuIds = getMenuIds(MOCK_MENU_LIST);
  16. function generateMockDataList(count: number) {
  17. const dataList = [];
  18. for (let i = 0; i < count; i++) {
  19. const dataItem: Record<string, any> = {
  20. id: faker.string.uuid(),
  21. name: faker.commerce.product(),
  22. status: faker.helpers.arrayElement([0, 1]),
  23. createTime: formatterCN.format(
  24. faker.date.between({ from: '2022-01-01', to: '2025-01-01' }),
  25. ),
  26. permissions: faker.helpers.arrayElements(menuIds),
  27. remark: faker.lorem.sentence(),
  28. };
  29. dataList.push(dataItem);
  30. }
  31. return dataList;
  32. }
  33. const mockData = generateMockDataList(100);
  34. export default eventHandler(async (event) => {
  35. const userinfo = verifyAccessToken(event);
  36. if (!userinfo) {
  37. return unAuthorizedResponse(event);
  38. }
  39. const {
  40. page = 1,
  41. pageSize = 20,
  42. name,
  43. id,
  44. remark,
  45. startTime,
  46. endTime,
  47. status,
  48. } = getQuery(event);
  49. let listData = structuredClone(mockData);
  50. if (name) {
  51. listData = listData.filter((item) =>
  52. item.name.toLowerCase().includes(String(name).toLowerCase()),
  53. );
  54. }
  55. if (id) {
  56. listData = listData.filter((item) =>
  57. item.id.toLowerCase().includes(String(id).toLowerCase()),
  58. );
  59. }
  60. if (remark) {
  61. listData = listData.filter((item) =>
  62. item.remark?.toLowerCase()?.includes(String(remark).toLowerCase()),
  63. );
  64. }
  65. if (startTime) {
  66. listData = listData.filter((item) => item.createTime >= startTime);
  67. }
  68. if (endTime) {
  69. listData = listData.filter((item) => item.createTime <= endTime);
  70. }
  71. if (['0', '1'].includes(status as string)) {
  72. listData = listData.filter((item) => item.status === Number(status));
  73. }
  74. return usePageResponseSuccess(page as string, pageSize as string, listData);
  75. });