主要更新: 1. 后端核心底座完成 (M1-M6): - 健康检查、指标监控、分布式锁 - 事件总线、队列系统、事务管理 - 安全守卫、多租户隔离、存储适配器 - 审计日志、配置管理、多语言支持 2. 前端迁移到 Ant Design Vue: - 从 Element Plus 迁移到 Ant Design Vue - 完善 system 模块 (role/menu/dept) - 修复依赖和配置问题 3. 文档完善: - AI 开发工作流文档 - 架构约束和开发规范 - 项目进度跟踪 4. 其他改进: - 修复编译错误和类型问题 - 完善测试用例 - 优化项目结构
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import { faker } from '@faker-js/faker';
|
|
import { verifyAccessToken } from '~/utils/jwt-utils';
|
|
import { getMenuIds, MOCK_MENU_LIST } from '~/utils/mock-data';
|
|
import { unAuthorizedResponse, usePageResponseSuccess } from '~/utils/response';
|
|
|
|
const formatterCN = new Intl.DateTimeFormat('zh-CN', {
|
|
timeZone: 'Asia/Shanghai',
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
second: '2-digit',
|
|
});
|
|
|
|
const menuIds = getMenuIds(MOCK_MENU_LIST);
|
|
|
|
function generateMockDataList(count: number) {
|
|
const dataList = [];
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
const dataItem: Record<string, any> = {
|
|
id: faker.string.uuid(),
|
|
name: faker.commerce.product(),
|
|
status: faker.helpers.arrayElement([0, 1]),
|
|
createTime: formatterCN.format(
|
|
faker.date.between({ from: '2022-01-01', to: '2025-01-01' }),
|
|
),
|
|
permissions: faker.helpers.arrayElements(menuIds),
|
|
remark: faker.lorem.sentence(),
|
|
};
|
|
|
|
dataList.push(dataItem);
|
|
}
|
|
|
|
return dataList;
|
|
}
|
|
|
|
const mockData = generateMockDataList(100);
|
|
|
|
export default eventHandler(async (event) => {
|
|
const userinfo = verifyAccessToken(event);
|
|
if (!userinfo) {
|
|
return unAuthorizedResponse(event);
|
|
}
|
|
|
|
const {
|
|
page = 1,
|
|
pageSize = 20,
|
|
name,
|
|
id,
|
|
remark,
|
|
startTime,
|
|
endTime,
|
|
status,
|
|
} = getQuery(event);
|
|
let listData = structuredClone(mockData);
|
|
if (name) {
|
|
listData = listData.filter((item) =>
|
|
item.name.toLowerCase().includes(String(name).toLowerCase()),
|
|
);
|
|
}
|
|
if (id) {
|
|
listData = listData.filter((item) =>
|
|
item.id.toLowerCase().includes(String(id).toLowerCase()),
|
|
);
|
|
}
|
|
if (remark) {
|
|
listData = listData.filter((item) =>
|
|
item.remark?.toLowerCase()?.includes(String(remark).toLowerCase()),
|
|
);
|
|
}
|
|
if (startTime) {
|
|
listData = listData.filter((item) => item.createTime >= startTime);
|
|
}
|
|
if (endTime) {
|
|
listData = listData.filter((item) => item.createTime <= endTime);
|
|
}
|
|
if (['0', '1'].includes(status as string)) {
|
|
listData = listData.filter((item) => item.status === Number(status));
|
|
}
|
|
return usePageResponseSuccess(page as string, pageSize as string, listData);
|
|
});
|