index.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {
  2. RouteObject,
  3. createBrowserRouter,
  4. } from "react-router-dom";
  5. import App from "../App";
  6. import { MenuItemType } from "antd/es/menu/interface";
  7. import LoginPage from "@src/views/login/login";
  8. export type AdminRouterItem = RouteObject & {
  9. // set antd menu props in meta
  10. meta?: MenuItemType
  11. children?: AdminRouterItem[]
  12. }
  13. /**
  14. * auto load route from views/***\/*.router.ts
  15. * @returns route
  16. */
  17. const loadRouteModules = async () => {
  18. const routeModuleFiles = import.meta.glob('../views/**/*.router.tsx', {
  19. eager: true,
  20. import: 'default'
  21. })
  22. const routeModules: AdminRouterItem[] = []
  23. for await (const [key, module] of Object.entries(routeModuleFiles)) {
  24. console.log('key = ', key, 'module = ', module)
  25. if (module) {
  26. const routes = Array.isArray(module) ? module : [module];
  27. routeModules.push(...routes);
  28. }
  29. }
  30. return routeModules
  31. }
  32. export const routes: AdminRouterItem[] = [
  33. ...await loadRouteModules()
  34. ]
  35. export default createBrowserRouter([
  36. {
  37. path: "/",
  38. element: <App />,
  39. children: routes,
  40. },
  41. {
  42. path: "/login",
  43. element: <LoginPage />,
  44. }
  45. ])