92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { MockRequest, MockStatusError } from '@delon/mock';
 | |
| import { deepCopy } from '@delon/util';
 | |
| import { Random } from 'mockjs';
 | |
| import { genName } from './utils';
 | |
| import { RuleData } from './_role';
 | |
| 
 | |
| interface UserPro {
 | |
|   id: number;
 | |
|   name: string;
 | |
|   userName: string;
 | |
|   email: string;
 | |
|   verified: boolean;
 | |
|   status: 'active' | 'banned' | 'deleted';
 | |
|   role?: any;
 | |
|   permission?: any[];
 | |
|   created: Date;
 | |
| }
 | |
| 
 | |
| const DATA: UserPro[] = [];
 | |
| 
 | |
| for (let i = 1; i <= 20; i += 1) {
 | |
|   const name = genName();
 | |
|   DATA.push({
 | |
|     id: i,
 | |
|     name,
 | |
|     userName: `user name ${i}`,
 | |
|     email: `${name}` + ['@qq.com', '@gmail.com', '@163.com'][Math.floor(Math.random() * 10) % 3],
 | |
|     verified: [true, false][Math.floor(Math.random() * 10) % 2],
 | |
|     status: ['active', 'banned', 'deleted'][Math.floor(Math.random() * 10) % 3] as any,
 | |
|     role: deepCopy(RuleData[Random.natural(0, RuleData.length - 1)]),
 | |
|     permission: [],
 | |
|     created: new Date(),
 | |
|   });
 | |
| }
 | |
| 
 | |
| function get(params: any): any {
 | |
|   let ret = deepCopy(DATA);
 | |
|   if (params.q) {
 | |
|     ret = ret.filter((data: any) => data.name.indexOf(params.q) > -1);
 | |
|   }
 | |
|   if (params.email) {
 | |
|     ret = ret.filter((data: any) => data.email.indexOf(params.email) > -1);
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| function getIdx(id: number): number {
 | |
|   id = +id;
 | |
|   const idx = DATA.findIndex((w) => w.id === id);
 | |
|   if (idx === -1) {
 | |
|     throw new MockStatusError(404);
 | |
|   }
 | |
|   return idx;
 | |
| }
 | |
| 
 | |
| export const USERS_PRO = {
 | |
|   '/user-pro': (req: MockRequest) => {
 | |
|     const pi = +(req.queryString.pi || 1);
 | |
|     const ps = +(req.queryString.ps || 10);
 | |
|     const data = get(req.queryString);
 | |
|     return {
 | |
|       total: data.length,
 | |
|       list: data.slice((pi - 1) * ps, pi * ps),
 | |
|     };
 | |
|   },
 | |
|   'POST /user-pro': (req: MockRequest) => {
 | |
|     const id = req.body.id || 0;
 | |
|     // fix role data
 | |
|     req.body.role = RuleData.find((w) => w.id === req.body.role.id);
 | |
| 
 | |
|     if (id > 0) {
 | |
|       const idx = getIdx(id);
 | |
|       DATA[idx] = { ...DATA[idx], ...req.body };
 | |
|       return { msg: 'ok', item: DATA[idx] };
 | |
|     }
 | |
| 
 | |
|     const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
 | |
|     DATA.push(item);
 | |
|     return { msg: 'ok', item };
 | |
|   },
 | |
|   '/user-pro/:id': (req: MockRequest) => {
 | |
|     const idx = getIdx(req.params.id || 0);
 | |
|     const item = { ...DATA[idx], ...req.body };
 | |
|     return item;
 | |
|   },
 | |
|   'DELETE /user-pro/:id': (req: MockRequest) => {
 | |
|     const idx = getIdx(req.params.id || 0);
 | |
|     DATA.splice(idx, 1);
 | |
|     return { msg: 'ok' };
 | |
|   },
 | |
| };
 |