index.jsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import {useEffect, useState} from "react";
  2. import styles from "./styles.module.scss";
  3. import Modal from "@mui/material/Modal";
  4. import Fade from "@mui/material/Fade";
  5. import Grow from "@mui/material/Grow";
  6. import {useDispatch, useSelector} from "react-redux";
  7. import {getOFirstPay, getPaymentOrderStatus} from "@features/paySlice";
  8. import {ROUTE_PATH} from "@constants/routes";
  9. import {REQ_STATUS} from "@api/config";
  10. import {reqPaymentOrder} from "@features/api";
  11. import {useNavigate} from "react-router-dom";
  12. import {getUserInfo} from "@features/mainSlice";
  13. import SmallLoading from "@components/SmallLoading";
  14. import {useThemeProvider} from "@contexts/themeContext";
  15. import {APP_WELFARE} from "@constants/app";
  16. const i18n=global.i18n;
  17. const WFirstPay=()=>{
  18. const [isShow, setIsShow] = useState(false);
  19. const firstPayConf=useSelector(getOFirstPay);
  20. const dispatch = useDispatch();
  21. const navigate=useNavigate();
  22. const user=useSelector(getUserInfo);
  23. const orderStatus=useSelector(getPaymentOrderStatus);
  24. const {setWelfTabState}=useThemeProvider();
  25. const show=()=>{
  26. setIsShow(true);
  27. setWelfTabState(APP_WELFARE.FIRST_PAY);
  28. }
  29. const hide=()=>{
  30. setIsShow(false);
  31. setWelfTabState(-1);
  32. }
  33. useEffect(()=>{
  34. const firstPay={
  35. show,
  36. hide
  37. };
  38. global.firstPay=firstPay;
  39. return ()=>{
  40. }
  41. },[])
  42. const onGetPaymentCallback=()=>{
  43. hide();
  44. navigate(ROUTE_PATH.PAY_ORDER);
  45. }
  46. const onGetPaymentOder=(data)=>{
  47. if (orderStatus===REQ_STATUS.LOADING)return;
  48. data.user=user;
  49. data.callback=onGetPaymentCallback;
  50. dispatch(reqPaymentOrder(data));
  51. }
  52. const renderMain=()=>{
  53. if (firstPayConf==null)return (<></>);
  54. let first_pay=firstPayConf.first_pay;
  55. let give=0;
  56. let money=0;
  57. let total=0;
  58. let precent="";
  59. if (first_pay!=null){
  60. give=Number(first_pay.give);
  61. money=Number(first_pay.money);
  62. total=give+money;
  63. precent='+'+Math.floor(give*100/money)+'%';
  64. }
  65. return (
  66. <div className={styles.f_main}>
  67. <img className={styles.bglight} src={require('@assets/firstPay/bglight.png')}/>
  68. <div className={styles.pack_con}>
  69. <div className={styles.percent_con}>
  70. <div data-title={precent} className={styles.text}>{precent}</div>
  71. </div>
  72. <div className={styles.bonus_con}>
  73. <div data-title={total} className={styles.bonus}>{total}</div>
  74. </div>
  75. </div>
  76. </div>
  77. )
  78. }
  79. const renderPayBtn=()=>{
  80. if (firstPayConf==null)return (<></>);
  81. let first_pay=firstPayConf.first_pay;
  82. let money=0;
  83. let payType=0;
  84. if (first_pay!=null){
  85. money=Number(first_pay.money);
  86. let gear=first_pay.gear;
  87. if (gear!=null){
  88. gear=JSON.parse(gear);
  89. if (gear)gear=gear[0];
  90. payType=gear.id;
  91. }
  92. }
  93. return (
  94. <button className={styles.f_btnpay} onClick={()=>{
  95. onGetPaymentOder({
  96. price:money,
  97. goodsName:"firstpay",
  98. payType:payType,
  99. GiftsID:201
  100. })
  101. }}>
  102. {
  103. orderStatus===REQ_STATUS.LOADING?(<SmallLoading fill={"#fff"}/>):(
  104. <>
  105. <span data-title={i18n.t("firstPay.only_need")}
  106. className={styles.label}>{i18n.t("firstPay.only_need")}</span>
  107. <span data-title={global.DOLLAR + money}
  108. className={styles.pay_num}>{global.DOLLAR + money}</span>
  109. </>
  110. )
  111. }
  112. </button>
  113. )
  114. }
  115. return (
  116. <Modal open={isShow} onClose={hide} closeAfterTransition>
  117. <Fade in={isShow} timeout={500}>
  118. <div className={styles.container}>
  119. <Grow in={isShow} timeout={500}>
  120. <div className={styles.f_con}>
  121. <img className={styles.title} src={require(`@assets/firstPay/${i18n.language}.png`)}/>
  122. {renderMain()}
  123. {renderPayBtn()}
  124. </div>
  125. </Grow>
  126. </div>
  127. </Fade>
  128. </Modal>
  129. )
  130. }
  131. export default WFirstPay;