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' };
 | 
						|
  },
 | 
						|
};
 |