Files
agent/mock/user.ts
2026-02-16 12:46:37 +08:00

116 lines
3.8 KiB
TypeScript

import { Request, Response } from 'express';
const genUserList = (current: number, pageSize: number) => {
const tableListDataSource: any[] = [];
for (let i = 0; i < pageSize; i += 1) {
const index = (current - 1) * 10 + i;
tableListDataSource.push({
id: `${index}`,
username: `user_${index}`,
realName: `用户 ${index}`,
mobile: `138001380${index.toString().padStart(2, '0')}`,
email: `user_${index}@antgravity.com`,
role: index % 2 === 0 ? 'admin' : 'user',
status: ['active', 'disabled', 'pending'][index % 3],
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
});
}
return tableListDataSource;
};
let tableListDataSource = genUserList(1, 20);
function getUserList(req: Request, res: Response, u: string) {
let realUrl = u;
if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
realUrl = req.url;
}
const { current = 1, pageSize = 10, username, realName, role, status } = req.query;
let dataSource = [...tableListDataSource];
if (username) {
dataSource = dataSource.filter((item) => item.username.includes(username as string));
}
if (realName) {
dataSource = dataSource.filter((item) => item.realName.includes(realName as string));
}
if (role) {
dataSource = dataSource.filter((item) => item.role === role);
}
if (status) {
dataSource = dataSource.filter((item) => item.status === status);
}
const result = {
data: dataSource,
total: dataSource.length,
success: true,
pageSize,
current: parseInt(`${current}`, 10) || 1,
};
return res.json(result);
}
function postUser(req: Request, res: Response, u: string, b: Request) {
const body = (b && b.body) || req.body;
const { method, id } = req;
switch (method) {
case 'POST':
const i = Math.ceil(Math.random() * 10000);
const newUser = {
id: `${i}`,
...body,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
tableListDataSource.unshift(newUser);
return res.json(newUser);
case 'PUT':
// The id in URL is usually available as req.params.id for Express routes,
// but Umi mock matches implementation might vary.
// Assuming RESTful style: /api/users/:id
// We need to parse ID from URL if not provided directly.
// Simplification for mock: assume ID is passed or parsed.
let updateId = id;
if (!updateId) {
// rough parsing for /api/users/123
const parts = req.url.split('/');
updateId = parts[parts.length - 1];
}
tableListDataSource = tableListDataSource.map((item) => {
if (item.id === updateId) {
return { ...item, ...body, updatedAt: new Date().toISOString() };
}
return item;
});
return res.json({ id: updateId, ...body });
case 'DELETE':
let deleteId = id;
if (!deleteId) {
const parts = req.url.split('/');
deleteId = parts[parts.length - 1];
}
tableListDataSource = tableListDataSource.filter((item) => item.id !== deleteId);
return res.json({ success: true });
default:
break;
}
return res.json({ result: 'Error' });
}
export default {
'GET /api/users': getUserList,
'POST /api/users': postUser,
'PUT /api/users/:id': postUser,
'DELETE /api/users/:id': postUser,
};