/** * 用户登入体系js * * @author wangshibo * @date 2018/11/30 */ let loginReg = { // 初始化JSEncrypt对象 publicKey: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq56S6g7/HUffSisav8TEPDQo4vqSm0v11aXS0NIaavGh716DU7tZoJFO7gr/iJuR0Cq9OsqssQNhVawpmJUo8SZfXOrMPOiwBkHSBi+HlogK5qF62VDdSvLwtgAuu5UGiVlMrOgwgzZxVq0oB/nU/0KSOzoqqH6dqTy2eCPH16QIDAQAB", reg:{ upperCase : new RegExp('[A-Z]'), lowerCase : new RegExp('[a-z]'), numbers : new RegExp('[0-9]') }, // 登录表单验证回调 loginValidation: { // 验证结束 complete: function(result) { }, // 验证通过,登录请求 success: function() { let params = { url: personal_util.urls.signIn, type: 'post', data: { account: loginReg.loginForm.account, password: SignModule.insEncrypt().encrypt(loginReg.loginForm.pwd + new FormPage().randomString(4)), code: loginReg.loginForm.loginImgCode } }; window.request(params, SignModule.loginCallback); }, // 验证失败 error: function(result) { $.toast(result.message); } }, // 登录表单验证回调 loginDialogValidation: { // 验证结束 complete: function(result) { }, // 验证通过,登录请求 success: function() { let params = { url: personal_util.urls.signIn, type: 'post', data: { account: loginReg.loginForm.account, password: SignModule.insEncrypt().encrypt(loginReg.loginForm.pwd + new FormPage().randomString(4)), code: loginReg.loginForm.loginImgCode } }; window.request(params, SignModule.loginDialogCallback); }, // 验证失败 error: function(result) { $.toast(result.message); } }, // 注册表单验证回调 regValidation: { // 验证结束 complete: function(result) { }, // 验证通过,注册请求 success: function() { var formData = loginReg.regForm; var password = formData.pwd; if(!(password.match(loginReg.reg.numbers) && password.match(loginReg.reg.upperCase) && password.match(loginReg.reg.lowerCase))){ $.toast('密码必须包含数字、字母大小写'); return; } let isEmail = loginReg.regForm.channel === 'email', params = { url: isEmail? personal_util.urls.goEmailReg: personal_util.urls.goSmsReg, type: 'post', data: { [isEmail? 'yhyx': 'yhsjhm']: formData.account, yhmm: SignModule.insEncrypt().encrypt(formData.pwd + new FormPage().randomString(4)), yhnc: formData.nickName, code: formData.imgCode, emailCode: formData.smsCode, smsCode: formData.smsCode, inviteCode: formData.invite } }; window.request(params, RegisterModule.regCallback); }, // 验证失败 error: function(result) { $.toast(result.message); } }, // 找回密码表单验证回调 findPwdValidation: { // 验证结束 complete: function(result) { }, // 验证通过,提交密码修改 success: function() { let formData = loginReg.pwdForm; var password = formData.newPwd; if(!(password.match(loginReg.reg.numbers) && password.match(loginReg.reg.upperCase) && password.match(loginReg.reg.lowerCase))){ $.toast('密码必须包含数字、字母大小写'); return; } var params = { url: personal_util.urls.findPwdSub, type: 'post', data: { password: SignModule.insEncrypt().encrypt(formData.newPwd + new FormPage().randomString(4)), key: formData.account, code: formData.code, type: formData.channel } }; window.request(params, FindPwd.subCallback); }, // 验证失败 error: function(result) { $.toast(result.message); } }, // 登录表单数据 loginForm: { account: '', pwd: '', loginImgCode: '' }, // 注册表单数据 regForm: { account: '', smsCode: '', nickName: '', pwd: '', rePwd: '', invite: '', imgCode: '', channel: '', phoneReg: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, emailReg: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/ }, // 注册发送短信/邮件计时器 interval: { timer: undefined, initSeconds: 60, seconds: 60 }, // 找回密码表单数据 pwdForm: { account: '', channel: '', code: '', newPwd: '' }, // 找回密码发送短信/邮件计时器 pwdInterval: { timer: undefined, initSeconds: 60, seconds: 60 } }; // 校验注册账号 function checkAccount (obj) { let result = RegisterModule.checkAccount(obj); return result.flag; } // 登入模块方法类 class SignModule { // 加密对象 static insEncrypt () { if (!this.encrypt) { let encrypt = new JSEncrypt(); encrypt.setPublicKey(loginReg.publicKey); this.encrypt = encrypt; } return this.encrypt; } // 数据暂存 static saveData (obj) { loginReg.loginForm[obj.dataset.key] = $(obj).val(); } // 登录回调 static loginCallback (res) { res = JSON.parse(res); // 失败,提示信息,刷新验证码 let loginForm = $('#login-in .img-code'); if (res.code === 0) { $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } if(res.data && res.data.uservo){ let s = $.md5(res.data.uservo.yhid+res.data.uservo.yxbj); if(s != res.data.userislogin){ $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } }else{ $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } // 成功,跳转用户信息主页 $.toast('登录成功,正在跳转!'); setTimeout(function() { location.href = './user/usercenter.html'; }, 500); } // 登录弹窗回调 static loginDialogCallback (res) { res = JSON.parse(res); // 失败,提示信息,刷新验证码 let loginForm = $('#login-dialog .img-code'); if (res.code === 0) { $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } if(res.data && res.data.uservo){ let s = $.md5(res.data.uservo.yhid+res.data.uservo.yxbj); if(s != res.data.userislogin){ $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } }else{ $.toast(res.msg); loginForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; loginForm.find('img').attr('src', imgUrl); return; } // 成功,回退上一级 $.toast('登录成功,正在跳转!'); //判断是不是在线咨询过来的 if(typesource=="1"){//根据typesource来判断 1说明是在线咨询跳转过来的 toonlineConsult(); }else{ setTimeout(function() { $.router.back(); }, 500); } } } // 注册模块方法类 class RegisterModule { // 数据暂存 static saveData (obj) { loginReg.regForm[obj.dataset.key] = $(obj).val(); } // 账号规则校验 static checkAccount (obj) { let account = $(obj).val(), result = { flag: false, channel: '' }; // 手机号 if (loginReg.regForm.phoneReg.test(account)) { result.flag = true; result.channel = 'phone'; return result; } // 邮箱 if (loginReg.regForm.emailReg.test(account)) { result.flag = true; result.channel = 'email'; return result; } return result; } // 发送短信/邮件 static sendMsg () { // 校验账号 let result = this.checkAccount(document.getElementById('reg-account')); if (!result.flag) { $.toast('请输入正确的手机号码或邮箱'); return; } let yzm = $('input[data-key="imgCode"]').val(); if(!yzm){ $.toast('请输入验证码'); return; } // 发送短信/邮件验证码 loginReg.regForm.channel = result.channel; let isEmail = result.channel === 'email', url = [isEmail? personal_util.urls.regEmail: personal_util.urls.regSms], params = { type: 'post', url: url, data: { [isEmail? 'email': 'phone']: loginReg.regForm.account, yzm:yzm } }; window.request(params, this.sendCallback); } // 发送短信/邮件回调 static sendCallback (results) { results = JSON.parse(results); if(results.code === 0) { //更新验证码 $('.img-code .item-code img').click().click(); $.toast(results.msg); return; } $.toast('发送成功'); // 倒计时 let sendBtn = $('#reg-form .yzm'), sendBtnDisabled = $('#reg-form .yzmed'), interval = loginReg.interval; interval.timer = setInterval (function() { interval.seconds--; if (interval.seconds < 1) { interval.seconds = interval.initSeconds; clearInterval(interval.timer); $('#reg-form .yzm').show(); $('#reg-form .yzmed').hide(); } else { $('#reg-form .yzm').hide(); $('#reg-form .yzmed').show(); $('#reg-form .yzmed').html(interval.seconds + "秒后重发"); } }, 1000); } // 注册提交回调 static regCallback (res) { res = JSON.parse(res); // 失败,提示信息,刷新验证码 let regForm = $('#register .img-code'); if (res.code === 0) { $.toast(res.msg); regForm.find('input').val(''); let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; regForm.find('img').attr('src', imgUrl); return; } // 成功,跳转登录页 $.toast('注册成功,请尽快完善用户资料', 1300); setTimeout(function() { //注册成功清除倒计时 let sendBtn = $('#reg-form .yzm'), sendBtnDisabled = $('#reg-form .yzmed'), interval = loginReg.interval; if(interval.seconds){ interval.seconds = interval.initSeconds; clearInterval(interval.timer); sendBtn.show(); sendBtnDisabled.hide(); } $('#reg-form img').removeAttr('src'); if ($('.popup-register').length > 0) { $('#reg-form input[type=text], #reg-form input[type=password]').val(''); $.closeModal('.popup-register'); } else { $.router.back(); } }, 1500); } } // 找回密码 class FindPwd { // 数据暂存 static saveData (obj) { loginReg.pwdForm[obj.dataset.key] = $(obj).val(); } // 发送短信/邮件 static sendMsg () { // 校验账号 let result = RegisterModule.checkAccount(document.getElementById('pwd-account')); if (!result.flag) { $.toast('请输入正确的手机号码或邮箱'); return; } else { loginReg.pwdForm.channel = result.channel; } let yzm = $('input[data-key="imgCode"]').val(); if(!yzm){ $.toast('请输入验证码'); return; } // 发送短信/邮件验证码 let isEmail = loginReg.pwdForm.channel === 'email', url = [isEmail? personal_util.urls.pwdEmail: personal_util.urls.pwdSms], params = { type: 'post', url: url, data: { [isEmail? 'email': 'phone']: loginReg.pwdForm.account, yzm:yzm } }; window.request(params, this.sendCallback); } // 发送短信/邮件回调 static sendCallback (results) { results = JSON.parse(results); if(results.code === 0) { $("#pwdimg").click().click(); $.toast(results.msg); return; } $.toast('发送成功'); // 倒计时 let sendBtn = $('#find-pwd-form .yzm'), sendBtnDisabled = $('#find-pwd-form .yzmed'), interval = loginReg.pwdInterval; interval.timer = setInterval (function() { interval.seconds--; if (interval.seconds < 1) { interval.seconds = interval.initSeconds; clearInterval(interval.timer); $('#find-pwd-form .yzm').show(); $('#find-pwd-form .yzmed').hide(); } else { $('#find-pwd-form .yzm').hide(); $('#find-pwd-form .yzmed').show(); $('#find-pwd-form .yzmed').html(interval.seconds + "秒后重发"); } }, 1000); } // 忘记密码修改提交提交回调 static subCallback (res) { res = JSON.parse(res); // 失败,提示错误信息 if (res.code === 0) { $("#pwdimg").click().click() $.toast(res.msg); return; } // 成功,跳转登录页 $.toast('修改成功,正在跳转登录页'); setTimeout(function() { /*找回密码成功清除倒计时*/ let sendBtn = $('#find-pwd-form .yzm'), sendBtnDisabled = $('#find-pwd-form .yzmed'), interval = loginReg.pwdInterval; if(interval.seconds){ interval.seconds = interval.initSeconds; clearInterval(interval.timer); sendBtn.show(); sendBtnDisabled.hide(); } $.router.back(); }, 500); } } // 登录初始化 $(document).on('pageInit', '#login-in', function () { // 回退绑定 CommonUtil.go2Back(); // 输入框长度限制 $('input[type="text"]').each(function (index, element) { if (!$(element).attr('maxlength')) { $(element).attr('maxlength', '20'); } }); // 表单数据暂存 $('.login-form-item').on('input', function () { SignModule.saveData(this); }); // 验证码事件 let loginForm = $('#login-in .img-code'), imgCode = loginForm.find('img'), imgCodeInput = loginForm.find('input'); // 验证码刷新事件 imgCode.on('click', function () { let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; $(this).attr('src', imgUrl); }); // 点击验证码输入框时,获取验证码 imgCodeInput.on('focus', function () { if (imgCode.attr('src')) { return; } let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; imgCode.attr('src', imgUrl); }); // 表单验证初始化 cxValidation.attach(document.getElementById('login-form'), loginReg.loginValidation); }); // 登录弹窗初始化 $(document).on('pageInit', '#login-dialog', function () { // 回退绑定 CommonUtil.go2Back(); // 输入框长度限制 $('input[type="text"]').each(function (index, element) { if (!$(element).attr('maxlength')) { $(element).attr('maxlength', '20'); } }); // 验证码事件 let loginForm = $('#login-dialog .img-code'), imgCode = loginForm.find('img'), imgCodeInput = loginForm.find('input'); // 验证码刷新事件 imgCode.on('click', function () { let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; $(this).attr('src', imgUrl); }); // 点击验证码输入框时,获取验证码 imgCodeInput.on('focus', function () { if (imgCode.attr('src')) { return; } let imgUrl = `${api}${personal_util.urls.imgCode}?d=${Math.random()}`; imgCode.attr('src', imgUrl); }); // 登录 // 表单数据暂存 $('.login-form-item').on('input', function () { SignModule.saveData(this); }); // 表单验证初始化 cxValidation.attach(document.getElementById('login-form'), loginReg.loginDialogValidation); // 注册 // 表单数据暂存 $('.reg-form-item').on('input', function () { RegisterModule.saveData(this); }); // 短信/邮件验证码发送事件 $('#reg-form .send-code').on('click', '.yzm', function () { RegisterModule.sendMsg(); }); // 图片验证码事件 let regForm = $('#reg-form .img-code'), regImgCode = regForm.find('img'), regImgCodeInput = regForm.find('input'); // 验证码刷新事件 regImgCode.on('click', function () { let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; $(this).attr('src', imgUrl); }); // 点击验证码输入框时,获取验证码 regImgCodeInput.on('focus', function () { if (regImgCode.attr('src')) { return; } let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; regImgCode.attr('src', imgUrl); }); cxValidation.attach(document.getElementById('reg-form'), loginReg.regValidation); }); // 注册初始化 $(document).on('pageInit', '#register', function () { // 回退绑定 CommonUtil.go2Back(); // 输入框长度限制 $('input[type="text"]').each(function (index, element) { if (!$(element).attr('maxlength')) { $(element).attr('maxlength', '20'); } }); // 表单数据暂存 $('.reg-form-item').on('input', function () { RegisterModule.saveData(this); }); // 短信/邮件验证码发送事件 $('#register .send-code').on('click', '.yzm', function () { RegisterModule.sendMsg(); }); // 图片验证码事件 let regForm = $('#register .img-code'), imgCode = regForm.find('img'), imgCodeInput = regForm.find('input'); // 验证码刷新事件 imgCode.on('click', function () { let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; $(this).attr('src', imgUrl); }); // 点击验证码输入框时,获取验证码 imgCodeInput.on('focus', function () { if (imgCode.attr('src')) { return; } let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; imgCode.attr('src', imgUrl); }); // 表单验证初始化 cxValidation.attach(document.getElementById('reg-form'), loginReg.regValidation); }); // 密码找回 $(document).on('pageInit', '#forget-pwd', function () { // 回退绑定 CommonUtil.go2Back(); // 输入框长度限制 $('input[type="text"]').each(function (index, element) { if (!$(element).attr('maxlength')) { $(element).attr('maxlength', '20'); } }); // 表单数据暂存 $('.pwd-form-item').on('input', function () { FindPwd.saveData(this); }); // 短信/邮件验证码发送事件 $('#forget-pwd .send-code').on('click', '.yzm', function () { FindPwd.sendMsg(); }); // 表单验证初始化 cxValidation.attach(document.getElementById('find-pwd-form'), loginReg.findPwdValidation); var imgCode; $('input[data-key="imgCode"]').on('focus', function () { imgCode = $("#pwdimg"); if (imgCode.attr('src')) { return; } let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; imgCode.attr('src', imgUrl); }); $("#pwdimg").click(function(){ imgCode = $("#pwdimg"); let imgUrl = `${api}${personal_util.urls.regImgCode}?d=${Math.random()}`; imgCode.attr('src', imgUrl); }) });