skyouc
7 天以前 6732a988fe843cf59f12aae1460fc97fda5408dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import React, { useState, useRef, useEffect, useMemo } from "react";
import { Route } from "react-router-dom";
import {
  Admin,
  Resource,
  CustomRoutes,
  localStorageStore,
  useStore,
  StoreContextProvider,
  resolveBrowserLocale,
} from "react-admin";
import polyglotI18nProvider from "ra-i18n-polyglot";
import englishMessages from "./i18n/en";
import zhMessages from "./i18n/zh";
import { Layout } from "./layout";
import AuthProvider from "./config/authProvider";
import DataProvider from "./config/dataProvider";
import Dashboard from "./page/dashboard";
import Settings from "./page/settings";
import Login from "./page/login";
import * as Common from "./utils/common";
import { themes } from "./themes/themes";
import {
  SPA_NAME,
  SPA_VERSION,
  DEFAULT_THEME_NAME,
  DEFAULT_THEME_MODE,
  DATA_PROVIDER_SPRING,
} from "./config/setting";
import ResourceContent from "./page/ResourceContent";
import { getSystemInfo, getSystemDicts, tenants } from "@/api/auth";
import chineseMessages from 'ra-language-chinese';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import { zhCN } from '@mui/material/locale';
 
const i18nProvider = polyglotI18nProvider(
  (locale) => {
    if (locale === "en") {
      return import("./i18n/en").then((messages) => messages.default);
    }
    return { ...chineseMessages, ...zhMessages };
  },
  "zh",
  [
    { locale: "en", name: "English" },
    { locale: "zh", name: "简体中文" },
    { locale: "jp", name: "日本語" },
    { locale: "kr", name: "한국인" },
    { locale: "ru", name: "Russian" },
    { locale: "lk", name: "Русский" },
    { locale: "es", name: "Española" },
        
  ],
  {
    // msg in console
    allowMissing: true,
  },
);
 
 
const theme = createTheme(
  {
    palette: { main: '#1976d2' },
  },
  zhCN
)
 
 
const store = localStorageStore(SPA_VERSION, SPA_NAME);
 
const App = () => {
  const [themeName] = useStore("themeName", DEFAULT_THEME_NAME);
  const lightTheme = themes.find((theme) => theme.name === themeName)?.light;
  const darkTheme = themes.find((theme) => theme.name === themeName)?.dark;
 
  useEffect(() => {
    getSystemInfo().then((data) => {
      localStorage.setItem("system", JSON.stringify(data));
    })
  }, []);
 
  return (
    <>
      <Admin
        disableTelemetry
        layout={Layout}
        authProvider={AuthProvider}
        store={store}
        lightTheme={lightTheme}
        darkTheme={darkTheme}
        defaultTheme={DEFAULT_THEME_MODE}
        i18nProvider={i18nProvider}
        dataProvider={DataProvider(DATA_PROVIDER_SPRING)}
        loginPage={Login}
        dashboard={Dashboard}
      >
        {(permissions) => (
          <>
            {Common.extractNavMenus(permissions)?.map((node) => {
              return (
                <Resource
                  key={node.id}
                  name={node.component}
                  {...ResourceContent(node)}
                />
              );
            })}
          </>
        )}
        {/* CustomRoutes don't trigger checkAuth */}
        <CustomRoutes>
          <Route path="/dashboard" element={<Dashboard />} />
          <Route path="/settings" element={<Settings />} />
        </CustomRoutes>
      </Admin>
    </>
  );
};
 
const AppWrapper = () => (
  <ThemeProvider theme={theme}>
    <StoreContextProvider value={store}>
      <App />
    </StoreContextProvider>
  </ThemeProvider>
 
);
 
export default AppWrapper;