"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 */}
) }