index.jsx 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. import styles from './styles.module.scss';
  2. import React, {useEffect, useRef, useState} from "react";
  3. import {reqFirstPayConfig, reqFirstPayMulti, reqGameInfo, reqProtectCheck, reqRechargeConfig} from "@features/api";
  4. import {useDispatch, useSelector} from "react-redux";
  5. import {getFirstBonus, getOpenRelief, getPopBindPhone, getUpgradeBonus, getUserInfo} from "@features/mainSlice";
  6. import {APP_WELFARE} from "@constants/app";
  7. import {getBonusPack, getCurrPayOrder, getFirstPayMulti, getOFirstPay} from "@features/paySlice";
  8. import {getProtectInfo} from "@features/protectSlice";
  9. import {formatCash, formatTime} from "@utils/helpers";
  10. import {useThemeProvider} from "@contexts/themeContext";
  11. import {useSidebar} from "@contexts/sidebarContext";
  12. import {useLocation} from "react-router-dom";
  13. import {ROUTE_PATH} from "@constants/routes";
  14. const i18n=global.i18n;
  15. const WelfareBtn=({children,open=false,pressDown=false,...props})=>{
  16. const [bopen,setBopen]=useState(false);
  17. const [show,setShow]=useState(false);
  18. useEffect(()=>{
  19. if (open){
  20. setShow(true);
  21. setTimeout(()=>{
  22. setBopen(true);
  23. },100)
  24. }
  25. else
  26. {
  27. setBopen(false);
  28. setShow(false);
  29. }
  30. },[open])
  31. return (
  32. <>
  33. {
  34. show? (
  35. <button
  36. className={`${styles.wlf_btn} ${bopen ? styles.wlf_btn_open : styles.wlf_btn_close} ${pressDown ? styles.wlf_btn_press : ''}`}
  37. {...props}
  38. >
  39. {
  40. children == null ? (<></>) : children
  41. }
  42. </button>
  43. ):(<></>)
  44. }
  45. </>
  46. )
  47. }
  48. const WWelfarebar = () => {
  49. const dispatch = useDispatch();
  50. const user = useSelector(getUserInfo);
  51. //0:1,1:1,2:1
  52. // const [openState, setOpenState] = useState({});
  53. const [openProtect, setOpenProtect] = useState(0);
  54. const [openFirst, setOpenFirst] = useState(0);
  55. const [openBind, setOpenBind] = useState(0);
  56. const firstPayConf = useSelector(getOFirstPay);
  57. const popBindPhone=useSelector(getPopBindPhone);
  58. const firstBonus=useSelector(getFirstBonus);
  59. const openRelief=useSelector(getOpenRelief);
  60. const protectInfo=useSelector(getProtectInfo);
  61. const orderInfo=useSelector(getCurrPayOrder);
  62. const {welfTabState,isMobile}=useThemeProvider();
  63. const {open} = useSidebar();
  64. const {pathname} = useLocation();
  65. const starPRef=useRef(null);
  66. const upgradBonus=useSelector(getUpgradeBonus);
  67. const regCoins=formatCash(upgradBonus,0);
  68. const firstPayMulti=useSelector(getFirstPayMulti);
  69. //bonus pack
  70. const [openBonusPack, setOpenBonusPack] = useState(0);
  71. const bonusPack=useSelector(getBonusPack);
  72. const getWelfTabState=(key)=>{
  73. if (welfTabState===key)return true;
  74. return false;
  75. }
  76. const changeNewState=(key,state)=>{
  77. // let newOpenState= Object.assign({},openState);
  78. // newOpenState[key]=state;
  79. // setOpenState(newOpenState);
  80. // state=1;
  81. switch (key){
  82. case APP_WELFARE.PROTECT:
  83. setOpenProtect(state);
  84. break;
  85. case APP_WELFARE.FIRST_PAY:
  86. setOpenFirst(state);
  87. break;
  88. case APP_WELFARE.BIND:
  89. setOpenBind(state);
  90. break;
  91. case APP_WELFARE.BONUS_PACK:
  92. setOpenBonusPack(state);
  93. break;
  94. }
  95. }
  96. const checkProtect=()=>{
  97. let state=0;
  98. if (openRelief){
  99. if (protectInfo!=null){
  100. if (user.UserID>0){
  101. // let CurProtectTimes=protectInfo.CurProtectTimes!=null?parseInt(protectInfo.CurProtectTimes):0;
  102. // if (CurProtectTimes>0)state=1;
  103. state=1;
  104. }
  105. }
  106. }
  107. changeNewState(APP_WELFARE.PROTECT,state);
  108. }
  109. const checkProtectLimit=()=>{
  110. if (protectInfo!=null){
  111. let ProtectLimit=protectInfo.ProtectLimit;
  112. if (ProtectLimit!=null){
  113. ProtectLimit=Number(ProtectLimit);
  114. ProtectLimit=Number(formatCash(ProtectLimit))
  115. let Score=user.Score;
  116. if (Score<=ProtectLimit){
  117. dispatch(reqProtectCheck());
  118. }
  119. }
  120. }
  121. }
  122. const checkFirstPay=()=>{
  123. let state=0;
  124. if (firstBonus){
  125. // if (user.UserID>0){
  126. // if (firstPayConf!=null)state=1;
  127. // }
  128. if (firstPayMulti!=null){
  129. state=1;
  130. //充值成功弹一下
  131. if (firstPayMulti.pay_sucess){
  132. global.showFirstPay();
  133. }
  134. }
  135. }
  136. changeNewState(APP_WELFARE.FIRST_PAY,state);
  137. }
  138. const checkFirstPayStatus=()=>{
  139. if (orderInfo!=null){
  140. if (orderInfo.status==="success"){
  141. // dispatch(reqFirstPayConfig());
  142. //pay_success
  143. dispatch(reqFirstPayMulti(1));
  144. }
  145. }
  146. }
  147. const checkBind=()=>{
  148. let state=0;
  149. if (popBindPhone){
  150. let bonus=Number(upgradBonus);
  151. if (user.UserID>0&&bonus>0){
  152. if (user.Phone==null||user.Phone===""){
  153. state=1;
  154. }
  155. }
  156. }
  157. changeNewState(APP_WELFARE.BIND,state);
  158. }
  159. const getSymbol=()=>{
  160. let symbols=['$','€','₽','M$','R$'];
  161. let dollar=global.DOLLAR;
  162. if (symbols.indexOf(dollar)===-1)dollar=symbols[0];
  163. return dollar;
  164. }
  165. const getFirstCD=()=>{
  166. let timeleft=-1;
  167. if (firstPayMulti!=null&&firstPayMulti.leftitem!=null){
  168. timeleft=Number(firstPayMulti.leftitem.timeleft);
  169. }
  170. return timeleft;
  171. }
  172. const formatFirstCD=(firstCD)=>{
  173. let cdStr=formatTime(firstCD);
  174. cdStr=cdStr.substring(0,cdStr.length-3);
  175. return cdStr;
  176. }
  177. //bonus pack
  178. const checkBonusPack=()=>{
  179. let state=0;
  180. if (bonusPack&&bonusPack.timeleft>0){
  181. state=1;
  182. }
  183. changeNewState(APP_WELFARE.BONUS_PACK,state);
  184. }
  185. const getBonusPackCD=()=>{
  186. let timeleft=-1;
  187. if (bonusPack!=null){
  188. timeleft=Number(bonusPack.timeleft);
  189. }
  190. return timeleft;
  191. }
  192. const formatBonusPackCD=(bonusCD)=>{
  193. let cdStr=formatTime(bonusCD);
  194. cdStr=cdStr.substring(0,cdStr.length-3);
  195. return cdStr;
  196. }
  197. useEffect(()=>{
  198. let UserID=user.UserID;
  199. if (UserID>0){
  200. dispatch(reqProtectCheck());
  201. // dispatch(reqGameInfo());
  202. }
  203. dispatch(reqRechargeConfig());
  204. // dispatch(reqFirstPayConfig());
  205. dispatch(reqFirstPayMulti());
  206. },[user.UserID]);
  207. useEffect(() => {
  208. checkProtectLimit();
  209. }, [user.Score]);
  210. // useEffect(()=>{
  211. // checkFirstPay();
  212. // },[firstPayConf]);
  213. useEffect(()=>{
  214. checkFirstPay();
  215. },[firstPayMulti]);
  216. useEffect(()=>{
  217. checkBind();
  218. },[popBindPhone,user.Phone]);
  219. useEffect(()=>{
  220. checkProtect();
  221. },[protectInfo])
  222. useEffect(()=>{
  223. checkFirstPayStatus();
  224. },[orderInfo])
  225. //bonus pack
  226. useEffect(()=>{
  227. checkBonusPack();
  228. },[bonusPack])
  229. const renderBar=()=>{
  230. let extra='';
  231. if (!isMobile()){
  232. if (open)extra='sidebar-open';
  233. else extra='sidebar-close';
  234. }
  235. let isClose=false;
  236. if (pathname.startsWith(ROUTE_PATH.SPORTS)){
  237. isClose=true;
  238. }
  239. else if(pathname.startsWith(ROUTE_PATH.RACING)){
  240. isClose=true;
  241. }
  242. const stars=Array.from({ length: 5 }, (_, index) => index);
  243. let symbol=getSymbol();
  244. let firstCD=getFirstCD();
  245. let bonusCD=getBonusPackCD();
  246. return (
  247. <div className={`${styles.container} ${extra}`}>
  248. <div className={`${styles.content} ${isClose?styles.content_close:''}`}>
  249. <WelfareBtn key={"protect"} open={openProtect} pressDown={getWelfTabState(APP_WELFARE.PROTECT)}
  250. onClick={() => {
  251. global.showProtectReward();
  252. }}>
  253. <div className={styles.wlf_protect}>
  254. {/*<img src={require("@assets/welfare/fundos_" + i18n.language + ".png")}/>*/}
  255. <img className={styles.p_img} src={require("@assets/welfare/fundos_" + symbol + ".png")}/>
  256. <div ref={starPRef} className={styles.p_stars}>
  257. {
  258. stars.map((item,index)=>{
  259. return (
  260. <div key={index} className={`${styles.star} ${styles['star_ani_'+index]}`}></div>
  261. )
  262. })
  263. }
  264. </div>
  265. <img className={styles.p_txt} src={require("@assets/welfare/fundos_title_" + i18n.language + ".png")}/>
  266. </div>
  267. </WelfareBtn>
  268. <WelfareBtn key={"first_pay"} open={openFirst} pressDown={getWelfTabState(APP_WELFARE.FIRST_PAY)}
  269. onClick={() => {
  270. global.showFirstPay();
  271. }}>
  272. <div className={styles.wlf_first}>
  273. <div className={styles.wlf_first_mask} style={{
  274. WebkitMask:`url(${require("@assets/welfare/bag_"+symbol+".png")}) 0 0/100%`
  275. }}>
  276. <img className={styles.f_img} src={require("@assets/welfare/bag_"+symbol+".png")}/>
  277. </div>
  278. {
  279. firstCD<=0? (<img className={styles.f_txt}
  280. src={require("@assets/welfare/first_" + i18n.language + ".png")}/>): (
  281. <span data-title={formatFirstCD(firstCD)}
  282. className={styles.f_cdtxt}>{formatFirstCD(firstCD)}</span>
  283. )
  284. }
  285. </div>
  286. </WelfareBtn>
  287. <WelfareBtn key={"bind"} open={openBind} pressDown={getWelfTabState(APP_WELFARE.BIND)}
  288. onClick={() => {
  289. global.showBindPhone();
  290. }}>
  291. <div className={styles.wlf_bind}>
  292. {/*<img className={`${styles.b_icon} iconshake`}*/}
  293. {/* src={require("@assets/welfare/veri_" + i18n.language + ".png")}/>*/}
  294. <div className={`${styles.b_icon} iconshake`}>
  295. <img className={styles.b_bg} src={require("@assets/welfare/otp_" + symbol + ".png")}/>
  296. <img className={styles.b_get}
  297. src={require("@assets/welfare/get_" + i18n.language + ".png")}/>
  298. <span data-title={regCoins}
  299. className={styles.b_num}>{regCoins}</span>
  300. </div>
  301. <img className={`${styles.b_txt}`}
  302. src={require("@assets/welfare/bind_txt_" + i18n.language + ".png")}/>
  303. </div>
  304. </WelfareBtn>
  305. <WelfareBtn key={"bonus_pack"} open={openBonusPack}
  306. pressDown={getWelfTabState(APP_WELFARE.BONUS_PACK)}
  307. onClick={() => {
  308. global.showBonusPack();
  309. }}>
  310. <div className={styles.wlf_bpack}>
  311. <div className={styles.wlf_bpack_mask} style={{
  312. WebkitMask: `url(${require("@assets/welfare/bonuspack.png")}) 0 0/100%`
  313. }}>
  314. <img className={styles.f_img} src={require("@assets/welfare/bonuspack.png")}/>
  315. </div>
  316. <span data-title={formatBonusPackCD(bonusCD)}
  317. className={styles.f_cdtxt}>{formatBonusPackCD(bonusCD)}</span>
  318. </div>
  319. </WelfareBtn>
  320. </div>
  321. </div>
  322. )
  323. }
  324. return (
  325. <>
  326. {renderBar()}
  327. </>
  328. )
  329. }
  330. export default WWelfarebar;