Ver código fonte

修改游戏模块

zhejiushizhuce 2 anos atrás
pai
commit
2061ce6021

+ 2 - 0
src/api/config.js

@@ -93,3 +93,5 @@ export const APP_CHECKIN_GET=BASE_PREFIX+"checkin/get";
 export const APP_FAVO_ADD=BASE_PREFIX+"favo/add";
 export const APP_FAVO_REMOVE=BASE_PREFIX+"favo/remove";
 export const APP_FAVO_GET=BASE_PREFIX+"favo/get";
+//gameInfo
+export const APP_GAME_CARD_INFO=BASE_PREFIX+"gameinfo";

+ 7 - 3
src/components/GameItem/index.jsx

@@ -11,7 +11,7 @@ import LazyImgix from "@components/Imgix/LazyImgix";
 import {ReactComponent as UNLikeIcon} from "@assets/singlesvg/xiai_bai.svg";
 import {ReactComponent as LikeIcon} from "@assets/singlesvg/xiai_hong.svg";
 import {useDispatch, useSelector} from "react-redux";
-import {getGameLike, isLogined, updateGameLike} from "@features/mainSlice";
+import {getGameLike, isLogined, updateGameCardInfo, updateGameLike} from "@features/mainSlice";
 import {updatePageGameLike} from "@features/pageSlice";
 import SvgIcon from "@components/SvgIcon";
 import {reqUpdateFavoInfo} from "@features/api";
@@ -82,8 +82,12 @@ const GameItem=({data,handleRoom,whStyle,...props})=>{
     const onEnterGame=()=>{
         let id=data.id;
         let url=data.link;
-        localStorageSet(LOCAL_GAME_URL+id,url);
-        saveGameInfo(data);
+        // localStorageSet(LOCAL_GAME_URL+id,url);
+        // saveGameInfo(data);
+        dispatch(updateGameCardInfo({
+            data:data,
+            level:0
+        }))
         let path=ROUTE_PATH.GAME+"/"+id;
         global.authLockPath=path;
         navigate(path);

+ 9 - 2
src/components/GameRoom/index.jsx

@@ -14,6 +14,8 @@ import styled from 'styled-components/macro';
 import Button from "@mui/material/Button";
 import Popup from "@components/Popup";
 import {useSpringRef} from "@react-spring/core";
+import {updateGameCardInfo} from "@features/mainSlice";
+import {useDispatch} from "react-redux";
 const gameBgs=[null,bg_1,bg_2,bg_3,bg_2];
 const fontColors=["","#bc9350","#208e3c","#bc9350","#208e3c"];
 const i18n=global.i18n;
@@ -43,6 +45,7 @@ const GameRoom = ({open,data,height="5rem",mobile=false,user,onClose,...props})
     })
     const conRef=useRef();
     // const [cstyle,setCstyle]=useState(null)
