login.js 3.56 KB
/**
 * 登录
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/9/30
 */
var $ = require('yoho-jquery');
var SlideUnlock = require('plugin/slideunlock');

var $account = $('#account'),
    $pwd = $('#pwd'),
    $loginBtn = $('#btn-login'),

    $mask = $('#retrive-pwd-mask'),
    $ways = $('#retrive-pwd-ways'),

    slideUnlock,

    accPass = false,
    pwdPass = false;

var api = require('../api');
var tip = require('../../plugin/tip');

var trim = $.trim;
var showErrTip = tip.show;

// 登录按钮状态切换
function switchLoginBtnStatus() {
    var bool = true;

    bool = slideUnlock ?
        !(slideUnlock.isOk && accPass && pwdPass) :
        !(accPass && pwdPass);

    $loginBtn.toggleClass('disable', bool);
}

function resetForm() {
    $pwd.val('').focus();
    $loginBtn.text('登录').addClass('disable');
}

// 显示找回密码面板
function showRetrivePanel() {
    $mask.show();
    $ways.show();
}

// 隐藏找回密码面板
function hideRetrivePanel() {
    $mask.hide();
    $ways.hide();
}

// 密码显示与隐藏
api.bindEyesEvt();

// 清空账号输入框
api.bindClearEvt();

$account.bind('input', function() {
    if (trim($account.val()) !== '') {
        accPass = true;
    } else {
        accPass = false;
    }
    switchLoginBtnStatus();
});

$pwd.bind('input', function() {
    if (trim($pwd.val()) === '') {
        pwdPass = false;
    } else {
        pwdPass = true;
    }
    switchLoginBtnStatus();
});


// Login
$loginBtn.on('touchstart', function() {
    var acc = trim($account.val()),
        pwd = trim($pwd.val());

    if ($loginBtn.hasClass('disable')) {
        return;
    }

    $loginBtn.text('正在登录...').addClass('disable');

    // 验证账号(数字或者邮箱)和密码合理性
    if ((/^[0-9]+$/.test(acc) || api.emailRegx.test(acc)) && api.pwdValidate(pwd)) {
        $.ajax({
            type: 'POST',
            url: '/passport/login/auth',
            data: {
                account: acc,
                password: pwd
            },
            success: function(data) {
                var res;

                if (data.code === 200) {
                    res = data.data;

                    showErrTip('登录成功');
                    location.href = res.href;
                    $loginBtn.text('登录成功').off();
                } else {
                    if (!slideUnlock && data.slideUnlock) {
                        slideUnlock = new SlideUnlock('#js-slideunlock', {}, switchLoginBtnStatus);
                        slideUnlock.init();
                    } else {
                        slideUnlock && slideUnlock.reset();
                    }

                    showErrTip(data.message);
                    resetForm();
                }
            },
            error: function() {
                showErrTip('网络断开连接啦~');
                slideUnlock && slideUnlock.reset();
                $loginBtn.text('登录');
            }
        });
    } else {
        showErrTip('账号或密码有错误,请重新输入');
        $loginBtn.text('登录').removeClass('disable');
    }
});


$('#forget-pwd').on('touchstart', function() {
    showRetrivePanel();
});

$mask.on('touchstart', function() {
    hideRetrivePanel();
});

$('#cancel-retrive').on('touchstart', function(e) {
    e.preventDefault();
    hideRetrivePanel();
});

if ($('#js-slideunlock').data('init') === true) {
    slideUnlock = new SlideUnlock('#js-slideunlock', {}, switchLoginBtnStatus);
    slideUnlock.init();
}

// 对初始有默认值的情况去初始化登录按钮状态
$account.trigger('input');
$pwd.trigger('input');