瀏覽代碼

no message

zhejiushizhuce 2 年之前
父節點
當前提交
b2257fdd27
共有 5 個文件被更改,包括 47 次插入 和 21 次删除
  1. 2 2
      src/features/mainSlice.js
  2. 14 0
      src/hooks/usePreviousRoute.js
  3. 6 5
      src/layout/Layout.jsx
  4. 25 13
      src/layout/Routes/index.jsx
  5. 0 1
      src/widgets/WGame/index.jsx

+ 2 - 2
src/features/mainSlice.js

@@ -56,8 +56,8 @@ const generateRoutes=(routes,asyncRoutes=[])=>{
                     // if (route.path==="#/signin"||route.path==="#/signup"){
                     //     route.component="Login";
                     // }
-                    // if (route.path==="#/settings"){
-                    //     route.component="settings";
+                    // if (route.path==="/slots"){
+                    //     route.login=1;
                     // }
                     allMap[route.path]=route;
                     let type=route.type;

+ 14 - 0
src/hooks/usePreviousRoute.js

@@ -0,0 +1,14 @@
+import {useLocation} from 'react-router-dom';
+import {useEffect, useRef, useState} from 'react';
+const usePreviousRoute = () => {
+    const location = useLocation();
+    const prevLocation = useRef(null);
+
+    useEffect(() => {
+        prevLocation.current = location;
+        }, [location]);
+
+    return prevLocation.current;
+}
+
+export default usePreviousRoute

+ 6 - 5
src/layout/Layout.jsx

@@ -5,9 +5,9 @@ import BottomNav from "@layout/BottomNav";
 import AppContainer from "@layout/AppContainer";
 import React, {cloneElement, createRef, lazy, Suspense, useEffect, useRef, useState} from "react";
 import LoadingScreen from "@components/LoadingScreen";
-import {Route, Routes, useLocation} from "react-router-dom";
+import {Route, Routes, useLocation, useNavigate} from "react-router-dom";
 import {useSelector} from "react-redux";
-import {isFullRoute, routesIn, routesPop} from "@features/mainSlice";
+import {isFullRoute, isLogined, routesIn, routesPop} from "@features/mainSlice";
 import {preventDefault} from "@utils/helpers";
 import {useThemeProvider} from "@contexts/themeContext";
 import CRoute from "@layout/Routes";
@@ -27,6 +27,7 @@ const Layout=()=>{
     const isFull = useSelector(isFullRoute(pathname));
     const inRoutes=useSelector(routesIn);
     const popRoutes=useSelector(routesPop);
+    const isLogin=useSelector(isLogined);
     useEffect(() => {
         // scroll to top on route change
         appRef.current && appRef.current.scrollTo(0, 0);
@@ -42,7 +43,7 @@ const Layout=()=>{
                 <AppContainer>
                     <div className="app_container-content d-flex flex-column flex-1">
                         <Suspense fallback={<LoadingScreen/>}>
-                            <CBrowserRouter routes={inRoutes}/>
+                            <CBrowserRouter isLogin={isLogin} routes={inRoutes}/>
                         </Suspense>
                     </div>
                     <Footer />
@@ -56,7 +57,7 @@ const Layout=()=>{
             <div className={`app fluid`} ref={appRef}>
                 <div className="app_container_full">
                     <Suspense fallback={<LoadingScreen/>}>
-                        <CBrowserRouter routes={inRoutes}/>
+                        <CBrowserRouter isLogin={isLogin} routes={inRoutes}/>
                     </Suspense>
                 </div>
             </div>
@@ -76,7 +77,7 @@ const Layout=()=>{
         //     </div>
         // )
         return (
-            <CHashRouter routes={popRoutes} hlocation={{
+            <CHashRouter isLogin={isLogin} routes={popRoutes} hlocation={{
                 pathname: pathname,
                 search: search,
                 hash: hash

+ 25 - 13
src/layout/Routes/index.jsx

@@ -6,46 +6,53 @@ import TransitionGroup from "react-transition-group/TransitionGroup";
 import CSSTransition from "react-transition-group/CSSTransition";
 import SubScreen from "@components/SubScreen";
 import RouteContainer from "@layout/Routes/RouteContainer";
+import {Navigate, useLocation} from "react-router";
+import usePreviousRoute from "@hooks/usePreviousRoute";
 const RouteWrapper = lazy(() => import('@layout/Routes/RouteWrapper'));
 
 const PageNotFound = lazy(() => import('@pages/PageNotFound'));
 
-const createRoute=(props)=>{
-    const {route,path}=props;
+const CreateRoute=(props)=>{
+    const {route,path,isLogin}=props;
     const component=(route.component!=null&&route.component!=="")?route.component:"ModulePage";
     const Component = AllComponents[component];
     const checkLogin=()=>{
+        if (!isLogin&&route.login===1){
+            return (<Navigate to={route.lpath} replace={true}></Navigate>)
+        }
         return (
             <RouteWrapper {...{ ...props, Comp: Component, route: route }}  />
         )
     }
     return (
-        <Route
-            key={route.path}
-            exact
-            path={path?path:route.path}
-            element={checkLogin()}
-        >
+        <>
+            <Route
+                key={route.path}
+                exact
+                path={path?path:route.path}
+                element={checkLogin()}
+            >
 
-        </Route>
+            </Route>
+        </>
     )
 }
 
 const CBrowserRouter=(props)=>{
-    const {routes}=props;
+    const {routes,isLogin}=props;
     return (
         <Routes>
             <Route path="*" element={<PageNotFound/>}/>
             {
                 routes.map((route,index)=>{
-                    return createRoute({...props,route,path:route.path});
+                    return CreateRoute({...props,route,path:route.path,isLogin:isLogin});
                 })
             }
         </Routes>
     )
 }
 const CHashRouter=(props)=>{
-    const {routes,hlocation}=props;
+    const {routes,hlocation,isLogin}=props;
     const navigate = useNavigate()
     //多hash 切到最后一个
     let {pathname,hash,search}=hlocation;
@@ -77,6 +84,11 @@ const CHashRouter=(props)=>{
                     let hash="#"+item;
                     let route=getRoutes(hash);
                     if (route==null)return (<></>);
+                    if (!isLogin&&route.login==1){
+                        //检测未登录
+                        navigate(route.lpath,{replace:true});
+                        return (<></>);
+                    }
                     return (
                         <CSSTransition timeout={timeout}>
                             <RouteContainer route={route} timeout={timeout} onClose={handleClose}>
@@ -85,7 +97,7 @@ const CHashRouter=(props)=>{
                                         {
                                             routes.map((route)=>{
                                                 if (route.path===hash){
-                                                    return createRoute({...props,route,path:currpath,close:handleClose});
+                                                    return CreateRoute({...props,route,path:currpath,close:handleClose,isLogin:isLogin});
                                                 }
                                                 else return (<></>);
                                             })

+ 0 - 1
src/widgets/WGame/index.jsx

@@ -8,7 +8,6 @@ const WGame=()=>{
         let data=event.data;
         // console.log(data);
         if (data&&data.cmd!=null){
-            console.log(data.cmd)
             // toast.success(JSON.stringify(data))
             if (data.cmd=="back"){
                 navigate(-1)