zhejiushizhuce 2 vuotta sitten
vanhempi
sitoutus
62efd787eb

+ 4 - 1
src/api/config.js

@@ -88,4 +88,7 @@ export const APP_AGENT_HISTORY=BASE_PREFIX+"agent/history";
 export const APP_GAME_ACTIVITY=BASE_PREFIX+"actList";
 //checkin
 export const APP_CHECKIN_CHECK=BASE_PREFIX+"checkin/check";
-export const APP_CHECKIN_GET=BASE_PREFIX+"checkin/get";
+export const APP_CHECKIN_GET=BASE_PREFIX+"checkin/get";
+//favo
+export const APP_FAVO_ADD=BASE_PREFIX+"favo/add";
+export const APP_FAVO_REMOVE=BASE_PREFIX+"favo/remove";

+ 5 - 2
src/components/GameItem/index.jsx

@@ -14,6 +14,7 @@ import {useDispatch, useSelector} from "react-redux";
 import {getGameLike, updateGameLike} from "@features/mainSlice";
 import {updatePageGameLike} from "@features/pageSlice";
 import SvgIcon from "@components/SvgIcon";
+import {reqUpdateFavoInfo} from "@features/api";
 
 const GameItem=({data,handleRoom,...props})=>{
     const navigate=useNavigate();
@@ -60,8 +61,10 @@ const GameItem=({data,handleRoom,...props})=>{
         }
     }
     const handleLike=()=>{
-        dispatch(updateGameLike({id:data.id,like:(1-like)}));
-        dispatch(updatePageGameLike({data:data,like:(1-like)}));
+        let info={id:data.id,data:data,like:(1-like)}
+        dispatch(updateGameLike(info));
+        dispatch(updatePageGameLike(info));
+        dispatch(reqUpdateFavoInfo(info));
     }
     // return (
     //     <div className={styles.grid_item}>

+ 5 - 2
src/components/GameSmallList/index.jsx

