_trade.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { MockRequest, MockStatusError } from '@delon/mock';
  2. import { deepCopy } from '@delon/util';
  3. import { Random } from 'mockjs';
  4. import { genMp, genName } from './utils';
  5. interface Trade {
  6. id: number;
  7. buyer_id: number;
  8. buyer_nick: string;
  9. price: number;
  10. discount_fee: number;
  11. post_fee: number;
  12. payment: number;
  13. pay_time?: Date;
  14. status: number;
  15. status_str: string;
  16. logistics_name?: string;
  17. logistics_no?: string;
  18. finished?: Date;
  19. created: Date;
  20. wares: TradeWare[];
  21. memo?: string;
  22. [key: string]: any;
  23. }
  24. interface TradeWare {
  25. ware_id: number;
  26. sku_id: number;
  27. num: number;
  28. price: number;
  29. mp: string;
  30. title: string;
  31. }
  32. const DATA: Trade[] = [];
  33. const STATUS: { [key: string]: string } = {
  34. CANCELED: '取消',
  35. WAIT_BUYER_PAY: '等待买家付款',
  36. WAIT_PAY_CONFIRM: '支付确认中',
  37. WAIT_SELLER_STOCK_OUT: '等待出库',
  38. WAIT_GOODS_RECEIVE_CONFIRM: '等待确认收货',
  39. FINISHED: '交易成功'
  40. };
  41. for (let i = 1; i <= 30; i += 1) {
  42. const buyer_nick = genName();
  43. const status: any = Object.keys(STATUS)[Random.natural(0, 5)];
  44. let pay_time: Date | null = null;
  45. let finished: Date | null = null;
  46. if (status !== 'WAIT_BUYER_PAY' || status !== 'CANCELED') {
  47. pay_time = new Date();
  48. }
  49. if (status !== 'FINISHED') {
  50. finished = new Date();
  51. }
  52. const price = Random.natural(100, 10000);
  53. const discount_fee = Random.natural(0, 100);
  54. const post_fee = Random.natural(6, 20);
  55. DATA.push({
  56. id: 10000 * i,
  57. buyer_id: Random.natural(10000, 100000),
  58. buyer_nick,
  59. buyer_tel: Random.natural(10000000000, 19999999999),
  60. buyer_adr: Random.city(true),
  61. buyer_message: Random.title(5, 20),
  62. price,
  63. discount_fee,
  64. post_fee,
  65. payment: price - discount_fee + post_fee,
  66. pay_time,
  67. finished,
  68. status,
  69. status_str: STATUS[status],
  70. logistics_name: '',
  71. logistics_no: '',
  72. created: new Date(),
  73. wares: genWare(Random.natural(1, 5))
  74. } as any);
  75. }
  76. function genWare(count: number): TradeWare[] {
  77. return new Array(count).fill({}).map((v, idx) => ({
  78. ware_id: Random.natural(10000, 10020),
  79. sku_id: (idx + 1) * 1000,
  80. num: Random.natural(1, 10),
  81. price: Random.natural(10, 500),
  82. mp: genMp(),
  83. title: Random.ctitle(5, 10)
  84. }));
  85. }
  86. function get(params: any): any {
  87. let ret = deepCopy(DATA);
  88. if (params.sorter) {
  89. const s = params.sorter.split('_');
  90. ret = ret.sort((prev: any, next: any) => {
  91. if (s[1] === 'descend') {
  92. return next[s[0]] - prev[s[0]];
  93. }
  94. return prev[s[0]] - next[s[0]];
  95. });
  96. }
  97. if (params.id) {
  98. ret = ret.filter((data: any) => data.id == params.id);
  99. }
  100. if (params.statusList && params.statusList.length > 0) {
  101. ret = ret.filter((data: any) => params.statusList.indexOf(data.status) > -1);
  102. }
  103. if (params.ware_id) {
  104. ret = ret.filter((data: any) => data.wares.find((w: any) => w.ware_id == params.ware_id));
  105. }
  106. if (params.buyer_nick) {
  107. ret = ret.filter((data: any) => data.buyer_nick.indexOf(params.buyer_nick) > -1);
  108. }
  109. return ret;
  110. }
  111. function getIdx(id: number): number {
  112. id = +id;
  113. const idx = DATA.findIndex(w => w.id === id);
  114. if (idx === -1) {
  115. throw new MockStatusError(404);
  116. }
  117. return idx;
  118. }
  119. export const TRADES = {
  120. '/trade': (req: MockRequest) => {
  121. const pi = +(req.queryString.pi || 1);
  122. const ps = +(req.queryString.ps || 10);
  123. const data = get(req.queryString);
  124. return {
  125. total: data.length,
  126. list: data.slice((pi - 1) * ps, pi * ps)
  127. };
  128. },
  129. 'POST /trade': (req: MockRequest) => {
  130. const id = req.body.id || 0;
  131. if (id > 0) {
  132. const idx = getIdx(id);
  133. DATA[idx] = { ...DATA[idx], ...req.body };
  134. return { msg: 'ok', item: DATA[idx] };
  135. }
  136. const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
  137. DATA.push(item);
  138. return { msg: 'ok', item };
  139. },
  140. '/trade/:id': (req: MockRequest) => {
  141. const idx = getIdx(req.params.id || 0);
  142. const item = { ...DATA[idx] };
  143. return item;
  144. },
  145. 'DELETE /trade/:id': (req: MockRequest) => {
  146. const idx = getIdx(req.params.id || 0);
  147. DATA.splice(idx, 1);
  148. return { msg: 'ok' };
  149. },
  150. 'POST /trade/status': (req: MockRequest) => {
  151. const idx = getIdx(req.body.id || 0);
  152. DATA[idx].status = req.body.status;
  153. DATA[idx].status_str = STATUS[req.body.status];
  154. return { msg: 'ok', item: DATA[idx] };
  155. },
  156. 'POST /trade/memo': (req: MockRequest) => {
  157. const idx = getIdx(req.body.id || 0);
  158. DATA[idx].memo = req.body.memo;
  159. return { msg: 'ok', item: DATA[idx] };
  160. }
  161. };