const $ = (id) => document.getElementById(id); function setStatus(msg, danger = false) { const el = $("status"); if (!el) return; el.style.color = danger ? "#b42318" : "#0f5f3d"; el.textContent = msg; } function setLoading(button, loading, idleText, loadingText) { if (!button) return; button.disabled = loading; button.textContent = loading ? loadingText : idleText; } async function postJSON(url, body) { const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), }); const data = await res.json(); if (!res.ok) throw new Error(data.detail || "请求失败"); return data; } const resetBtn = $("resetBtn"); if (resetBtn) { resetBtn.addEventListener("click", async () => { setLoading(resetBtn, true, "重置密码", "提交中..."); try { const out = await postJSON("/api/auth/password/forgot", { username: ($("username") && $("username").value.trim()) || "", reset_key: ($("resetKey") && $("resetKey").value.trim()) || "", new_password: ($("newPassword") && $("newPassword").value) || "", }); if (!out.ok) { setStatus(out.detail || "重置失败", true); return; } setStatus("密码重置成功,2 秒后跳转登录页。"); setTimeout(() => { window.location.href = "/auth?next=/"; }, 2000); } catch (e) { setStatus(e.message || "重置失败", true); } finally { setLoading(resetBtn, false, "重置密码", "提交中..."); } }); }