"use client"; import { useTranslations } from "next-intl"; import { Link } from "@/i18n/navigation"; import { useState } from "react"; import { ApiError } from "@/lib/api"; import { sendForgotPasswordEmail } from "@/lib/auth-api"; import { KeyRound, CheckCircle2 } from "lucide-react"; import { AuthCard, AuthCloseButton, AuthHeader, AuthIconBadge, AuthPageScene, authErrorCls, authFooterLinkCls, authInputCls, authLabelCls, authPrimaryBtnCls, } from "@/components/auth/auth-ui"; type Props = { layout: "fullscreen" | "embedded"; onDismiss?: () => void; onBackToLogin?: () => void; }; export function ForgotPasswordFormPanel({ layout, onDismiss, onBackToLogin }: Props) { const t = useTranslations("auth"); const [email, setEmail] = useState(""); const [done, setDone] = useState(false); const [submitting, setSubmitting] = useState(false); const [err, setErr] = useState(null); const embedded = layout === "embedded"; async function onSubmit(e: React.FormEvent) { e.preventDefault(); if (submitting) return; setErr(null); try { setSubmitting(true); await sendForgotPasswordEmail(email.trim()); setDone(true); } catch (error) { if (error instanceof ApiError && error.message.trim()) { setErr(error.message); } else { setErr(t("errorApi")); } } finally { setSubmitting(false); } } return ( {embedded && onDismiss ? : null} {!done ? (
setEmail(e.target.value)} className={authInputCls} placeholder="admin@example.com" />
{err ? (
{err}
) : null}
) : (

邮件已发送

请前往您的邮箱查收密码重置链接。

)}

想起密码了?{" "} {embedded && onBackToLogin ? ( ) : ( {t("toLogin")} )}

); }