"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { apiChangePassword, apiMe, type User } from "@/lib/api"; 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); setTimeout(() => router.push("/login"), 1500); } else { setError(res.error || "修改失败"); } } catch (e) { setError("网络错误,请重试"); } finally { setSubmitting(false); } }; if (!user) { return

加载中...

; } return (

账号设置

当前账号
{user.nickname}({user.username})

修改密码

{success && (
密码修改成功,正在跳转登录页...
)} {error && (
{error}
)}
setOldPassword(e.target.value)} required className="w-full p-3 rounded-lg border" style={{ borderColor: "var(--border)", background: "var(--bg)", color: "var(--text)" }} />
setNewPassword(e.target.value)} required minLength={6} className="w-full p-3 rounded-lg border" style={{ borderColor: "var(--border)", background: "var(--bg)", color: "var(--text)" }} />
setConfirmPassword(e.target.value)} required minLength={6} className="w-full p-3 rounded-lg border" style={{ borderColor: "var(--border)", background: "var(--bg)", color: "var(--text)" }} />
); }