"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 ResetPasswordForm() { const router = useRouter(); const searchParams = useSearchParams(); const token = searchParams.get("token"); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const [countdown, setCountdown] = useState(3); useEffect(() => { if (success && countdown > 0) { const timer = setTimeout(() => setCountdown((c) => c - 1), 1000); return () => clearTimeout(timer); } if (success && countdown === 0) { router.push("/login"); } }, [success, countdown, router]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (newPassword !== confirmPassword) { setError("两次输入的密码不一致"); return; } if (!token) { setError("重置令牌无效或已过期"); return; } setLoading(true); try { await api.auth.resetPassword(token, newPassword); setSuccess(true); } catch (err: unknown) { const message = err instanceof Error ? err.message : "重置失败"; setError(message); } finally { setLoading(false); } }; if (success) { return ( 密码重置成功 您的密码已重置,{countdown} 秒后自动跳转到登录页 立即登录 ); } return ( 重置密码 请输入您的新密码 {error && ( {error} )} 新密码 setNewPassword(e.target.value)} required /> 确认密码 setConfirmPassword(e.target.value)} required /> {loading ? "提交中..." : "重置密码"} 返回登录 ); } export default function ResetPasswordPage() { return ( 重置密码 加载中... } > ); }
{error}