login.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * 登录页面脚本
  3. */
  4. // 全局刷新验证码函数(必须在 layui.use 之前定义,因为 HTML 中有 onclick 调用)
  5. function refreshCaptcha() {
  6. var account = $('input[name="account"]').val() || 'default';
  7. var timestamp = new Date().getTime();
  8. $('#captchaImg').attr('src', Config.getApiUrl(Config.api.imgCode) + '/' + account + '?t=' + timestamp);
  9. }
  10. layui.use(['form', 'layer'], function() {
  11. var form = layui.form;
  12. var layer = layui.layer;
  13. // 初始化验证码
  14. refreshCaptcha();
  15. // 账号输入时刷新验证码
  16. $('input[name="account"]').on('blur', function() {
  17. var account = $(this).val();
  18. if (account) {
  19. refreshCaptcha();
  20. }
  21. });
  22. // 登录表单提交
  23. form.on('submit(loginSubmit)', function(data) {
  24. var fieldData = data.field;
  25. layer.msg('正在登录...', { icon: 16, shade: 0.3, time: 0 });
  26. $.ajax({
  27. url: Config.getApiUrl(Config.api.login),
  28. type: 'POST',
  29. contentType: 'application/json',
  30. data: JSON.stringify(fieldData),
  31. success: function(res) {
  32. layer.closeAll();
  33. // 兼容两种响应格式:
  34. // 1. ResultVo 包装格式: { code: 200, msg: 'success', data: { token, ... } }
  35. // 2. 直接返回数据格式: { token, id, account, ... }
  36. var responseData = res;
  37. var isSuccess = false;
  38. if (res.code !== undefined) {
  39. // 有 code 字段,使用 ResultVo 格式
  40. isSuccess = (res.code === 200 || res.code === 0);
  41. responseData = res.data || {};
  42. } else if (res.token) {
  43. // 直接返回用户数据
  44. isSuccess = true;
  45. }
  46. if (isSuccess) {
  47. // 保存token和用户信息
  48. var token = responseData.token || res.token || '';
  49. localStorage.setItem('token', token);
  50. localStorage.setItem('userInfo', JSON.stringify(responseData));
  51. layer.msg('登录成功!', { icon: 1, time: 1000 }, function() {
  52. location.href = 'pages/main.html';
  53. });
  54. } else {
  55. layer.msg(res.msg || res.message || '登录失败', { icon: 2 });
  56. refreshCaptcha();
  57. }
  58. },
  59. error: function(xhr) {
  60. layer.closeAll();
  61. var msg = '请求失败,请检查网络或服务是否可用';
  62. if (xhr.responseJSON && xhr.responseJSON.msg) {
  63. msg = xhr.responseJSON.msg;
  64. }
  65. layer.msg(msg, { icon: 2 });
  66. refreshCaptcha();
  67. }
  68. });
  69. return false;
  70. });
  71. // 回车登录
  72. document.onkeydown = function(e) {
  73. if (e.keyCode === 13) {
  74. $('.login-form button[type="submit"]').click();
  75. }
  76. };
  77. });