/** * 登录页面脚本 */ // 全局刷新验证码函数(必须在 layui.use 之前定义,因为 HTML 中有 onclick 调用) function refreshCaptcha() { var account = $('input[name="account"]').val() || 'default'; var timestamp = new Date().getTime(); $('#captchaImg').attr('src', Config.getApiUrl(Config.api.imgCode) + '/' + account + '?t=' + timestamp); } layui.use(['form', 'layer'], function() { var form = layui.form; var layer = layui.layer; // 初始化验证码 refreshCaptcha(); // 账号输入时刷新验证码 $('input[name="account"]').on('blur', function() { var account = $(this).val(); if (account) { refreshCaptcha(); } }); // 登录表单提交 form.on('submit(loginSubmit)', function(data) { var fieldData = data.field; layer.msg('正在登录...', { icon: 16, shade: 0.3, time: 0 }); $.ajax({ url: Config.getApiUrl(Config.api.login), type: 'POST', contentType: 'application/json', data: JSON.stringify(fieldData), success: function(res) { layer.closeAll(); // 兼容两种响应格式: // 1. ResultVo 包装格式: { code: 200, msg: 'success', data: { token, ... } } // 2. 直接返回数据格式: { token, id, account, ... } var responseData = res; var isSuccess = false; if (res.code !== undefined) { // 有 code 字段,使用 ResultVo 格式 isSuccess = (res.code === 200 || res.code === 0); responseData = res.data || {}; } else if (res.token) { // 直接返回用户数据 isSuccess = true; } if (isSuccess) { // 保存token和用户信息 var token = responseData.token || res.token || ''; localStorage.setItem('token', token); localStorage.setItem('userInfo', JSON.stringify(responseData)); layer.msg('登录成功!', { icon: 1, time: 1000 }, function() { location.href = 'pages/main.html'; }); } else { layer.msg(res.msg || res.message || '登录失败', { icon: 2 }); refreshCaptcha(); } }, error: function(xhr) { layer.closeAll(); var msg = '请求失败,请检查网络或服务是否可用'; if (xhr.responseJSON && xhr.responseJSON.msg) { msg = xhr.responseJSON.msg; } layer.msg(msg, { icon: 2 }); refreshCaptcha(); } }); return false; }); // 回车登录 document.onkeydown = function(e) { if (e.keyCode === 13) { $('.login-form button[type="submit"]').click(); } }; });