+    const dispatch=useDispatch();
     useEffect(()=>{
        return ()=>{
 
@@ -74,8 +77,12 @@ const GameRoom = ({open,data,height="5rem",mobile=false,user,onClose,...props})
         let url=data.link;
         if (url.indexOf("?"))url+=("&level="+item.type);
         else url+=("?level="+item.type);
-        localStorageSet(LOCAL_GAME_URL+id,url);
-        saveGameInfo(data);
+        localStorageSet(LOCAL_GAME_URL+id,item.type);
+        // saveGameInfo(data);
+        dispatch(updateGameCardInfo({
+            data:data,
+            level:item.type
+        }))
         let path=ROUTE_PATH.GAME+"/"+id;
         global.authLockPath=path;
         navigate(path);

+ 15 - 1
src/features/api.js

@@ -7,7 +7,7 @@ import {
     APP_CHANGE_PAY_PASS,
     APP_CHANGE_PHONE, APP_CHECKIN_CHECK, APP_CHECKIN_GET, APP_CUSTOMER_LEAVEMSG,
     APP_CUSTOMER_SERVICE, APP_FAVO_ADD, APP_FAVO_GET, APP_FAVO_REMOVE,
-    APP_FIRSTPAY_CONFIG, APP_GAME_ACTIVITY,
+    APP_FIRSTPAY_CONFIG, APP_GAME_ACTIVITY, APP_GAME_CARD_INFO,
     APP_GAME_INFO,
     APP_GAME_LIST,
     APP_LOGIN,
@@ -725,4 +725,18 @@ export const reqFavoGet=createAsyncThunk(
         return response;
     }
 )
+//game card info
+export const reqGameCardInfo=createAsyncThunk(
+    APP_GAME_CARD_INFO,
+    async (arg,thunkAPI)=>{
+        let params={
+            url:APP_GAME_CARD_INFO,
+            params:{
+                id:arg
+            }
+        }
+        const response=await Http.get(params);
+        return response;
+    }
+)
 //api

+ 36 - 4
src/features/mainSlice.js

@@ -14,7 +14,7 @@ import {REQ_STATUS} from "@api/config";
 import {
     buildReqReducer, reqChangeEmail,
     reqChangeInfo,
-    reqChangePass, reqChangePhone, reqCustomLeaveMsg, reqCustomService, reqFavoGet, reqGameInfo,
+    reqChangePass, reqChangePhone, reqCustomLeaveMsg, reqCustomService, reqFavoGet, reqGameCardInfo, reqGameInfo,
     reqGetRoutes,
     reqLogin,
     reqLogout,
@@ -24,7 +24,7 @@ import {toast} from 'react-toastify';
 import {getHttpMsg, localStorageGet, localStorageSet} from "@utils/helpers";
 import {
     LOCAL_CUSTOM_LOCK,
-    LOCAL_FAVO_IDS,
+    LOCAL_FAVO_IDS, LOCAL_GAME_URL,
     LOCAL_IS_LOGIN,
     LOCAL_SIGN,
     LOCAL_USER_INFO,
@@ -388,6 +388,23 @@ const reducerFavoGet=(state,action,arg)=>{
         state.favorites=favorites;
     }
 }
+const reducerGameCardInfo=(state,action,arg)=>{
+    let payload=action.payload;
+    if (payload&&payload.code===200){
+        let data=payload.data;
+        if (data!=null){
+            let id=Number(data.id);
+            let level_info=data.level_info;
+            let level=level_info!=null?1:0;
+            let local=parseInt(localStorageGet(LOCAL_GAME_URL+id,0));
+            if (local>0)level=local;
+            state.gameCardInfo[id]={...data,level:level}
+        }
+    }
+}
+const gameCardInfoStatus=(state,status,arg)=>{
+    state.gameCardInfoStatus=status;
+}
 //custom
 export const Main=createSlice({
     name: 'main',
@@ -420,7 +437,9 @@ export const Main=createSlice({
         gameID:0,
         serverKick:0,
         promoteInstall:0,
-        openPay:0
+        openPay:0,
+        gameCardInfoStatus:REQ_STATUS.NONE,
+        gameCardInfo:{}
     },
     reducers: {
         logout:(state, action)=>{
@@ -483,6 +502,14 @@ export const Main=createSlice({
                 let type = action.payload;
                 route.type = type;
             }
+        },
+        updateGameCardInfo:(state,action)=>{
+            let {data,level}=action.payload;
+            if (data!=null){
+                if (level==null)level=0;
+                let id=data.id;
+                state.gameCardInfo[id]={...data,level};
+            }
         }
     },
     extraReducers: (builder) => {
@@ -501,9 +528,10 @@ export const Main=createSlice({
         buildReqReducer(builder,reqCustomLeaveMsg,reducerCustomLeaveMsg,customLeaveMsgStatus);
         buildReqReducer(builder,reqUpdateFavoInfo,reducerUpdateFavoInfo,null);
         buildReqReducer(builder,reqFavoGet,reducerFavoGet,null);
+        buildReqReducer(builder,reqGameCardInfo,reducerGameCardInfo,gameCardInfoStatus);
     },
 })
-export const {logout,updateUserInfo,updateUserScore,updateAddScore,updateGameLike,updateCurrGame,updateServerKick,updateOpenPay,updateGameRoute} = Main.actions;
+export const {logout,updateUserInfo,updateUserScore,updateAddScore,updateGameLike,updateCurrGame,updateServerKick,updateOpenPay,updateGameRoute,updateGameCardInfo} = Main.actions;
 //数据获取
 export const getFetchStatus=(state)=>{
     return state.main.status;
@@ -675,6 +703,10 @@ export const getPromoteInstall=(state)=>{
 export const getOpenPay=(state)=>{
     return state.main.openPay;
 }
+export const getGameCardInfo=(id)=>(state)=>{
+    id=Number(id);
+    return state.main.gameCardInfo[id];
+}
 //数据获取
 export default Main.reducer;
 

+ 41 - 20
src/widgets/WGame/WDGame/WDGame.jsx

@@ -5,7 +5,7 @@ import {LOCAL_GAME_INFO, LOCAL_GAME_URL, LOCAL_SIGN} from "@constants/localkey";
 import {localStorageGet, openFullScreen} from "@utils/helpers";
 import React, {useEffect, useState} from "react";
 import {useDispatch, useSelector} from "react-redux";
-import {getGameLike, getRoute, isLogined, updateGameLike} from "@features/mainSlice";
+import {getGameCardInfo, getGameLike, getRoute, isLogined, updateGameLike} from "@features/mainSlice";
 import BreadCrumb from "@layout/BreadCrumb";
 import {useThemeProvider} from "@contexts/themeContext";
 import {getHallConnState} from "@features/socketSlice";
@@ -15,14 +15,16 @@ import SvgIcon from "@components/SvgIcon";
 import useGameIFrame from "@hooks/useGameIFrame";
 import MTooltip from "@components/MTooltip";
 import {updatePageGameLike} from "@features/pageSlice";
-import {reqUpdateFavoInfo} from "@features/api";
+import {reqGameCardInfo, reqUpdateFavoInfo} from "@features/api";
 import Popup from "@components/Popup";
+import LoadingIn from "@components/Loading/LoadingIn";
 const i18n=global.i18n;
 
 const WDGame=()=>{
     // const {pathname}=useLocation();
     const {preLocation,gameID} = useThemeProvider();
     const gameid=gameID;
+    const gameCardInfo=useSelector(getGameCardInfo(gameid))
     const [gameURL, setGameURL] = useState("");
     const [gameInfo, setGameInfo] = useState({});
     const prePathname=preLocation.pathname==null?"/casino":preLocation.pathname;
@@ -86,7 +88,9 @@ const WDGame=()=>{
     const parseURL=()=>{
         let key=LOCAL_GAME_URL+gameid;
         let sign=localStorageGet(LOCAL_SIGN);
-        let url=localStorageGet(key);
+        // let url=localStorageGet(key);
+        let url=gameCardInfo.link;
+        if (gameCardInfo.level>0)url+="&level="+gameCardInfo.level;
         if (url==null)return;
         if (url.indexOf("?")===-1)url=url+"?sign="+sign;
         else url=url+"&sign="+sign;
@@ -94,13 +98,14 @@ const WDGame=()=>{
     }
     const parseInfo=()=>{
         if (gameid==="")return;
-        let local=localStorageGet(LOCAL_GAME_INFO+gameid);
-        if (local!=null&&local!==""){
-            let info=JSON.parse(local);
-            if (info!=null){
-                setGameInfo(info.data);
-            }
-        }
+        // let local=localStorageGet(LOCAL_GAME_INFO+gameid);
+        // if (local!=null&&local!==""){
+        //     let info=JSON.parse(local);
+        //     if (info!=null){
+        //         setGameInfo(info.data);
+        //     }
+        // }
+        setGameInfo(gameCardInfo);
     }
     const getRouteChain=()=>{
         let chain=[];
@@ -137,8 +142,9 @@ const WDGame=()=>{
         if(isLogin)dispatch(reqUpdateFavoInfo(info));
     }
     useEffect(()=>{
-        parseURL();
-        parseInfo();
+        if (Number(gameid)>0&&gameCardInfo==null){
+            dispatch(reqGameCardInfo(gameid));
+        }
         return ()=>{
         }
     },[gameid])
@@ -147,6 +153,12 @@ const WDGame=()=>{
             setIsGameLoad(false);
         }
     },[isConnected])
+    useEffect(()=>{
+        if (gameCardInfo!=null){
+            parseURL();
+            parseInfo();
+        }
+    },gameCardInfo);
     const renderTopNavBar=()=>{
         let chain=getRouteChain();
         let brand=gameInfo.brand?gameInfo.brand:"";
@@ -165,6 +177,7 @@ const WDGame=()=>{
         if (gameInfo&&gameInfo.title!=null){
             title=gameInfo.title;
         }
+        let play_num=gameInfo.play_num!=null?gameInfo.play_num:0;
         return (
             <div className={`${styles.game_area} ${movieMode?styles.movie_mode:''}`}>
                 <div className={`${styles.game_action_wrap} ${styles.game_action_wrap_top}`}></div>
@@ -190,7 +203,9 @@ const WDGame=()=>{
                     <div className={styles.action_item_con}>
                         <button className={`${styles.action_item} ${isLike===1?styles.active_star:''}`} onClick={handleLike}>
                             <SvgIcon className={styles.icon} herf={"icon_Favorites1"}></SvgIcon>
-                            {38}
+                            {
+                                play_num>0?play_num:''
+                            }
                         </button>
                         <button className={styles.action_item} onClick={()=>{
                             setOpenShare(true);
@@ -258,13 +273,19 @@ const WDGame=()=>{
         )
     }
     return (
-        <Spring type={"slideUp"}>
-            <div className={`${styles.container} page-max-width-wrap`}>
-                {renderTopNavBar()}
-                {renderGame()}
-                {renderShareBox()}
-            </div>
-        </Spring>
+        <>
+            {
+                gameCardInfo==null?<LoadingIn></LoadingIn>:(
+                    <Spring type={"slideUp"}>
+                        <div className={`${styles.container} page-max-width-wrap`}>
+                            {renderTopNavBar()}
+                            {renderGame()}
+                            {renderShareBox()}
+                        </div>
+                    </Spring>
+                )
+            }
+        </>
     )
 }
 export default WDGame;

+ 34 - 13
src/widgets/WGame/index.jsx

@@ -12,25 +12,31 @@ import {ReactComponent as Circlearrow} from '@assets/singlesvg/back/circlearrow.
 import LoadingScreen from "@components/LoadingScreen";
 import {ROUTE_PATH} from "@constants/routes";
 import {useDispatch, useSelector} from "react-redux";
-import {reqGameInfo} from "@features/api";
+import {reqGameCardInfo, reqGameInfo} from "@features/api";
 import {getHallConnState} from "@features/socketSlice";
 import Draggable from 'react-draggable';
-import useGameIFrame from "@hooks/useGameIFrame"; // The default
+import useGameIFrame from "@hooks/useGameIFrame";
+import {getGameCardInfo} from "@features/mainSlice";
+import game from "@pages/Game";
+import {useThemeProvider} from "@contexts/themeContext"; // The default
 const i18n=global.i18n;
 
 const WGame=()=>{
     const dispatch = useDispatch();
     const {pathname}=useLocation();
-    const gameid=pathname.split("/").pop();
+    const {gameID} = useThemeProvider();
+    // const gameid=pathname.split("/").pop();
+    const gameid=gameID;
     const [openBox,setOpenBox]=useState(false);
     const [openPrompt,setOpenPrompt]=useState(false);
     // const [isGameLoad,setIsGameLoad]=useState(false);
     const isConnected=useSelector(getHallConnState);
-    var gameURL="";
+    const [gameURL, setGameURL] = useState("");
     const navigate=useNavigate();
     const backBoxRef = useRef(null);
     const [dragDeltaY,setDragDeltaY]=useState(0);
     const {isGameLoad,setIsGameLoad,iFrameRef}=useGameIFrame();
+    const gameCardInfo=useSelector(getGameCardInfo(gameid));
     const onBack=()=>{
         // dispatch(reqGameInfo());
         navigate(ROUTE_PATH.BACK);
@@ -38,16 +44,20 @@ const WGame=()=>{
     const parseURL=()=>{
         let key=LOCAL_GAME_URL+gameid;
         let sign=localStorageGet(LOCAL_SIGN);
-        let url=localStorageGet(key);
+        // let url=localStorageGet(key);
+        let url=gameCardInfo.link;
+        if (gameCardInfo.level>0)url+="&level="+gameCardInfo.level;
         if (url==null)return;
         if (url.indexOf("?")===-1)url=url+"?sign="+sign;
         else url=url+"&sign="+sign;
-        // setGameURL(url);
-        gameURL=url;
+        setGameURL(url);
+        // gameURL=url;
     }
-    parseURL();
 
     useEffect(() => {
+        if (Number(gameid)>0&&gameCardInfo==null){
+            dispatch(reqGameCardInfo(gameid));
+        }
         return () => {
 
         };
@@ -57,6 +67,11 @@ const WGame=()=>{
             setIsGameLoad(false);
         }
     },[isConnected])
+    useEffect(()=>{
+        if (gameCardInfo!=null){
+            parseURL();
+        }
+    },[gameCardInfo])
     const renderBackBox=()=>{
         return (
             <Draggable
@@ -136,14 +151,20 @@ const WGame=()=>{
     return (
         <div className={styles.container}>
             {
-                isConnected?(
+                gameCardInfo==null?renderLoading():(
                     <>
-                        {renderGame()}
-                        {renderBackBox()}
+                        {
+                            isConnected?(
+                                <>
+                                    {renderGame()}
+                                    {renderBackBox()}
+                                </>
+                            ):(<></>)
+                        }
+                        {renderLoading()}
                     </>
-                ):(<></>)
+                )
             }
-            {renderLoading()}
         </div>
     )
 }