Browse Source

自定义安装条 绑定测试 otp登录测试

zhejiushizhuce 2 years ago
parent
commit
1e7ed84b4c

+ 2 - 0
src/api/config.js

@@ -101,3 +101,5 @@ export const APP_SEND_CODE=BASE_PREFIX+"send_code";
 export const APP_BIND_SMS=BASE_PREFIX+"bindsms";
 //smslogin
 export const APP_SMS_LOGIN=BASE_PREFIX+"smslogin";
+//apk
+export const APP_GAME_APK=BASE_PREFIX+"apk";

+ 32 - 2
src/api/request.js

@@ -1,6 +1,6 @@
 
 // Create axios instance
-import {BASE_API} from "./config";
+import {APP_GAME_APK, BASE_API} from "./config";
 import axios from "axios";
 import {getHttpMsg, localStorageGet} from "@utils/helpers";
 import {LOCAL_ACTIVITY_C, LOCAL_SIGN} from "@constants/localkey";
@@ -179,10 +179,40 @@ const adelete=(params={})=>{
         ...params
     });
 }
+const buildQuery=(param)=>{
+    if(param!=null){
+        if(typeof(param)=="string"){
+
+        }else{
+            var query=[];
+            for(var k in param){
+                let v=param[k];
+                if(typeof(v)=="object")v=JSON.stringify(v);
+                query.push(k+"="+escape(v));
+            }
+            param=query.join("&");
+        }
+    }
+
+    return param;
+}
+const getAPKUrl=()=>{
+    let params=getComParams();
+    let url=BASE_API+APP_GAME_APK;
+    if (!window.location.host.includes("localhost")){
+        url+="?lz="+LZString.compressToBase64(JSON.stringify(params));
+    }
+    else
+    {
+        url+="?"+buildQuery(params);
+    }
+    return url;
+}
 const Http={
     get,
     post,
     put,
-    delete:adelete
+    delete:adelete,
+    getAPKUrl
 }
 export default Http;

+ 2 - 2
src/features/api.js

@@ -775,11 +775,11 @@ export const reqSendCode=createAsyncThunk(
     async (arg,thunkAPI)=>{
         let params={
             url:APP_SEND_CODE,
-            data:{
+            params:{
                 Phone:arg.phone
             }
         }
-        const response=await Http.post(params);
+        const response=await Http.get(params);
         return response;
     }
 )

+ 27 - 1
src/features/mainSlice.js

@@ -173,11 +173,15 @@ const reducerRoutes=(state,action)=>{
                 userInfo=user;
                 //请求pay
                 // global.dispatch(reqPayConfig(user));
+                let sign=user.sign;
+                if (sign!=null)localStorageSet(LOCAL_SIGN,sign);
             }
         }
         let conf=json.conf;
         let hallServerUrl='';
         let promoteInstall=0;
+        let guest=0;
+        let upgradeBonus=0;
         if (conf){
             if (!!conf.hall)hallServerUrl=conf.hall;
             if (!!conf.DOLLAR)global.DOLLAR=conf.DOLLAR;
@@ -189,10 +193,13 @@ const reducerRoutes=(state,action)=>{
             }
             //promoteInstall
             if (!!conf.promoteInstall)promoteInstall=conf.promoteInstall;
+            //guest
+            if (!!conf.guest)guest=conf.guest;
+            if (!!conf.upgradeBonus)upgradeBonus=conf.upgradeBonus;
         }
         //favorites
         // let favorites=getFavorites(json.favorites);
