/* eslint-disable @typescript-eslint/no-explicit-any */ 'use client'; import { AlertCircle, CheckCircle } from 'lucide-react'; import { useRouter, useSearchParams } from 'next/navigation'; import { Suspense, useEffect, useState } from 'react'; import { checkForUpdates, CURRENT_VERSION, UpdateStatus } from '@/lib/version'; import { useSite } from '@/components/SiteProvider'; import { ThemeToggle } from '@/components/ThemeToggle'; // 版本显示组件 function VersionDisplay() { const [updateStatus, setUpdateStatus] = useState(null); const [isChecking, setIsChecking] = useState(true); useEffect(() => { const checkUpdate = async () => { try { const status = await checkForUpdates(); setUpdateStatus(status); } catch (_) { // do nothing } finally { setIsChecking(false); } }; checkUpdate(); }, []); return ( ); } function LoginPageClient() { const router = useRouter(); const searchParams = useSearchParams(); const [password, setPassword] = useState(''); const [username, setUsername] = useState(''); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const [shouldAskUsername, setShouldAskUsername] = useState(false); const [enableRegister, setEnableRegister] = useState(false); const { siteName } = useSite(); // 在客户端挂载后设置配置 useEffect(() => { if (typeof window !== 'undefined') { const storageType = (window as any).RUNTIME_CONFIG?.STORAGE_TYPE; setShouldAskUsername(storageType && storageType !== 'localstorage'); setEnableRegister( Boolean((window as any).RUNTIME_CONFIG?.ENABLE_REGISTER) ); } }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (!password || (shouldAskUsername && !username)) return; try { setLoading(true); const res = await fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password, ...(shouldAskUsername ? { username } : {}), }), }); if (res.ok) { const redirect = searchParams.get('redirect') || '/'; router.replace(redirect); } else if (res.status === 401) { setError('密码错误'); } else { const data = await res.json().catch(() => ({})); setError(data.error ?? '服务器错误'); } } catch (error) { setError('网络错误,请稍后重试'); } finally { setLoading(false); } }; // 处理注册逻辑 const handleRegister = async () => { setError(null); if (!password || !username) return; try { setLoading(true); const res = await fetch('/api/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }), }); if (res.ok) { const redirect = searchParams.get('redirect') || '/'; router.replace(redirect); } else { const data = await res.json().catch(() => ({})); setError(data.error ?? '服务器错误'); } } catch (error) { setError('网络错误,请稍后重试'); } finally { setLoading(false); } }; return (
{/* 渐变酷炫Logo */}

{siteName} {/* 添加发光效果 */} {siteName}

{shouldAskUsername && (
setUsername(e.target.value)} />
)}
setPassword(e.target.value)} />
{error && (

{error}

)} {/* 登录 / 注册按钮 */} {shouldAskUsername && enableRegister ? (
) : ( )}
{/* 版本信息显示 */}
); } export default function LoginPage() { return ( Loading...}> ); }