_user-pro.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { MockRequest, MockStatusError } from '@delon/mock';
  2. import { deepCopy } from '@delon/util';
  3. import { Random } from 'mockjs';
  4. import { genName } from './utils';
  5. import { RuleData } from './_role';
  6. interface UserPro {
  7. id: number;
  8. name: string;
  9. userName: string;
  10. email: string;
  11. verified: boolean;
  12. status: 'active' | 'banned' | 'deleted';
  13. role?: any;
  14. permission?: any[];
  15. created: Date;
  16. }
  17. const DATA: UserPro[] = [];
  18. for (let i = 1; i <= 20; i += 1) {
  19. const name = genName();
  20. DATA.push({
  21. id: i,
  22. name,
  23. userName: `user name ${i}`,
  24. email: `${name}` + ['@qq.com', '@gmail.com', '@163.com'][Math.floor(Math.random() * 10) % 3],
  25. verified: [true, false][Math.floor(Math.random() * 10) % 2],
  26. status: ['active', 'banned', 'deleted'][Math.floor(Math.random() * 10) % 3] as any,
  27. role: deepCopy(RuleData[Random.natural(0, RuleData.length - 1)]),
  28. permission: [],
  29. created: new Date(),
  30. });
  31. }
  32. function get(params: any): any {
  33. let ret = deepCopy(DATA);
  34. if (params.q) {
  35. ret = ret.filter((data: any) => data.name.indexOf(params.q) > -1);
  36. }
  37. if (params.email) {
  38. ret = ret.filter((data: any) => data.email.indexOf(params.email) > -1);
  39. }
  40. return ret;
  41. }
  42. function getIdx(id: number): number {
  43. id = +id;
  44. const idx = DATA.findIndex((w) => w.id === id);
  45. if (idx === -1) {
  46. throw new MockStatusError(404);
  47. }
  48. return idx;
  49. }
  50. export const USERS_PRO = {
  51. '/user-pro': (req: MockRequest) => {
  52. const pi = +(req.queryString.pi || 1);
  53. const ps = +(req.queryString.ps || 10);
  54. const data = get(req.queryString);
  55. return {
  56. total: data.length,
  57. list: data.slice((pi - 1) * ps, pi * ps),
  58. };
  59. },
  60. 'POST /user-pro': (req: MockRequest) => {
  61. const id = req.body.id || 0;
  62. // fix role data
  63. req.body.role = RuleData.find((w) => w.id === req.body.role.id);
  64. if (id > 0) {
  65. const idx = getIdx(id);
  66. DATA[idx] = { ...DATA[idx], ...req.body };
  67. return { msg: 'ok', item: DATA[idx] };
  68. }
  69. const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
  70. DATA.push(item);
  71. return { msg: 'ok', item };
  72. },
  73. '/user-pro/:id': (req: MockRequest) => {
  74. const idx = getIdx(req.params.id || 0);
  75. const item = { ...DATA[idx], ...req.body };
  76. return item;
  77. },
  78. 'DELETE /user-pro/:id': (req: MockRequest) => {
  79. const idx = getIdx(req.params.id || 0);
  80. DATA.splice(idx, 1);
  81. return { msg: 'ok' };
  82. },
  83. };