- 实现 React + Arco Design Pro 基础框架 - 添加页面路由和布局组件 - 实现用户认证和权限管理 - 添加数据可视化图表组件 - 实现列表、表单等常用页面模块 - 配置 Redux 状态管理 - 添加工具函数和自定义 Hooks
99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
import './style/global.less';
|
|
import React, { useEffect } from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import { createStore } from 'redux';
|
|
import { Provider } from 'react-redux';
|
|
import { ConfigProvider } from '@arco-design/web-react';
|
|
import zhCN from '@arco-design/web-react/es/locale/zh-CN';
|
|
import enUS from '@arco-design/web-react/es/locale/en-US';
|
|
import { BrowserRouter, Switch, Route } from 'react-router-dom';
|
|
import axios from 'axios';
|
|
import rootReducer from './store';
|
|
import PageLayout from './layout';
|
|
import { GlobalContext } from './context';
|
|
import Login from './pages/login';
|
|
import checkLogin from './utils/checkLogin';
|
|
import changeTheme from './utils/changeTheme';
|
|
import useStorage from './utils/useStorage';
|
|
import './mock';
|
|
|
|
const store = createStore(rootReducer);
|
|
|
|
function Index() {
|
|
const [lang, setLang] = useStorage('arco-lang', 'en-US');
|
|
const [theme, setTheme] = useStorage('arco-theme', 'light');
|
|
|
|
function getArcoLocale() {
|
|
switch (lang) {
|
|
case 'zh-CN':
|
|
return zhCN;
|
|
case 'en-US':
|
|
return enUS;
|
|
default:
|
|
return zhCN;
|
|
}
|
|
}
|
|
|
|
function fetchUserInfo() {
|
|
store.dispatch({
|
|
type: 'update-userInfo',
|
|
payload: { userLoading: true },
|
|
});
|
|
axios.get('/api/user/userInfo').then((res) => {
|
|
store.dispatch({
|
|
type: 'update-userInfo',
|
|
payload: { userInfo: res.data, userLoading: false },
|
|
});
|
|
});
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (checkLogin()) {
|
|
fetchUserInfo();
|
|
} else if (window.location.pathname.replace(/\//g, '') !== 'login') {
|
|
window.location.pathname = '/login';
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
changeTheme(theme);
|
|
}, [theme]);
|
|
|
|
const contextValue = {
|
|
lang,
|
|
setLang,
|
|
theme,
|
|
setTheme,
|
|
};
|
|
|
|
return (
|
|
<BrowserRouter>
|
|
<ConfigProvider
|
|
locale={getArcoLocale()}
|
|
componentConfig={{
|
|
Card: {
|
|
bordered: false,
|
|
},
|
|
List: {
|
|
bordered: false,
|
|
},
|
|
Table: {
|
|
border: false,
|
|
},
|
|
}}
|
|
>
|
|
<Provider store={store}>
|
|
<GlobalContext.Provider value={contextValue}>
|
|
<Switch>
|
|
<Route path="/login" component={Login} />
|
|
<Route path="/" component={PageLayout} />
|
|
</Switch>
|
|
</GlobalContext.Provider>
|
|
</Provider>
|
|
</ConfigProvider>
|
|
</BrowserRouter>
|
|
);
|
|
}
|
|
|
|
ReactDOM.render(<Index />, document.getElementById('root'));
|