address.js 4.78 KB
/**
 * 地址管理
 * @author: bikai<kai.bi@yoho.cn>
 * @date: 2015/11/17
 */

var $ = require('jquery'),
    tip = require('../plugin/tip');

var $action = $('.action'),
    $addressForm = $('.edit-address'),
    $submit = $('.submit'),
    $addAddress = $('.add-address'),
    $editAddressPage = $('.my-edit-address-page'),
    $addressListPage = $('.my-address-list-page'),
    $area = $('.area'),
    $footer = $('#yoho-footer'),
    $confim = $('.confim-mask'),
    $pageWrap = $('.page-wrap'),
    $backBtn = $('.nav-back'),
    isSubmiting,
    deleteId,
    currentPage = 'address',
    newArea = [];

// 清除原有链接
$backBtn.attr('href', 'javascript:void(0);');

// 自定义事件
$backBtn.on('touchend', function(e) {
    if (currentPage === 'edit') {
        $pageWrap.hide();
        $pageWrap.first().show();
        e.preventDefault();
        currentPage = 'address';
    } else if (currentPage === 'list') {
        $pageWrap.hide();
        $editAddressPage.show();
        e.preventDefault();
        currentPage = 'edit';
    } else {
        window.history.go(-1);
    }
});

function editAddress(data) {
    data = data || {};
    $addressForm.find('[name="id"]').val(data.id || '');
    $addressForm.find('[name="consignee"]').val(data.consignee || '');
    $addressForm.find('[name="mobile"]').val(data.mobile || '');
    $addressForm.find('[name="area_code"]').val(data.areaCode || '');
    $addressForm.find('[name="area"]').val(data.area || '');
    $addressForm.find('[name="address"]').val(data.address || '');

    currentPage = 'edit';
    $footer.hide();
    $pageWrap.hide();
    $editAddressPage.show();
}

$confim.on('touchend', '.cancel', function() {
    deleteId = null;
    $confim.hide();
}).on('touchend', '.confim', function() {
    $.ajax({
        method: 'POST',
        url: '/home/deladdress',
        data: {
            id: deleteId
        }
    }).then(function(res) {
        if ($.type(res) !== 'object') {
            res = {};
        }
        if (res.code !== 200) {
            tip.show(res.message || '网络出了点问题~');
        } else {
            window.location.reload();
        }
    }).fail(function() {
        tip.show('网络出了点问题~');
    }).always(function() {
        deleteId = null;
        $confim.hide();
    });
});

// 添加地址
$addAddress.on('touchend', function() {
    editAddress();
});

// 编辑或删除
$action.on('touchend', '.edit', function() {
    editAddress($(this).data());
}).on('touchend', '.del', function() {
    deleteId = $(this).data('id');
    $confim.show();
});

$submit.on('touchend', function() {
    $addressForm.submit();
    return false;
});

$addressForm.on('submit', function() {
    if (isSubmiting) {
        return false;
    }

    // 简单的表单校验
    if (!$(this).find('[name="consignee"]').val()) {
        tip.show('收件人不能为空');
        $(this).find('[name="consignee"]').focus();
        return false;
    }
    if (!$(this).find('[name="mobile"]').val()) {
        tip.show('手机号不能为空');
        $(this).find('[name="mobile"]').focus();
        return false;
    }
    if (!$(this).find('[name="area_code"]').val() || !$(this).find('[name="area"]').val()) {
        tip.show('省市区不能为空');
        return false;
    }
    if (!$(this).find('[name="address"]').val()) {
        tip.show('地址不能为空');
        $(this).find('[name="address"]').focus();
        return false;
    }

    isSubmiting = true;
    $.ajax({
        method: 'POST',
        url: '/home/saveaddress',
        data: $(this).serialize()
    }).then(function(res) {
        if ($.type(res) !== 'object') {
            res = {};
        }
        if (res.code !== 200) {
            tip.show(res.message || '网络出了点问题~');
        } else {
            window.location.reload();
        }
    }).fail(function() {
        tip.show('网络出了点问题~');
    }).always(function() {
        isSubmiting = false;
    });
    return false;
});

// 省市区
$area.on('touchend', function() {
    $footer.hide();
    $pageWrap.hide();
    $addressListPage.show();
    currentPage = 'list';
});

$addressListPage.on('touchend', '.address', function() {
    var caption = $(this).children('.caption').text();

    newArea.push(caption);
    $(this).siblings().hide();
    $(this).children('ul').show();
    return false;
}).on('touchend', '.address-last', function() {

    // 填结果到 html
    newArea.push($(this).children('.caption').text());
    $('[name="area"]').val(newArea.join(' '));
    $('[name="area_code"]').val($(this).data('id'));

    $editAddressPage.show();
    currentPage = 'edit';

    // 恢复默认的三级选择
    $addressListPage.hide();
    $addressListPage.find('ul').hide();
    $addressListPage.children('ul').show().children('li').show();
    newArea = [];
    return false;
});