index.jsx 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import styles from './styles.module.scss';
  2. import {useEffect, useRef, useState} from "react";
  3. import {reqFirstPayConfig, reqProtectCheck} from "@features/api";
  4. import {useDispatch, useSelector} from "react-redux";
  5. import {getFirstBonus, getOpenRelief, getPopBindPhone, getUserInfo} from "@features/mainSlice";
  6. import {APP_WELFARE} from "@constants/app";
  7. import {getCurrPayOrder, getOFirstPay} from "@features/paySlice";
  8. import {getProtectInfo} from "@features/protectSlice";
  9. import {formatCash} 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 getWelfTabState=(key)=>{
  67. if (welfTabState===key)return true;
  68. return false;
  69. }
  70. const changeNewState=(key,state)=>{
  71. // let newOpenState= Object.assign({},openState);
  72. // newOpenState[key]=state;
  73. // setOpenState(newOpenState);
  74. // state=1;
  75. switch (key){
  76. case APP_WELFARE.PROTECT:
  77. setOpenProtect(state);
  78. break;
  79. case APP_WELFARE.FIRST_PAY:
  80. setOpenFirst(state);
  81. break;
  82. case APP_WELFARE.BIND:
  83. setOpenBind(state);
  84. break;
  85. }
  86. }
  87. const checkProtect=()=>{
  88. let state=0;
  89. if (openRelief){
  90. if (protectInfo!=null){
  91. if (user.UserID>0){
  92. // let CurProtectTimes=protectInfo.CurProtectTimes!=null?parseInt(protectInfo.CurProtectTimes):0;
  93. // if (CurProtectTimes>0)state=1;
  94. state=1;
  95. }
  96. }
  97. }
  98. changeNewState(APP_WELFARE.PROTECT,state);
  99. }
  100. const checkProtectLimit=()=>{
  101. if (protectInfo!=null){
  102. let ProtectLimit=protectInfo.ProtectLimit;
  103. if (ProtectLimit!=null){
  104. ProtectLimit=Number(ProtectLimit);
  105. ProtectLimit=Number(formatCash(ProtectLimit))
  106. let Score=user.Score;
  107. if (Score<=ProtectLimit){
  108. dispatch(reqProtectCheck());
  109. }
  110. }
  111. }
  112. }
  113. const checkFirstPay=()=>{
  114. let state=0;
  115. if (firstBonus){
  116. if (user.UserID>0){
  117. if (firstPayConf!=null)state=1;
  118. }
  119. }
  120. changeNewState(APP_WELFARE.FIRST_PAY,state);
  121. }
  122. const checkFirstPayStatus=()=>{
  123. if (orderInfo!=null){
  124. if (orderInfo.status==="success"){
  125. dispatch(reqFirstPayConfig());
  126. }
  127. }
  128. }
  129. const checkBind=()=>{
  130. let state=0;
  131. if (popBindPhone){
  132. if (user.UserID>0){
  133. if (user.Phone==null||user.Phone===""){
  134. state=1;
  135. }
  136. }
  137. }
  138. changeNewState(APP_WELFARE.BIND,state);
  139. }
  140. useEffect(()=>{
  141. let UserID=user.UserID;
  142. if (UserID>0){
  143. dispatch(reqProtectCheck());
  144. dispatch(reqFirstPayConfig());
  145. }
  146. },[user.UserID]);
  147. useEffect(() => {
  148. checkProtectLimit();
  149. }, [user.Score]);
  150. useEffect(()=>{
  151. checkFirstPay();
  152. },[firstPayConf]);
  153. useEffect(()=>{
  154. checkBind();
  155. },[popBindPhone,user.Phone]);
  156. useEffect(()=>{
  157. checkProtect();
  158. },[protectInfo])
  159. useEffect(()=>{
  160. checkFirstPayStatus();
  161. },[orderInfo])
  162. const renderBar=()=>{
  163. let extra='';
  164. if (!isMobile()){
  165. if (open)extra='sidebar-open';
  166. else extra='sidebar-close';
  167. }
  168. let isClose=false;
  169. if (pathname.startsWith(ROUTE_PATH.SPORTS)){
  170. isClose=true;
  171. }
  172. const stars=Array.from({ length: 5 }, (_, index) => index);
  173. return (
  174. <div className={`${styles.container} ${extra}`}>
  175. <div className={`${styles.content} ${isClose?styles.content_close:''}`}>
  176. <WelfareBtn key={"protect"} open={openProtect} pressDown={getWelfTabState(APP_WELFARE.PROTECT)}
  177. onClick={() => {
  178. global.showProtectReward();
  179. }}>
  180. <div className={styles.wlf_protect}>
  181. <img src={require("@assets/welfare/fundos_" + i18n.language + ".png")}/>
  182. <div ref={starPRef} className={styles.p_stars}>
  183. {
  184. stars.map((item,index)=>{
  185. return (
  186. <div key={index} className={`${styles.star} ${styles['star_ani_'+index]}`}></div>
  187. )
  188. })
  189. }
  190. </div>
  191. </div>
  192. </WelfareBtn>
  193. <WelfareBtn key={"first_pay"} open={openFirst} pressDown={getWelfTabState(APP_WELFARE.FIRST_PAY)}
  194. onClick={() => {
  195. global.showFirstPay();
  196. }}>
  197. <div className={styles.wlf_first}>
  198. <div className={styles.wlf_first_mask} style={{
  199. webkitMask:`url(${require("@assets/welfare/first.png")}) 0 0/100%`
  200. }}>
  201. <img className={styles.f_img} src={require("@assets/welfare/first.png")}/>
  202. </div>
  203. <img className={styles.f_txt} src={require("@assets/welfare/first_"+i18n.language+".png")}/>
  204. </div>
  205. </WelfareBtn>
  206. <WelfareBtn key={"bind"} open={openBind} pressDown={getWelfTabState(APP_WELFARE.BIND)}
  207. onClick={() => {
  208. global.showBindPhone();
  209. }}>
  210. <div className={styles.wlf_bind}>
  211. <img className={`${styles.b_icon} iconshake`}
  212. src={require("@assets/welfare/veri_" + i18n.language + ".png")}/>
  213. <img className={`${styles.b_txt}`}
  214. src={require("@assets/welfare/bind_txt_" + i18n.language + ".png")}/>
  215. </div>
  216. </WelfareBtn>
  217. </div>
  218. </div>
  219. )
  220. }
  221. return (
  222. <>
  223. {renderBar()}
  224. </>
  225. )
  226. }
  227. export default WWelfarebar;