"use client"; import { useState, useEffect, Suspense } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { api } from "@/lib/api"; function VerifyEmailForm() { const router = useRouter(); const searchParams = useSearchParams(); const email = searchParams.get("email") || ""; const [code, setCode] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const [resendCountdown, setResendCountdown] = useState(0); useEffect(() => { if (resendCountdown > 0) { const timer = setTimeout(() => setResendCountdown((c) => c - 1), 1000); return () => clearTimeout(timer); } }, [resendCountdown]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!email) { setError("邮箱地址无效"); return; } setLoading(true); setError(""); try { await api.auth.verifyEmail(email, code); setSuccess(true); setTimeout(() => { router.push("/login"); }, 1500); } catch (err: unknown) { const message = err instanceof Error ? err.message : "验证失败"; setError(message); } finally { setLoading(false); } }; const handleResend = async () => { if (!email || resendCountdown > 0) return; setError(""); try { await api.auth.resendVerification(email); setResendCountdown(60); } catch (err: unknown) { const message = err instanceof Error ? err.message : "发送失败"; setError(message); } }; if (success) { return ( 验证成功 邮箱验证成功,正在跳转到登录页... 立即登录 ); } return ( 验证邮箱 我们已向 {email || "您的邮箱"} 发送了验证码 {error && ( {error} )} 验证码 setCode(e.target.value)} required /> 0 || !email} > {resendCountdown > 0 ? `${resendCountdown} 秒后重新发送` : "重新发送验证码"} {loading ? "验证中..." : "验证"} 返回登录 ); } export default function VerifyEmailPage() { return ( 验证邮箱 加载中... } > ); }
{error}