index.tsx 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. import {RouteObject, createBrowserRouter} from 'react-router-dom';
  2. import {
  3. HOME_PATH,
  4. MAIN_PATH,
  5. MENU_PATH,
  6. ROLE_PATH,
  7. USER_PATH,
  8. STORAGE_PATH,
  9. GOODS_PATH,
  10. PDA_MENU_PATH,
  11. CONTAINER_PATH,
  12. MATTER_PATH,
  13. RAW_IN_STREAM_PATH,
  14. RAW_OUT_STREAM_PATH,
  15. SEMI_REPORT_PATH,
  16. SEMI_DRAW_PATH,
  17. SEMI_IN_STREAM_PATH,
  18. SEMI_OUT_STREAM_PATH,
  19. LOGIN_PATH,
  20. NO_PERMISSION_PATH,
  21. FINISH_PRODUCT_IN_STREAM_PATH,
  22. FINISH_PRODUCT_OUT_STREAM_PATH,
  23. DEAD_PRODUCT_PATH,
  24. RESERVE_WARNING_PATH,
  25. QUALITY_PATH,
  26. PURCHASE_PATH,
  27. MATERIAL_BIND_PATH,
  28. STOCK_PATH,
  29. DICTIONARY_PATH,
  30. GS_INTERFACE_LOG_PATH,
  31. PRODUCTION_REQUISITION_PATH,
  32. SELL_ORDER_PATH,
  33. RELOCAT_ORDER_PATH,
  34. PRODUCT_REPORT_PATH,
  35. ORDER_LOG_PATH,
  36. INVENTORY_PATH,
  37. GS_ERROR_LOG_PATH,
  38. OTHER_IN_PATH,
  39. OTHER_OUT_PATH,
  40. SCREEN_PURCHASE_PATH,
  41. DELIVER_TRACE_PATH,
  42. } from './name';
  43. import {
  44. Container,
  45. Goods,
  46. Matter,
  47. Menu,
  48. NoPermision,
  49. NotFound,
  50. Pda,
  51. RawInStream,
  52. RawOutStream,
  53. Role,
  54. SemiDraw,
  55. SemiInStream,
  56. SemiOutStream,
  57. SemiReport,
  58. User,
  59. Storage,
  60. ProductInStream,
  61. ProductOutStream,
  62. ReserveWarning,
  63. Quality,
  64. Stock,
  65. Dictionary,
  66. GSInterfaceLog,
  67. ProductionRequisitionOrder,
  68. RelcationOrder,
  69. ProductReport,
  70. DeadProduct,
  71. PurchaseOrder,
  72. MaterialBind,
  73. SellOrder,
  74. OrderDeleteLog,
  75. Inventory,
  76. Login,
  77. GSErrorLog,
  78. OtherIn,
  79. OtherOut,
  80. ScreenPurchase,
  81. DeliverTraces,
  82. } from './routes';
  83. import Main from '@pages/main';
  84. import Home from '@pages/home';
  85. import {userStore} from '@stores';
  86. import {getSettings} from '@apis';
  87. import {SettingsData} from '@models';
  88. async function preloadSettings(url: string) {
  89. try {
  90. const {id} = userStore.getState();
  91. const result = await getSettings({userId: String(id), track: url});
  92. if (result.msg === '200') return new Map([[url, result.data]]);
  93. return new Map([[url, null]]);
  94. } catch (error) {
  95. return new Map([[url, null]]);
  96. }
  97. }
  98. async function preloadSettingsList(keys: string[]) {
  99. const data = await Promise.allSettled([
  100. preloadSettings(keys[0]),
  101. preloadSettings(keys[1]),
  102. ]);
  103. const map = new Map<string, SettingsData | null>();
  104. data.forEach(function (val, idx) {
  105. const key = keys[idx];
  106. if (val.status === 'fulfilled') {
  107. map.set(key, val.value.get(key) || null);
  108. } else {
  109. map.set(key, null);
  110. }
  111. });
  112. return map;
  113. }
  114. export const routes: RouteObject[] = [
  115. {path: LOGIN_PATH, element: <Login />},
  116. {
  117. path: HOME_PATH,
  118. element: <Home />,
  119. },
  120. {path: MAIN_PATH, element: <Main />},
  121. {
  122. path: MENU_PATH,
  123. element: <Menu />,
  124. async loader() {
  125. const keys = [MENU_PATH, '/menu_second_level'];
  126. return preloadSettingsList(keys);
  127. },
  128. },
  129. {
  130. path: ROLE_PATH,
  131. element: <Role />,
  132. async loader() {
  133. return await preloadSettings(ROLE_PATH);
  134. },
  135. },
  136. {
  137. path: USER_PATH,
  138. element: <User />,
  139. async loader() {
  140. return await preloadSettings(USER_PATH);
  141. },
  142. },
  143. {
  144. path: STORAGE_PATH,
  145. element: <Storage />,
  146. async loader() {
  147. return await preloadSettings(USER_PATH);
  148. },
  149. },
  150. {
  151. path: GOODS_PATH,
  152. element: <Goods />,
  153. async loader() {
  154. return await preloadSettings(GOODS_PATH);
  155. },
  156. },
  157. {
  158. path: PDA_MENU_PATH,
  159. element: <Pda />,
  160. async loader() {
  161. return await preloadSettings(PDA_MENU_PATH);
  162. },
  163. },
  164. {
  165. path: CONTAINER_PATH,
  166. element: <Container />,
  167. async loader() {
  168. const keys = [CONTAINER_PATH, '/container_scrap'];
  169. return preloadSettingsList(keys);
  170. },
  171. },
  172. {
  173. path: MATTER_PATH,
  174. element: <Matter />,
  175. async loader() {
  176. return await preloadSettings(MATTER_PATH);
  177. },
  178. },
  179. {
  180. path: QUALITY_PATH,
  181. element: <Quality />,
  182. async loader() {
  183. return await preloadSettings(QUALITY_PATH);
  184. },
  185. },
  186. {
  187. path: RAW_IN_STREAM_PATH,
  188. element: <RawInStream />,
  189. async loader() {
  190. return await preloadSettings(RAW_IN_STREAM_PATH);
  191. },
  192. },
  193. {
  194. path: RAW_OUT_STREAM_PATH,
  195. element: <RawOutStream />,
  196. async loader() {
  197. return await preloadSettings(RAW_OUT_STREAM_PATH);
  198. },
  199. },
  200. {
  201. path: SEMI_REPORT_PATH,
  202. element: <SemiReport />,
  203. async loader() {
  204. return await preloadSettings(SEMI_REPORT_PATH);
  205. },
  206. },
  207. {
  208. path: SEMI_DRAW_PATH,
  209. element: <SemiDraw />,
  210. async loader() {
  211. return await preloadSettings(SEMI_DRAW_PATH);
  212. },
  213. },
  214. {
  215. path: SEMI_IN_STREAM_PATH,
  216. element: <SemiInStream />,
  217. async loader() {
  218. return await preloadSettings(SEMI_IN_STREAM_PATH);
  219. },
  220. },
  221. {
  222. path: SEMI_OUT_STREAM_PATH,
  223. element: <SemiOutStream />,
  224. async loader() {
  225. return await preloadSettings(SEMI_OUT_STREAM_PATH);
  226. },
  227. },
  228. {
  229. path: FINISH_PRODUCT_IN_STREAM_PATH,
  230. element: <ProductInStream />,
  231. async loader() {
  232. return await preloadSettings(FINISH_PRODUCT_IN_STREAM_PATH);
  233. },
  234. },
  235. {
  236. path: FINISH_PRODUCT_OUT_STREAM_PATH,
  237. element: <ProductOutStream />,
  238. async loader() {
  239. return await preloadSettings(FINISH_PRODUCT_OUT_STREAM_PATH);
  240. },
  241. },
  242. {
  243. path: DEAD_PRODUCT_PATH,
  244. element: <DeadProduct />,
  245. async loader() {
  246. return await preloadSettings(DEAD_PRODUCT_PATH);
  247. },
  248. },
  249. {
  250. path: RESERVE_WARNING_PATH,
  251. element: <ReserveWarning />,
  252. async loader() {
  253. return await preloadSettings(RESERVE_WARNING_PATH);
  254. },
  255. },
  256. {
  257. path: PURCHASE_PATH,
  258. element: <PurchaseOrder />,
  259. async loader() {
  260. return await preloadSettings(PURCHASE_PATH);
  261. },
  262. },
  263. {
  264. path: MATERIAL_BIND_PATH,
  265. element: <MaterialBind />,
  266. async loader() {
  267. return await preloadSettings(MATERIAL_BIND_PATH);
  268. },
  269. },
  270. {
  271. path: STOCK_PATH,
  272. element: <Stock />,
  273. async loader() {
  274. return await preloadSettings(STOCK_PATH);
  275. },
  276. },
  277. {
  278. path: DICTIONARY_PATH,
  279. element: <Dictionary />,
  280. async loader() {
  281. return await preloadSettings(DICTIONARY_PATH);
  282. },
  283. },
  284. {
  285. path: GS_INTERFACE_LOG_PATH,
  286. element: <GSInterfaceLog />,
  287. async loader() {
  288. return await preloadSettings(GS_INTERFACE_LOG_PATH);
  289. },
  290. },
  291. {
  292. path: PRODUCTION_REQUISITION_PATH,
  293. element: <ProductionRequisitionOrder />,
  294. async loader() {
  295. return await preloadSettings(PRODUCTION_REQUISITION_PATH);
  296. },
  297. },
  298. {
  299. path: SELL_ORDER_PATH,
  300. element: <SellOrder />,
  301. async loader() {
  302. return await preloadSettings(SELL_ORDER_PATH);
  303. },
  304. },
  305. {
  306. path: RELOCAT_ORDER_PATH,
  307. element: <RelcationOrder />,
  308. async loader() {
  309. return await preloadSettings(RELOCAT_ORDER_PATH);
  310. },
  311. },
  312. {
  313. path: PRODUCT_REPORT_PATH,
  314. element: <ProductReport />,
  315. async loader() {
  316. return await preloadSettings(PRODUCT_REPORT_PATH);
  317. },
  318. },
  319. {
  320. path: ORDER_LOG_PATH,
  321. element: <OrderDeleteLog />,
  322. async loader() {
  323. return await preloadSettings(ORDER_LOG_PATH);
  324. },
  325. },
  326. {
  327. path: INVENTORY_PATH,
  328. element: <Inventory />,
  329. async loader() {
  330. return await preloadSettingsList([
  331. INVENTORY_PATH,
  332. '/inventory_log',
  333. '/inventory_detail',
  334. ]);
  335. },
  336. },
  337. {
  338. path: GS_ERROR_LOG_PATH,
  339. element: <GSErrorLog />,
  340. async loader() {
  341. return await preloadSettings(GS_ERROR_LOG_PATH);
  342. },
  343. },
  344. {
  345. path: OTHER_IN_PATH,
  346. element: <OtherIn />,
  347. async loader() {
  348. return await preloadSettings(OTHER_IN_PATH);
  349. },
  350. },
  351. {
  352. path: OTHER_OUT_PATH,
  353. element: <OtherOut />,
  354. async loader() {
  355. return await preloadSettings(OTHER_OUT_PATH);
  356. },
  357. },
  358. {
  359. path: SCREEN_PURCHASE_PATH,
  360. element: <ScreenPurchase />,
  361. },
  362. {
  363. path: DELIVER_TRACE_PATH,
  364. element: <DeliverTraces />,
  365. async loader() {
  366. return await preloadSettingsList([
  367. PRODUCTION_REQUISITION_PATH,
  368. '/deliver_sn',
  369. ]);
  370. },
  371. },
  372. {path: NO_PERMISSION_PATH, element: <NoPermision />},
  373. {path: '*', element: <NotFound />},
  374. ];
  375. export const router = createBrowserRouter(routes);
  376. export * from './name';