order.js 5.54 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'),
    Swiper = require('yoho.iswiper');

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,
    $reaMask = $('.reason-mask'),
    reasonSwiper;

//加载订单
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');

    $reaMask.data('orderId', 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) {
        console.log('s');
        $reaMask.css('visibility', 'visible');
    } 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();

$(function() {
    reasonSwiper = new Swiper('.box-main', {
        paginationClickable: true,
        direction: 'vertical',
        slidesPerView: 4,
        effect: 'coverflow',
        centeredSlides: true,
        initialSlide: 2
    });
});

$reaMask.find('.box-cmp').on('touchend', function(e) {
    var selSolid = reasonSwiper.slides[reasonSwiper.activeIndex],
        reason = $(selSolid).text(),
        reasonId = $(selSolid).data('reasonId');

    $.ajax({
        type: 'GET',
        url: '/home/cancelOrder',
        data: {
            id: $reaMask.data('orderId'),
            reason: reason,
            reasonId: reasonId
        }
    }).then(function(res) {
        $reaMask.fadeOut();
        if ($.type(res) !== 'object') {
            return;
        }
        if (res.message) {
            tip.show(res.message);
        }
        setTimeout(function() {
            window.location.href = '/home/orders';
        }, 2000);
    }).fail(function() {
        tip.show('网络错误');
    });
});

$reaMask.on('touchend', function(event) {
    if (event.target.className !== 'reason-mask') {
        return false;
    }

    $reaMask.css('visibility', 'hidden');
    event.stopPropagation();
});