order.js 5.1 KB
/**
 * 个人中心--我的订单
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/10
 */

var $ = require('jquery'),
    Hammer = require('yoho.hammer'),
    lazyLoad = require('yoho.lazyload'),
    tip = require('../plugin/tip');

var $navLi = $('#order-nav > li'),
    $orderContainer = $('#order-container');

var $curContainer = $orderContainer.children('.orders:not(.hide)');//保存当前显示的order-container

var winH = $(window).height();

var activeType = $navLi.filter('.active').data('type'); //当前active的项的index

var order = {
    page: 0,
    end: false
};

var inAjax = false;

var loading = require('../plugin/loading');

var dialog = require('./dialog');

var orderHammer;

//加载订单
function getOrders(option) {
    var opt = {
        type: activeType,
        page: order.page + 1
    };

    var show = option && !option.noLoadingMask;

    if (inAjax) {
        return;
    }

    inAjax = true;
    show && loading.showLoadingMask();

    $.ajax({
        type: 'GET',
        url: '/home/getOrders',
        data: opt,
        success: function(data) {
            var num;

            if (data !== ' ') {
                order.page = opt.page;

                if (opt.page === 1) {
                    $curContainer.html(data);
                    lazyLoad($curContainer.find('.lazy'), {
                        try_again_css: 'order-failure'
                    });
                } else {
                    num = $curContainer.children('.order').length;
                    $curContainer.append(data);

                    //lazyload
                    lazyLoad($curContainer.children('.order:gt(' + (num - 1) + ')').find('.lazy'), {
                        try_again_css: 'order-failure'
                    });
                }

                window.rePosFooter(); //重新计算底部位置
            } else {
                order.end = true;
            }

            inAjax = false;
            show && loading.hideLoadingMask();
        }
    });
}

lazyLoad({
    try_again_css: 'order-failure'
});

//初始化导航
(function() {
    var liCount = $navLi.length;

    //默认4个导航项
    if (liCount === 4) {
        return;
    }

    $navLi.width(100 / liCount + '%');
}());

loading.init($('body')); //满屏loading

//点击订单区域跳转订单详情页
orderHammer = new Hammer(document.getElementById('order-container'));
orderHammer.on('tap', function(e) {
    var $cur = $(e.target),
        $order,
        id,
        url;

    if ($cur.closest('.locHref').length > 0) {
        return;
    }

    $order = $cur.closest('.order');
    id = $order.data('id');

    if ($cur.closest('.del').length > 0) {

        //Order delete
        dialog.showDialog({
            dialogText: '确定删除订单吗?',
            hasFooter: {
                leftBtnText: '取消',
                rightBtnText: '确定'
            }
        }, function() {
            $.ajax({
                type: 'GET',
                url: '/home/delOrder',
                data: {
                    id: id
                },
                success: function(data) {
                    dialog.hideDialog();
                    if (data.message) {
                        tip.show(data.message);
                    }
                    if (data.code === 200) {

                        //删除订单页面刷新
                        window.location.reload();
                    }
                },
                error: function() {
                    tip.show('取消订单失败');
                }
            });
        });
    } else if ($cur.closest('.cancel').length > 0) {

        //Order cancel
        dialog.showDialog({
            dialogText: '确定取消订单吗?',
            hasFooter: {
                leftBtnText: '取消',
                rightBtnText: '确定'
            }
        }, function() {
            $.ajax({
                type: 'GET',
                url: '/home/cancelOrder',
                data: {
                    id: id
                },
                success: function(data) {
                    if (data.message) {
                        tip.show(data.message);
                    }
                    if (data.code === 200) {

                        //取消订单页面刷新
                        setTimeout(function() {
                            window.location.reload();
                        }, 2000);
                    }
                },
                error: function() {
                    tip.show('取消订单失败');
                }
            });
        });
    } else if ($cur.closest('.order-goods').length > 0) {

        //Location to order detail
        url = $order.data('href');
        location.href = url;
    }
});

function scrollHandler() {
    if (order.end === false && $(window).scrollTop() + winH >
        $(document).height() - 0.25 * $orderContainer.height()) {

        //下拉请求时不显示mask
        getOrders({
            noLoadingMask: true
        });
    }
}

//srcoll to load more
$(window).scroll(function() {
    window.requestAnimationFrame(scrollHandler);
});

//初始化请求第一页数据
getOrders();