fix: the login method cannot be displayed under the aff link.

This commit is contained in:
Seefs
2026-01-15 23:19:51 +08:00
parent 8ef99f4728
commit f96615110d
2 changed files with 32 additions and 18 deletions

View File

@@ -17,9 +17,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com For commercial licensing, please contact support@quantumnous.com
*/ */
import React, { useContext, useEffect, useRef, useState } from 'react'; import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { Link, useNavigate, useSearchParams } from 'react-router-dom';
import { UserContext } from '../../context/User'; import { UserContext } from '../../context/User';
import { StatusContext } from '../../context/Status';
import { import {
API, API,
getLogo, getLogo,
@@ -73,6 +74,7 @@ const LoginForm = () => {
const [searchParams, setSearchParams] = useSearchParams(); const [searchParams, setSearchParams] = useSearchParams();
const [submitted, setSubmitted] = useState(false); const [submitted, setSubmitted] = useState(false);
const [userState, userDispatch] = useContext(UserContext); const [userState, userDispatch] = useContext(UserContext);
const [statusState] = useContext(StatusContext);
const [turnstileEnabled, setTurnstileEnabled] = useState(false); const [turnstileEnabled, setTurnstileEnabled] = useState(false);
const [turnstileSiteKey, setTurnstileSiteKey] = useState(''); const [turnstileSiteKey, setTurnstileSiteKey] = useState('');
const [turnstileToken, setTurnstileToken] = useState(''); const [turnstileToken, setTurnstileToken] = useState('');
@@ -108,20 +110,26 @@ const LoginForm = () => {
localStorage.setItem('aff', affCode); localStorage.setItem('aff', affCode);
} }
const [status] = useState(() => { const status = useMemo(() => {
if (statusState?.status) return statusState.status;
const savedStatus = localStorage.getItem('status'); const savedStatus = localStorage.getItem('status');
return savedStatus ? JSON.parse(savedStatus) : {}; if (!savedStatus) return {};
}); try {
return JSON.parse(savedStatus) || {};
} catch (err) {
return {};
}
}, [statusState?.status]);
useEffect(() => { useEffect(() => {
if (status.turnstile_check) { if (status?.turnstile_check) {
setTurnstileEnabled(true); setTurnstileEnabled(true);
setTurnstileSiteKey(status.turnstile_site_key); setTurnstileSiteKey(status.turnstile_site_key);
} }
// 从 status 获取用户协议和隐私政策的启用状态 // 从 status 获取用户协议和隐私政策的启用状态
setHasUserAgreement(status.user_agreement_enabled || false); setHasUserAgreement(status?.user_agreement_enabled || false);
setHasPrivacyPolicy(status.privacy_policy_enabled || false); setHasPrivacyPolicy(status?.privacy_policy_enabled || false);
}, [status]); }, [status]);
useEffect(() => { useEffect(() => {

View File

@@ -17,7 +17,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com For commercial licensing, please contact support@quantumnous.com
*/ */
import React, { useContext, useEffect, useRef, useState } from 'react'; import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
import { Link, useNavigate } from 'react-router-dom'; import { Link, useNavigate } from 'react-router-dom';
import { import {
API, API,
@@ -51,6 +51,7 @@ import LinuxDoIcon from '../common/logo/LinuxDoIcon';
import WeChatIcon from '../common/logo/WeChatIcon'; import WeChatIcon from '../common/logo/WeChatIcon';
import TelegramLoginButton from 'react-telegram-login/src'; import TelegramLoginButton from 'react-telegram-login/src';
import { UserContext } from '../../context/User'; import { UserContext } from '../../context/User';
import { StatusContext } from '../../context/Status';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { SiDiscord } from 'react-icons/si'; import { SiDiscord } from 'react-icons/si';
@@ -72,6 +73,7 @@ const RegisterForm = () => {
}); });
const { username, password, password2 } = inputs; const { username, password, password2 } = inputs;
const [userState, userDispatch] = useContext(UserContext); const [userState, userDispatch] = useContext(UserContext);
const [statusState] = useContext(StatusContext);
const [turnstileEnabled, setTurnstileEnabled] = useState(false); const [turnstileEnabled, setTurnstileEnabled] = useState(false);
const [turnstileSiteKey, setTurnstileSiteKey] = useState(''); const [turnstileSiteKey, setTurnstileSiteKey] = useState('');
const [turnstileToken, setTurnstileToken] = useState(''); const [turnstileToken, setTurnstileToken] = useState('');
@@ -106,25 +108,29 @@ const RegisterForm = () => {
localStorage.setItem('aff', affCode); localStorage.setItem('aff', affCode);
} }
const [status] = useState(() => { const status = useMemo(() => {
if (statusState?.status) return statusState.status;
const savedStatus = localStorage.getItem('status'); const savedStatus = localStorage.getItem('status');
return savedStatus ? JSON.parse(savedStatus) : {}; if (!savedStatus) return {};
}); try {
return JSON.parse(savedStatus) || {};
} catch (err) {
return {};
}
}, [statusState?.status]);
const [showEmailVerification, setShowEmailVerification] = useState(() => { const [showEmailVerification, setShowEmailVerification] = useState(false);
return status.email_verification ?? false;
});
useEffect(() => { useEffect(() => {
setShowEmailVerification(status.email_verification); setShowEmailVerification(!!status?.email_verification);
if (status.turnstile_check) { if (status?.turnstile_check) {
setTurnstileEnabled(true); setTurnstileEnabled(true);
setTurnstileSiteKey(status.turnstile_site_key); setTurnstileSiteKey(status.turnstile_site_key);
} }
// 从 status 获取用户协议和隐私政策的启用状态 // 从 status 获取用户协议和隐私政策的启用状态
setHasUserAgreement(status.user_agreement_enabled || false); setHasUserAgreement(status?.user_agreement_enabled || false);
setHasPrivacyPolicy(status.privacy_policy_enabled || false); setHasPrivacyPolicy(status?.privacy_policy_enabled || false);
}, [status]); }, [status]);
useEffect(() => { useEffect(() => {