| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- import {createAsyncThunk, createSlice} from "@reduxjs/toolkit";
- import {routes} from "@db/routes";
- import {
- ROUTE_TYPE_CUSTOM,
- ROUTE_TYPE_FULL,
- ROUTE_TYPE_IN,
- ROUTE_TYPE_OUTLINK,
- ROUTE_TYPE_POP,
- ROUTE_TYPE_POP_OR_FULL, SIDE_TYPE_NOMAL
- } from "@constants/routes";
- import {REQ_STATUS} from "@api/config";
- import {
- buildReqReducer, reqChangeEmail,
- reqChangeInfo,
- reqChangePass, reqChangePhone, reqCustomLeaveMsg, reqCustomService, reqGameInfo,
- reqGetRoutes,
- reqLogin,
- reqLogout,
- reqRegister
- } 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 {reqPayConfig} from "@features/paySlice";
- import FingerprintJS from '@fingerprintjs/fingerprintjs'
- const i18n=global.i18n;
- const generateNavs=(routes)=>{
- const navs=[];
- const allNavs=[];
- const allTopNavs=[];
- for (let i = 0; i <routes.length ; i++) {
- let route=routes[i];
- if (!route.side)continue;
- allNavs.push(route);
- if(route.side===SIDE_TYPE_NOMAL)allTopNavs.push(route);
- let block=route.block!=null?route.block:0;
- let temp=navs[block];
- if (temp==null)temp=[];
- temp.push(route);
- navs[block]=temp;
- }
- return {navs,allNavs,allTopNavs};
- }
- const generateRoutes=(routes,asyncRoutes=[])=>{
- const allMap={};
- const inRoutes=[];
- const popRoutes=[];
- //路由等级
- //ppath parent path
- const _generate=(list,plevel,ppath)=>{
- Object.keys(list).map((key)=>{
- let route=list[key];
- if (route){
- if (allMap[route.path]==null){
- //level
- route.plv=plevel;
- route.ppath=ppath;
- route.lv=plevel+key+"_";
- // if (route.path==="#/signin"||route.path==="#/signup"){
- // route.component="Login";
- // }
- if (route.path==="#/pay"){
- route.component="deposit";
- }
- if (route.path==="#/saque"){
- route.component="withdraw";
- }
- allMap[route.path]=route;
- let type=route.type;
- if (type===ROUTE_TYPE_IN||type===ROUTE_TYPE_FULL)inRoutes.push(route);
- else if (type===ROUTE_TYPE_POP_OR_FULL)popRoutes.push(route);
- else if (type===ROUTE_TYPE_POP)popRoutes.push(route);
- else if (type===ROUTE_TYPE_CUSTOM)popRoutes.push(route);
- }
- let subs=route.subs;
- if (subs!=null)_generate(subs,route.lv,route.path);
- }
- });
- }
- const allroutes=[...routes, ...asyncRoutes];
- _generate(allroutes,"","");
- const gnavs=generateNavs(allroutes);
- return {allMap,inRoutes,popRoutes,blockNavs:gnavs.navs,allNavs:gnavs.allNavs,allTopNavs:gnavs.allTopNavs};
- }
- const parseThemeStypes=(data)=>{
- if (data!=null){
- for (const key in data) {
- let item=data[key];
- if (item!=null){
- if (typeof item=="string"){
- if (item.indexOf(";")!=-1){
- data[key]=item.split(";");
- }
- }
- }
- }
- }
- return data;
- }
- const parseStyles=(data)=>{
- let styles={};
- if (data!=null){
- for (let i = 0; i <data.length ; i++) {
- let item=data[i];
- if (item){
- let styleid=item.styleid;
- let style=item.style;
- let json={};
- if (style!=null&&style!=""){
- json=JSON.parse(style);
- json['dark']=parseThemeStypes(json['dark']);
- json['light']=parseThemeStypes(json['light']);
- }
- styles[styleid]={styleid,style:json};
- }
- }
- }
- return styles;
- }
- const parseBlocks=(data)=>{
- let blocks={};
- if (data!=null){
- for (let i = 0; i < data.length; i++) {
- let item=data[i];
- if (item){
- blocks[item.block]=item;
- }
- }
- }
- return blocks;
- }
- const reducerRoutes=(state,action)=>{
- let json=action.payload;
- if (json&&json.code==0){
- let data=json.data==null?[]:json.data;
- let generData=generateRoutes(state.routes,data);
- let styles=parseStyles(json.styles);
- let blocks=parseBlocks(json.blocks);
- let user=json.user;
- let isLogin=0;
- let userInfo={};
- if (user){
- if (typeof user=="object"){
- isLogin=1;
- // user.InsurePass=0;
- userInfo=user;
- //请求pay
- // global.dispatch(reqPayConfig(user));
- }
- }
- Object.assign(state, {routes:state.routes,asyncRoutes:data,styles:styles,blocks:blocks,...generData,isLogin:isLogin,userInfo:userInfo});
- }
- }
- const routesStatus=(state,status,arg)=>{
- state.status=status;
- }
- //login
- const getLocalUserInfo=()=>{
- let user={};
- let value=localStorageGet(LOCAL_USER_INFO,null);
- if (value&&value!=""){
- user=JSON.parse(value);
- }
- return user;
- }
- const getLocalIsLogin=()=>{
- let islogin=localStorageGet(LOCAL_IS_LOGIN,0);
- islogin=Number(islogin);
- return islogin;
- }
- const getMsg=(payload)=>{
- return getHttpMsg(payload);
- }
- const parseLogin=(state,action,arg,isShowMsg=true)=>{
- let payload=action.payload;
- let code=payload.code;
- let msg=getMsg(payload);
- //success
- if (code==200){
- let data=payload.data;
- state.userInfo=data;
- state.isLogin=1;
- // localStorageSet(LOCAL_USER_INFO,JSON.stringify(data));
- // localStorageSet(LOCAL_IS_LOGIN,1);
- let sign=data.sign;
- if (sign!=null)localStorageSet(LOCAL_SIGN,sign);
- if(isShowMsg)toast.success(msg);
- //请求pay
- // global.dispatch(reqPayConfig(data));
- }
- else
- {
- if(isShowMsg)toast.error(msg);
- }
- if (arg){
- let callback=arg.callback;
- if (callback!=null)callback(code);
- }
- }
- const reducerLogin=(state,action,arg)=>{
- // toast.success("success");
- parseLogin(state,action,arg);
- }
- const loginStatus=(state,status,arg)=>{
- state.loginStatus.login=status;
- }
- const reducerReg=(state,action,arg)=>{
- parseLogin(state,action,arg);
- }
- const regStatus=(state,status,arg)=>{
- state.loginStatus.register=status;
- }
- const reducerLogout=(state,action,arg)=>{
- let payload=action.payload;
- let code=payload.code;
- let msg=getMsg(payload);
- if (code==200){
- state.userInfo={};
- state.isLogin=0;
- localStorageSet(LOCAL_SIGN,"");
- // localStorageSet(LOCAL_USER_INFO,"");
- // localStorageSet(LOCAL_IS_LOGIN,0);
- toast.success(msg);
- }
- else
- {
- toast.error(msg);
- }
- }
- const logoutStatus=(state,status,arg)=>{
- state.loginStatus.logout=status;
- }
- //login
- //modify
- const reducerChangePass=(state,action,arg)=>{
- // let payload=action.payload;
- // let code=payload.code;
- // let msg=getMsg(payload);
- // if (code==200){
- // toast.success(msg);
- // }
- // else
- // {
- // toast.error(msg);
- // }
- parseLogin(state,action,arg);
- }
- const changePassStatus=(state,status,arg)=>{
- state.modifyStatus.password=status;
- }
- const reducerChangeInfo=(state,action,arg)=>{
- // let payload=action.payload;
- // let code=payload.code;
- // let msg=getMsg(payload);
- // if (code==200){
- // toast.success(msg);
- // }
- // else
- // {
- // toast.error(msg);
- // }
- parseLogin(state,action,arg);
- }
- const changeInfoStatus=(state,status,arg)=>{
- state.modifyStatus.info=status;
- }
- const reducerChangePhone=(state,action,arg)=>{
- parseLogin(state,action,arg);
- }
- const changePhoneStatus=(state,status,arg)=>{
- state.modifyStatus.phone=status;
- }
- const reducerChangeEmail=(state,action,arg)=>{
- parseLogin(state,action,arg);
- }
- const changeEmailStatus=(state,status,arg)=>{
- state.modifyStatus.phone=status;
- }
- //modify
- //gameinfo
- const reducerGameInfo=(state,action,arg)=>{
- // parseLogin(state,action,arg);
- parseLogin(state,action,arg,false);
- }
- const gameInfoStatus=(state,status,arg)=>{
- state.gameInfoStatus=status;
- }
- //gameinfo
- //custom
- const reducerCustom=(state,action,arg)=>{
- let payload=action.payload;
- if (payload&&payload.code===200){
- state.customerInfo=payload.data;
- }
- }
- const reducerCustomLeaveMsg=(state,action,arg)=>{
- let payload=action.payload;
- if (payload!=null){
- if (payload&&payload.code===200){
- localStorageSet(LOCAL_CUSTOM_LOCK,Date.now());
- toast.success(i18n.t("customer.TopTip_succeed"));
- }
- else {
- toast.error(i18n.t("customer.TopTip_fail"));
- }
- }
- }
- const customLeaveMsgStatus=(state,status,arg)=>{
- state.customLeaveMsgStatus=status;
- }
- //custom
- export const Main=createSlice({
- name: 'main',
- initialState: {
- status:REQ_STATUS.NONE,
- routes:routes,
- asyncRoutes:[],
- styles:{},
- blocks:{},
- ...generateRoutes(routes),
- loginStatus:{
- login:REQ_STATUS.NONE,
- register:REQ_STATUS.NONE,
- logout:REQ_STATUS.NONE,
- },
- userInfo: null,
- isLogin:0,
- modifyStatus:{
- info:REQ_STATUS.NONE,
- password:REQ_STATUS.NONE,
- phone:REQ_STATUS.NONE,
- email:REQ_STATUS.NONE
- },
- gameInfoStatus:REQ_STATUS.NONE,
- customLeaveMsgStatus:REQ_STATUS.NONE,
- customerInfo:[]
- },
- reducers: {
- logout:(state, action)=>{
- state.userInfo={};
- state.isLogin=0;
- // localStorageSet(LOCAL_USER_INFO,"");
- // localStorageSet(LOCAL_IS_LOGIN,0);
- },
- updateUserInfo:(state, action)=>{
- parseLogin(state,action,{},false);
- },
- updateUserScore:(state, action)=>{
- let score=action.payload;
- if (score!=null){
- if(state.userInfo)state.userInfo.Score=Number(score);
- }
- },
- updateAddScore:(state, action)=>{
- let score=action.payload;
- if (score!=null){
- if(state.userInfo)state.userInfo.Score=state.userInfo.Score+Number(score);
- }
- }
- },
- extraReducers: (builder) => {
- // Add reducers for additional action types here, and handle loading state as needed
- // reducerRoutes(builder);
- buildReqReducer(builder,reqGetRoutes,reducerRoutes,routesStatus);
- buildReqReducer(builder,reqLogin,reducerLogin,loginStatus);
- buildReqReducer(builder,reqRegister,reducerReg,regStatus);
- buildReqReducer(builder,reqLogout,reducerLogout,logoutStatus);
- buildReqReducer(builder,reqChangePass,reducerChangePass,changePassStatus);
- buildReqReducer(builder,reqChangeInfo,reducerChangeInfo,changeInfoStatus);
- buildReqReducer(builder,reqChangePhone,reducerChangePhone,changePhoneStatus);
- buildReqReducer(builder,reqChangeEmail,reducerChangeEmail,changeEmailStatus);
- buildReqReducer(builder,reqGameInfo,reducerGameInfo,gameInfoStatus);
- buildReqReducer(builder,reqCustomService,reducerCustom,null);
- buildReqReducer(builder,reqCustomLeaveMsg,reducerCustomLeaveMsg,customLeaveMsgStatus);
- },
- })
- export const {logout,updateUserInfo,updateUserScore,updateAddScore} = Main.actions;
- //数据获取
- export const getFetchStatus=(state)=>{
- return state.main.status;
- }
- export const routesMap=(state)=>{
- return state.main.allMap;
- }
- export const routesIn=(state)=>{
- return state.main.inRoutes;
- }
- export const routesPop=(state)=>{
- return state.main.popRoutes;
- }
- export const nBlocks=(state)=>{
- return state.main.blockNavs;
- }
- export const allNavs=(state)=>{
- return state.main.allNavs;
- }
- export const allTopNavs=(state)=>{
- return state.main.allTopNavs;
- }
- const getRouteFromPath=(state,path)=>{
- let allMap=routesMap(state);
- let route=allMap[path];
- if (route==null){
- //查看是否有可变路由
- let paths=path.split("/");
- paths[paths.length-1]="*";
- let newpath=paths.join("/");
- route=allMap[newpath];
- }
- return route;
- }
- export const getRoute=(path)=>(state)=>{
- // let route=routesMap(state)[path];
- let route=getRouteFromPath(state,path);
- if (route==null)return {};
- return route;
- }
- export const getRouteChain=(path)=>(state)=>{
- let map=routesMap(state);
- let list=[];
- let getChain=(cpath)=>{
- let route=map[cpath];
- if (route!=null){
- list.unshift(route);
- if (route.ppath!=null&&route.ppath!==""){
- getChain(route.ppath);
- }
- }
- }
- getChain(path);
- return list;
- }
- export const getRouteStyles=(state)=>{
- let styles=state.main.styles;
- return styles;
- }
- export const getBlockColumn=(state)=>{
- let blocks=state.main.blocks;
- return blocks;
- }
- export const isFullRoute=(path)=>(state)=>{
- // let route=routesMap(state)[path];
- let route=getRouteFromPath(state,path);
- if (route)return route.type===ROUTE_TYPE_FULL;
- return false;
- }
- export const isPopRoute=(path)=>(state)=>{
- // let route=routesMap(state)[path];
- let route=getRouteFromPath(state,path);
- if (route)return route.type===ROUTE_TYPE_POP;
- return false;
- }
- export const isInRoute=(path)=>(state)=>{
- // let route=routesMap(state)[path];
- let route=getRouteFromPath(state,path);
- if (route)return route.type===ROUTE_TYPE_IN;
- return false;
- }
- export const isOutRoute=(path)=>(state)=>{
- // let route=routesMap(state)[path];
- let route=getRouteFromPath(state,path);
- if (route)return route.type===ROUTE_TYPE_OUTLINK;
- return false;
- }
- //login
- export const getLoginStatus=(state)=>{
- return state.main.loginStatus.login;
- }
- export const getRegStatus=(state)=>{
- return state.main.loginStatus.register;
- }
- export const getLogoutStatus=(state)=>{
- return state.main.loginStatus.logout;
- }
- //modify
- export const getChangeInfoStatus=(state)=>{
- return state.main.modifyStatus.info;
- }
- export const getChangePassStatus=(state)=>{
- return state.main.modifyStatus.password;
- }
- export const getChangePhoneStatus=(state)=>{
- return state.main.modifyStatus.phone;
- }
- export const getChangeEmailStatus=(state)=>{
- return state.main.modifyStatus.email;
- }
- export const isLogined=(state)=>{
- // console.log(state.main.isLogin)
- return state.main.isLogin;
- // return 1;
- }
- export const getUserInfo=(state)=>{
- return state.main.userInfo;
- }
- export const getUserID=(state)=>{
- let uid=-1;
- let userInfo=state.main.userInfo;
- if (userInfo){
- if (userInfo.UserID!=null)uid=userInfo.UserID;
- else uid=0;
- }
- return uid;
- }
- export const getCustomInfo=(state)=>{
- return state.main.customerInfo;
- }
- export const getCustomTypeInfo=(type)=>(state)=>{
- let item=null;
- let customerInfo=state.main.customerInfo;
- if (customerInfo){
- for (let i = 0; i < customerInfo.length; i++) {
- let info=customerInfo[i];
- if (info.StatusName===type){
- item=info;
- break;
- }
- }
- }
- return item
- }
- export const getCustomStatus=(state)=>{
- return state.main.customLeaveMsgStatus;
- }
- //数据获取
- export default Main.reducer;
- export const getBFP=()=>{
- return async (dispatch, getState) => {
- let bfp="";
- bfp=localStorageGet(LOCAL_VISTOR_ID,"");
- if (bfp!=null&&bfp!==""){
- global.BFP=bfp;
- return bfp;
- }
- // const fpPromise = FingerprintJS.load({
- // apiKey: "W7zWifGvJhjacPekHi64"
- // })
- const fpPromise =FingerprintJS.load();
- try {
- let fp=await fpPromise;
- let result=await fp.get();
- if (result!=null){
- bfp=result.visitorId;
- localStorageSet(LOCAL_VISTOR_ID,bfp);
- global.BFP=bfp;
- }
- }
- catch (err){
- console.log(err);
- }
- return bfp;
- }
- }
|