| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- import { lazy, Suspense ,useEffect} from 'react';
- import {
- RouteObject,
- Navigate,
- createBrowserRouter,
- useLocation,
- Routes} from 'react-router-dom';
- import { Spin,Modal } from 'antd';
- import LocalStorage from '@/LocalStorage';
- import { apis, LoginApiParams } from '@/apis';
- // 按需加载
- const lazyLoad = (loader: () => Promise<any>) => {
- const Component = lazy(loader);
- const Loading: React.FC = () => {
- return (
- <div className='router-lazyLoad'>
- <Spin />
- </div>
- )
- }
- return (
- <Suspense fallback={<Loading />}>
- <Component />
- </Suspense>
- );
- };
- // 定义登录地址常量
- const loginUrl = 'http://esc.sribs.com.cn:8080/esc-sso/oauth2.0/authorize?client_id=e97f94cf93761f4d69e8&response_type=code';
- // React-Router-Dom@v6 路由表
- const routerList: RouteObject[] = [
- {
- path: '/',
- element: lazyLoad(() => import('@/pages/layout/index')),
- children: [
- {
- index: true,
- element: LocalStorage.getStatusFlag('deepseek:application:list') ? <Navigate to='/deepseek/questionAnswer' /> : <Navigate to='/404' />,
- },
- { /* 问答应用 */
- path: '/deepseek/questionAnswer',
- handle: {
- menuLevel: 1,
- breadcrumbName: '应用广场',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/deepseek/questionAnswer/list/index')),
- },
- { /* 问答应用-创建应用 */
- path: '/deepseek/questionAnswer/create',
- handle: {
- menuLevel: 1,
- breadcrumbName: '创建应用',
- },
- element: lazyLoad(() => import('@/pages/deepseek/questionAnswer/info/index')),
- },
- { /* 问答应用-修改应用 */
- path: '/deepseek/questionAnswer/modify',
- handle: {
- menuLevel: 1,
- breadcrumbName: '修改应用',
- },
- element: lazyLoad(() => import('@/pages/deepseek/questionAnswer/info/index')),
- },
- ]
- },
- { /* 知识库 */
- path: '/deepseek/knowledgeLib',
- handle: {
- menuLevel: 1,
- breadcrumbName: '知识库',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/list/index')),
- },
- { /* 知识库-知识库详情 */
- path: '/deepseek/knowledgeLib/:knowledgeId/:createBy',
- handle: {
- menuLevel: 1,
- breadcrumbName: '知识库详情',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/detail/index'))
- },
- { /* 知识库-知识库详情-切片信息 */
- path: '/deepseek/knowledgeLib/:knowledgeId/:createBy/slice/:documentId/:embeddingId',
- handle: {
- menuLevel: 1,
- breadcrumbName: '切片信息',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/slice/index')),
- },
- { /* 知识库-知识库详情-切片信息-切片详情 */
- path: '/deepseek/knowledgeLib/:knowledgeId/:createBy/slice/:documentId/:embeddingId/:sliceId',
- handle: {
- menuLevel: 1,
- breadcrumbName: '切片详情',
- },
- element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/slice/detail/index')),
- },
- ]
- },
- ]
- },
- ]
- },
- { /* 数据导出 */
- path: '/deepseek/dataExport',
- handle: {
- menuLevel: 1,
- breadcrumbName: '数据导出',
- },
- element: lazyLoad(() => import('@/pages/deepseek/dataExport/index')),
- },
- { /* 数据导出 */
- path: '/deepseek/audit',
- handle: {
- menuLevel: 1,
- breadcrumbName: '应用审核',
- },
- element: lazyLoad(() => import('@/pages/deepseek/audit/index')),
- },
- { /* 帮助文档 */
- path: '/help/*',
- handle: {
- menuLevel: 1,
- breadcrumbName: '帮助文档',
- },
- element: lazyLoad(() => import('@/help/components/HelpLayout')),
- },
- { /* 404 */
- path: '/404',
- element: lazyLoad(() => import('@/components/404/index')),
- },
- { /* 路由不存在重定向404 */
- path: '/*',
- element: <Navigate to='/404' replace={true} />,
- },
- ]
- },
- {
- path: '/',
- element: lazyLoad(() => import('@/pages/layout/index')),
- children: [
- {
- index: true,
- element: <Navigate to='/zhipu/questionAnswer' />,
- },
- { /* 问答应用 */
- path: '/zhipu/questionAnswer',
- handle: {
- menuLevel: 1,
- breadcrumbName: '问答应用',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/platforms/zhipu/questionAnswer/list/index')),
- },
- { /* 问答应用-创建应用 */
- path: '/zhipu/questionAnswer/create',
- handle: {
- menuLevel: 1,
- breadcrumbName: '创建应用',
- },
- element: lazyLoad(() => import('@/pages/platforms/zhipu/questionAnswer/info/index')),
- },
- { /* 问答应用-修改应用 */
- path: '/zhipu/questionAnswer/modify',
- handle: {
- menuLevel: 1,
- breadcrumbName: '修改应用',
- },
- element: lazyLoad(() => import('@/pages/platforms/zhipu/questionAnswer/info/index')),
- },
- ]
- },
- { /* 知识库 */
- path: '/zhipu/knowledgeLib',
- handle: {
- menuLevel: 1,
- breadcrumbName: '知识库',
- },
- children: [
- {
- index: true,
- element: lazyLoad(() => import('@/pages/platforms/zhipu/knowledgeLib/list/index')),
- },
- { /* 知识库-知识库详情 */
- path: '/zhipu/knowledgeLib/:knowledgeId',
- handle: {
- menuLevel: 1,
- breadcrumbName: '知识库详情',
- },
- element: lazyLoad(() => import('@/pages/platforms/zhipu/knowledgeLib/detail/index')),
- },
- ]
- },
- { /* 数据导出 */
- path: '/zhipu/dataExport',
- handle: {
- menuLevel: 1,
- breadcrumbName: '数据导出',
- },
- element: lazyLoad(() => import('@/pages/platforms/zhipu/dataExport/index')),
- },
- { /* 404 */
- path: '/404',
- element: lazyLoad(() => import('@/components/404/index')),
- },
- { /* 路由不存在重定向404 */
- path: '/*',
- element: <Navigate to='/404' replace={true} />,
- },
- ]
- },
- { /* 登录 */
- path: '/login',
- element: lazyLoad(() => import('@/pages/login/index'))
- },
- // { /* 登录 */
- // path: '/imgPre',
- // element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/slice/detail/imgPre'))
- // },
- // { /* 登录 */
- // path: '/mdk',
- // element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/slice/detail/mdk'))
- // },
- // { /* 登录 */
- // path: '/testPreImg',
- // element: lazyLoad(() => import('@/pages/deepseek/knowledgeLib/slice/detail/testPreImg'))
- // }
- ]
- // 路由模式-浏览器路由
- const router = createBrowserRouter(routerList);
- // 路由白名单
- const whiteList = ['/login'];
- // 前置路由
- router.routes.forEach((route: any) => {
- interface RouterComponentProps {
- component?: React.ReactNode,
- }
- // 路由组件-路由鉴权
- function RouterComponent(props: RouterComponentProps) {
- const { component } = props;
- const location = useLocation();
- const path = location.pathname;
- const originUrl = window.location.origin;
- const fullUrl = window.location.href;
- const urlParams = new URLSearchParams(new URL(fullUrl).search);
- const code = urlParams.get('code');
- const state = urlParams.get('state');
- const userInfo = localStorage.getItem('userInfo');
- const token = urlParams.get('token');
- if (token) {// 通过token登陆
- const checkToken = async (token: string) => {
- try {
- const res = await apis.checkToken(token);
- if(res.data.status) {
- localStorage.setItem('token', token);
- LocalStorage.setPermissions(res.permissions);
- LocalStorage.setRoles(res.roles);
- LocalStorage.setUserInfo({
- id: res.user.userId,
- name: res.user.nickName,
- });
- // 重新登录时,重置引导展开状态为默认展开
- localStorage.removeItem('appGuideExpanded');
- localStorage.removeItem('knowledgeGuideExpanded');
- localStorage.removeItem('knowledgeDocGuideExpanded');
- window.location.replace(originUrl + path);
- }
- } catch (error: any) {
- Modal.error({
- title: 'Error',
- content: 'token验证失败',
- })
- }
- return <Navigate to='/login' replace={true} />
- }
- checkToken(token);
- } else if (LocalStorage.getToken()) {// 已登录
- return <>{component}</>
- } else {// 未登录
- const jkLogin = async (data: { code: string, redirectUrl: string }, url: string) => {
- try {
- const res = await apis.jklogin(data);
- console.log(res.data,"res.data");
- localStorage.setItem('token', res.data.token);
- window.location.replace(url);
- } catch (error: any) {
- Modal.error({
- title: '登录失败',
- content: error.msg,
- })
- }
- }
- if (fullUrl.includes(originUrl + '/?code') && code && state) {// 通过code登陆
- if (!userInfo) {
- jkLogin({ code: code, redirectUrl: encodeURIComponent(originUrl) }, state);
- }
- }
- // else {
- // //测试环境
- // //const loginUrl = 'https://esctest.sribs.com.cn/esc-sso/oauth2.0/authorize?client_id=e97f94cf93761f4d69e8&response_type=code';
- // //生产环境
- // const loginUrl = 'http://esc.sribs.com.cn:8080/esc-sso/oauth2.0/authorize?client_id=e97f94cf93761f4d69e8&response_type=code';
- // const externalLoginUrl = loginUrl + `&redirect_uri=${encodeURIComponent(originUrl)}&state=${encodeURIComponent(fullUrl)}`;
- // if (!userInfo) {
- // window.location.replace(externalLoginUrl);
- // }
- // }
- else {// 未登录
- if (whiteList.includes(path)) {
- return <>{component}</>
- } else {
- return <Navigate to='/login' replace={true} />
- }
- }
- }
- }
- route.element = <RouterComponent component={route.element} />
- });
- export default router;
|