180 lines
6.7 KiB
JavaScript
Raw Normal View History

2024-08-31 01:03:37 +08:00
ClassBase.define({
init: function (param) {
this.$el = this.parent.$('.login-form');
this.checkInput = _.get(this,'checkInput.check');
if (typeof _.get(this,'checkInput.check') != 'function') this.checkInput = false;
},
// 后台更新登录状态,前端调用登录成功事件;如果存在二次验证,则先验证
needTfa: function (tfaIn,tfaInfo) {
this.tfaIn = tfaIn;
if (_.get(tfaInfo,'tfaOpen') != 1) {
var userID = _.get(tfaInfo,'userID') || '';
return this.doVerify({userID: userID, wiotTfa: 1}); // 更新登录状态
}
this.showDialog(tfaInfo); // 二次验证
},
// 显示二次验证弹窗
showDialog: function (tfaInfo) {
// 去除登录页加载样式
NProgress.done();
$("body .loading-msg-mask").remove();
this.$('.submit-button.login').removeClass('disable-event');
var self = this;
var userID = _.get(tfaInfo,'userID') || '';
var type = _.get(tfaInfo,'type') || '';
if (!type) {
var tfaType = _.get(tfaInfo,'tfaType') || ''
var typeArr = _.split(tfaType,',');
type = typeArr.length > 1 ? typeArr : tfaType;
}
var text = _.isArray(type) ? LNG['common.input']+LNG['client.tfa.phoneNumEmail'] : LNG['user.input'+_.upperFirst(type)];
var name = _.isArray(type) ? LNG['client.tfa.phoneEmail'] : LNG['common.'+type];
var html = '<div class="inputs">\
<div class="input-item def">\
<p class="title">'+name+LNG['client.tfa.verify']+'</p>\
<p name="">'+LNG['client.tfa.sendTo']+' '+tfaInfo.input+'</p>\
</div>\
<div class="input-item">\
<input name="input" type="text" placeholder="'+text+'">\
</div>\
<div class="input-item check-code">\
<input name="code" type="text" placeholder="'+LNG['user.inputVerifyCode']+'">\
<button type="button" class="input-button">'+LNG['user.getCode']+'</button>\
</div>\
</div>';
this.dialog = $.dialog({
ico: '<i class="font-icon ri-lock-password-line"></i>',
id: 'login-tfa-dialog',
title: LNG['client.tfa.2verify'],
width:320,
height:100,
padding: '15px 10px',
resize:false,fixed:true,lock:true,
background: "#000",opacity: 0.2,
content: html,
ok: function(e){
var data = self.getInputData(tfaInfo, typeArr);
if (!data) return false;
var $code = self.dialog.$main.find('input[name="code"]');
var code = $.trim($code.val());
if (!code) {$code.focus();return false;}
data.userID = userID;
data.code = code;
self.doVerify(data);
return false;
},
// cancel: false,
// close:false
});
var $dialog = this.dialog.$main;
if (tfaInfo.input) {
$dialog.find('input[name="input"]').parent().hide();
} else {
$dialog.find('.input-item.def p[name]').hide();
}
var $submit = $dialog.find('button.aui-state-highlight');
$submit.prop("disabled", true);
// 获取验证码
$dialog.delegate('.check-code button', 'click', function(){
var $btn = $(this);
var data = self.getInputData(tfaInfo, typeArr);
if (!data) return false;
data.userID = userID;
data.action = 'tfaCode';
var tips = Tips.loadingMask();
$btn.prop("disabled", true);
self.request(data, function(result){
tips.close();
Tips.close(result);
if (!result.code) {
$btn.prop("disabled", false);
return false;
}
$submit.prop("disabled", false);
self.sendAfter(data.type, $btn);
});
});
},
sendAfter: function (type, $button) {
// 发送成功,button倒计时
var time = type == 'email' ? 60 : 90;
$button.text(time + 's');
var timer = setInterval(function () {
if (time > 0) {
time--;
$button.text(time + 's');
} else {
$button.text(LNG['user.getCode']);
$button.prop("disabled", false);
clearInterval(timer);
}
}, 1000);
},
// 获取发送方式信息
getInputData: function (tfaInfo,typeArr) {
var self = this;
// 原始数据input存在时type肯定存在
if (tfaInfo.input) {
return {type: tfaInfo.type, input: tfaInfo.input, default: 1};
}
// 输入数据
var $input = this.dialog.$main.find('input[name="input"]');
var input = $.trim($input.val());
if (!input) {$input.focus();return false;}
var check = '';
_.each(typeArr, function(tType){
if (self.checkInput && self.checkInput.check(input, tType)) {
check = tType;
return false;
}
});
if (!check) {
$input.select();
var name = typeArr.length > 1 ? LNG['client.tfa.phoneNumEmail'] : LNG['common.'+typeArr[0]];
Tips.tips(LNG['client.tfa.inputValid']+name,'warning');
return false;
}
return {type: check, input: input, default: 0};
},
// 提交二次验证/更新登录状态
doVerify: function (data) {
var self = this;
data.action = 'tfaVerify';
if (!_.get(data, 'wiotTfa')) {
var tips = Tips.loadingMask();
}
this.request(data, function(result){
tips && tips.close();
Tips.close(result);
if (!result.code) return false;
self.dialog && self.dialog.close();
if (_.get(self,'parent.loginSuccess')) {
self.parent.withTfa = true;
self.parent.loginSuccess();
} else {
var link = _.get(Router,'queryBefore.link') || G.kod.APP_HOST;
window.location.href = link;
}
return false;
});
},
request: function(data, callback){
if (!this.tfaRequest) {
this.tfaRequest = new kodApi.request({parent: this});
}
data['tfaIn'] = this.tfaIn;
this.tfaRequest.requestSend('plugin/client/tfa', data, function(result){
callback(result);
});
},
});