"use client"; import * as React from "react"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { signIn } from "next-auth/react"; import { ArrowRightIcon, CheckCircle2Icon, CoinsIcon, Globe2Icon, KeyRoundIcon, Loader2Icon, LockIcon, MailIcon, PieChartIcon, TrendingUpIcon, WalletIcon, } from "lucide-react"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Separator } from "@/components/ui/separator"; import { FluxentLogo } from "@/components/fluxent-logo"; import { ThemeToggle } from "@/components/theme-toggle"; interface LoginFormProps { oidcEnabled: boolean; oidcName: string; } export function LoginForm({ oidcEnabled, oidcName }: LoginFormProps) { const router = useRouter(); const searchParams = useSearchParams(); const callbackUrl = searchParams.get("callbackUrl") || "/"; const authError = searchParams.get("error"); const registered = searchParams.get("registered"); const [email, setEmail] = React.useState(""); const [password, setPassword] = React.useState(""); const [rememberMe, setRememberMe] = React.useState(false); const [isPending, setIsPending] = React.useState(false); const [isOidcPending, setIsOidcPending] = React.useState(false); const [errorMessage, setErrorMessage] = React.useState(() => { if (authError === "CredentialsSignin") { return "邮箱或密码错误,请核对后重试"; } if (authError) { return "认证过程中遇到问题,请重新登录"; } return null; }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setErrorMessage(null); if (!email.trim()) { setErrorMessage("请输入登录邮箱"); return; } if (!password) { setErrorMessage("请输入登录密码"); return; } try { setIsPending(true); const res = await signIn("credentials", { email: email.trim(), password, redirect: false, callbackUrl, }); if (res?.error) { if (res.error === "CredentialsSignin" || res.code === "credentials") { setErrorMessage("账号或密码不正确,请重新检查"); } else { setErrorMessage("登录失败,请稍后重试"); } return; } router.push(callbackUrl); router.refresh(); } catch { setErrorMessage("网络异常,无法连接到认证服务器"); } finally { setIsPending(false); } }; const handleOidcLogin = async () => { try { setIsOidcPending(true); await signIn("oidc", { callbackUrl }); } catch { setIsOidcPending(false); setErrorMessage("SSO 单点登录发起失败,请稍后重试"); } }; return (
{/* Decorative ambient background meshes */}
{/* Top navigation / branding header */}
Fluxent Financial OS
{/* Main content grid */}
{/* Left Hero feature showcase (visible on large screen) */}
全球多币种 • 全场景记账 • 实时汇率

掌控每一笔资产流动,
让财务管理行云流水。

无论是跨国多币种账户、信用卡记账,还是银行与电子钱包资金调度,Fluxent 提供银行级的精确记录与现代化的优雅交互体验。

{/* Visual value propositions */}

全币种与汇率追踪

多币种入账与清算汇率对账,资产估值一目了然

全渠道多账户管理

银行账户、电子钱包与支付卡渠道统一调度

复式记账与场景分类

标准借贷分录与消费场景画像,财务合规严谨

资产汇总与统计

跨账户资金结构分布分析,收支报表一览无余

{/* Right Login Card */}
欢迎回到 Fluxent
输入您的注册邮箱与密码以继续使用
{registered === "1" && ( 账号注册成功 您的 Fluxent 账户已就绪,请使用新密码进行登录。 )} {errorMessage && ( {errorMessage} )} {/* OIDC Single Sign On Button (if enabled) */} {oidcEnabled && (
或者使用邮箱密码
)} {/* Main Email & Password Form */}
setEmail(e.target.value)} required disabled={isPending} className="pl-8" />
setPassword(e.target.value)} required disabled={isPending} className="pl-8" />
setRememberMe(Boolean(checked)) } />

还没有 Fluxent 账号?{" "} 立即注册新账号

登录即代表您同意 Fluxent 的服务条款与隐私政策

{/* Footer */}
); }