fix(member): 修复成员密码保存失败误报成功
This commit is contained in:
@@ -113,6 +113,7 @@ function InfoForm() {
|
||||
const [name, setName] = useState(member?.name ?? user.name);
|
||||
const [email, setEmail] = useState(member?.email ?? user.email);
|
||||
const [errors, setErrors] = useState<{ name?: string; email?: string }>({});
|
||||
const [saveError, setSaveError] = useState('');
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [savedAt, setSavedAt] = useState(0);
|
||||
|
||||
@@ -134,8 +135,10 @@ function InfoForm() {
|
||||
setErrors({});
|
||||
};
|
||||
|
||||
const handleSubmit = (e: React.FormEvent) => {
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setSaveError('');
|
||||
setSavedAt(0);
|
||||
const errs: typeof errors = {};
|
||||
if (!name.trim()) errs.name = '请输入姓名';
|
||||
else if (name.trim().length > 20) errs.name = '姓名最长 20 字符';
|
||||
@@ -144,14 +147,17 @@ function InfoForm() {
|
||||
setErrors(errs);
|
||||
if (Object.keys(errs).length > 0) return;
|
||||
|
||||
setSubmitting(true);
|
||||
setTimeout(() => {
|
||||
updateMember(user.id, { name: name.trim(), email: email.trim() });
|
||||
refreshUser();
|
||||
setSubmitting(false);
|
||||
try {
|
||||
setSubmitting(true);
|
||||
await updateMember(user.id, { name: name.trim(), email: email.trim() });
|
||||
await refreshUser();
|
||||
setSavedAt(Date.now());
|
||||
setTimeout(() => setSavedAt(0), 3000);
|
||||
}, 200);
|
||||
} catch {
|
||||
setSaveError('保存失败,请确认网络/API 服务正常后重试');
|
||||
} finally {
|
||||
setSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -177,6 +183,11 @@ function InfoForm() {
|
||||
</Field>
|
||||
</div>
|
||||
<div className="flex items-center justify-end gap-2 pt-5 mt-5 border-t border-[var(--line)]">
|
||||
{saveError && (
|
||||
<span className="mr-auto">
|
||||
<FieldError message={saveError} />
|
||||
</span>
|
||||
)}
|
||||
{savedAt > 0 && (
|
||||
<span className="flex items-center gap-1 text-[12px] text-emerald-600 mr-auto transition-opacity">
|
||||
<Check className="h-3.5 w-3.5" />已保存
|
||||
@@ -203,6 +214,7 @@ function PasswordForm() {
|
||||
const [showNew, setShowNew] = useState(false);
|
||||
const [showConfirm, setShowConfirm] = useState(false);
|
||||
const [errors, setErrors] = useState<{ oldPwd?: string; newPwd?: string; confirmPwd?: string }>({});
|
||||
const [saveError, setSaveError] = useState('');
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [savedAt, setSavedAt] = useState(0);
|
||||
|
||||
@@ -211,8 +223,10 @@ function PasswordForm() {
|
||||
setErrors({});
|
||||
};
|
||||
|
||||
const handleSubmit = (e: React.FormEvent) => {
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setSaveError('');
|
||||
setSavedAt(0);
|
||||
const member = members.find((m) => m.id === user.id);
|
||||
const errs: typeof errors = {};
|
||||
if (!oldPwd) errs.oldPwd = '请输入当前密码';
|
||||
@@ -225,14 +239,17 @@ function PasswordForm() {
|
||||
setErrors(errs);
|
||||
if (Object.keys(errs).length > 0) return;
|
||||
|
||||
setSubmitting(true);
|
||||
setTimeout(() => {
|
||||
updateMember(user.id, { password: newPwd });
|
||||
try {
|
||||
setSubmitting(true);
|
||||
await updateMember(user.id, { password: newPwd });
|
||||
handleReset();
|
||||
setSubmitting(false);
|
||||
setSavedAt(Date.now());
|
||||
setTimeout(() => setSavedAt(0), 3000);
|
||||
}, 200);
|
||||
} catch {
|
||||
setSaveError('密码保存失败,请确认网络/API 服务正常后重试');
|
||||
} finally {
|
||||
setSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -253,6 +270,11 @@ function PasswordForm() {
|
||||
</Field>
|
||||
</div>
|
||||
<div className="flex items-center justify-end gap-2 pt-5 mt-5 border-t border-[var(--line)]">
|
||||
{saveError && (
|
||||
<span className="mr-auto">
|
||||
<FieldError message={saveError} />
|
||||
</span>
|
||||
)}
|
||||
{savedAt > 0 && (
|
||||
<span className="flex items-center gap-1 text-[12px] text-emerald-600 mr-auto transition-opacity">
|
||||
<Check className="h-3.5 w-3.5" />密码已修改,下次登录生效
|
||||
|
||||
Reference in New Issue
Block a user