import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { isApiError } from "../api/types"; import { mapApiErrorMessage } from "../api/errorMessages"; import { useAuth } from "../auth/AuthContext"; import { Button } from "../components/ui/button"; import { Input } from "../components/ui/input"; import { Label } from "../components/ui/label"; 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(mapApiErrorMessage(err.code, err.details, err.message)); } else { setError("修改密码失败,请稍后重试"); } } finally { setSubmitting(false); } } return (

hyb-oa

修改密码

为了账号安全,请先修改初始密码后再进入系统。

setOldPassword(event.target.value)} placeholder="请输入旧密码" type="password" value={oldPassword} />
setNewPassword(event.target.value)} placeholder="至少 12 位,建议包含大小写/数字" type="password" value={newPassword} />

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

建议的新密码规则

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

{error}

) : null}
); }