@@ -267,10 +267,13 @@ const GameSmallList=({data,user})=>{
     }
     const renderMobileList = () => {
         let gridStyle = {}
+        let len=list.length;
         if (selected !== -1) {
-            gridStyle.rowGap=`${rowTop}rem`;
+            if (len<5){
+                gridStyle.marginBottom=`${rowTop}rem`;
+            }
+            else gridStyle.rowGap=`${rowTop}rem`;
         }
-        let len=list.length;
         return (
             <>
                 <div className={`${styles.grid_list_m} ${len<5?styles.grid_list_m_onerow:''}`} ref={gridListMRef} style={gridStyle}>

+ 3 - 1
src/constants/localkey.js

@@ -11,4 +11,6 @@ const LOCAL_WHEEL_INVITE_CODE="LOCAL_WHEEL_INVITE_CODE";
 const LOCAL_ACTIVITY_C="LOCAL_ACTIVITY_C";
 const LOCAL_WD_PASS="LOCAL_WD_PASS";
 const LOCAL_WD_PASS_SET_TIME="LOCAL_WD_PASS_SET_TIME";
-export {LOCAL_VISTOR_ID,LOCAL_USER_INFO,LOCAL_IS_LOGIN,LOCAL_SIGN,LOCAL_GAME_URL,LOCAL_CUSTOM_LOCK,LOCAL_WHEEL_RETAIN,LOCAL_WHEEL_INVITE_CODE,LOCAL_WD_PASS,LOCAL_WD_PASS_SET_TIME,LOCAL_ACTIVITY_C};
+const LOCAL_FAVO_IDS="LOCAL_FAVO_IDS";
+const LOCAL_FAVO_DATA="LOCAL_FAVO_DATA";
+export {LOCAL_VISTOR_ID,LOCAL_USER_INFO,LOCAL_IS_LOGIN,LOCAL_SIGN,LOCAL_GAME_URL,LOCAL_CUSTOM_LOCK,LOCAL_WHEEL_RETAIN,LOCAL_WHEEL_INVITE_CODE,LOCAL_WD_PASS,LOCAL_WD_PASS_SET_TIME,LOCAL_ACTIVITY_C,LOCAL_FAVO_IDS,LOCAL_FAVO_DATA};

+ 14 - 1
src/features/api.js

@@ -6,7 +6,7 @@ import {
     APP_CHANGE_PASS,
     APP_CHANGE_PAY_PASS,
     APP_CHANGE_PHONE, APP_CHECKIN_CHECK, APP_CHECKIN_GET, APP_CUSTOMER_LEAVEMSG,
-    APP_CUSTOMER_SERVICE,
+    APP_CUSTOMER_SERVICE, APP_FAVO_ADD, APP_FAVO_REMOVE,
     APP_FIRSTPAY_CONFIG, APP_GAME_ACTIVITY,
     APP_GAME_INFO,
     APP_GAME_LIST,
@@ -702,4 +702,17 @@ export const reqCheckinGet=createAsyncThunk(
         return response;
     }
 )
+export const reqUpdateFavoInfo=createAsyncThunk(
+    APP_FAVO_ADD,
+    async (arg,thunkAPI)=>{
+        let params={
+            url:arg.like===1?APP_FAVO_ADD:APP_FAVO_REMOVE,
+            params:{
+                id:arg.id
+            }
+        }
+        const response=await Http.get(params);
+        return response;
+    }
+)
 //api

+ 47 - 3
src/features/mainSlice.js

@@ -17,11 +17,18 @@ import {
     reqGetRoutes,
     reqLogin,
     reqLogout,
-    reqRegister
+    reqRegister, reqUpdateFavoInfo
 } from "@features/api";
 import {toast} from 'react-toastify';
 import {getHttpMsg, localStorageGet, localStorageSet} from "@utils/helpers";
-import {LOCAL_CUSTOM_LOCK, LOCAL_IS_LOGIN, LOCAL_SIGN, LOCAL_USER_INFO, LOCAL_VISTOR_ID} from "@constants/localkey";
+import {
+    LOCAL_CUSTOM_LOCK,
+    LOCAL_FAVO_IDS,
+    LOCAL_IS_LOGIN,
+    LOCAL_SIGN,
+    LOCAL_USER_INFO,
+    LOCAL_VISTOR_ID
+} from "@constants/localkey";
 import {reqPayConfig} from "@features/paySlice";
 import FingerprintJS from '@fingerprintjs/fingerprintjs'
 const i18n=global.i18n;
@@ -130,6 +137,24 @@ const parseBlocks=(data)=>{
     }
     return blocks;
 }
+const getFavorites=(data)=>{
+    let favorites=[];
+    if (data!=null){
+        let arr=data.split(",");
+        if (arr){
+            for (let i = 0; i < arr.length; i++) {
+                favorites.push(parseInt(arr[i]));
+            }
+        }
+        localStorageSet(LOCAL_FAVO_IDS,JSON.stringify(favorites));
+    }
+    else
+    {
+        let localFavorites=localStorageGet(LOCAL_FAVO_IDS,"");
+        if (localFavorites!=="")favorites=JSON.parse(localFavorites)
+    }
+    return favorites;
+}
 const reducerRoutes=(state,action)=>{
     let json=action.payload;
     if (json&&json.code==0){
@@ -161,7 +186,9 @@ const reducerRoutes=(state,action)=>{
                 initTrackAll(type,id)
             }
         }
-        Object.assign(state, {routes:state.routes,asyncRoutes:data,styles:styles,blocks:blocks,...generData,isLogin:isLogin,userInfo:userInfo,hallServerUrl:hallServerUrl});
+        //favorites
+        let favorites=getFavorites(json.favorites);
+        Object.assign(state, {routes:state.routes,asyncRoutes:data,styles:styles,blocks:blocks,...generData,isLogin:isLogin,userInfo:userInfo,hallServerUrl:hallServerUrl,favorites:favorites});
     }
 }
 const routesStatus=(state,status,arg)=>{
@@ -328,6 +355,21 @@ const reducerCustomLeaveMsg=(state,action,arg)=>{
 const customLeaveMsgStatus=(state,status,arg)=>{
     state.customLeaveMsgStatus=status;
 }
+const reducerUpdateFavoInfo=(state,action,arg)=>{
+    let payload=action.payload;
+    let msg=getHttpMsg(payload);
+    if (payload&&payload.code===200){
+        if (msg!=null&&msg!==""){
+            toast.success(msg)
+        }
+    }
+    else
+    {
+        if (msg!=null&&msg!==""){
+            toast.error(msg)
+        }
+    }
+}
 //custom
 export const Main=createSlice({
     name: 'main',
@@ -399,6 +441,7 @@ export const Main=createSlice({
                     state.favorites=favorites;
                 }
             }
+            localStorageSet(LOCAL_FAVO_IDS,JSON.stringify(favorites));
         }
     },
     extraReducers: (builder) => {
@@ -415,6 +458,7 @@ export const Main=createSlice({
         buildReqReducer(builder,reqGameInfo,reducerGameInfo,gameInfoStatus);
         buildReqReducer(builder,reqCustomService,reducerCustom,customStatus);
         buildReqReducer(builder,reqCustomLeaveMsg,reducerCustomLeaveMsg,customLeaveMsgStatus);
+        buildReqReducer(builder,reqUpdateFavoInfo,reducerUpdateFavoInfo,null);
     },
 })
 export const {logout,updateUserInfo,updateUserScore,updateAddScore,updateGameLike} = Main.actions;

+ 40 - 0
src/features/pageSlice.js

@@ -1,6 +1,8 @@
 import {createAction, createSlice} from "@reduxjs/toolkit";
 import {REQ_STATUS} from "@api/config";
 import {buildReqReducer, reqPageModules} from "@features/api";
+import {localStorageGet, localStorageRemove, localStorageSet} from "@utils/helpers";
+import {LOCAL_FAVO_DATA, LOCAL_FAVO_IDS} from "@constants/localkey";
 const addFavoriteKey=(state,key)=>{
     let favoriteKeys=state.favoriteKeys;
     if (!favoriteKeys.includes(key)){
@@ -44,6 +46,41 @@ const getModuleData=(data,mkey)=>{
     }
     return module;
 }
+//初始化favorite
+const getLocalFavorite=()=>{
+    let localFIDS=localStorageGet(LOCAL_FAVO_IDS,"");
+    let favoData=[];
+    if (localFIDS!=null&&localFIDS!==""){
+        let list=JSON.parse(localFIDS);
+        if (list!=null){
+            for (let i = 0; i < list.length; i++) {
+                let key=LOCAL_FAVO_DATA+"_"+list[i];
+                let temp=localStorageGet(key,"");
+                if (temp!==""){
+                    favoData.push(JSON.parse(temp))
+                }
+            }
+        }
+    }
+    return favoData;
+}
+const parseFavorite=(state)=>{
+    let favoriteKeys=state.favoriteKeys;
+    if (favoriteKeys!=null&&favoriteKeys.length>0){
+        let localFavorite=null;
+        for (let i = 0; i < favoriteKeys.length; i++) {
+            let module=getModuleData(state.pageData,favoriteKeys[i]);
+            if (module!=null){
+                let data=module.data;
+                if (data==null||data.length===0){
+                    if (localFavorite==null)localFavorite=getLocalFavorite();
+                    data=localFavorite;
+                }
+                module.data=data;
+            }
+        }
+    }
+}
 //page modules
 const reducerPage=(state,action)=>{
     let json=action.payload;
@@ -52,6 +89,7 @@ const reducerPage=(state,action)=>{
         let pageID=json.pageID;
         data=parseModules(data,pageID,state);
         state.pageData[pageID]=data;
+        parseFavorite(state);
     }
 }
 const pageStatus=(state,status,arg)=>{
@@ -113,6 +151,8 @@ export const Page=createSlice({
                     }
                 }
             }
+            if (like===1)localStorageSet(LOCAL_FAVO_DATA+"_"+data.id,JSON.stringify(data));
+            else localStorageRemove(LOCAL_FAVO_DATA+"_"+data.id)
         })
     },
     extraReducers: (builder) => {

+ 3 - 0
src/utils/helpers.js

@@ -127,6 +127,9 @@ export const localStorageGet=(key,defaultValue="")=>{
 export const localStorageSet=(key,value)=>{
     localStorage.setItem(key,value);
 }
+export const localStorageRemove=(key)=>{
+    localStorage.removeItem(key);
+}
 export const getHttpMsg=(data)=>{
     if (data==null)return ""
     let result=data.result;