mainSlice.js 30 KB

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