You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
2.2 KiB
51 lines
2.2 KiB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; |
|
import React, { lazy, useState } from 'react'; |
|
import { Route, Routes, useLocation, useNavigate } from 'react-router-dom'; |
|
import zhCN from 'antd/es/locale/zh_CN'; |
|
import { ConfigProvider, Result } from 'antd'; |
|
import { useRequest } from 'ahooks'; |
|
import { getPath, UserMenuContext, analysisTree } from './utils'; |
|
import { setStorage, logoutOut } from '@component/utils'; |
|
import Layout from './layout'; |
|
import { isEmpty, last, includes, map } from 'lodash'; |
|
import { getUserInfo } from 'userContext'; |
|
import routes from 'routes'; |
|
export default () => { |
|
const location = useLocation(); |
|
const navigate = useNavigate(); |
|
const { loading, data = {} } = useRequest(getUserInfo, { |
|
onSuccess({ userInfo, menu }) { |
|
if (userInfo) { |
|
setStorage(userInfo); |
|
} |
|
if (isEmpty(userInfo)) { |
|
navigate('/404'); |
|
return null; |
|
} |
|
if (isEmpty(menu)) { |
|
navigate('/404'); |
|
return null; |
|
} |
|
else { |
|
const paths = location.pathname.split('/'); |
|
const item = last(paths); |
|
if (item === 'app') { |
|
const path = getPath(menu); |
|
navigate(path, { |
|
replace: true, |
|
}); |
|
} |
|
} |
|
}, |
|
onError(ERROR) { |
|
console.log(ERROR, 'ERROR'); |
|
logoutOut(navigate, 'logoutOut'); |
|
}, |
|
}); |
|
if (loading) { |
|
return null; |
|
} |
|
const menuPath = analysisTree(data.menu, 'path'); |
|
const authRoutes = routes.filter((item) => includes(menuPath, '/app/' + item.auth)); |
|
return (_jsx(UserMenuContext.Provider, Object.assign({ value: data }, { children: _jsx(ConfigProvider, Object.assign({ locale: zhCN }, { children: _jsxs(Routes, { children: [_jsx(Route, Object.assign({ path: "/", element: _jsx(Layout, {}) }, { children: authRoutes.map((item) => (_jsx(Route, { path: item.path, element: item.element }, item.path))) })), _jsx(Route, { path: "*", element: _jsx(Result, { status: "404", title: "404" }) })] }) })) }))); |
|
};
|
|
|