back.js 5.05 KB
/**
 * 找回密码
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/14
 */

var $ = require('yoho-jquery');

var regx = require('../common/mail-phone-regx');

var Captcha = require('../../plugins/captcha');

var emailAc = require('../common/ac-email'); // 邮箱自动完成

var emailReg = regx.emailRegx,
    phoneRegx = regx.phoneRegx;

var $cr = $('#country-code-hide'),
    $phoneNum = $('#phone-num'),
    $ca = $('#captcha'),
    $ccList = $('#country-code-list'),
    $cc = $('#country-code'),
    $btn = $('#find-btn'),
    $accErr = $('#account-err'),
    caCount = 4, // 验证码位数
    hasPh = false,
    captcha = new Captcha('#captcha-img').init();

require('../../simple-header');
require('yoho-jquery-placeholder');
require('../../common/promise');
require('../../common');

function authcode() {
    return $.ajax({
        type: 'POST',
        url: '/passport/back/authcode',
        data: {
            verifyCode: captcha.getResults(),
            phoneNum: $phoneNum.val(),
            area: $cr.val()
        }

    }).then(function(data) {
        if (data.code === 200) {
            $('#captcha-value').val(captcha.getResults());
            return $.Deferred().resolve().promise(); //eslint-disable-line
        } else if (data.code === 402) {
            $accErr.removeClass('hide').find('em').text('该账号不存在');
            $phoneNum.addClass('error');
            return $.Deferred().reject().promise();//eslint-disable-line
        } else if (data.code === 405) {
            captcha.showTip(data.message);
            return $.Deferred().reject().promise();//eslint-disable-line
        }
    });
}

function vaPn(v) {
    var pass = true,
        errTxt = '';

    v = $.trim(v);
    if (v !== '') {
        if (/^[0-9]+$/.test(v)) {
            if (phoneRegx[$cr.val()].test(v)) {
                pass = true;
            } else {
                errTxt = '手机号码格式不正确, 请重新输入';
                pass = false;
            }
        } else {
            if (emailReg.test(v)) {
                pass = true;
            } else {
                errTxt = '邮箱格式不正确, 请重新输入';
                pass = false;
            }
        }
    } else {
        errTxt = '账户名不能为空';
        pass = false;
    }
    hasPh = pass;

    return {
        pass: pass,
        errTxt: errTxt
    };
}

function validatePhone() {
    var pnVa = vaPn($phoneNum.val());

    if (pnVa.pass) {
        $accErr.addClass('hide');
        $phoneNum.removeClass('error');
    } else {
        $accErr.removeClass('hide').find('em').text(pnVa.errTxt);
        $phoneNum.addClass('error');
    }

    return pnVa.pass;
}

emailAc($phoneNum, function() {
    validatePhone();
});

$ca.attr('maxlength', caCount);

// IE8 placeholder
$('input').placeholder();

$cc.on('click', function(e) {
    e.stopPropagation();
    if ($ccList.css('style') === 'block') {
        $ccList.slideUp('fast');
    } else {
        $ccList.slideDown('fast');
    }
});

$ccList.delegate('li', 'click', function(e) {
    var $cur = $(this),
        code = $cur.data('cc'),
        pnVa;

    e.stopPropagation();
    $cr.val(code);
    $cc.find('em').html($cur.text());

    // 切换后验证手机号码
    if ($.trim($phoneNum.val()) !== '') {
        pnVa = vaPn($phoneNum.val());
        if (hasPh) {
            $accErr.addClass('hide');
            $phoneNum.removeClass('error');
        } else {
            $accErr.removeClass('hide').text(pnVa.errTxt);
            $phoneNum.addClass('error');
        }
    }
    $ccList.slideUp('fast');
});

$(document).click(function() {
    if ($ccList.css('display') === 'block') {
        $ccList.slideUp();
    }
});

$phoneNum.keyup(function() {
    vaPn($.trim($(this).val()));
}).focus(function() {
    $(this).removeClass('error');

    // focus隐藏错误提示
    $accErr.addClass('hide');
});

// 下一步
$btn.click(function(e) {
    if (!validatePhone()) {
        return;
    }

    if (!captcha.getResults()) {
        captcha.showTip();
        return;
    }

    if (/^[0-9]+$/.test($.trim($phoneNum.val()))) {
        $('#find-form').attr('action', '/passport/back/mobile');
    }

    $('#captcha-value').val(captcha.getResults());

    if (hasPh) {
        authcode().then(function() {
            $.post($('#back-form').attr('action'), {
                phoneNum: $('#phone-num').val(),
                area: $('#country-code-hide').val()
            }).then(function(result) {
                if (result.code === 200) {
                    window.jumpUrl(result.data.refer);
                    return;
                }

                if (result.code === 405) {
                    captcha.showTip(result.message);
                    $accErr.addClass('hide');
                    $phoneNum.removeClass('error');
                    return;
                }

                $accErr.removeClass('hide').find('em').text(result.message);
                $phoneNum.addClass('error');
            });
        });
    }

    e.preventDefault();
    return true;
});

captcha.onSuccess(function() {
    $btn.triggerHandler('click');
});