mainSlice.js 29 KB

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