$(function(){ showLoginReason(login_AttentionInfo); $('#vcode').textbox({ //label : $("#login-vcodebox"), label : '', labelWidth : 100, labelPosition : "after", labelAlign : "right" }) VerificationCode($(".login-vcodebox"), 4); $('#username').textbox().next('span').find('input').focus(); }) function enterFunction(){ login(); } //验证码输入框(王华) var inputs; var timeout; var suButton; // 防抖(王华) function debounce(func, delay) { clearTimeout(timeout); timeout = setTimeout(func, delay); } // 输入信息加密(王华) function aesEncrypt(data) { const key = "ABCDEFGHIJKL_key"; const iv = "ABCDEFGHIJKLM_iv"; const result = {}; for (const prop in data) { if (data.hasOwnProperty(prop)) { result[prop] = aesMinEncrypt(key, iv, data[prop]); } } return result; } // 后端验证登录信息(王华) function requestLogin(url, data) { $.ajax({ type: "post", url: url, data: { username: data.username, password: data.password }, dataType: "json", success: function (result) { if (result.success) { if (result.smsVerCodeFlag && result.phoneNumber){ $("#phoneNumber").html(result.phoneNumber); openCodeInput(data) }else { location.href = login_RedirectUrl; } } else { showLoginReason(result.message); VerificationCode($(".login-vcodebox"), 4); } }, error: function () { showLoginReason("登录失败,请重试!"); VerificationCode($(".login-vcodebox"), 4); } }); } // 检测输入验证码(王华) function checkPhoneCode(username, password) { const isFilled = inputs.toArray().every(input => $(input).val().length > 0); if (isFilled) { codeValue = inputs.toArray().map(input => $(input).val()).join(''); showLoginReason("系统正在验证,请稍后......"); $("#inputTips").html(''); // 加密验证码并请求验证 const data = aesEncrypt({ code: codeValue }); $.ajax({ type: "post", url: "https://kljt.zhxy.hct.cn/login/checkSMSCode", data: { username: username, password: password, vercode: data.code }, dataType: "json", beforeSend: function() { $("#inputTips").html('系统正在验证,请稍后......'); }, success: function(result){ if (result.success) { location.href=login_RedirectUrl; }else if (result.errcode === 1) { //验证码输入错 $("#inputTips").html(result.message); inputs.val(''); inputs[0].focus(); showLoginReason(result.message); }else if (result.errcode === 2) { //验证码超时 $("#inputTips").html(result.message); setTimeout(()=>{ inputs.val(''); $('.input_code').fadeOut().css('display', 'none'); },1500) showLoginReason(result.message); }else { //其他错误 inputs.val(''); $('.input_code').fadeOut().css('display', 'none'); showLoginReason(result.message); } } }); } else { showLoginReason("请输入手机验证码"); } } //打开手机验证码输入(王华) function openCodeInput(loginData) { $('.input_code').fadeIn().css('display','flex'); inputs = $('.verification-code-input input'); suButton = $('#submitButton'); inputs[0].focus(); //聚焦光标顺移 inputs.on('input', function(e) { const value = $(this).val(); if (value.length === 1) { if ($(this).index() < inputs.length - 1) { debounce(() => { inputs.eq($(this).index() + 1).focus(); }, 10); } else { $(this).blur(); } } checkPhoneCode(loginData.username, loginData.password); }); //回退删除 inputs.on('keydown', function(e) { if (e.key === 'Backspace') { if ($(this).val().length === 0 && $(this).index() > 0) { inputs.eq($(this).index() - 1).focus(); } } checkPhoneCode(loginData.username, loginData.password); }); //复制粘贴 $(document).on('paste', function(e) { e.preventDefault(); const pastedData = e.originalEvent.clipboardData.getData('text'); const digits = pastedData.match(/\d/g); if (digits) { let i = 0; inputs.each(function() { if (digits[i]) { $(this).val(digits[i]); i++; } }); } checkPhoneCode(loginData.username, loginData.password); }); } function login(url) { //接收输入账号密码 let username = $("input[name='username']").val(); let password = $("input[name='password']").val(); //验证输入 if (Tools.isEmptyString(username)) { showLoginReason("请输入登录账号!"); return false; } if (Tools.isEmptyString(password)) { showLoginReason("请输入登录密码!"); return false; } if (Tools.isEmptyString($("#vcode").textbox("getValue"))) { showLoginReason("请输入验证码!"); return false; } if ($("#vcode").textbox("getValue") != $(".login-vcodebox").attr('value')) { showLoginReason("验证码不正确!"); return false; } if(Tools.isEmptyString(url)) { url = "https://kljt.zhxy.hct.cn/login/login?"; } else { url = url; } //开始加密并请求登录 showLoginReason("系统正在验证,请稍后......"); const data = aesEncrypt({ username: username, password: password }); requestLogin(url, data) } function aesMinEncrypt(key, iv, word){ var _word = CryptoJS.enc.Utf8.parse(word), _key = CryptoJS.enc.Utf8.parse(key), _iv = CryptoJS.enc.Utf8.parse(iv); var encrypted = CryptoJS.AES.encrypt(_word, _key, { iv: _iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } function showLoginReason(info) { $("#login_error").html(info); } //随机去四个值 var items=[1,2,3,4,5,6,7,8,9,0,'p','q','r','a','i','x','w','m','h','s','c','b','t','d','u','v','y','z','e','f','g','h','j','k','l','n','o']; function getRandomArrayElements(arr, count) { var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index; while (i-- > min) { index = Math.floor((i + 1) * Math.random()); temp = shuffled[index]; shuffled[index] = shuffled[i]; shuffled[i] = temp; } return shuffled.slice(min); } // 随机颜色 function randomHexColor() { //随机生成十六进制颜色 return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).substr(-6); } // 随机倾斜 function random(min, max){ return min + Math.floor(Math.random() * (max - min + 1)); } // 随机字体大小 function randomSize(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } // 集成 function VerificationCode(Div,num){ Div.empty(); var str=''; $.each(getRandomArrayElements(items, num),function (i,item){ str+=item Div.append("" + item + "") }) Div.attr('value',str) Div.click(function (){ VerificationCode(Div,4); }) }