mainSlice.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. import { initTrackAll ,trackEvent} from "../tracking/TrackAll"
  2. import {createAsyncThunk, createSlice} from "@reduxjs/toolkit";
  3. import {routes} from "@db/routes";
  4. import {
  5. ROUTE_PATH,
  6. ROUTE_TYPE_CUSTOM,
  7. ROUTE_TYPE_FULL,
  8. ROUTE_TYPE_IN,
  9. ROUTE_TYPE_OUTLINK,
  10. ROUTE_TYPE_POP,
  11. ROUTE_TYPE_POP_OR_FULL, SIDE_TYPE_NOMAL
  12. } from "@constants/routes";
  13. import {REQ_STATUS} from "@api/config";
  14. import {
  15. buildReqReducer, reqBindSMS, reqChangeEmail,
  16. reqChangeInfo,
  17. reqChangePass, reqChangePhone, reqCustomLeaveMsg, reqCustomService, reqFavoGet, reqGameCardInfo, reqGameInfo,
  18. reqGetRoutes,
  19. reqLogin,
  20. reqLogout,
  21. reqRegister, reqSendCode, reqSMSLogin, reqUpdateFavoInfo
  22. } from "@features/api";
  23. import {toast} from 'react-toastify';
  24. import {getHttpMsg, localStorageGet, localStorageSet} from "@utils/helpers";
  25. import {
  26. LOCAL_CUSTOM_LOCK,
  27. LOCAL_FAVO_IDS, LOCAL_GAME_URL,
  28. LOCAL_IS_LOGIN,
  29. LOCAL_SIGN,
  30. LOCAL_USER_INFO,
  31. LOCAL_VISTOR_ID
  32. } from "@constants/localkey";
  33. import {reqPayConfig} from "@features/paySlice";
  34. import FingerprintJS from '@fingerprintjs/fingerprintjs'
  35. const i18n=global.i18n;
  36. const generateNavs=(routes)=>{
  37. const navs=[];
  38. const allNavs=[];
  39. const allTopNavs=[];
  40. for (let i = 0; i <routes.length ; i++) {
  41. let route=routes[i];
  42. if (!route.side)continue;
  43. allNavs.push(route);
  44. if(route.side===SIDE_TYPE_NOMAL)allTopNavs.push(route);
  45. let block=route.block!=null?route.block:0;
  46. let temp=navs[block];
  47. if (temp==null)temp=[];
  48. temp.push(route);
  49. navs[block]=temp;
  50. }
  51. return {navs,allNavs,allTopNavs};
  52. }
  53. const generateRoutes=(routes,asyncRoutes=[])=>{
  54. const allMap={};
  55. const inRoutes=[];
  56. const popRoutes=[];
  57. //路由等级
  58. //ppath parent path
  59. const _generate=(list,plevel,ppath)=>{
  60. Object.keys(list).map((key)=>{
  61. let route=list[key];
  62. if (route){
  63. if (allMap[route.path]==null){
  64. //level
  65. route.plv=plevel;
  66. route.ppath=ppath;
  67. route.lv=plevel+key+"_";
  68. // if (route.path==="#/signin"||route.path==="#/signup"){
  69. // route.component="Login";
  70. // }
  71. if (route.path==="#/pay"){
  72. route.component="deposit";
  73. }
  74. if (route.path==="#/saque"){
  75. route.component="withdraw";
  76. }
  77. // if (route.path==="/sports"){
  78. // route.type=ROUTE_TYPE_FULL;
  79. // }
  80. allMap[route.path]=route;
  81. let type=route.type;
  82. if (type===ROUTE_TYPE_IN||type===ROUTE_TYPE_FULL)inRoutes.push(route);
  83. else if (type===ROUTE_TYPE_POP_OR_FULL)popRoutes.push(route);
  84. else if (type===ROUTE_TYPE_POP)popRoutes.push(route);
  85. else if (type===ROUTE_TYPE_CUSTOM)popRoutes.push(route);
  86. }
  87. let subs=route.subs;
  88. if (subs!=null)_generate(subs,route.lv,route.path);
  89. }
  90. });
  91. }
  92. const allroutes=[...routes, ...asyncRoutes];
  93. _generate(allroutes,"","");
  94. const gnavs=generateNavs(allroutes);
  95. return {allMap,inRoutes,popRoutes,blockNavs:gnavs.navs,allNavs:gnavs.allNavs,allTopNavs:gnavs.allTopNavs};
  96. }
  97. const parseThemeStypes=(data)=>{
  98. if (data!=null){
  99. for (const key in data) {
  100. let item=data[key];
  101. if (item!=null){
  102. if (typeof item=="string"){
  103. if (item.indexOf(";")!=-1){
  104. data[key]=item.split(";");
  105. }
  106. }
  107. }
  108. }
  109. }
  110. return data;
  111. }
  112. const parseStyles=(data)=>{
  113. let styles={};
  114. if (data!=null){
  115. for (let i = 0; i <data.length ; i++) {
  116. let item=data[i];
  117. if (item){
  118. let styleid=item.styleid;
  119. let style=item.style;
  120. let json={};
  121. if (style!=null&&style!=""){
  122. json=JSON.parse(style);
  123. json['dark']=parseThemeStypes(json['dark']);
  124. json['light']=parseThemeStypes(json['light']);
  125. }
  126. styles[styleid]={styleid,style:json};
  127. }
  128. }
  129. }
  130. return styles;
  131. }
  132. const parseBlocks=(data)=>{
  133. let blocks={};
  134. if (data!=null){
  135. for (let i = 0; i < data.length; i++) {
  136. let item=data[i];
  137. if (item){
  138. blocks[item.block]=item;
  139. }
  140. }
  141. }
  142. return blocks;
  143. }
  144. const getFavorites=(data)=>{
  145. let favorites=[];
  146. if (data!=null&&!!data.length){
  147. let arr=data.split(",");
  148. if (arr){
  149. for (let i = 0; i < arr.length; i++) {
  150. favorites.push(parseInt(arr[i]));
  151. }
  152. }
  153. localStorageSet(LOCAL_FAVO_IDS,JSON.stringify(favorites));
  154. }
  155. else
  156. {
  157. let localFavorites=localStorageGet(LOCAL_FAVO_IDS,"");
  158. if (localFavorites!=="")favorites=JSON.parse(localFavorites)
  159. }
  160. return favorites;
  161. }
  162. const reducerRoutes=(state,action)=>{
  163. let json=action.payload;
  164. if (json&&json.code==0){
  165. let data=json.data==null?[]:json.data;
  166. let generData=generateRoutes(state.routes,data);
  167. let styles=parseStyles(json.styles);
  168. let blocks=parseBlocks(json.blocks);
  169. let user=json.user;
  170. let isLogin=0;
  171. let userInfo={};
  172. if (user){
  173. if (typeof user=="object"){
  174. isLogin=1;
  175. // user.InsurePass=0;
  176. userInfo=user;
  177. //请求pay
  178. // global.dispatch(reqPayConfig(user));
  179. let sign=user.sign;
  180. if (sign!=null)localStorageSet(LOCAL_SIGN,sign);
  181. }
  182. }
  183. let conf=json.conf;
  184. let hallServerUrl='';
  185. let promoteInstall=0;
  186. let guest=0;
  187. let upgradeBonus=0;
  188. if (conf){
  189. if (!!conf.hall)hallServerUrl=conf.hall;
  190. if (!!conf.DOLLAR)global.DOLLAR=conf.DOLLAR;
  191. global.pf=conf.pf;
  192. //平台配置
  193. if(!!conf.pf&&!!conf.pf.id){
  194. let {type,id}=conf.pf;
  195. initTrackAll(type,id,isLogin?userInfo.UserID:null)
  196. }
  197. //promoteInstall
  198. if (!!conf.promoteInstall)promoteInstall=conf.promoteInstall;
  199. //guest
  200. if (!!conf.guest)guest=conf.guest;
  201. if (!!conf.upgradeBonus)upgradeBonus=conf.upgradeBonus;
  202. }
  203. //favorites
  204. // let favorites=getFavorites(json.favorites);
  205. Object.assign(state, {routes:state.routes,asyncRoutes:data,styles:styles,blocks:blocks,...generData,isLogin:isLogin,userInfo:userInfo,hallServerUrl:hallServerUrl,promoteInstall:promoteInstall,guest:guest,upgradeBonus:upgradeBonus});
  206. }
  207. }
  208. const routesStatus=(state,status,arg)=>{
  209. state.status=status;
  210. }
  211. //login
  212. const getLocalUserInfo=()=>{
  213. let user={};
  214. let value=localStorageGet(LOCAL_USER_INFO,null);
  215. if (value&&value!=""){
  216. user=JSON.parse(value);
  217. }
  218. return user;
  219. }
  220. const getLocalIsLogin=()=>{
  221. let islogin=localStorageGet(LOCAL_IS_LOGIN,0);
  222. islogin=Number(islogin);
  223. return islogin;
  224. }
  225. const getMsg=(payload)=>{
  226. return getHttpMsg(payload);
  227. }
  228. const parseLogin=(state,action,arg,isShowMsg=true)=>{
  229. let payload=action.payload;
  230. let code=payload.code;
  231. let msg=getMsg(payload);
  232. //success
  233. if (code==200){
  234. let data=payload.data;
  235. state.userInfo=data;
  236. state.isLogin=1;
  237. // localStorageSet(LOCAL_USER_INFO,JSON.stringify(data));
  238. // localStorageSet(LOCAL_IS_LOGIN,1);
  239. let sign=data.sign;
  240. if (sign!=null)localStorageSet(LOCAL_SIGN,sign);
  241. if(isShowMsg)toast.success(msg);
  242. //请求pay
  243. // global.dispatch(reqPayConfig(data));
  244. if(!!data.reg){
  245. //新注册的
  246. trackEvent("CompleteRegistration",{external_id:data.UserID})
  247. }
  248. }
  249. else
  250. {
  251. if(isShowMsg)toast.error(msg);
  252. }
  253. if (arg){
  254. let callback=arg.callback;
  255. if (callback!=null)callback(code);
  256. }
  257. }
  258. const reducerLogin=(state,action,arg)=>{
  259. // toast.success("success");
  260. parseLogin(state,action,arg);
  261. }
  262. const loginStatus=(state,status,arg)=>{
  263. state.loginStatus.login=status;
  264. }
  265. const reducerReg=(state,action,arg)=>{
  266. parseLogin(state,action,arg);
  267. }
  268. const regStatus=(state,status,arg)=>{
  269. state.loginStatus.register=status;
  270. }
  271. const reducerLogout=(state,action,arg)=>{
  272. let payload=action.payload;
  273. let code=payload.code;
  274. let msg=getMsg(payload);
  275. if (code==200){
  276. state.userInfo={};
  277. state.isLogin=0;
  278. localStorageSet(LOCAL_SIGN,"");
  279. // localStorageSet(LOCAL_USER_INFO,"");
  280. // localStorageSet(LOCAL_IS_LOGIN,0);
  281. toast.success(msg);
  282. }
  283. else
  284. {
  285. toast.error(msg);
  286. }
  287. }
  288. const logoutStatus=(state,status,arg)=>{
  289. state.loginStatus.logout=status;
  290. }
  291. //login
  292. //modify
  293. const reducerChangePass=(state,action,arg)=>{
  294. // let payload=action.payload;
  295. // let code=payload.code;
  296. // let msg=getMsg(payload);
  297. // if (code==200){
  298. // toast.success(msg);
  299. // }
  300. // else
  301. // {
  302. // toast.error(msg);
  303. // }
  304. parseLogin(state,action,arg);
  305. }
  306. const changePassStatus=(state,status,arg)=>{
  307. state.modifyStatus.password=status;
  308. }
  309. const reducerChangeInfo=(state,action,arg)=>{
  310. // let payload=action.payload;
  311. // let code=payload.code;
  312. // let msg=getMsg(payload);
  313. // if (code==200){
  314. // toast.success(msg);
  315. // }
  316. // else
  317. // {
  318. // toast.error(msg);
  319. // }
  320. parseLogin(state,action,arg);
  321. }
  322. const changeInfoStatus=(state,status,arg)=>{
  323. state.modifyStatus.info=status;
  324. }
  325. const reducerChangePhone=(state,action,arg)=>{
  326. parseLogin(state,action,arg);
  327. }
  328. const changePhoneStatus=(state,status,arg)=>{
  329. state.modifyStatus.phone=status;
  330. }
  331. const reducerChangeEmail=(state,action,arg)=>{
  332. parseLogin(state,action,arg);
  333. }
  334. const changeEmailStatus=(state,status,arg)=>{
  335. state.modifyStatus.phone=status;
  336. }
  337. //modify
  338. //gameinfo
  339. const reducerGameInfo=(state,action,arg)=>{
  340. // parseLogin(state,action,arg);
  341. parseLogin(state,action,arg,false);
  342. }
  343. const gameInfoStatus=(state,status,arg)=>{
  344. state.gameInfoStatus=status;
  345. }
  346. //gameinfo
  347. //custom
  348. const reducerCustom=(state,action,arg)=>{
  349. let payload=action.payload;
  350. if (payload&&payload.code===200){
  351. state.customerInfo=payload.data;
  352. }
  353. }
  354. const customStatus=(state,status,arg)=>{
  355. state.customServiceStatus=status;
  356. }
  357. const reducerCustomLeaveMsg=(state,action,arg)=>{
  358. let payload=action.payload;
  359. if (payload!=null){
  360. if (payload&&payload.code===200){
  361. localStorageSet(LOCAL_CUSTOM_LOCK,Date.now());
  362. toast.success(i18n.t("customer.TopTip_succeed"));
  363. }
  364. else {
  365. toast.error(i18n.t("customer.TopTip_fail"));
  366. }
  367. }
  368. }
  369. const customLeaveMsgStatus=(state,status,arg)=>{
  370. state.customLeaveMsgStatus=status;
  371. }
  372. const reducerUpdateFavoInfo=(state,action,arg)=>{
  373. let payload=action.payload;
  374. let msg=getHttpMsg(payload);
  375. if (payload&&payload.code===200){
  376. if (msg!=null&&msg!==""){
  377. toast.success(msg)
  378. }
  379. }
  380. else
  381. {
  382. if (msg!=null&&msg!==""){
  383. toast.error(msg)
  384. }
  385. }
  386. }
  387. const reducerFavoGet=(state,action,arg)=>{
  388. let payload=action.payload;
  389. if (payload&&payload.code===200){
  390. let data=payload.data;
  391. let favorites=[];
  392. if (data!=null){
  393. for (let i = 0; i < data.length; i++) {
  394. let item=data[i];
  395. if(item)favorites.push(item.id);
  396. }
  397. }
  398. state.favorites=favorites;
  399. }
  400. }
  401. const reducerGameCardInfo=(state,action,arg)=>{
  402. let payload=action.payload;
  403. if (payload&&payload.code===200){
  404. let data=payload.data;
  405. if (data!=null){
  406. let id=Number(data.id);
  407. let level_info=data.level_info;
  408. let level=level_info!=null?1:0;
  409. let local=parseInt(localStorageGet(LOCAL_GAME_URL+id,0));
  410. if (local>0)level=local;
  411. state.gameCardInfo[id]={...data,level:level}
  412. }
  413. }
  414. }
  415. const gameCardInfoStatus=(state,status,arg)=>{
  416. state.gameCardInfoStatus=status;
  417. }
  418. //send code
  419. const reducerSendCode=(state,action,arg)=>{
  420. let payload=action.payload;
  421. let msg=getHttpMsg(payload);
  422. if (payload&&payload.code===200){
  423. toast.success(msg);
  424. state.otpTimeStamp=Date.now();
  425. }
  426. else
  427. {
  428. toast.error(msg);
  429. }
  430. }
  431. const sendCodeStatus=(state,status,arg)=>{
  432. state.loginStatus.send_code=status;
  433. }
  434. //bind phone
  435. const reducerBindSMS=(state,action,arg)=>{
  436. parseLogin(state,action,arg);
  437. }
  438. const bindSMSStatus=(state,status,arg)=>{
  439. state.loginStatus.bind=status;
  440. }
  441. //sms login
  442. const reducerSMSLogin=(state,action,arg)=>{
  443. parseLogin(state,action,arg);
  444. }
  445. const smsLoginStatus=(state,status,arg)=>{
  446. state.loginStatus.smslogin=status;
  447. }
  448. //custom
  449. export const Main=createSlice({
  450. name: 'main',
  451. initialState: {
  452. status:REQ_STATUS.NONE,
  453. routes:routes,
  454. asyncRoutes:[],
  455. styles:{},
  456. blocks:{},
  457. ...generateRoutes(routes),
  458. loginStatus:{
  459. login:REQ_STATUS.NONE,
  460. register:REQ_STATUS.NONE,
  461. logout:REQ_STATUS.NONE,
  462. bind:REQ_STATUS.NONE,
  463. send_code:REQ_STATUS.NONE,
  464. smslogin:REQ_STATUS.NONE,
  465. },
  466. userInfo: null,
  467. isLogin:0,
  468. modifyStatus:{
  469. info:REQ_STATUS.NONE,
  470. password:REQ_STATUS.NONE,
  471. phone:REQ_STATUS.NONE,
  472. email:REQ_STATUS.NONE
  473. },
  474. gameInfoStatus:REQ_STATUS.NONE,
  475. customLeaveMsgStatus:REQ_STATUS.NONE,
  476. customServiceStatus:REQ_STATUS.NONE,
  477. //客服
  478. customerInfo:[],
  479. //大厅服务器
  480. hallServerUrl:'',
  481. //收藏列表
  482. favorites:[],
  483. //当前游戏id
  484. gameID:0,
  485. //服务器踢
  486. serverKick:0,
  487. //安装提示
  488. promoteInstall:0,
  489. //服务器返回777打开充值
  490. openPay:0,
  491. gameCardInfoStatus:REQ_STATUS.NONE,
  492. //游戏卡信息
  493. gameCardInfo:{},
  494. //otp 时间戳
  495. otpTimeStamp:0,
  496. //是否是guest登录
  497. guest:0,
  498. //绑定奖励
  499. upgradeBonus:0
  500. },
  501. reducers: {
  502. logout:(state, action)=>{
  503. state.userInfo={};
  504. state.isLogin=0;
  505. // localStorageSet(LOCAL_USER_INFO,"");
  506. // localStorageSet(LOCAL_IS_LOGIN,0);
  507. },
  508. updateUserInfo:(state, action)=>{
  509. parseLogin(state,action,{},false);
  510. },
  511. updateUserScore:(state, action)=>{
  512. let score=action.payload;
  513. if (score!=null){
  514. if(state.userInfo)state.userInfo.Score=Number(score);
  515. }
  516. },
  517. updateAddScore:(state, action)=>{
  518. let score=action.payload;
  519. if (score!=null){
  520. if(state.userInfo)state.userInfo.Score=state.userInfo.Score+Number(score);
  521. }
  522. },
  523. updateGameLike:(state, action)=>{
  524. let payload=action.payload;
  525. let id=payload.id;
  526. let like=payload.like;
  527. let favorites=state.favorites;
  528. let index=favorites.indexOf(id);
  529. if (like){
  530. if (index===-1){
  531. favorites.push(id);
  532. state.favorites=favorites;
  533. }
  534. }
  535. else {
  536. let index=favorites.indexOf(id);
  537. if (index!==-1){
  538. favorites.splice(index,1);
  539. state.favorites=favorites;
  540. }
  541. }
  542. // localStorageSet(LOCAL_FAVO_IDS,JSON.stringify(favorites));
  543. },
  544. onSliceChangeUser:(state,action)=>{
  545. state.favorites=[];
  546. },
  547. updateCurrGame:(state,action)=>{
  548. state.gameID=action.payload;
  549. },
  550. updateServerKick:(state,action)=>{
  551. state.serverKick=action.payload;
  552. },
  553. updateOpenPay:(state,action)=>{
  554. state.openPay=action.payload;
  555. },
  556. updateGameRoute:(state,action)=> {
  557. let route = state.allMap[ROUTE_PATH.GAME + "/*"];
  558. if (route != null) {
  559. let type = action.payload;
  560. route.type = type;
  561. }
  562. },
  563. updateGameCardInfo:(state,action)=>{
  564. let {data,level}=action.payload;
  565. if (data!=null){
  566. if (level==null)level=0;
  567. let id=data.id;
  568. state.gameCardInfo[id]={...data,level};
  569. }
  570. }
  571. },
  572. extraReducers: (builder) => {
  573. // Add reducers for additional action types here, and handle loading state as needed
  574. // reducerRoutes(builder);
  575. buildReqReducer(builder,reqGetRoutes,reducerRoutes,routesStatus);
  576. buildReqReducer(builder,reqLogin,reducerLogin,loginStatus);
  577. buildReqReducer(builder,reqRegister,reducerReg,regStatus);
  578. buildReqReducer(builder,reqLogout,reducerLogout,logoutStatus);
  579. buildReqReducer(builder,reqChangePass,reducerChangePass,changePassStatus);
  580. buildReqReducer(builder,reqChangeInfo,reducerChangeInfo,changeInfoStatus);
  581. buildReqReducer(builder,reqChangePhone,reducerChangePhone,changePhoneStatus);
  582. buildReqReducer(builder,reqChangeEmail,reducerChangeEmail,changeEmailStatus);
  583. buildReqReducer(builder,reqGameInfo,reducerGameInfo,gameInfoStatus);
  584. buildReqReducer(builder,reqCustomService,reducerCustom,customStatus);
  585. buildReqReducer(builder,reqCustomLeaveMsg,reducerCustomLeaveMsg,customLeaveMsgStatus);
  586. buildReqReducer(builder,reqUpdateFavoInfo,reducerUpdateFavoInfo,null);
  587. buildReqReducer(builder,reqFavoGet,reducerFavoGet,null);
  588. buildReqReducer(builder,reqGameCardInfo,reducerGameCardInfo,gameCardInfoStatus);
  589. buildReqReducer(builder,reqSendCode,reducerSendCode,sendCodeStatus);
  590. buildReqReducer(builder,reqBindSMS,reducerBindSMS,bindSMSStatus);
  591. buildReqReducer(builder,reqSMSLogin,reducerSMSLogin,smsLoginStatus);
  592. },
  593. })
  594. export const {logout,updateUserInfo,updateUserScore,updateAddScore,updateGameLike,updateCurrGame,updateServerKick,updateOpenPay,updateGameRoute,updateGameCardInfo} = Main.actions;
  595. //数据获取
  596. export const getFetchStatus=(state)=>{
  597. return state.main.status;
  598. }
  599. export const routesMap=(state)=>{
  600. return state.main.allMap;
  601. }
  602. export const routesIn=(state)=>{
  603. return state.main.inRoutes;
  604. }
  605. export const routesPop=(state)=>{
  606. return state.main.popRoutes;
  607. }
  608. export const nBlocks=(state)=>{
  609. return state.main.blockNavs;
  610. }
  611. export const allNavs=(state)=>{
  612. return state.main.allNavs;
  613. }
  614. export const allTopNavs=(state)=>{
  615. return state.main.allTopNavs;
  616. }
  617. const getRouteFromPath=(state,path)=>{
  618. let allMap=routesMap(state);
  619. let route=allMap[path];
  620. if (route==null){
  621. //查看是否有可变路由
  622. let paths=path.split("/");
  623. paths[paths.length-1]="*";
  624. let newpath=paths.join("/");
  625. route=allMap[newpath];
  626. }
  627. return route;
  628. }
  629. export const getRoute=(path)=>(state)=>{
  630. // let route=routesMap(state)[path];
  631. let route=getRouteFromPath(state,path);
  632. if (route==null)return {};
  633. return route;
  634. }
  635. export const getRouteChain=(path)=>(state)=>{
  636. let map=routesMap(state);
  637. let list=[];
  638. let getChain=(cpath)=>{
  639. let route=map[cpath];
  640. if (route!=null){
  641. list.unshift(route);
  642. if (route.ppath!=null&&route.ppath!==""){
  643. getChain(route.ppath);
  644. }
  645. }
  646. }
  647. getChain(path);
  648. return list;
  649. }
  650. export const getRouteStyles=(state)=>{
  651. let styles=state.main.styles;
  652. return styles;
  653. }
  654. export const getBlockColumn=(state)=>{
  655. let blocks=state.main.blocks;
  656. return blocks;
  657. }
  658. export const isFullRoute=(path)=>(state)=>{
  659. // let route=routesMap(state)[path];
  660. let route=getRouteFromPath(state,path);
  661. if (route)return route.type===ROUTE_TYPE_FULL;
  662. return false;
  663. }
  664. export const isPopRoute=(path)=>(state)=>{
  665. // let route=routesMap(state)[path];
  666. let route=getRouteFromPath(state,path);
  667. if (route)return route.type===ROUTE_TYPE_POP;
  668. return false;
  669. }
  670. export const isInRoute=(path)=>(state)=>{
  671. // let route=routesMap(state)[path];
  672. let route=getRouteFromPath(state,path);
  673. if (route)return route.type===ROUTE_TYPE_IN;
  674. return false;
  675. }
  676. export const isOutRoute=(path)=>(state)=>{
  677. // let route=routesMap(state)[path];
  678. let route=getRouteFromPath(state,path);
  679. if (route)return route.type===ROUTE_TYPE_OUTLINK;
  680. return false;
  681. }
  682. //login
  683. export const getLoginStatus=(state)=>{
  684. return state.main.loginStatus.login;
  685. }
  686. export const getRegStatus=(state)=>{
  687. return state.main.loginStatus.register;
  688. }
  689. export const getLogoutStatus=(state)=>{
  690. return state.main.loginStatus.logout;
  691. }
  692. export const getSendCodeStatus=(state)=>{
  693. return state.main.loginStatus.send_code;
  694. }
  695. export const getBindSMSStatus=(state)=>{
  696. return state.main.loginStatus.bind;
  697. }
  698. export const getSMSLoginStatus=(state)=>{
  699. return state.main.loginStatus.smslogin;
  700. }
  701. export const getSendCodeTS=(state)=>{
  702. return state.main.otpTimeStamp;
  703. }
  704. //modify
  705. export const getChangeInfoStatus=(state)=>{
  706. return state.main.modifyStatus.info;
  707. }
  708. export const getChangePassStatus=(state)=>{
  709. return state.main.modifyStatus.password;
  710. }
  711. export const getChangePhoneStatus=(state)=>{
  712. return state.main.modifyStatus.phone;
  713. }
  714. export const getChangeEmailStatus=(state)=>{
  715. return state.main.modifyStatus.email;
  716. }
  717. export const isLogined=(state)=>{
  718. // console.log(state.main.isLogin)
  719. return state.main.isLogin;
  720. // return 1;
  721. }
  722. export const getUserInfo=(state)=>{
  723. return state.main.userInfo;
  724. }
  725. export const getUserID=(state)=>{
  726. let uid=-1;
  727. let userInfo=state.main.userInfo;
  728. if (userInfo){
  729. if (userInfo.UserID!=null)uid=userInfo.UserID;
  730. else uid=0;
  731. }
  732. return uid;
  733. }
  734. export const getCustomInfo=(state)=>{
  735. return state.main.customerInfo;
  736. }
  737. export const getCustomTypeInfo=(type)=>(state)=>{
  738. let item=null;
  739. let customerInfo=state.main.customerInfo;
  740. if (customerInfo){
  741. for (let i = 0; i < customerInfo.length; i++) {
  742. let info=customerInfo[i];
  743. if (info.StatusName===type){
  744. item=info;
  745. break;
  746. }
  747. }
  748. }
  749. return item
  750. }
  751. export const getCustomStatus=(state)=>{
  752. return state.main.customLeaveMsgStatus;
  753. }
  754. export const getCustomServiceStatus=(state)=>{
  755. return state.main.customServiceStatus;
  756. }
  757. export const getHallServerUrl=(state)=>{
  758. return state.main.hallServerUrl;
  759. }
  760. export const getGameLikes=(state)=>{
  761. return state.main.favorites;
  762. }
  763. export const getGameLike=(id)=>(state)=>{
  764. let favorites=state.main.favorites;
  765. if (favorites.includes(id))return 1;
  766. return 0;
  767. }
  768. export const getKickState=(state)=>{
  769. return state.main.serverKick;
  770. }
  771. export const getPromoteInstall=(state)=>{
  772. return state.main.promoteInstall;
  773. }
  774. export const getOpenPay=(state)=>{
  775. return state.main.openPay;
  776. }
  777. export const getGameCardInfo=(id)=>(state)=>{
  778. id=Number(id);
  779. return state.main.gameCardInfo[id];
  780. }
  781. export const getIsGuest=(state)=>{
  782. return state.main.guest;
  783. }
  784. export const getUpgradeBonus=(state)=>{
  785. return state.main.upgradeBonus;
  786. }
  787. //数据获取
  788. export default Main.reducer;
  789. export const getBFP=()=>{
  790. return async (dispatch, getState) => {
  791. let bfp="";
  792. bfp=localStorageGet(LOCAL_VISTOR_ID,"");
  793. if (bfp!=null&&bfp!==""){
  794. global.BFP=bfp;
  795. return bfp;
  796. }
  797. // const fpPromise = FingerprintJS.load({
  798. // apiKey: "W7zWifGvJhjacPekHi64"
  799. // })
  800. const fpPromise =FingerprintJS.load();
  801. try {
  802. let fp=await fpPromise;
  803. let result=await fp.get();
  804. if (result!=null){
  805. bfp=result.visitorId;
  806. localStorageSet(LOCAL_VISTOR_ID,bfp);
  807. global.BFP=bfp;
  808. }
  809. }
  810. catch (err){
  811. console.log(err);
  812. }
  813. return bfp;
  814. }
  815. }