codernew-api-frontend/src/main.tsx
gaoziman f77675e5fc feat(核心): 添加项目源代码
- 实现 React + Arco Design Pro 基础框架
- 添加页面路由和布局组件
- 实现用户认证和权限管理
- 添加数据可视化图表组件
- 实现列表、表单等常用页面模块
- 配置 Redux 状态管理
- 添加工具函数和自定义 Hooks
2025-11-05 09:48:31 +08:00

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'));