| import { Request, Response } from 'express'; |
| import moment from 'moment'; |
| import { parse } from 'url'; |
| |
| // mock tableListDataSource |
| const genList = (current: number, pageSize: number) => { |
| const tableListDataSource: API.RuleListItem[] = []; |
| |
| for (let i = 0; i < pageSize; i += 1) { |
| const index = (current - 1) * 10 + i; |
| tableListDataSource.push({ |
| key: index, |
| disabled: i % 6 === 0, |
| href: 'https://ant.design', |
| avatar: [ |
| 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', |
| 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', |
| ][i % 2], |
| name: `TradeCode ${index}`, |
| owner: '曲丽丽', |
| desc: '这是一段描述', |
| callNo: Math.floor(Math.random() * 1000), |
| status: Math.floor(Math.random() * 10) % 4, |
| updatedAt: moment().format('YYYY-MM-DD'), |
| createdAt: moment().format('YYYY-MM-DD'), |
| progress: Math.ceil(Math.random() * 100), |
| }); |
| } |
| tableListDataSource.reverse(); |
| return tableListDataSource; |
| }; |
| |
| let tableListDataSource = genList(1, 100); |
| |
| function getRule(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 } = req.query; |
| const params = parse(realUrl, true).query as unknown as API.PageParams & |
| API.RuleListItem & { |
| sorter: any; |
| filter: any; |
| }; |
| |
| let dataSource = [...tableListDataSource].slice( |
| ((current as number) - 1) * (pageSize as number), |
| (current as number) * (pageSize as number), |
| ); |
| if (params.sorter) { |
| const sorter = JSON.parse(params.sorter); |
| dataSource = dataSource.sort((prev, next) => { |
| let sortNumber = 0; |
| (Object.keys(sorter) as Array<keyof API.RuleListItem>).forEach((key) => { |
| let nextSort = next?.[key] as number; |
| let preSort = prev?.[key] as number; |
| if (sorter[key] === 'descend') { |
| if (preSort - nextSort > 0) { |
| sortNumber += -1; |
| } else { |
| sortNumber += 1; |
| } |
| return; |
| } |
| if (preSort - nextSort > 0) { |
| sortNumber += 1; |
| } else { |
| sortNumber += -1; |
| } |
| }); |
| return sortNumber; |
| }); |
| } |
| if (params.filter) { |
| const filter = JSON.parse(params.filter as any) as { |
| [key: string]: string[]; |
| }; |
| if (Object.keys(filter).length > 0) { |
| dataSource = dataSource.filter((item) => { |
| return (Object.keys(filter) as Array<keyof API.RuleListItem>).some((key) => { |
| if (!filter[key]) { |
| return true; |
| } |
| if (filter[key].includes(`${item[key]}`)) { |
| return true; |
| } |
| return false; |
| }); |
| }); |
| } |
| } |
| |
| if (params.name) { |
| dataSource = dataSource.filter((data) => data?.name?.includes(params.name || '')); |
| } |
| const result = { |
| data: dataSource, |
| total: tableListDataSource.length, |
| success: true, |
| pageSize, |
| current: parseInt(`${params.current}`, 10) || 1, |
| }; |
| |
| return res.json(result); |
| } |
| |
| function postRule(req: Request, res: Response, u: string, b: Request) { |
| let realUrl = u; |
| if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') { |
| realUrl = req.url; |
| } |
| |
| const body = (b && b.body) || req.body; |
| const { method, name, desc, key } = body; |
| |
| switch (method) { |
| /* eslint no-case-declarations:0 */ |
| case 'delete': |
| tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1); |
| break; |
| case 'post': |
| (() => { |
| const i = Math.ceil(Math.random() * 10000); |
| const newRule: API.RuleListItem = { |
| key: tableListDataSource.length, |
| href: 'https://ant.design', |
| avatar: [ |
| 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', |
| 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', |
| ][i % 2], |
| name, |
| owner: '曲丽丽', |
| desc, |
| callNo: Math.floor(Math.random() * 1000), |
| status: Math.floor(Math.random() * 10) % 2, |
| updatedAt: moment().format('YYYY-MM-DD'), |
| createdAt: moment().format('YYYY-MM-DD'), |
| progress: Math.ceil(Math.random() * 100), |
| }; |
| tableListDataSource.unshift(newRule); |
| return res.json(newRule); |
| })(); |
| return; |
| |
| case 'update': |
| (() => { |
| let newRule = {}; |
| tableListDataSource = tableListDataSource.map((item) => { |
| if (item.key === key) { |
| newRule = { ...item, desc, name }; |
| return { ...item, desc, name }; |
| } |
| return item; |
| }); |
| return res.json(newRule); |
| })(); |
| return; |
| default: |
| break; |
| } |
| |
| const result = { |
| list: tableListDataSource, |
| pagination: { |
| total: tableListDataSource.length, |
| }, |
| }; |
| |
| res.json(result); |
| } |
| |
| export default { |
| 'GET /api/rule': getRule, |
| 'POST /api/rule': postRule, |
| }; |