$(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);
})
}