164 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { MockRequest, MockStatusError } from '@delon/mock';
 | |
| import { deepCopy } from '@delon/util';
 | |
| import { genMp } from './utils';
 | |
| 
 | |
| interface UserPro {
 | |
|   cid: number;
 | |
|   cname: string;
 | |
|   id: number;
 | |
|   name: string;
 | |
|   mp: string;
 | |
|   stock: number;
 | |
|   outer_id: string;
 | |
|   market_price: number;
 | |
|   price: number;
 | |
|   sale_num: number;
 | |
|   status: string;
 | |
|   modified: Date;
 | |
|   [key: string]: any;
 | |
| }
 | |
| 
 | |
| const DATA: UserPro[] = [];
 | |
| 
 | |
| for (let i = 1; i <= 20; i += 1) {
 | |
|   const name = ['HUAWEI Mate 20 Pro', '小米MAX3', 'IPhone X', 'Gree 8,000 BTU Portable Air Conditioner'][
 | |
|     Math.floor(Math.random() * 10) % 4
 | |
|   ];
 | |
|   DATA.push({
 | |
|     cid: i * 1000,
 | |
|     cname: '',
 | |
|     id: i + 10000,
 | |
|     name,
 | |
|     mp: genMp(),
 | |
|     stock: Math.floor(Math.random() * 1000) % 1000,
 | |
|     outer_id: `S50-${Math.floor(Math.random() * 100) % 100}`,
 | |
|     market_price: Math.floor(Math.random() * 1000) % 1000,
 | |
|     price: Math.floor(Math.random() * 1000) % 1000,
 | |
|     sale_num: Math.floor(Math.random() * 200) % 200,
 | |
|     modified: new Date(),
 | |
|     status: ['CUSTORMER_DOWN', 'ON_SALE', 'AUDIT_AWAIT', 'DELETED'][Math.floor(Math.random() * 10) % 4],
 | |
|     brand: 1,
 | |
|     place: 1,
 | |
|   });
 | |
| }
 | |
| 
 | |
| 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 WARES = {
 | |
|   '/ware': (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 /ware': (req: MockRequest) => {
 | |
|     const id = req.body.id || 0;
 | |
|     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 };
 | |
|   },
 | |
|   '/ware/:id': (req: MockRequest) => {
 | |
|     const idx = getIdx(req.params.id || 0);
 | |
|     const item = {
 | |
|       id: 0,
 | |
|       brand: 1,
 | |
|       is_7return: true,
 | |
|       prop: {
 | |
|         1: '是',
 | |
|         2: '24天',
 | |
|         3: '0.5克',
 | |
|       },
 | |
|       place: 1,
 | |
|       weight: 10,
 | |
|       skus: [
 | |
|         {
 | |
|           id: 10001,
 | |
|           attributes: '1:10',
 | |
|           names: [`红色`, `S`],
 | |
|           price: 1000,
 | |
|           stock: 10,
 | |
|         },
 | |
|         {
 | |
|           id: 10002,
 | |
|           attributes: '1:11',
 | |
|           names: [`红色`, `M`],
 | |
|           price: 1000,
 | |
|           stock: 11,
 | |
|         },
 | |
|         {
 | |
|           id: 10003,
 | |
|           attributes: '3:10',
 | |
|           names: [`蓝色1`, `S`],
 | |
|           price: 1000,
 | |
|           stock: 12,
 | |
|         },
 | |
|         {
 | |
|           id: 10004,
 | |
|           attributes: '3:11',
 | |
|           names: [`蓝色1`, `M`],
 | |
|           price: 1000,
 | |
|           stock: 13,
 | |
|         },
 | |
|       ],
 | |
|       imgs: {
 | |
|         0: ['https://randomuser.me/api/portraits/lego/0.jpg'],
 | |
|         1: ['https://randomuser.me/api/portraits/lego/1.jpg'],
 | |
|         3: ['https://randomuser.me/api/portraits/lego/3.jpg'],
 | |
|       },
 | |
|       desc: `<p>Test</p>`,
 | |
|       ...(DATA[idx] as any),
 | |
|     };
 | |
|     return item;
 | |
|   },
 | |
|   'DELETE /ware/:id': (req: MockRequest) => {
 | |
|     const idx = getIdx(req.params.id || 0);
 | |
|     DATA.splice(idx, 1);
 | |
|     return { msg: 'ok' };
 | |
|   },
 | |
|   'POST /ware/status': (req: MockRequest) => {
 | |
|     const idx = getIdx(req.body.id || 0);
 | |
|     const item = DATA[idx];
 | |
|     item.status = req.body.status;
 | |
|     return { msg: 'ok', item };
 | |
|   },
 | |
|   '/ware/cat': [
 | |
|     { id: 1, name: '颜色', value: '红色', color: '#f5222d', type: 'color' },
 | |
|     { id: 2, name: '颜色', value: '绿色', color: '#a0d911', type: 'color' },
 | |
|     { id: 3, name: '颜色', value: '蓝色', color: '#1890ff', type: 'color' },
 | |
|     { id: 4, name: '颜色', value: '洋红', color: '#eb2f96', type: 'color' },
 | |
|     { id: 10, name: '尺寸', value: 'S', type: 'size' },
 | |
|     { id: 11, name: '尺寸', value: 'M', type: 'size' },
 | |
|     { id: 12, name: '尺寸', value: 'L', type: 'size' },
 | |
|     { id: 13, name: '尺寸', value: 'XL', type: 'size' },
 | |
|     { id: 14, name: '尺寸', value: 'XXL', type: 'size' },
 | |
|     { id: 15, name: '尺寸', value: 'XXXL', type: 'size' },
 | |
|   ],
 | |
| };
 |