leon 1 yıl önce
ebeveyn
işleme
9604a61806

+ 2 - 2
android/app/build.gradle

@@ -144,8 +144,8 @@ aaptOptions.useNewCruncher = false
         applicationId app_id
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
-        versionCode 23
-        versionName "1.0.1"
+        versionCode 25
+        versionName "1.0.0"
         buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
 //        manifestPlaceholders = [
 //                JPUSH_APPKEY: "7cf918ada725a9e9aecc8a17",         //在此替换你的APPKey

+ 1 - 1
android/build.gradle

@@ -3,7 +3,7 @@
 buildscript {
     ext {
         buildToolsVersion = "31.0.0"
-        minSdkVersion = 21
+        minSdkVersion = 24
         compileSdkVersion = 33
         targetSdkVersion = 34
 //        compileSdkVersion = 33

+ 214 - 0
src/features/auth/components/Login.tsx

@@ -0,0 +1,214 @@
+import Inputs from "@/components/input/Inputs";
+import { View, Text, Image } from "@tarojs/components";
+import { useEffect, useState } from "react";
+import { useTranslation } from "react-i18next";
+import check from '@/assets/svg/check.svg'
+import Texts from "@/components/basic/Texts";
+import Box from "@/components/layout/Box";
+import { ComponentStatus, TextType } from "@/utils/types";
+import Buttons from "@/components/basic/Buttons";
+import './Auth.scss'
+import { clientId, login } from "@/services/user";
+import { useDispatch, useSelector } from "react-redux";
+import Taro from "@tarojs/taro";
+import { ColorType } from "@/context/themes/color";
+import { loginSuccess } from "@/store/user";
+import { IconCheck, IconRadio, IconRadioCheck } from "@/components/basic/Icons";
+import { jumpPage } from "@/features/trackTimeDuration/hooks/Common";
+
+let useNavigation;
+if (process.env.TARO_ENV == 'rn') {
+    useNavigation = require("@react-navigation/native").useNavigation
+}
+
+export default function Login(props: { register: () => void }) {
+    const { t } = useTranslation()
+    const dispatch = useDispatch();
+    const [name, setName] = useState('');
+    const [password, setPassword] = useState('');
+    const user = useSelector((state: any) => state.user);
+    const common = useSelector((state: any) => state.common);
+    const [checked, setChecked] = useState(true)
+
+    let navigation;
+    if (useNavigation) {
+        navigation = useNavigation()
+    }
+
+    useEffect(() => {
+        if (user.isLogin) {
+            //上报用户登录完成
+
+
+            if (process.env.TARO_ENV == 'rn') {
+                navigation.pop(2)
+                return
+            }
+
+            if (user.is_new_user) {
+                Taro.navigateBack({
+                    delta: 1
+                })
+                debugger
+                Taro.redirectTo({
+                    url: '/pages/clock/ChooseScenario?trigger_event=SETUP_UPON_ACCOUNT_CREATION'
+                })
+            }
+            else {
+                Taro.navigateBack({
+                    delta: 2
+                })
+            }
+
+            // if (user.scenario_select_count > 0 || user.ongoing) {
+            //     Taro.navigateBack({
+            //         delta: 2
+            //     })
+            // }
+            // else {
+            //     Taro.navigateBack({
+            //         delta: 1
+            //     })
+            //     Taro.redirectTo({
+            //         url: '/pages/clock/ChooseScenario?trigger_event=SETUP_UPON_ACCOUNT_CREATION'
+            //     })
+            // }
+
+        }
+    }, [user.isLogin])
+
+    const handleNameChange = (value: string) => {
+        setName(value);
+    };
+
+    const handlePasswordChange = (value: string) => {
+        setPassword(value);
+    }
+    const isLoginButtonDisabled = name === '' || password === '';
+
+    function loginComponent() {
+        return <View>
+            <Inputs autoFocus={true} value={name} onChange={handleNameChange} onConfirm={(e) => { }} placeholder={t('feature.auth.login.input_account_placeholder')}></Inputs>
+            <View style={{ height: 20 }} />
+            <Inputs value={password} isSecure={true} onChange={handlePasswordChange} onConfirm={(e) => { }} placeholder={t('feature.auth.login.input_password_placeholder')}></Inputs>
+        </View>
+    }
+
+    function LoginF() {
+        if (isLoginButtonDisabled) {
+            return;
+        }
+        login(name, password).then(res => {
+            dispatch(loginSuccess(res))
+            clientId()
+            // navigation.goBack(3)
+        }).catch(e => {
+            // alert(e.data.error_message)
+            // alert(''+JSON.stringify(e))
+            Taro.showToast({
+                icon: 'none',
+                title: e.error_message
+            })
+        })
+        // dispatch(login(name, password) as any);
+    }
+
+    function tapCheck() {
+        setChecked(!checked)
+    }
+
+    function agreement() {
+        const resource = common.resources.filter((item: any) => {
+            return item.code == 'user_agreement'
+        })
+
+        if (!resource || resource.length == 0) {
+            Taro.showToast({
+                title: 'Not found.',
+                icon: 'none'
+            })
+            return
+        }
+
+        jumpPage('/pages/common/H5?title=User Agreement&url=' + resource[0].url, 'H5', navigation, {
+            title: 'User Agreement',
+            url: resource[0].url
+        })
+    }
+
+    function privacy() {
+        const resource = common.resources.filter((item: any) => {
+            return item.code == 'privacy'
+        })
+        debugger
+        if (!resource || resource.length == 0) {
+            Taro.showToast({
+                title: 'Not found.',
+                icon: 'none'
+            })
+            return
+        }
+
+        jumpPage('/pages/common/H5?title=Privacy Policy&url=' + resource[0].url, 'H5', navigation, {
+            title: 'Privacy Policy',
+            url: resource[0].url
+        })
+    }
+
+    return <View style={{ width: '100%', height: '100%' }}>
+        <Texts text={'fast16cc'} type={TextType.primary}></Texts>
+        {
+            loginComponent()
+        }
+        <Buttons
+            onClick={LoginF}
+            title={t('feature.auth.create_account.login')}
+            btnStyle={{
+                marginLeft: 23, marginRight: 23, marginTop: 20,
+                color: ColorType.black,
+                marginBottom: 20, height: 44,
+                borderRadius: 22, backgroundColor: ColorType.fast
+            }}
+            disabled={isLoginButtonDisabled || !checked}></Buttons>
+
+        <View className="agree_view">
+            {/* <Image style='width:12px;height:12px;' src={check} /> */}
+            <View onClick={tapCheck}>
+                {
+                    checked ? <IconRadioCheck width={20} color={ColorType.fast} /> :
+                        <IconRadio width={20} color={ColorType.fast} />
+                }
+            </View>
+
+            <View style={{ width: 10 }} />
+            <Text className='agree_text' style={{ color: '#ffffff66' }}>I agree to <Text onClick={privacy} style={{ color: '#ffffff' }}> Privacy Policy.</Text></Text>
+        </View>
+        <View style={{ flex: 1 }} />
+        <View className="footer">
+            <Text className="have_account">{t('feature.auth.login.footer_desc')}</Text>
+            <Text className="login2" onClick={() => props.register()}> {t('feature.auth.login.footer_sign_up')}</Text>
+        </View>
+    </View>
+
+    return <View style={{ backgroundColor: '#000', flex: 1, flexDirection: 'column', display: 'flex', width: '100%', height: '100%' }}>
+        <Texts text={'fast16cc'} type={TextType.primary}></Texts>
+        {/* <Texts text={t('feature.auth.create_account.sub_title')} type={TextType.secondary}></Texts> */}
+        <Box children={loginComponent()}></Box>
+
+        {/* <Buttons
+            onClick={LoginF}
+            title={t('feature.auth.create_account.btn_next')}
+            style={{ marginLeft: 23, marginRight: 23, marginTop: 20, marginBottom: 20 }}
+            status={isLoginButtonDisabled ? ComponentStatus.disable : ComponentStatus.enable}></Buttons>
+
+        <View className="agree_view">
+            <Image style='width:12px;height:12px;' src={check} />
+            <Text className='agree_text'>{t('page.auth.agreement')}</Text>
+        </View> */}
+        <View style={{ flex: 1 }} />
+        <View className="footer">
+            <Text className="have_account">{t('feature.auth.login.footer_desc')}</Text>
+            <Text className="login2" onClick={() => props.register()}>{t('feature.auth.login.footer_sign_up')}</Text>
+        </View>
+    </View>
+}