select-coupon.js 4.34 KB
/**
 * 优惠券选择
 * @author: bikai<kai.bi@yoho.cn>
 * @date: 2015/12/10
 */

var $ = require('jquery'),
    Handlebars = require('yoho.handlebars'),
    ellipsis = require('mlellipsis'),
    loading = require('../plugin/loading'),
    tip = require('../plugin/tip'),
    orderInfo = require('./order-info').orderInfo;

var page = 1,
    canGetCoupon = true,
    isGetData;

var conponTmpl = Handlebars.compile($('#tmpl-coupon').html()),
    $newCoupon = $('#new-coupon');

// conponNotAvaliableTmpl = Handlebars.compile($('#tmpl-coupon-not-avaliable').html()),

ellipsis.init();

$newCoupon.on('submit', function() {
    var $this = $(this);

    if (!$this.find('[name="couponCode"]').val()) {
        tip.show('请输入优惠券码');
        return false;
    }
    $.ajax({
        method: 'POST',
        url: '/cart/index/couponSearch',
        data: $this.serialize()
    }).then(function(res) {
        if (res.code === 200) {
            tip.show('优惠券可用');
            orderInfo('couponCode', res.data.coupon_code);
            orderInfo('couponValue', res.data.coupon_value);
            window.location.href = '/cart/index/orderEnsure';
        } else {
            tip.show(res.message || '网络错误');
        }
    }).fail(function() {
        tip.show('网络错误');
    });
    return false;
});

$('#coupon-list').on('touchend', '.employ-main', function() {
    var $this = $(this);

    orderInfo('couponCode', $this.data('coupon-code'));
    orderInfo('couponValue', $this.data('coupon-value'));
});

$('body').on('touchend', '.not-use', function() {
    orderInfo('couponCode', null);
    orderInfo('couponValue', null);
});


$newCoupon.find('input').on('input', function() {
    if ($(this).val() !== '') {
        $newCoupon.find('.submit').css('background', '#444');
    } else {
        $newCoupon.find('.submit').css('background', '#b0b0b0');
    }
});

function getCouponHandle(coupons) {
    var notAvailableCoupons = [];

    // 后端需要返回一个 coupons 列表,如下
    // notAvailable 表示不可用的优惠券
    // coupons = [{
    //     money: '99',
    //     coupon_name: '满XX-减去吴悠右腿有益于有2222',
    //     couponValidity: '20150129-20150430',
    //     coupon_id: '22222'
    // }, {
    //     money: '99',
    //     coupon_name: '满XX-减去吴悠右腿有益于有2222',
    //     couponValidity: '20150129-20150430',
    //     coupon_id: '2222233'
    // }, {
    //     money: '99',
    //     coupon_name: 'NONO满XX-减去吴悠右腿有益于有2222',
    //     couponValidity: '20150129-20150430',
    //     coupon_id: '2222233',
    //     notAvailable: 1
    // }];

    // coupons 是个列表,如果不是列表,可能是服务器错误,这次翻页加载不算
    if (!$.isArray(coupons)) {
        page--;
        return;
    }

    // 每页10张,当不足10张时,说明已经加载完
    if (coupons.length < 10) {
        canGetCoupon = false;
    }

    // 第一页张数为 0 ,显示优惠券为空
    if (!coupons.length && page === 2) {
        $('.coupin-wrap').html($('#tmpl-no-coupon').html());
        return;
    }

    // 把不可用的优惠券分离出来
    $.each(coupons, function(i, coupon) {
        if (coupon.notAvailable) {
            notAvailableCoupons.push(coupon);
        }
    });

    $('#coupon-list').append(conponTmpl({
        coupons: coupons
    }));

    // 产品说,暂时不做不可使用的优惠券
    // if (notAvailableCoupons.length) {
    //     $('.not-avaliable-coupon-line').show();
    // }
    // $('#coupon-list-not').append(conponNotAvaliableTmpl({
    //     notAvailableCoupons: notAvailableCoupons
    // }));
    window.rePosFooter();
}

function getCouponDate() {
    if (!canGetCoupon) {
        return;
    }

    if (isGetData) {
        return;
    }

    loading.showLoadingMask();
    page += 1;
    isGetData = true;

    $.ajax({
        type: 'POST',
        url: '/cart/index/couponList',
        dataType: 'json',
        data: {
            page: page
        }
    }).then(getCouponHandle).fail(function() {
        page -= 1;
        tip.show('加载优惠券失败');
    }).always(function() {
        isGetData = false;
        loading.hideLoadingMask();
    });
}

getCouponDate();

$(window).scroll(function() {
    if ($(window).scrollTop() + $(window).height() > $('body').height() * 0.9) {
        getCouponDate();
    }
});