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