Files
baiyue-logistics-chat/static/js/admin_login.js
T
2026-11-02 17:51:10 +08:00

64 lines
2.2 KiB
JavaScript

const loginForm = document.getElementById("loginForm");
const loginButton = document.getElementById("loginButton");
const userInput = document.getElementById("user");
const passwordInput = document.getElementById("pwd");
const loginError = document.getElementById("err");
let loginPending = false;
function showLoginError(message){
loginError.textContent = message;
loginError.hidden = false;
}
if(new URLSearchParams(window.location.search).has("expired")){
showLoginError("后台登录已失效,请重新登录。");
}
async function login(){
if(loginPending) return;
const username = userInput.value.trim();
const password = passwordInput.value;
userInput.setAttribute("aria-invalid", String(!username));
passwordInput.setAttribute("aria-invalid", String(!password));
if(!username || !password){
showLoginError("请输入客服账号和登录密码");
(!username ? userInput : passwordInput).focus();
return;
}
loginPending = true;
loginError.hidden = true;
loginButton.disabled = true;
loginButton.textContent = "正在登录…";
loginForm.setAttribute("aria-busy", "true");
try{
const response = await fetch("/admin/login", {
method: "POST", headers: {"Content-Type": "application/json"},
body: JSON.stringify({username: username, password: password})
});
if(response.ok){
location.href = "/admin/dashboard";
return;
}
showLoginError(response.status === 401 ? "账号或密码不正确,请重新输入" :
response.status === 429 ? "登录尝试过多,请 5 分钟后重试" : "暂时无法登录,请稍后重试");
}catch(error){
showLoginError("网络连接失败,请检查网络后重试");
}finally{
loginPending = false;
loginButton.disabled = false;
loginButton.textContent = "登录工作台 →";
loginForm.removeAttribute("aria-busy");
}
}
loginForm.addEventListener("submit", function(event){
event.preventDefault();
login();
});
[userInput, passwordInput].forEach(function(input){
input.addEventListener("input", function(){
loginError.hidden = true;
input.removeAttribute("aria-invalid");
});
});