import LeftIcon from '@/app/icons/left.svg'; import { safeLocalStorage, useMobileScreen } from '@/app/utils'; import clsx from 'clsx'; import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { getClientConfig } from '../config/client'; import { Path, SAAS_CHAT_URL } from '../constant'; import Arrow from '../icons/arrow.svg'; import BotIcon from '../icons/bot.svg'; import Delete from '../icons/close.svg'; import Logo from '../icons/logo.svg'; import Locale from '../locales'; import { useAccessStore } from '../store'; import { trackAuthorizationPageButtonToCPaymentClick, trackSettingsPageGuideToCPaymentClick, } from '../utils/auth-settings-events'; import styles from './auth.module.scss'; import { IconButton } from './button'; import { PasswordInput } from './ui-lib'; const storage = safeLocalStorage(); export function AuthPage() { const navigate = useNavigate(); const accessStore = useAccessStore(); const goHome = () => navigate(Path.Home); const goChat = () => navigate(Path.Chat); const goSaas = () => { trackAuthorizationPageButtonToCPaymentClick(); window.location.href = SAAS_CHAT_URL; }; const resetAccessCode = () => { accessStore.update((access) => { access.openaiApiKey = ''; access.accessCode = ''; }); }; // Reset access code to empty string useEffect(() => { if (getClientConfig()?.isApp) { navigate(Path.Settings); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return (
} text={Locale.Auth.Return} onClick={() => navigate(Path.Home)} >
{Locale.Auth.Title}
{Locale.Auth.Tips}
{ accessStore.update( access => (access.accessCode = e.currentTarget.value), ); }} /> {!accessStore.hideUserApiKey ? ( <>
{Locale.Auth.SubTips}
{ accessStore.update( access => (access.openaiApiKey = e.currentTarget.value), ); }} /> { accessStore.update( access => (access.googleApiKey = e.currentTarget.value), ); }} /> ) : null}
{ goSaas(); }} />
); } function TopBanner() { const [isHovered, setIsHovered] = useState(false); const [isVisible, setIsVisible] = useState(true); const isMobile = useMobileScreen(); useEffect(() => { // 检查 localStorage 中是否有标记 const bannerDismissed = storage.getItem('bannerDismissed'); // 如果标记不存在,存储默认值并显示横幅 if (!bannerDismissed) { storage.setItem('bannerDismissed', 'false'); setIsVisible(true); // 显示横幅 } else if (bannerDismissed === 'true') { // 如果标记为 "true",则隐藏横幅 setIsVisible(false); } }, []); const handleMouseEnter = () => { setIsHovered(true); }; const handleMouseLeave = () => { setIsHovered(false); }; const handleClose = () => { setIsVisible(false); storage.setItem('bannerDismissed', 'true'); }; if (!isVisible) { return null; } return (
{Locale.Auth.TopTips} { trackSettingsPageGuideToCPaymentClick(); }} > {Locale.Settings.Access.SaasStart.ChatNow}
{(isHovered || isMobile) && ( )}
); }