53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
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, "重置密码", "提交中...");
|
||
}
|
||
});
|
||
}
|