import { resolveErrorMessage as resolveUserErrorMessage } from "../lib/resolveErrorMessage"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { isApiError } from "../api/types"; import { useAuth } from "../auth/AuthContext"; import { AuthPanel } from "../components/auth/AuthPanel"; import { Button } from "../components/ui/button"; import { Label } from "../components/ui/label"; import { PasswordInput } from "../components/ui/password-input"; import { markOnboardingEntryReady } from "../lib/onboardingGuide"; const PASSWORD_REQUIREMENTS = [ "至少 12 位", "包含大写字母、小写字母和数字", "不要使用公司名、常见顺序或过于简单的组合", ]; export function ChangePasswordPage() { const navigate = useNavigate(); const { changePassword } = useAuth(); const [oldPassword, setOldPassword] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(""); async function handleSubmit(event: React.FormEvent) { event.preventDefault(); setError(""); if (newPassword !== confirmPassword) { setError("两次输入的新密码不一致,请确认后再提交。"); return; } setSubmitting(true); try { await changePassword(oldPassword, newPassword); markOnboardingEntryReady(); navigate("/portal", { replace: true }); } catch (err) { if (isApiError(err)) { setError(resolveUserErrorMessage(err)); } else { setError("修改密码失败,请稍后重试"); } } finally { setSubmitting(false); } } return (
setOldPassword(event.target.value)} placeholder="请输入旧密码" value={oldPassword} />
setNewPassword(event.target.value)} placeholder="至少 12 位,建议包含大小写/数字" value={newPassword} />

密码要求:{PASSWORD_REQUIREMENTS.join(";")}。

setConfirmPassword(event.target.value)} placeholder="再次输入新密码" value={confirmPassword} />
{error ? (

{error}

) : null}
); }