list.ts 2.2 KB

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