react 路由拦截
import React, { lazy, Suspense } from 'react';
import Edit from '../pages/ceshi/table/AddEdit';
import Details from '../pages/ceshi/table/Details';
import { Navigate, useLocation, useRoutes } from 'react-router-dom';
let Page404 = lazy(() => import('../pages/result/404'));
let Home = lazy(() => import('../pages/home/index'));
let Ceshi = lazy(() => import('../pages/ceshi/ceshi'));
let Login = lazy(() => import('../pages/login/Login'));
let CustomerNeed = lazy(() => import('../pages/ceshi/table'));
let Fixtureeditadd = lazy(() => import('../pages/fixture/customer/fixture/AddEdit'));
let RolePage = lazy(() => import('../pages/system/role/role'));
let Menumanage = lazy(() => import('../pages/system/menu/index'));
let Usermanage = lazy(() => import('../pages/system/user/index'));
let PersonalCenter = lazy(() => import('../pages/system/personal/index'));
let Fixturedemandpu = lazy(() => import('../pages/fixture/platform/index'));
let FixtureDtails = lazy(() => import('../pages/details/index'));
let DetailsAddEdit = lazy(() => import('../pages/details/AddEdit'));
let RoleManage = lazy(() => import('../pages/system/role/index'));
let PerfectDemand = lazy(() => import('../pages/fixture/platform/PerfectDemand'));
let PerfectdetailsDemand = lazy(() => import('../pages/fixture/platform/PerfectDemand/details'));
let FixtureQuotation = lazy(
() => import('../pages/fixture/platform/sale/fixture/FixtureQuotation')
);
let FixtureQuotationDetails = lazy(
() => import('../pages/fixture/platform/sale/fixture/FixtureQuotationDetails')
);
let QuotedPrice = lazy(() => import('../pages/quotedprice/platform/sale/index'));
let QuotedPricecg = lazy(() => import('../pages/quotedprice/platform/purchase/index'));
let QuotationDetails = lazy(() => import('../pages/quotedprice/platform/sale/QuotationDetails'));
let QuotationcgDetails = lazy(
() => import('../pages/quotedprice/platform/purchase/QuotationDetails')
);
let FixturePurchase = lazy(() => import('../pages/purchase/index'));
let EnterpriseNum = lazy(() => import('../pages/system/enterprise'));
let PermissionPage = lazy(() => import('../pages/system/permission'));
let PermissionWord = lazy(() => import('../pages/system/permissionword/index'));
let PurchaseDetails = lazy(() => import('../pages/purchase/platform/PurchaseDetails'));
let InitiatePurchase = lazy(() => import('../pages/fixture/platform/purchase/AddEdit'));
let Verification = lazy(() => import('../pages/verification/index'));
let NumDetailed = lazy(() => import('../pages/verification/NumDetailed'));
let PurchaseEditAdd = lazy(() => import('../pages/purchase/platform/addedit/AddEdit'));
let QuotationsuDetails = lazy(() => import('../pages/purchase/supplier/QuotationsuDetails'));
let UserAddEdit = lazy(() => import('../pages/system/user/AddEdit'));
let DepartmentPage = lazy(() => import('../pages/system/department'));
let DepartmentEidtAdd = lazy(() => import('../pages/system/department/AddEdit'));
namespace SyncRoute {
export type Routes = {
path: string;
element: React.ReactNode;
children?: Routes[];
};
}
export const rootRouter: SyncRoute.Routes[] = [
{
path: '/',
element: <Navigate to="/login" />
},
{
path: '/',
element: (
<Suspense>
<Home />
</Suspense>
),
children: [
{
path: '/edit',
element: (
<Suspense>
<Edit></Edit>
</Suspense>
)
},
{
path: '/department',
element: (
<Suspense>
<DepartmentPage></DepartmentPage>
</Suspense>
)
},
{
path: '/epartmentaddedit',
element: (
<Suspense>
<DepartmentEidtAdd></DepartmentEidtAdd>
</Suspense>
)
},
{
path: '/useraddedit',
element: (
<Suspense>
<UserAddEdit></UserAddEdit>
</Suspense>
)
},
{
path: '/customerneed',
element: (
<Suspense>
<CustomerNeed></CustomerNeed>
</Suspense>
)
},
{
path: '/purchaseeditadd',
element: (
<Suspense>
<PurchaseEditAdd></PurchaseEditAdd>
</Suspense>
)
},
{
path: '/quotationsudetails',
element: (
<Suspense>
<QuotationsuDetails></QuotationsuDetails>
</Suspense>
)
},
{
path: '/verification',
element: (
<Suspense>
<Verification></Verification>
</Suspense>
)
},
{
path: '/numdetailed',
element: (
<Suspense>
<NumDetailed></NumDetailed>
</Suspense>
)
},
{
path: '/permissionpage',
element: (
<Suspense>
<PermissionPage></PermissionPage>
</Suspense>
)
},
{
path: '/purchasedetails',
element: (
<Suspense>
<PurchaseDetails></PurchaseDetails>
</Suspense>
)
},
{
path: '/perfectdetailsdemand',
element: (
<Suspense>
<PerfectdetailsDemand></PerfectdetailsDemand>
</Suspense>
)
},
{
path: '/enterprisenum',
element: (
<Suspense>
<EnterpriseNum></EnterpriseNum>
</Suspense>
)
},
{
path: '/permissionword',
element: (
<Suspense>
<PermissionWord></PermissionWord>
</Suspense>
)
},
{
path: '/detailsaddedit',
element: (
<Suspense>
<DetailsAddEdit></DetailsAddEdit>
</Suspense>
)
},
{
path: '/fixturepurchasecg',
element: (
<Suspense>
<FixturePurchase></FixturePurchase>
</Suspense>
)
},
{
path: '/fixturepurchasegys',
element: (
<Suspense>
<FixturePurchase></FixturePurchase>
</Suspense>
)
},
{
path: '/perfectdemand',
element: (
<Suspense>
<PerfectDemand></PerfectDemand>
</Suspense>
)
},
{
path: '/fixturedtails',
element: (
<Suspense>
<FixtureDtails></FixtureDtails>
</Suspense>
)
},
{
path: '/fixturequotation',
element: (
<Suspense>
<FixtureQuotation></FixtureQuotation>
</Suspense>
)
},
{
path: '/fixturedemandkh',
element: (
<Suspense>
<Fixturedemandpu></Fixturedemandpu>
</Suspense>
)
},
{
path: '/fixturequotationdetails',
element: (
<Suspense>
<FixtureQuotationDetails></FixtureQuotationDetails>
</Suspense>
)
},
{
path: '/fixturedemandyy',
element: (
<Suspense>
<Fixturedemandpu></Fixturedemandpu>
</Suspense>
)
},
{
path: '/sale/quotedpricexs',
element: (
<Suspense>
<QuotedPrice></QuotedPrice>
</Suspense>
)
},
{
path: '/sale/quotedpricekh',
element: (
<Suspense>
<QuotedPrice></QuotedPrice>
</Suspense>
)
},
{
path: '/purchase/quotedpricecg',
element: (
<Suspense>
<QuotedPricecg></QuotedPricecg>
</Suspense>
)
},
{
path: '/purchase/quotedpricegys',
element: (
<Suspense>
<QuotedPricecg></QuotedPricecg>
</Suspense>
)
},
{
path: '/sale/quotationdetails',
element: (
<Suspense>
<QuotationDetails></QuotationDetails>
</Suspense>
)
},
{
path: '/purchase/quotationdetails',
element: (
<Suspense>
<QuotationcgDetails></QuotationcgDetails>
</Suspense>
)
},
{
path: '/fixturedemandgc',
element: (
<Suspense>
<Fixturedemandpu></Fixturedemandpu>
</Suspense>
)
},
{
path: '/fixturedemandxs',
element: (
<Suspense>
<Fixturedemandpu></Fixturedemandpu>
</Suspense>
)
},
{
path: '/fixturedemandcg',
element: (
<Suspense>
<Fixturedemandpu></Fixturedemandpu>
</Suspense>
)
},
{
path: '/initiatepurchase',
element: (
<Suspense>
<InitiatePurchase></InitiatePurchase>
</Suspense>
)
},
{
path: '/fixtureeditadd',
element: (
<Suspense>
<Fixtureeditadd></Fixtureeditadd>
</Suspense>
)
},
{
path: '/details',
element: (
<Suspense>
<Details></Details>
</Suspense>
)
},
{
path: '/ceshi',
element: (
<Suspense>
<Ceshi></Ceshi>
</Suspense>
)
},
{
path: '/role',
element: (
<Suspense>
<RolePage></RolePage>
</Suspense>
)
},
{
path: '/rolemanage',
element: (
<Suspense>
<RoleManage></RoleManage>
</Suspense>
)
},
{
path: '/menumanage',
element: (
<Suspense>
<Menumanage></Menumanage>
</Suspense>
)
},
{
path: '/usermanage',
element: (
<Suspense>
<Usermanage></Usermanage>
</Suspense>
)
},
{
path: '/personalcenter',
element: (
<Suspense>
<PersonalCenter></PersonalCenter>
</Suspense>
)
},
{
path: '*',
element: <Navigate to="/404" />
},
{
path: '/404',
element: (
<Suspense>
<Page404 />
</Suspense>
)
}
]
},
{
path: '/login',
element: (
<Suspense>
<Login />
</Suspense>
)
// meta: {
// requiresAuth: false,
// title: '登录页',
// key: 'login'
// }
},
{
path: '*',
element: <Navigate to="/404" />
}
];
const RouterBeforeEach = (props:any) => {
if (props?.route?.meta?.title) {
document.title = props.route.meta.title;
}
const isLogin = false;
if (props?.route?.meta?.isLogin) {
if (!isLogin) {
return <Navigate to={"/"} replace />;
}
}
const location = useLocation();
const routerKey = location.pathname;
if (isLogin && ["/login"].includes(routerKey)) {
return <Navigate to={"/"} replace />;
}
return <div>{props.children}</div>;
};
// 渲染路由
const renderRoutes = (routes:any) => {
return routes.map((item:any) => {
const route:any = { meta: item?.meta, path: item.path };
if (item.element) {
route.element = (
<RouterBeforeEach route={item}>{item.element}</RouterBeforeEach>
);
}
if (item.children) {
route.children = renderRoutes(item.children);
}
if (item.redirect) {
route.element = <Navigate to={item.redirect} />;
}
return route;
});
};
const Router = () => {
// const routes = useRoutes(rootRouter);
// return routes;
return useRoutes(renderRoutes(rootRouter));
};
export default Router;
import Home from "./Home";
import About from "./About";
export const router = [
{
path: "/",
redirect: "home"
},
{
path: "home",
component: <Home />
},
{
path: "about",
component: <About />,
meta: {
isLogin: true
}
}
];
import { router } from "./routers";
import { Navigate, useRoutes, useLocation } from "react-router-dom";
// 拦截
const RouterBeforeEach = (props) => {
if (props?.route?.meta?.title) {
document.title = props.route.meta.title;
}
const isLogin = false;
if (props?.route?.meta?.isLogin) {
if (!isLogin) {
return <Navigate to={"/"} replace />;
}
}
const location = useLocation();
const routerKey = location.pathname;
if (isLogin && ["/login"].includes(routerKey)) {
return <Navigate to={"/"} replace />;
}
return <div>{props.children}</div>;
};
// 渲染路由
const renderRoutes = (routes) => {
return routes.map((item) => {
const route = { meta: item.meta, path: item.path };
if (item.component) {
route.element = (
<RouterBeforeEach route={item}>{item.component}</RouterBeforeEach>
);
}
if (item.children) {
route.children = renderRoutes(item.children);
}
if (item.redirect) {
route.element = <Navigate to={item.redirect} />;
}
return route;
});
};
export default function Router() {
return useRoutes(renderRoutes(router));
}
本文来自博客园,作者:zjxgdq,转载请注明原文链接:https://www.cnblogs.com/zjxzhj/p/17295093.html

浙公网安备 33010602011771号