/** * 第三方绑定完善个人信息 * @author: wq * @date: 2016/1/27 */ var $ = require('yoho-jquery'); var dovalidate = false; // 校验验证码的标识 var isvalidatecode = false; // 是否验证成功的标识 var isvalidatepwd = false; // 密码验证是否通过的标识 var second = ''; // 倒计时时间 var nopermissionoption = ''; // 倒计时的dom var sendmessagehtml = ''; // 发送短信的dom var submitStatus = false; // 信息提交状态 var $wrapper = $('.bindwrapper'), $codeTip = $wrapper.find('.code-err-tip'), $pwdTip = $wrapper.find('.pwd-err-tip'), $pwdTip2 = $('#pwd-tip2'), $sendMsgBtn = $('#sendmessage'); var $pwd, $pwdParent, $pwdTip1, $pwdIntensity; var pwdRegx = require('./mail-phone-regx').pwdValidateRegx; var mobile = $('#mobile').val(), area = $('#area').val(); nopermissionoption = $('#nopermissionmessage').html(); sendmessagehtml = $('.validatewrapper').html(); second = +$('.second').text(); function gettype(str, i) { if (str.charCodeAt(i) >= 48 && str.charCodeAt(i) <= 57) { return 1; } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) { return 2; } else if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) { return 3; } return 4; } function isregular(cur, pre, type) { var curCode = cur.charCodeAt(0); var preCode = pre.charCodeAt(0); if (curCode - preCode === 0) { return true; } if (type !== 4 && (curCode - preCode === 1 || curCode - preCode === -1)) { return true; } return false; } function getcomplex(curType, preType) { if (preType === 0 || curType === preType) { return 0; } else if (curType === 4 || preType === 4) { return 2; } else { return 1; } } /** * @desc: 计算密码复杂度(from:http://www.oschina.net/code/snippet_127301_17269) * @author: xuqi(qi.xu@yoho.cn) * @date: 2015/5/6 */ function computeComplex(password) { var complex = 0; var length = password.length; var pre = ''; var preType = 0; var i = 0; var cur = ''; var curType = ''; for (i; i < length; i++) { cur = password.charAt(i); curType = gettype(password, i); if (preType !== curType || !isregular(cur, pre, curType)) { complex += curType + getcomplex(curType, preType); } pre = cur; preType = curType; } return complex; } function showErrTip($dom, info) { $dom.find('em').text(info); $dom.removeClass('hide'); } function changeSecond() { second -= 1; if (second < 0) { second = 60; $('.validatewrapper').html(sendmessagehtml); return; } else { $('.second').text(second); window.setTimeout(changeSecond, 1000); } } /** * 启动倒计时 * @return {[type]} [description] */ function circleTime() { $('.validatewrapper').html(nopermissionoption); window.setTimeout(changeSecond, 1000); } function sendMessageValidate() { $(document).on('click', '#sendmessage', function() { circleTime(); $.ajax({ type: 'POST', url: '/passport/autouserinfo/sendBindMsg', data: { mobile: mobile, area: area } }).then(function(data) { if (data.code !== 200) { alert(data.message); // eslint-disable-line } }); }); } function codeValidate() { var validatenum = ''; $(document).on('keyup', '#validatenum', function() { $('#err-info').hide(); validatenum = $(this).val(); if (validatenum.length === 4) { if (!dovalidate) { dovalidate = true; $.ajax({ type: 'POST', url: '/passport/autouserinfo/checkBindMsg', data: { code: validatenum, mobile: mobile, area: area } }).then(function(data) { dovalidate = false; if (data.code !== 200) { $('#err-info').show(); } else { isvalidatecode = true; } }); } } }); } function pwdKeyupEvt() { var pwd = $pwd.val(), pwdStrength = computeComplex(pwd), level = 0; if (pwdStrength === 0) { level = 0; } else if (pwdStrength <= 10) { level = 1; } else if (pwdStrength <= 20) { level = 2; } else { level = 3; } switch (level) { case 0: $pwdParent.removeClass('red yellow green'); $pwdIntensity.removeClass('color'); break; case 1: $pwdParent.addClass('red').removeClass('yellow green'); $pwdIntensity.filter('.low').addClass('color'); $pwdIntensity.filter('.mid,.high').removeClass('color'); break; case 2: $pwdParent.addClass('yellow').removeClass('red green'); $pwdIntensity.filter('.low,.mid').addClass('color'); $pwdIntensity.filter('.high').removeClass('color'); break; case 3: $pwdParent.addClass('green').removeClass('yellow red'); $pwdIntensity.addClass('color'); break; default: break; } if (pwd === '') { isvalidatepwd = false; $pwdTip1.removeClass('red yes no').addClass('default'); } else { if (pwd.length < 6 || pwd.length > 20) { isvalidatepwd = false; $pwdTip1.removeClass('default yes').addClass('no red'); } else { isvalidatepwd = true; $pwdTip1.removeClass('default no red').addClass('yes'); } if (/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]*$/.test(pwd)) { $pwdTip2.removeClass('default no red').addClass('yes'); } else { $pwdTip2.removeClass('default yes').addClass('no red'); } } } function validatePwd() { $(document).on('keyup', '.pwdcontent', function() { pwdKeyupEvt($(this)); }); $(document).on('focus', '.pwdcontent', function() { $('#pwd-tips').removeClass('hide'); }); $(document).on('blur', '.pwdcontent', function() { $('#pwd-tips').addClass('hide'); }); } /** * 最终提交表单 */ function actionSubmit() { var pwd = ''; var code = ''; // 查看提交状态,避免重复提交 if (submitStatus) { return; } submitStatus = true; setTimeout(function() { submitStatus = false; }, 50000); pwd = $('#pwd').val(); code = $('#validatenum').val(); $.ajax({ type: 'POST', url: '/passport/autouserinfo/bindMobile', data: { area: area, openId: $('#openId').val(), sourceType: $('#sourceType').val(), mobile: mobile, password: pwd, code: code } }).then(function(data) { submitStatus = false; if (data.code === 200) { if (data.data && data.data.refer) { window.location.href = data.data.refer; } else { window.location.href = '/passport/thirdlogin/bindsuccess'; } } else { alert(data.message); // eslint-disable-line } }); } /** * 确定完善信息 * @return {[type]} [description] */ function actionConfirm() { var validatenum = ''; var pwd = ''; $('#confirmsubmit').on('click', function() { var isAssess = true; validatenum = $('#validatenum').val(); pwd = $('#pwd').val(); if (validatenum === '') { showErrTip($codeTip, '短信验证码不能为空'); isAssess = false; } else if (isvalidatecode === false) { showErrTip($codeTip, '请输入正确的验证码'); isAssess = false; } if (pwd === '') { showErrTip($pwdTip, '密码不能为空'); isAssess = false; } else if (pwd.length < 6 || pwd.length > 20) { showErrTip($pwdTip, '密码只支持6-20位字符'); isAssess = false; } else if (!pwdRegx.test(pwd)) { showErrTip($pwdTip, '密码须由字母和数字组合'); isAssess = false; } else if (isvalidatepwd === false) { showErrTip($pwdTip, '请输入符合强度的密码'); isAssess = false; } if (!isAssess) { return; } actionSubmit(); }); } function init() { $pwd = $('#pwd'); $pwdParent = $('.safelevel'); $pwdIntensity = $('.pwd-intensity'); $pwdTip1 = $('#pwd-tip1'); sendMessageValidate(); codeValidate(); validatePwd(); actionConfirm(); if (mobile && area) { $sendMsgBtn.click(); } } init();