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; } 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 ? "账号或密码不正确,请重新输入" : "暂时无法登录,请稍后重试"); }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"); }); });