...
|
...
|
@@ -3990,14 +3990,30 @@ validateResult = [ |
|
|
];
|
|
|
|
|
|
//手机号ajax校验
|
|
|
function phoneAjaxFn(callback) {
|
|
|
$.ajax({
|
|
|
url: '/passport/register/checkmobile',
|
|
|
type: 'POST',
|
|
|
data: {
|
|
|
function phoneAjaxFn(page, callback) {
|
|
|
var url,
|
|
|
data;
|
|
|
|
|
|
if (page === 'reg') {
|
|
|
url = '/passport/register/checkmobile';
|
|
|
data = {
|
|
|
mobile: $pn.val(),
|
|
|
area: $region.text().split('+')[1]
|
|
|
}
|
|
|
};
|
|
|
} else if (page === 'third') {
|
|
|
url = '/passport/autouserinfo/bindCheck';
|
|
|
data = {
|
|
|
mobile: $pn.val(),
|
|
|
area: $region.text().split('+')[1],
|
|
|
openId: 1,
|
|
|
sourceType: 'QQ'
|
|
|
};
|
|
|
}
|
|
|
|
|
|
$.ajax({
|
|
|
url: url,
|
|
|
type: 'POST',
|
|
|
data: data
|
|
|
}).then(function(data) {
|
|
|
switch (data.code) {
|
|
|
case 200:
|
...
|
...
|
@@ -4015,10 +4031,17 @@ function phoneAjaxFn(callback) { |
|
|
}
|
|
|
|
|
|
//图形验证码ajax校验
|
|
|
function picCaptchaAjaxFn(callback) {
|
|
|
function picCaptchaAjaxFn(page, callback) {
|
|
|
var url;
|
|
|
|
|
|
if (page === 'reg') {
|
|
|
url = '/passport/register/piccaptcha';
|
|
|
} else if (page === 'third') {
|
|
|
url = '/passport/autouserinfo/checkPicCode';
|
|
|
}
|
|
|
$.ajax({
|
|
|
type: 'POST',
|
|
|
url: '/passport/register/piccaptcha',
|
|
|
url: url,
|
|
|
data: {
|
|
|
code: $ca.val(),
|
|
|
mobile: $pn.val(),
|
...
|
...
|
@@ -4030,7 +4053,7 @@ function picCaptchaAjaxFn(callback) { |
|
|
validateResult[1].message = '';
|
|
|
validateResult[1].status = true;
|
|
|
break;
|
|
|
case 404:
|
|
|
case 400:
|
|
|
validateResult[1].message = '图形验证码错误';
|
|
|
validateResult[1].status = false;
|
|
|
break;
|
...
|
...
|
@@ -4040,10 +4063,17 @@ function picCaptchaAjaxFn(callback) { |
|
|
}
|
|
|
|
|
|
//短信验证码ajax校验
|
|
|
function msgCaptchaAjaxFn(callback) {
|
|
|
function msgCaptchaAjaxFn(page, callback) {
|
|
|
var url;
|
|
|
|
|
|
if (page === 'reg') {
|
|
|
url = '/passport/register/msgcaptcha';
|
|
|
} else if (page === 'third') {
|
|
|
url = '/passport/autouserinfo/checkBindMsg';
|
|
|
}
|
|
|
$.ajax({
|
|
|
type: 'POST',
|
|
|
url: '/passport/register/msgcaptcha',
|
|
|
url: url,
|
|
|
data: {
|
|
|
code: $ca.val(),
|
|
|
mobile: $pn.val(),
|
...
|
...
|
@@ -4055,7 +4085,7 @@ function msgCaptchaAjaxFn(callback) { |
|
|
validateResult[2].message = '';
|
|
|
validateResult[2].status = true;
|
|
|
break;
|
|
|
case 404:
|
|
|
case 400:
|
|
|
validateResult[2].message = '短信验证码错误';
|
|
|
validateResult[2].status = false;
|
|
|
break;
|
...
|
...
|
@@ -4066,7 +4096,7 @@ function msgCaptchaAjaxFn(callback) { |
|
|
}
|
|
|
|
|
|
// 验证
|
|
|
function validateRule($element, callback) {
|
|
|
function validateRule(page, $element, callback) {
|
|
|
|
|
|
var val = $.trim($element.val()),
|
|
|
regionCode;
|
...
|
...
|
@@ -4088,7 +4118,7 @@ function validateRule($element, callback) { |
|
|
callback();
|
|
|
|
|
|
} else {
|
|
|
phoneAjaxFn(callback);
|
|
|
phoneAjaxFn(page, callback);
|
|
|
}
|
|
|
|
|
|
//图形验证码校验
|
...
|
...
|
@@ -4107,7 +4137,7 @@ function validateRule($element, callback) { |
|
|
|
|
|
// 并且手机号正确
|
|
|
if (validateResult[0].status) {
|
|
|
picCaptchaAjaxFn(callback);
|
|
|
picCaptchaAjaxFn(page, callback);
|
|
|
} else {
|
|
|
validateResult[1].message = '图形验证码错误';
|
|
|
validateResult[1].status = false;
|
...
|
...
|
@@ -4133,7 +4163,7 @@ function validateRule($element, callback) { |
|
|
|
|
|
// 并且图形验证码正确
|
|
|
if (validateResult[1].status) {
|
|
|
msgCaptchaAjaxFn(callback);
|
|
|
msgCaptchaAjaxFn(page, callback);
|
|
|
} else {
|
|
|
validateResult[2].message = '短信验证码错误';
|
|
|
validateResult[2].status = false;
|
...
|
...
|
@@ -4286,143 +4316,172 @@ function pwdFn($obj) { |
|
|
|
|
|
// 失去焦点时开始校验
|
|
|
// Tips: 不可以在获得焦点的时候验证,获得焦点和失去焦点的间隔太小,如果中间存在ajax校验的话会出现问题
|
|
|
$registerPage.find('.va').keyup(function() {
|
|
|
// ( ▼-▼ )注册页和信息完善页面接口不同
|
|
|
exports.init = function(page) {
|
|
|
$registerPage.find('.va').keyup(function() {
|
|
|
|
|
|
var j,
|
|
|
statusLen = 0,
|
|
|
vLen = validateResult.length,
|
|
|
$that = $(this);
|
|
|
var j,
|
|
|
statusLen = 0,
|
|
|
vLen = validateResult.length,
|
|
|
$that = $(this);
|
|
|
|
|
|
validateRule($(this), function() {
|
|
|
showErrTip(); // 显示错误提示
|
|
|
showBorder(); // 显示红色边框
|
|
|
validateRule(page, $(this), function() {
|
|
|
showErrTip(); // 显示错误提示
|
|
|
showBorder(); // 显示红色边框
|
|
|
|
|
|
// 如果validateResult中有4个status为true表示验证通过
|
|
|
for (j = 0; j < vLen; j++) {
|
|
|
// 如果validateResult中有4个status为true表示验证通过
|
|
|
for (j = 0; j < vLen; j++) {
|
|
|
|
|
|
if (validateResult[j].status) {
|
|
|
if (validateResult[j].status) {
|
|
|
|
|
|
statusLen++;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (statusLen === 4 && $('#agree-terms').is(':checked')) {
|
|
|
$registerBtn.removeClass('disable').removeAttr('disabled');
|
|
|
} else {
|
|
|
$registerBtn.addClass('disable').attr('disabled', 'true');
|
|
|
}
|
|
|
statusLen++;
|
|
|
}
|
|
|
|
|
|
// 图形验证通过时,发送短信按钮可点击
|
|
|
if (validateResult[1].status) {
|
|
|
$sendCaptcha.removeClass('disable');
|
|
|
} else {
|
|
|
$sendCaptcha.addClass('disable');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//图形验证通过时,发送短信按钮可点击 end
|
|
|
if (statusLen === 4 && $('#agree-terms').is(':checked')) {
|
|
|
$registerBtn.removeClass('disable').removeAttr('disabled');
|
|
|
} else {
|
|
|
$registerBtn.addClass('disable').attr('disabled', 'true');
|
|
|
}
|
|
|
|
|
|
});
|
|
|
// 图形验证通过时,发送短信按钮可点击
|
|
|
if (validateResult[1].status) {
|
|
|
$sendCaptcha.removeClass('disable');
|
|
|
} else {
|
|
|
$sendCaptcha.addClass('disable');
|
|
|
}
|
|
|
|
|
|
// 如果是密码则校验强度
|
|
|
if (($that).hasClass('pwd')) {
|
|
|
pwdFn($that);
|
|
|
}
|
|
|
//图形验证通过时,发送短信按钮可点击 end
|
|
|
|
|
|
}).blur(function() {
|
|
|
});
|
|
|
|
|
|
/*validateRule($(this), function() {
|
|
|
showErrTip();
|
|
|
showBorder(); // 显示红色边框
|
|
|
});*/
|
|
|
});
|
|
|
// 如果是密码则校验强度
|
|
|
if (($that).hasClass('pwd')) {
|
|
|
pwdFn($that);
|
|
|
}
|
|
|
|
|
|
$regionSelect.change(function() {
|
|
|
}).blur(function() {
|
|
|
|
|
|
$region.text('+' + $('#region').val());
|
|
|
/*validateRule($(this), function() {
|
|
|
showErrTip();
|
|
|
showBorder(); // 显示红色边框
|
|
|
});*/
|
|
|
});
|
|
|
|
|
|
validateRule($pn, showErrTip); //验证
|
|
|
});
|
|
|
$regionSelect.change(function() {
|
|
|
|
|
|
// 点击发送验证码
|
|
|
$sendCaptcha.click(function() {
|
|
|
var timeResidue = 10,
|
|
|
t;
|
|
|
$region.text('+' + $('#region').val());
|
|
|
|
|
|
if ($(this).hasClass('disable')) {
|
|
|
return;
|
|
|
}
|
|
|
validateRule(page, $pn, showErrTip); //验证
|
|
|
});
|
|
|
|
|
|
//todo ajax
|
|
|
// 点击发送验证码
|
|
|
$sendCaptcha.click(function() {
|
|
|
var timeResidue = 20,
|
|
|
t,
|
|
|
url;
|
|
|
|
|
|
t = setInterval(function() {
|
|
|
if (timeResidue <= 0) {
|
|
|
$sendCaptcha.removeClass('disable').val('获取短信验证码');
|
|
|
clearInterval(t);
|
|
|
if ($(this).hasClass('disable')) {
|
|
|
return;
|
|
|
}
|
|
|
$sendCaptcha.addClass('disable').val(timeResidue-- + '秒可重新发送');
|
|
|
}, 1000);
|
|
|
});
|
|
|
|
|
|
//form表单提交
|
|
|
$registerBtn.click(function() {
|
|
|
|
|
|
if ($(this).hasClass('disable')) {
|
|
|
return;
|
|
|
} else {
|
|
|
if (page === 'reg') {
|
|
|
url = '/passport/register/sendBindMsg';
|
|
|
} else if (page === 'third') {
|
|
|
url = '/passport/autouserinfo/sendBindMsg';
|
|
|
}
|
|
|
|
|
|
//ajax提交
|
|
|
//todo ajax 发送验证码
|
|
|
$.ajax({
|
|
|
type: 'POST',
|
|
|
url: '/passport/register/mobileregister',
|
|
|
url: url,
|
|
|
data: {
|
|
|
area: $region.text().split('+')[1],
|
|
|
mobile: $pn.val(),
|
|
|
captcha: $ca.val(),
|
|
|
code: $mc.val(),
|
|
|
password: $pwd.val()
|
|
|
code: $ca.val()
|
|
|
}
|
|
|
}).then(function(data) {
|
|
|
if (data.code === 200) {
|
|
|
t = setInterval(function() {
|
|
|
if (timeResidue <= 0) {
|
|
|
$sendCaptcha.removeClass('disable').val('获取短信验证码');
|
|
|
clearInterval(t);
|
|
|
return;
|
|
|
}
|
|
|
$sendCaptcha.addClass('disable').val(timeResidue-- + '秒可重新发送');
|
|
|
}, 1000);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
|
|
|
//ajax表单提交
|
|
|
$registerBtn.click(function() {
|
|
|
|
|
|
var time = 0,
|
|
|
t,
|
|
|
refer = data.href;
|
|
|
var url;
|
|
|
|
|
|
t = setTimeout(function() {
|
|
|
time++;
|
|
|
}, 1000);
|
|
|
if (page === 'reg') {
|
|
|
url = '/passport/register/mobileregister';
|
|
|
} else if (page === 'third') {
|
|
|
url = '/passport/autouserinfo/bindMobile';
|
|
|
}
|
|
|
|
|
|
if ($(this).hasClass('disable')) {
|
|
|
return;
|
|
|
} else {
|
|
|
|
|
|
//ajax提交
|
|
|
$.ajax({
|
|
|
type: 'POST',
|
|
|
url: '/passport/register/mobileregister',
|
|
|
url: url,
|
|
|
data: {
|
|
|
session: data.session
|
|
|
area: $region.text().split('+')[1],
|
|
|
mobile: $pn.val(),
|
|
|
captcha: $ca.val(),
|
|
|
code: $mc.val(),
|
|
|
password: $pwd.val()
|
|
|
}
|
|
|
}).then(function(data) {
|
|
|
|
|
|
if (data.code === 200 && t < 3) {
|
|
|
var time = 0,
|
|
|
t,
|
|
|
refer = data.href;
|
|
|
|
|
|
t = setTimeout(function() {
|
|
|
time++;
|
|
|
}, 1000);
|
|
|
|
|
|
$.ajax({
|
|
|
type: 'POST',
|
|
|
url: '/passport/register/mobileregister',
|
|
|
data: {
|
|
|
session: data.session
|
|
|
}
|
|
|
}).then(function(data) {
|
|
|
|
|
|
if (data.code === 200 && t < 3) {
|
|
|
clearInterval(t);
|
|
|
location.href = refer;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (t >= 3) {
|
|
|
clearInterval(t);
|
|
|
location.href = refer;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (t >= 3) {
|
|
|
clearInterval(t);
|
|
|
location.href = refer;
|
|
|
}
|
|
|
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
$('.change-captcha').click(function() {
|
|
|
var time = new Date(),
|
|
|
$captchaImg = $('.captcha-img'),
|
|
|
captchaImgSrc = $captchaImg.attr('src').split('?')[0];
|
|
|
$('.change-captcha').click(function() {
|
|
|
var time = new Date(),
|
|
|
$captchaImg = $('.captcha-img'),
|
|
|
captchaImgSrc = $captchaImg.attr('src').split('?')[0];
|
|
|
|
|
|
$captchaImg.attr('src', captchaImgSrc + '?t=' + time.getTime());
|
|
|
});
|
|
|
$captchaImg.attr('src', captchaImgSrc + '?t=' + time.getTime());
|
|
|
});
|
|
|
};
|
|
|
});
|
|
|
define("js/passport/mail-phone-regx", [], function(require, exports, module){
|
|
|
/**
|
...
|
...
|
@@ -4795,265 +4854,290 @@ $('#find-btn').click(function(e) { |
|
|
});
|
|
|
});
|
|
|
define("js/passport/login", ["jquery","jquery.placeholder"], function(require, exports, module){
|
|
|
/**
|
|
|
* 登录
|
|
|
* @author: xuqi<qi.xu@yoho.cn>
|
|
|
* @date: 2015/12/11
|
|
|
*/
|
|
|
var $ = require("jquery");
|
|
|
|
|
|
var mailPostfix = {
|
|
|
num: ['qq.com', '163.com', '126.com', 'sina.com', 'gmail.com', 'sohu.com', 'hotmail.com', '139.com', '189.com'],
|
|
|
other: ['gmail.com', 'qq.com', '163.com', '126.com', 'sina.com', 'sohu.com', 'hotmail.com', '139.com', '189.com']
|
|
|
};
|
|
|
|
|
|
var $account = $('#account'),
|
|
|
$password = $('#password');
|
|
|
|
|
|
var $accountTip = $account.siblings('.err-tip'),
|
|
|
$passwordTip = $password.siblings('.err-tip'),
|
|
|
$capsLock = $('#caps-lock');
|
|
|
|
|
|
var $countryCodeHide = $('#country-code-hide'),
|
|
|
$countryCodeEm = $('#country-code > em'),
|
|
|
$countryList = $('#country-list');
|
|
|
|
|
|
var $emailAutoComplete = $('#email-autocomplete');
|
|
|
|
|
|
var mailPhoneRegx = require("js/passport/mail-phone-regx");
|
|
|
|
|
|
//checkbox status unicode
|
|
|
var checkbox = {
|
|
|
checked: '',
|
|
|
unchecked: ''
|
|
|
};
|
|
|
|
|
|
var emailAcTime;
|
|
|
|
|
|
require("jquery.placeholder");
|
|
|
|
|
|
|
|
|
//验证账户名
|
|
|
function validateAccount() {
|
|
|
var pass = false,
|
|
|
account = $.trim($account.val()),
|
|
|
err;
|
|
|
|
|
|
if (account !== '') {
|
|
|
if (/^[0-9]+$/.test(account)) {
|
|
|
|
|
|
//如果是纯数字,则作为手机号码处理
|
|
|
if (mailPhoneRegx.phoneRegx['+' + $countryCodeHide.val()].test(account)) {
|
|
|
pass = true;
|
|
|
} else {
|
|
|
pass = false;
|
|
|
err = '手机号码不正确,请重新输入';
|
|
|
}
|
|
|
} else {
|
|
|
if (mailPhoneRegx.emailRegx.test(account)) {
|
|
|
pass = true;
|
|
|
} else {
|
|
|
pass = false;
|
|
|
err = '邮箱格式不正确,请重新输入';
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
err = '请输入账户名';
|
|
|
}
|
|
|
|
|
|
if (pass) {
|
|
|
$accountTip.addClass('hide');
|
|
|
$account.removeClass('error');
|
|
|
} else {
|
|
|
$accountTip.removeClass('hide').children('em').text(err);
|
|
|
$account.addClass('error');
|
|
|
}
|
|
|
return pass;
|
|
|
}
|
|
|
|
|
|
//验证密码
|
|
|
function validatePassword() {
|
|
|
var pass = false,
|
|
|
password = $.trim($password.val()),
|
|
|
err;
|
|
|
|
|
|
if (password !== '') {
|
|
|
if (password.length < 6) {
|
|
|
err = '请输入长度为6-20字符的密码';
|
|
|
} else {
|
|
|
pass = true;
|
|
|
}
|
|
|
} else {
|
|
|
err = '请输入密码';
|
|
|
}
|
|
|
|
|
|
if (pass) {
|
|
|
$passwordTip.addClass('hide');
|
|
|
$password.removeClass('error');
|
|
|
} else {
|
|
|
$passwordTip.removeClass('hide').children('em').text(err);
|
|
|
$password.addClass('error');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//验证
|
|
|
function validate() {
|
|
|
var pass = true,
|
|
|
account = $.trim($account.val()),
|
|
|
password = $.trim($password.val());
|
|
|
|
|
|
if (account !== '') {
|
|
|
pass = validateAccount() && validatePassword();
|
|
|
} else {
|
|
|
pass = false;
|
|
|
$account.addClass('error');
|
|
|
|
|
|
if (password === '') {
|
|
|
|
|
|
//账户名和密码都为空的情况下点击登陆,只在账户输入框后显示错误提示
|
|
|
$accountTip.addClass('both-error').removeClass('hide').children('em').text('请输入账户名和密码');
|
|
|
$passwordTip.addClass('hide');
|
|
|
$password.addClass('error');
|
|
|
} else {
|
|
|
$accountTip.removeClass('hide').children('em').text('请输入账户名');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return pass;
|
|
|
}
|
|
|
|
|
|
$('[placeholder]').placeholder();
|
|
|
|
|
|
//展开地区列表
|
|
|
$('#country-code').on('click', function() {
|
|
|
if ($countryList.css('display') === 'none') {
|
|
|
$countryList.slideDown();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//选中地区列表项
|
|
|
$countryList.on('click', 'li', function() {
|
|
|
var $this = $(this),
|
|
|
cc = $this.data('cc');
|
|
|
|
|
|
$countryCodeEm.html($this.html());
|
|
|
|
|
|
$countryCodeHide.val(cc);
|
|
|
|
|
|
$countryList.slideUp();
|
|
|
});
|
|
|
|
|
|
//点击其他区域,收起区域列表
|
|
|
$(document).on('click', function(e) {
|
|
|
if ($(e.target).closest('#country-code').length > 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if ($countryList.css('display') === 'block') {
|
|
|
$countryList.slideUp();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//邮箱
|
|
|
$account.on('keyup', function() {
|
|
|
var account = $.trim($(this).val()),
|
|
|
html = '',
|
|
|
accountMatch,
|
|
|
matchStr,
|
|
|
postfix,
|
|
|
i;
|
|
|
|
|
|
//输入@时自动补全邮箱后缀
|
|
|
//此处>0非错误,用于避免输入的第一个字符为@被识别为邮箱
|
|
|
if (account.indexOf('@') > 0) {
|
|
|
accountMatch = account.match(/^[0-9]+@(.*)/);
|
|
|
if (accountMatch) {
|
|
|
|
|
|
//数字邮箱补全
|
|
|
postfix = mailPostfix.num;
|
|
|
} else {
|
|
|
postfix = mailPostfix.other;
|
|
|
}
|
|
|
|
|
|
matchStr = accountMatch[1];
|
|
|
for (i = 0; i < postfix.length; i++) {
|
|
|
if (postfix[i].indexOf(matchStr) > -1) {
|
|
|
html += '<li>' + account.slice(0, account.indexOf('@')) + '@' + postfix[i] + '</li>';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (html !== '') {
|
|
|
$emailAutoComplete.html(html).removeClass('hide');
|
|
|
} else {
|
|
|
|
|
|
//隐藏autocomplete
|
|
|
$emailAutoComplete.html('').addClass('hide');
|
|
|
}
|
|
|
}
|
|
|
}).on('blur', function() {
|
|
|
emailAcTime = setTimeout(function() {
|
|
|
$emailAutoComplete.addClass('hide');
|
|
|
|
|
|
//验证
|
|
|
validateAccount();
|
|
|
}, 200);
|
|
|
|
|
|
});
|
|
|
|
|
|
//密码
|
|
|
$password.on('blur', function() {
|
|
|
validatePassword();
|
|
|
}).on('keypress', function(e) {
|
|
|
var code = e.which,
|
|
|
isShift = e.shiftKey || (code === 16) || false;
|
|
|
|
|
|
//CapsLock检测
|
|
|
if ((!isShift && (code >= 65 && code <= 90)) ||
|
|
|
(isShift && (code >= 97 && code <= 122))) {
|
|
|
$capsLock.removeClass('hide');
|
|
|
return;
|
|
|
}
|
|
|
$capsLock.addClass('hide');
|
|
|
});
|
|
|
|
|
|
//邮箱自动完成列表项点击
|
|
|
$emailAutoComplete.on('click', 'li', function() {
|
|
|
clearTimeout(emailAcTime); //清空默认关闭
|
|
|
|
|
|
$account.val($(this).text()).focus();
|
|
|
|
|
|
$emailAutoComplete.addClass('hide');
|
|
|
});
|
|
|
|
|
|
//记住登录状态
|
|
|
$('.remeber-me').on('click', function() {
|
|
|
var $this = $(this);
|
|
|
|
|
|
$this.toggleClass('checked');
|
|
|
|
|
|
if ($this.hasClass('checked')) {
|
|
|
$this.children('i').html(checkbox.checked);
|
|
|
} else {
|
|
|
$this.children('i').html(checkbox.unchecked);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//focus到输入框则隐藏错误提示和样式
|
|
|
$('.va').on('focus', function() {
|
|
|
var $this = $(this);
|
|
|
|
|
|
$this.removeClass('error');
|
|
|
|
|
|
$this.siblings('.err-tip').addClass('hide');
|
|
|
});
|
|
|
|
|
|
//登录
|
|
|
$('#login-btn').on('click', function() {
|
|
|
var pass = validate();
|
|
|
|
|
|
if (pass) {
|
|
|
$('#login-form').submit();
|
|
|
}
|
|
|
/**
|
|
|
* 登录
|
|
|
* @author: xuqi<qi.xu@yoho.cn>
|
|
|
* @date: 2015/12/11
|
|
|
*/
|
|
|
var $ = require("jquery");
|
|
|
|
|
|
var mailPostfix = {
|
|
|
num: ['qq.com', '163.com', '126.com', 'sina.com', 'gmail.com', 'sohu.com', 'hotmail.com', '139.com', '189.com'],
|
|
|
other: ['gmail.com', 'qq.com', '163.com', '126.com', 'sina.com', 'sohu.com', 'hotmail.com', '139.com', '189.com']
|
|
|
};
|
|
|
|
|
|
var $account = $('#account'),
|
|
|
$password = $('#password');
|
|
|
|
|
|
var $accountTip = $account.siblings('.err-tip'),
|
|
|
$passwordTip = $password.siblings('.err-tip'),
|
|
|
$capsLock = $('#caps-lock');
|
|
|
|
|
|
var $countryCodeHide = $('#country-code-hide'),
|
|
|
$countryCodeEm = $('#country-code > em'),
|
|
|
$countryList = $('#country-list');
|
|
|
|
|
|
var $emailAutoComplete = $('#email-autocomplete');
|
|
|
|
|
|
var mailPhoneRegx = require("js/passport/mail-phone-regx");
|
|
|
|
|
|
//checkbox status unicode
|
|
|
var checkbox = {
|
|
|
checked: '',
|
|
|
unchecked: ''
|
|
|
};
|
|
|
|
|
|
var authing = false;
|
|
|
|
|
|
var emailAcTime;
|
|
|
|
|
|
require("jquery.placeholder");
|
|
|
|
|
|
|
|
|
//验证账户名
|
|
|
function validateAccount() {
|
|
|
var pass = false,
|
|
|
account = $.trim($account.val()),
|
|
|
err;
|
|
|
|
|
|
if (account !== '') {
|
|
|
if (/^[0-9]+$/.test(account)) {
|
|
|
|
|
|
//如果是纯数字,则作为手机号码处理
|
|
|
if (mailPhoneRegx.phoneRegx[$countryCodeHide.val()].test(account)) {
|
|
|
pass = true;
|
|
|
} else {
|
|
|
pass = false;
|
|
|
err = '手机号码不正确,请重新输入';
|
|
|
}
|
|
|
} else {
|
|
|
if (mailPhoneRegx.emailRegx.test(account)) {
|
|
|
pass = true;
|
|
|
} else {
|
|
|
pass = false;
|
|
|
err = '邮箱格式不正确,请重新输入';
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
err = '请输入账户名';
|
|
|
}
|
|
|
|
|
|
if (pass) {
|
|
|
$accountTip.addClass('hide');
|
|
|
$account.removeClass('error');
|
|
|
} else {
|
|
|
$accountTip.removeClass('hide').children('em').text(err);
|
|
|
$account.addClass('error');
|
|
|
}
|
|
|
return pass;
|
|
|
}
|
|
|
|
|
|
//验证密码
|
|
|
function validatePassword() {
|
|
|
var pass = false,
|
|
|
password = $.trim($password.val()),
|
|
|
err;
|
|
|
|
|
|
if (password !== '') {
|
|
|
if (password.length < 6) {
|
|
|
err = '请输入长度为6-20字符的密码';
|
|
|
} else {
|
|
|
pass = true;
|
|
|
}
|
|
|
} else {
|
|
|
err = '请输入密码';
|
|
|
}
|
|
|
|
|
|
if (pass) {
|
|
|
$passwordTip.addClass('hide');
|
|
|
$password.removeClass('error');
|
|
|
} else {
|
|
|
$passwordTip.removeClass('hide').children('em').text(err);
|
|
|
$password.addClass('error');
|
|
|
}
|
|
|
return pass;
|
|
|
}
|
|
|
|
|
|
//验证
|
|
|
function validate() {
|
|
|
var pass = true,
|
|
|
account = $.trim($account.val()),
|
|
|
password = $.trim($password.val());
|
|
|
|
|
|
if (account !== '') {
|
|
|
pass = validateAccount() && validatePassword();
|
|
|
} else {
|
|
|
pass = false;
|
|
|
$account.addClass('error');
|
|
|
|
|
|
if (password === '') {
|
|
|
|
|
|
//账户名和密码都为空的情况下点击登陆,只在账户输入框后显示错误提示
|
|
|
$accountTip.addClass('both-error').removeClass('hide').children('em').text('请输入账户名和密码');
|
|
|
$passwordTip.addClass('hide');
|
|
|
$password.addClass('error');
|
|
|
} else {
|
|
|
$accountTip.removeClass('hide').children('em').text('请输入账户名');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return pass;
|
|
|
}
|
|
|
|
|
|
$('[placeholder]').placeholder();
|
|
|
|
|
|
//展开地区列表
|
|
|
$('#country-code').on('click', function() {
|
|
|
if ($countryList.css('display') === 'none') {
|
|
|
$countryList.slideDown();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//选中地区列表项
|
|
|
$countryList.on('click', 'li', function() {
|
|
|
var $this = $(this),
|
|
|
cc = $this.data('cc');
|
|
|
|
|
|
$countryCodeEm.html($this.html());
|
|
|
|
|
|
$countryCodeHide.val(cc);
|
|
|
|
|
|
$countryList.slideUp();
|
|
|
});
|
|
|
|
|
|
//点击其他区域,收起区域列表
|
|
|
$(document).on('click', function(e) {
|
|
|
if ($(e.target).closest('#country-code').length > 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if ($countryList.css('display') === 'block') {
|
|
|
$countryList.slideUp();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//邮箱
|
|
|
$account.on('keyup', function() {
|
|
|
var account = $.trim($(this).val()),
|
|
|
html = '',
|
|
|
accountMatch,
|
|
|
matchStr,
|
|
|
postfix,
|
|
|
i;
|
|
|
|
|
|
//输入@时自动补全邮箱后缀
|
|
|
//此处>0非错误,用于避免输入的第一个字符为@被识别为邮箱
|
|
|
if (account.indexOf('@') > 0) {
|
|
|
accountMatch = account.match(/^[0-9]+@(.*)/);
|
|
|
if (accountMatch) {
|
|
|
|
|
|
//数字邮箱补全
|
|
|
postfix = mailPostfix.num;
|
|
|
} else {
|
|
|
postfix = mailPostfix.other;
|
|
|
}
|
|
|
|
|
|
matchStr = accountMatch[1];
|
|
|
for (i = 0; i < postfix.length; i++) {
|
|
|
if (postfix[i].indexOf(matchStr) > -1) {
|
|
|
html += '<li>' + account.slice(0, account.indexOf('@')) + '@' + postfix[i] + '</li>';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (html !== '') {
|
|
|
$emailAutoComplete.html(html).removeClass('hide');
|
|
|
} else {
|
|
|
|
|
|
//隐藏autocomplete
|
|
|
$emailAutoComplete.html('').addClass('hide');
|
|
|
}
|
|
|
}
|
|
|
}).on('blur', function() {
|
|
|
emailAcTime = setTimeout(function() {
|
|
|
$emailAutoComplete.addClass('hide');
|
|
|
|
|
|
//验证
|
|
|
validateAccount();
|
|
|
}, 200);
|
|
|
|
|
|
});
|
|
|
|
|
|
//密码
|
|
|
$password.on('blur', function() {
|
|
|
validatePassword();
|
|
|
}).on('keypress', function(e) {
|
|
|
var code = e.which,
|
|
|
isShift = e.shiftKey || (code === 16) || false;
|
|
|
|
|
|
//CapsLock检测
|
|
|
if ((!isShift && (code >= 65 && code <= 90)) ||
|
|
|
(isShift && (code >= 97 && code <= 122))) {
|
|
|
$capsLock.removeClass('hide');
|
|
|
return;
|
|
|
}
|
|
|
$capsLock.addClass('hide');
|
|
|
});
|
|
|
|
|
|
//邮箱自动完成列表项点击
|
|
|
$emailAutoComplete.on('click', 'li', function() {
|
|
|
clearTimeout(emailAcTime); //清空默认关闭
|
|
|
|
|
|
$account.val($(this).text()).focus();
|
|
|
|
|
|
$emailAutoComplete.addClass('hide');
|
|
|
});
|
|
|
|
|
|
//记住登录状态
|
|
|
$('.remeber-me').on('click', function() {
|
|
|
var $this = $(this);
|
|
|
|
|
|
$this.toggleClass('checked');
|
|
|
|
|
|
if ($this.hasClass('checked')) {
|
|
|
$this.children('i').html(checkbox.checked);
|
|
|
} else {
|
|
|
$this.children('i').html(checkbox.unchecked);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//focus到输入框则隐藏错误提示和样式
|
|
|
$('.va').on('focus', function() {
|
|
|
var $this = $(this);
|
|
|
|
|
|
$this.removeClass('error');
|
|
|
|
|
|
$this.siblings('.err-tip').addClass('hide');
|
|
|
});
|
|
|
|
|
|
//登录
|
|
|
$('#login-btn').on('click', function() {
|
|
|
var pass = validate();
|
|
|
|
|
|
if (pass && authing === false) {
|
|
|
authing = true;
|
|
|
|
|
|
$.ajax({
|
|
|
url: '/passport/login/auth',
|
|
|
type: 'POST',
|
|
|
data: {
|
|
|
areaCode: $countryCodeHide.val().replace('+', ''),
|
|
|
account: $.trim($account.val()),
|
|
|
password: $.trim($password.val())
|
|
|
},
|
|
|
success: function(data) {
|
|
|
if (data.code === 400) {
|
|
|
$passwordTip.removeClass('hide').children('em').text(data.message);
|
|
|
$password.addClass('error');
|
|
|
return;
|
|
|
} else {
|
|
|
location.href = data.data.href;
|
|
|
}
|
|
|
},
|
|
|
complete: function() {
|
|
|
authing = false;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
define("js/passport/reset", ["jquery","jquery.placeholder"], function(require, exports, module){
|
...
|
...
|
|