"use client"; import { useState } from "react"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { Suspense } from "react"; import { useAuth } from "@/lib/auth"; import { useToast } from "@/lib/toast"; import { useI18n } from "@/lib/i18n"; import { resolveAuthNext } from "@/lib/authNext"; import SiteShell from "@/components/SiteShell"; function LoginForm() { const { login, register, demoLogin } = useAuth(); const { toast } = useToast(); const { t } = useI18n(); const router = useRouter(); const searchParams = useSearchParams(); const meta = resolveAuthNext(searchParams.get("next"), t.login); const [mode, setMode] = useState<"login" | "register">("login"); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [name, setName] = useState(""); const [showPwd, setShowPwd] = useState(false); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const goAfterAuth = (msg: string) => { toast(msg, "success", { href: meta.path, label: meta.label }); setTimeout(() => { router.replace(meta.path); }, 400); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (mode === "register") { if (!name.trim() || name.trim().length < 2) { setError(t.login.nameMin); return; } if (password.length < 6) { setError(t.login.pwdMin); return; } } setLoading(true); const ok = mode === "login" ? await login(email, password) : await register(email, password, name.trim()); setLoading(false); if (ok) { goAfterAuth( mode === "login" ? meta.welcomeToast : t.login.registerToast ); } else { setError(mode === "login" ? t.login.loginError : t.login.registerError); } }; const handleDemo = async () => { setLoading(true); const ok = await demoLogin(); setLoading(false); if (ok) goAfterAuth(t.login.demoToast); }; const headerHint = mode === "login" ? meta.hint : t.login.registerHint; return (
{t.common.backHome}
🌍

{mode === "login" ? t.login.welcome : t.login.join}

{headerHint}

{meta.showRedirect && (
{meta.showPlanMerge && (

{t.login.planMergeNote}

)}

{t.login.redirectTo} {meta.label}

)}
{mode === "register" && (
setName(e.target.value)} placeholder={t.login.nickPlaceholder} required />
)}
setEmail(e.target.value)} placeholder="you@example.com" required autoComplete="email" />
setPassword(e.target.value)} placeholder={t.login.pwdPlaceholder} required minLength={6} autoComplete={mode === "login" ? "current-password" : "new-password"} />
{mode === "register" && (

{password.length === 0 ? t.login.pwdHint : password.length < 6 ? t.login.pwdNeed.replace("{n}", String(6 - password.length)) : password.length < 10 ? t.login.pwdOk : t.login.pwdStrong}

)}
{error &&

{error}

}
{t.login.or}

{meta.demoHint}

); } export default function LoginPage() { return (

加载中…

}>
); }