"use client"; import * as React from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useActionState } from "react"; import { ArrowLeftIcon, CheckCircle2Icon, KeyRoundIcon, Loader2Icon, LockIcon, MailIcon, SparklesIcon, UserIcon, } from "lucide-react"; import { registerAction, type RegisterState } from "@/lib/actions/auth"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { FluxentLogo } from "@/components/fluxent-logo"; import { ThemeToggle } from "@/components/theme-toggle"; const initialState: RegisterState = {}; export function RegisterForm() { const router = useRouter(); const [state, formAction, isPending] = useActionState( registerAction, initialState ); const [password, setPassword] = React.useState(""); const [confirmPassword, setConfirmPassword] = React.useState(""); // 当注册成功时,优雅倒计时或自动跳转 React.useEffect(() => { if (state?.success) { const timer = setTimeout(() => { router.push("/login?registered=1"); }, 1500); return () => clearTimeout(timer); } }, [state?.success, router]); // 密码复杂度提示计算 const hasMinLen = password.length >= 8; const passwordsMatch = Boolean( password && confirmPassword && password === confirmPassword ); return (
{/* Decorative ambient gradients */}
{/* Header */}
Fluxent Financial OS
{/* Main Card */}
开启您的 Fluxent 空间
创建主账户,开启多币种资产追踪与专业级记账
{/* 注册成功反馈 */} {state?.success ? (

账户已成功创建!

系统正在为您准备控制台,即将自动跳转至登录页...

) : ( <> {/* 全局错误提示 */} {state?.error && ( {state.error} )}
{/* 姓名 / 昵称 */}
{state?.fieldErrors?.name && (

{state.fieldErrors.name[0]}

)}
{/* 邮箱 */}
{state?.fieldErrors?.email && (

{state.fieldErrors.email[0]}

)}
{/* 密码 */}
setPassword(e.target.value)} required disabled={isPending} className="pl-8" />
{state?.fieldErrors?.password && (

{state.fieldErrors.password[0]}

)}
{/* 确认密码 */}
setConfirmPassword(e.target.value)} required disabled={isPending} className="pl-8" />
{state?.fieldErrors?.confirmPassword && (

{state.fieldErrors.confirmPassword[0]}

)}
{/* 密码强度/匹配指引 */}
密码长度不少于 8 位
两次密码输入保持一致
)}

已经拥有 Fluxent 账号?{" "} 返回直接登录

{/* Footer */}
); }