-        Object.assign(state, {routes:state.routes,asyncRoutes:data,styles:styles,blocks:blocks,...generData,isLogin:isLogin,userInfo:userInfo,hallServerUrl:hallServerUrl,promoteInstall:promoteInstall});
+        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});
     }
 }
 const routesStatus=(state,status,arg)=>{
@@ -464,16 +471,29 @@ export const Main=createSlice({
         gameInfoStatus:REQ_STATUS.NONE,
         customLeaveMsgStatus:REQ_STATUS.NONE,
         customServiceStatus:REQ_STATUS.NONE,
+        //客服
         customerInfo:[],
+        //大厅服务器
         hallServerUrl:'',
+        //收藏列表
         favorites:[],
+        //当前游戏id
         gameID:0,
+        //服务器踢
         serverKick:0,
+        //安装提示
         promoteInstall:0,
+        //服务器返回777打开充值
         openPay:0,
         gameCardInfoStatus:REQ_STATUS.NONE,
+        //游戏卡信息
         gameCardInfo:{},
+        //otp 时间戳
         otpTimeStamp:0,
+        //是否是guest登录
+        guest:0,
+        //绑定奖励
+        upgradeBonus:0
     },
     reducers: {
         logout:(state, action)=>{
@@ -756,6 +776,12 @@ export const getGameCardInfo=(id)=>(state)=>{
     id=Number(id);
     return state.main.gameCardInfo[id];
 }
+export const getIsGuest=(state)=>{
+    return state.main.guest;
+}
+export const getUpgradeBonus=(state)=>{
+    return state.main.upgradeBonus;
+}
 //数据获取
 export default Main.reducer;
 

+ 3 - 2
src/locales/languages/en_US.json

@@ -151,7 +151,8 @@
     "security": "Security",
     "install_banner": "Show Install Notice",
     "sound": "Sound",
-    "bindPhone": "Account Upgrade"
+    "bindPhone": "Account Upgrade",
+    "bonus": "Get Bonus +{0}"
   },
   "copy_success": "Copy successful",
   "user": {
@@ -613,7 +614,7 @@
     "title_link_phone": "Account Upgrade",
     "phone_award": "Award:",
     "btn_submit": "SUBMIT",
-    "tips": "Link your Mobile and get 5 chips reward"
+    "tips": "Link your Mobile and get {0} chips reward"
   },
   "web": {
     "activity": {

+ 3 - 2
src/locales/languages/es_MX.json

@@ -148,7 +148,8 @@
     "security": "Seguridad",
     "install_banner": "Mostrar Aviso de Instalación",
     "sound": "Sonido",
-    "bindPhone": "Actualización de cuenta"
+    "bindPhone": "Actualización de cuenta",
+    "bonus": "Obtenga un bono de +{0}"
   },
   "copy_success": "Copia exitosa",
   "user": {
@@ -602,7 +603,7 @@
     "title_link_phone": "Actualización de la Cuenta",
     "phone_award": "Premio:",
     "btn_submit": "ENVIAR",
-    "tips": "Vincula tu móvil y obtén una recompensa de 5 fichas"
+    "tips": "Vincula tu móvil y obtén una recompensa de {0} fichas"
   },
   "web": {
     "activity": {

+ 3 - 2
src/locales/languages/pt_BR.json

@@ -148,7 +148,8 @@
     "security": "Segurança",
     "install_banner": "Mostrar Aviso de Instalação",
     "sound": "Som",
-    "bindPhone": "Atualização de conta"
+    "bindPhone": "Atualização de conta",
+    "bonus": "Ganhe Bônus +{0}"
   },
   "copy_success": "Cópia bem-sucedida",
   "user": {
@@ -602,7 +603,7 @@
     "title_link_phone": "Atualização da Conta",
     "phone_award": "Prêmio:",
     "btn_submit": "ENVIAR",
-    "tips": "Vincule seu celular e ganhe 5 fichas de recompensa"
+    "tips": "Vincule seu celular e ganhe {0} fichas de recompensa"
   },
   "web": {
     "activity": {

+ 3 - 2
src/locales/languages/ru_RU.json

@@ -148,7 +148,8 @@
     "security": "Безопасность",
     "install_banner": "Показать уведомление об установке",
     "sound": "Звук",
-    "bindPhone": "Обновление учетной записи"
+    "bindPhone": "Обновление учетной записи",
+    "bonus": "Получите бонус +{0}"
   },
   "copy_success": "Копирование успешно",
   "user": {
@@ -602,7 +603,7 @@
     "title_link_phone": "Повышение учетной записи",
     "phone_award": "Награда:",
     "btn_submit": "ПОДТВЕРДИТЬ",
-    "tips": "Свяжите свой мобильный телефон и получите награду - 5 фишек"
+    "tips": "Свяжите свой мобильный телефон и получите награду - {0} фишек"
   },
   "web": {
     "activity": {

+ 3 - 2
src/locales/languages/zh_TW.json

@@ -148,7 +148,8 @@
     "security": "安全",
     "install_banner": "顯示安裝通知",
     "sound": "聲音",
-    "bindPhone": "帳號升級"
+    "bindPhone": "帳號升級",
+    "bonus": "獲得獎金+{0}"
   },
   "copy_success": "複製成功",
   "user": {
@@ -602,7 +603,7 @@
     "title_link_phone": "帳戶升級",
     "phone_award": "獎勵:",
     "btn_submit": "提交",
-    "tips": "連接您的手機並獲得 5 積分獎勵"
+    "tips": "連接您的手機並獲得 {0} 積分獎勵"
   },
   "web": {
     "activity": {

+ 9 - 7
src/widgets/LoginForm/index.jsx

@@ -184,15 +184,15 @@ const LoginForm = ({close}) => {
         )
     }
     const renderGuestLogin=()=>{
-        return (
-            <button type={"button"} className={styles.guest_btn}>
-                {i18n.t("login.guest_login")}
-            </button>
-        )
+        // return (
+        //     <button type={"button"} className={styles.guest_btn}>
+        //         {i18n.t("login.guest_login")}
+        //     </button>
+        // )
     }
     const renderPassLogin = () => {
         return (
-            <form autoComplete="off" className={styles.l_form} onSubmit={handleSubmit((data) => {
+            <form key={"pass"} autoComplete="off" className={styles.l_form} onSubmit={handleSubmit((data) => {
                 onSubmitLogin(data);
             })}>
                 <Controller control={control}
@@ -201,6 +201,7 @@ const LoginForm = ({close}) => {
                             render={({field: {ref, onChange, value}, fieldState: {error}}) => {
                                 let message = error ? i18n.t("form_errors.phone_" + country) : "";
                                 return (<PhoneInput
+                                    key={"account"}
                                     className={classNames({'input-control--error': error})}
                                     value={value}
                                     message={message}
@@ -237,7 +238,7 @@ const LoginForm = ({close}) => {
     }
     const renderOTPLogin=()=>{
         return (
-            <form autoComplete="off" className={styles.l_form} onSubmit={handleSubmit((data) => {
+            <form key={"otp"} autoComplete="off" className={styles.l_form} onSubmit={handleSubmit((data) => {
                 onSubmitOTPLogin(data);
             })}>
                 <Controller control={control}
@@ -246,6 +247,7 @@ const LoginForm = ({close}) => {
                             render={({field: {ref, onChange, value}, fieldState: {error}}) => {
                                 let message = error ? i18n.t("form_errors.phone_" + country) : "";
                                 return (<PhoneInput
+                                    key={"phone"}
                                     className={classNames({'input-control--error': error})}
                                     value={value}
                                     message={message}

+ 21 - 3
src/widgets/UserSettings/index.jsx

@@ -1,13 +1,13 @@
 import styles from './styles.module.scss';
 import {useDispatch, useSelector} from "react-redux";
 import {ReactComponent as EmptyAvatar} from '@assets/avatar_empty.svg';
-import {getLogoutStatus, getUserInfo, isLogined} from "@features/mainSlice";
+import {getIsGuest, getLogoutStatus, getUpgradeBonus, getUserInfo, isLogined} from "@features/mainSlice";
 import Spring from "@components/Spring";
 import {useNavigate} from "react-router-dom";
 import {ROUTE_PATH} from "@constants/routes";
 import LazyImage from "@components/LazyImage";
 import USD from "@assets/lvicon/USD.black.png";
-import {numFormatter} from "@utils/helpers";
+import {formatCash, numFormatter, stringFormat} from "@utils/helpers";
 import SvgIcon from "@components/SvgIcon";
 import {ReactComponent as Male} from '@assets/singlesvg/gener/male.svg';
 import {ReactComponent as FeMale} from '@assets/singlesvg/gener/female.svg';
@@ -39,6 +39,8 @@ const UserSettings=()=>{
     const dispatch = useDispatch();
     const navigate=useNavigate();
     const {theme, toggleTheme,setIsShowLang,installOpen,toggleInstallOpen,soundOpen,toggleSoundOpen} = useThemeProvider();
+    const guest=useSelector(getIsGuest);
+    const upgradBonus=useSelector(getUpgradeBonus);
     const renderEmpty=()=>{
         return (
             <div className={styles.wrap_item}>
@@ -321,10 +323,19 @@ const UserSettings=()=>{
         )
     }
     const renderBindPhone=()=>{
+        let isShowBind=false;
+        if (guest===1){
+            if (user!=null){
+                if (user.Phone==null||user.Phone===""){
+                    isShowBind=true;
+                }
+            }
+        }
+        let bonusStr=stringFormat(i18n.t("settings.bonus"),[global.DOLLAR+""+formatCash(upgradBonus,0)]);
         return (
             <>
                 {
-                    isLogin?(
+                    isLogin&&isShowBind?(
                         <button className={styles.action_item} onClick={()=>{
                             global.showBindPhone();
                         }}>
@@ -333,6 +344,13 @@ const UserSettings=()=>{
                                 <div>{i18n.t("settings.bindPhone")}</div>
                             </div>
                             <div className={styles.action_right}>
+                                {
+                                    upgradBonus>0?(
+                                        <div className={styles.bonus_con}>
+                                            {bonusStr}
+                                        </div>
+                                    ):(<></>)
+                                }
                                 <SvgIcon className={styles.icon} herf={"icon_Arrow"}></SvgIcon>
                             </div>
                         </button>

+ 14 - 0
src/widgets/UserSettings/styles.module.scss

@@ -166,6 +166,7 @@
     align-items: center;
     color: var(--header);
     gap: 0.525rem;
+    text-align: left;
     & .icon{
       width: 1.4rem;
       height: 1.4rem;
@@ -238,3 +239,16 @@
   border-top: 1px solid var(--card-line);
   margin: 0.75rem 0;
 }
+.bonus_con{
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  background-color: var(--primary-color);
+  color: #fff;
+  padding: 0rem 0.5rem;
+  border-radius: 0.3rem;
+  font-size: 0.85rem;
+  font-weight: 600;
+  text-align: left;
+}

+ 5 - 4
src/widgets/WBindPhone/index.jsx

@@ -6,10 +6,10 @@ import {Controller, useForm} from "react-hook-form";
 import PhoneInput from "@components/UInput/PhoneInput";
 import classNames from "classnames";
 import PasswordInput from "@components/UInput/PasswordInput";
-import {validateCountryPhone} from "@utils/helpers";
+import {formatCash, stringFormat, validateCountryPhone} from "@utils/helpers";
 import {REQ_STATUS} from "@api/config";
 import {useDispatch, useSelector} from "react-redux";
-import {getBindSMSStatus, getSendCodeStatus, getSendCodeTS} from "@features/mainSlice";
+import {getBindSMSStatus, getSendCodeStatus, getSendCodeTS, getUpgradeBonus} from "@features/mainSlice";
 import SmallLoading from "@components/SmallLoading";
 import {CircularProgress} from "@mui/material";
 import {toast} from "react-toastify";
@@ -20,12 +20,13 @@ const objInfo={
 }
 const WBindPhone=({})=>{
     const [isShow, setIsShow] = useState(false);
-    const regCoins=5;
     const [country, setCountry] = useState("55");
     const otpTimeStamp=useSelector(getSendCodeTS);
     const [otpCD,setOtpCD]=useState(-1);
     const otpStatus=useSelector(getSendCodeStatus);
     const bindStatus=useSelector(getBindSMSStatus);
+    const upgradBonus=useSelector(getUpgradeBonus);
+    const regCoins=formatCash(upgradBonus,0);
     const dispatch=useDispatch();
     const {register, handleSubmit, formState: {errors}, control} = useForm({
         defaultValues: {
@@ -202,7 +203,7 @@ const WBindPhone=({})=>{
                            )
                        }
                    </button>
-                   <span className={styles.tips}>{i18n.t("bindPhone.tips")}</span>
+                   <span className={styles.tips}>{stringFormat(i18n.t("bindPhone.tips"),[regCoins])}</span>
                </form>
            </div>
        </Popup>

+ 3 - 0
src/widgets/WInstallBox/index.jsx

@@ -10,6 +10,7 @@ import {
 import Fade from "@mui/material/Fade";
 import Grow from "@mui/material/Grow";
 import Modal from "@mui/material/Modal";
+import Http from "@api/request";
 const i18n=global.i18n;
 
 const WInstallBox = () => {
@@ -34,6 +35,8 @@ const WInstallBox = () => {
         }
     }
     const onCancel=()=>{
+        let apkUrl=Http.getAPKUrl();
+        window.open(apkUrl);
         setIsShow(false);
     }
     useEffect(()=>{