router.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import React from 'react';
  2. import dynamic from 'dva/dynamic';
  3. import { getMenuData } from './menu';
  4. // wrapper of dynamic
  5. const dynamicWrapper = (app, models, component) => dynamic({
  6. app,
  7. // eslint-disable-next-line no-underscore-dangle
  8. models: () => models.filter(m => !app._models.some(({ namespace }) => namespace === m)).map(m => import(`../models/${m}.js`)),
  9. // add routerData prop
  10. component: () => {
  11. const p = component();
  12. return new Promise((resolve, reject) => {
  13. p.then((Comp) => {
  14. resolve(props => <Comp {...props} routerData={getRouterData(app)} />);
  15. }).catch(err => reject(err));
  16. });
  17. },
  18. });
  19. function getFlatMenuData(menus) {
  20. let keys = {};
  21. menus.forEach((item) => {
  22. if (item.children) {
  23. keys[item.path] = item.name;
  24. keys = { ...keys, ...getFlatMenuData(item.children) };
  25. } else {
  26. keys[item.path] = item.name;
  27. }
  28. });
  29. return keys;
  30. }
  31. export const getRouterData = (app) => {
  32. const routerData = {
  33. '/': {
  34. component: dynamicWrapper(app, ['user', 'login'], () => import('../layouts/BasicLayout')),
  35. },
  36. '/help': {
  37. component: dynamicWrapper(app, [], () => import('../routes/About')),
  38. },
  39. '/dashboard': {
  40. component: dynamicWrapper(app, [], () => import('../routes/Dashboard')),
  41. },
  42. '/merchant': {
  43. component: dynamicWrapper(app, ['merchant'], () => import('../routes/Merchant')),
  44. name: '修改厂商信息',
  45. },
  46. '/frontend': {
  47. component: dynamicWrapper(app, ['recommend', 'mproduct/mproduct'], () => import('../routes/Frontend')),
  48. name: '前端展现配置',
  49. },
  50. '/campus': {
  51. component: dynamicWrapper(app, ['campus'], () => import('../routes/Campus')),
  52. },
  53. '/terminal': {
  54. component: dynamicWrapper(app, ['terminal/terminal'], () => import('../routes/Terminal/List')),
  55. },
  56. '/terminal/add': {
  57. component: dynamicWrapper(app, ['terminal/detail', 'campus'], () => import('../routes/Terminal/Edit')),
  58. name: '添加终端',
  59. },
  60. '/terminal/edit/:id': {
  61. component: dynamicWrapper(app, ['terminal/detail', 'campus'], () => import('../routes/Terminal/Edit')),
  62. name: '编辑终端',
  63. },
  64. '/goods': {
  65. component: dynamicWrapper(app, ['mproduct/mproduct'], () => import('../routes/MProduct/List')),
  66. },
  67. '/order': {
  68. component: dynamicWrapper(app, ['order/order'], () => import('../routes/Order/List')),
  69. },
  70. '/order/add': {
  71. component: dynamicWrapper(app, ['order/detail', 'terminal/terminal', 'mproduct/mproduct'], () => import('../routes/Order/Add')),
  72. name: '新建订单',
  73. },
  74. // '/order/edit/:id': {
  75. // component: dynamicWrapper(app, ['order/detail'], () => import('../routes/Order/detail')),
  76. // name: '修改订单',
  77. // },
  78. // '/order/profile/:id': {
  79. // component: dynamicWrapper(app, ['order/detail'], () => import('../routes/Order/detail/orderProfile')),
  80. // name: '订单详情',
  81. // },
  82. '/sold': {
  83. component: dynamicWrapper(app, [], () => import('../routes/SoldProduct')),
  84. },
  85. '/user': {
  86. component: dynamicWrapper(app, [], () => import('../layouts/UserLayout')),
  87. },
  88. '/user/login': {
  89. component: dynamicWrapper(app, ['login'], () => import('../routes/Login')),
  90. },
  91. };
  92. // Get name from ./menu.js or just set it in the router data.
  93. const menuData = getFlatMenuData(getMenuData());
  94. const routerDataWithName = {};
  95. Object.keys(routerData).forEach((item) => {
  96. routerDataWithName[item] = {
  97. ...routerData[item],
  98. name: routerData[item].name || menuData[item.replace(/^\//, '')],
  99. };
  100. });
  101. return routerDataWithName;
  102. };