diff --git a/web/src/contexts/AuthContext.tsx b/web/src/contexts/AuthContext.tsx index cecdd953..429a8784 100644 --- a/web/src/contexts/AuthContext.tsx +++ b/web/src/contexts/AuthContext.tsx @@ -130,30 +130,30 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { 'Content-Type': 'application/json', }, body: JSON.stringify({ user_id: userID, otp_code: otpCode }), - }); + }) - const data = await response.json(); + const data = await response.json() if (response.ok) { // 登录成功,保存token和用户信息 - const userInfo = { id: data.user_id, email: data.email }; - setToken(data.token); - setUser(userInfo); - localStorage.setItem('auth_token', data.token); - localStorage.setItem('auth_user', JSON.stringify(userInfo)); - - // 跳转到首页 - window.history.pushState({}, '', '/'); - window.dispatchEvent(new PopStateEvent('popstate')); - - return { success: true, message: data.message }; + const userInfo = { id: data.user_id, email: data.email } + setToken(data.token) + setUser(userInfo) + localStorage.setItem('auth_token', data.token) + localStorage.setItem('auth_user', JSON.stringify(userInfo)) + + // 跳转到配置页面 + window.history.pushState({}, '', '/traders') + window.dispatchEvent(new PopStateEvent('popstate')) + + return { success: true, message: data.message } } else { - return { success: false, message: data.error }; + return { success: false, message: data.error } } } catch (error) { - return { success: false, message: 'OTP验证失败,请重试' }; + return { success: false, message: 'OTP验证失败,请重试' } } - }; + } const completeRegistration = async (userID: string, otpCode: string) => { try { @@ -163,30 +163,30 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { 'Content-Type': 'application/json', }, body: JSON.stringify({ user_id: userID, otp_code: otpCode }), - }); + }) - const data = await response.json(); + const data = await response.json() if (response.ok) { // 注册完成,自动登录 - const userInfo = { id: data.user_id, email: data.email }; - setToken(data.token); - setUser(userInfo); - localStorage.setItem('auth_token', data.token); - localStorage.setItem('auth_user', JSON.stringify(userInfo)); - - // 跳转到首页 - window.history.pushState({}, '', '/'); - window.dispatchEvent(new PopStateEvent('popstate')); - - return { success: true, message: data.message }; + const userInfo = { id: data.user_id, email: data.email } + setToken(data.token) + setUser(userInfo) + localStorage.setItem('auth_token', data.token) + localStorage.setItem('auth_user', JSON.stringify(userInfo)) + + // 跳转到配置页面 + window.history.pushState({}, '', '/traders') + window.dispatchEvent(new PopStateEvent('popstate')) + + return { success: true, message: data.message } } else { - return { success: false, message: data.error }; + return { success: false, message: data.error } } } catch (error) { - return { success: false, message: '注册完成失败,请重试' }; + return { success: false, message: '注册完成失败,请重试' } } - }; + } const logout = () => { setUser(null); diff --git a/web/src/pages/LandingPage.tsx b/web/src/pages/LandingPage.tsx index 5f1e9e93..5b42e329 100644 --- a/web/src/pages/LandingPage.tsx +++ b/web/src/pages/LandingPage.tsx @@ -23,57 +23,114 @@ export function LandingPage() { console.log('LandingPage - user:', user, 'isLoggedIn:', isLoggedIn); return ( <> - setShowLoginModal(true)} - isLoggedIn={isLoggedIn} + setShowLoginModal(true)} + isLoggedIn={isLoggedIn} isHomePage={true} language={language} onLanguageChange={setLanguage} user={user} onLogout={logout} onPageChange={(page) => { - console.log('LandingPage onPageChange called with:', page); + console.log('LandingPage onPageChange called with:', page) if (page === 'competition') { - window.location.href = '/competition'; + window.location.href = '/competition' } else if (page === 'traders') { - window.location.href = '/traders'; + window.location.href = '/traders' } else if (page === 'trader') { - window.location.href = '/dashboard'; + window.location.href = '/dashboard' } }} /> -
- - - - - +
+ + + + + - {/* CTA */} - -
- - {t('readyToDefine', language)} - - - {t('startWithCrypto', language)} - -
- setShowLoginModal(true)} className='flex items-center gap-2 px-10 py-4 rounded-lg font-semibold text-lg' style={{ background: 'var(--brand-yellow)', color: 'var(--brand-black)' }} whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }}> - {t('getStartedNow', language)} - - - - - - {t('viewSourceCode', language)} - + {/* CTA */} + +
+ + {t('readyToDefine', language)} + + + {t('startWithCrypto', language)} + +
+ { + if (isLoggedIn) { + window.location.href = '/traders' + } else { + setShowLoginModal(true) + } + }} + className='flex items-center gap-2 px-10 py-4 rounded-lg font-semibold text-lg' + style={{ + background: 'var(--brand-yellow)', + color: 'var(--brand-black)', + }} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + > + {t('getStartedNow', language)} + + + + + + {t('viewSourceCode', language)} + +
-
- + - {showLoginModal && setShowLoginModal(false)} language={language} />} - + {showLoginModal && ( + setShowLoginModal(false)} + language={language} + /> + )} +
)