"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { ChevronRight } from "lucide-react"; import { apiChangePassword, apiMe, type User } from "@/lib/api"; import Avatar from "@/components/Avatar"; export default function SettingsPage() { const router = useRouter(); const [user, setUser] = useState(null); const [oldPassword, setOldPassword] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(false); useEffect(() => { apiMe() .then((res) => { if (!res.user) { router.push("/login"); return; } setUser(res.user); }) .catch(() => router.push("/login")); }, [router]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (newPassword.length < 6) { setError("新密码至少 6 位"); return; } if (newPassword !== confirmPassword) { setError("两次输入的新密码不一致"); return; } setSubmitting(true); try { const res = await apiChangePassword(oldPassword, newPassword); if (res.message) { setSuccess(true); // 后端已使全部 token 失效并清 cookie,刷新 layout 让 Header 回到游客态 router.refresh(); setTimeout(() => router.push("/login"), 1500); } else { setError(res.error || "修改失败"); } } catch (e) { setError("网络错误,请重试"); } finally { setSubmitting(false); } }; if (!user) { return (

正在加载…

); } return (

账号设置

{user.nickname}
@{user.username} · {user.role === "admin" ? "管理员" : "普通用户"}

修改密码

{success &&
密码修改成功,正在跳转登录页...
} {error &&
{error}
}
setOldPassword(e.target.value)} required className="field" />
setNewPassword(e.target.value)} required minLength={6} className="field" />
setConfirmPassword(e.target.value)} required minLength={6} className="field" />
); }