select-coupon.page.js 5.47 KB
/**
 * 优惠券选择
 * @author: bikai<kai.bi@yoho.cn>
 * @date: 2015/12/10
 */
require('cart/select-coupon.page.css');
let $ = require('yoho-jquery'),
    loading = require('plugin/loading'),
    tip = require('plugin/tip'),
    conponTmpl = require('cart/select-coupon/coupon.hbs'),
    conponNotAvaliableTmpl = require('cart/select-coupon/coupon-not-avaliable.hbs'),
    orderInfo = require('./order-info').orderInfo;

let isGetData;

let $newCoupon = $('#new-coupon');
let $couponAvailable = $('#couponAvailable');
let $couponUnavailable = $('#couponUnavailable');
let $useCoupon = $('#useCoupon');
let $notUseCoupon = $('#notUseCoupon');

let winH = $(window).height();
let linkUrl = document.referrer;

require('common');
require('cart/cartbuynow/select-coupon');

function fixedLayOut() {
    let $null = $('.null'),
        navH = $('.nav-title').height(),
        nullH = $null.height();

    if ($null.length === 0) {
        return false;
    }

    $null.css({
        top: winH / 2 - nullH / 2 + navH
    });
}

function goToBack() {
    if (linkUrl) {
        window.location.href = linkUrl;
    } else {
        history.go(-1);
    }
}

/**
 * 输入优惠券码兑换优惠券
 */
$newCoupon.on('submit', function() {
    let $this = $(this);

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

/**
 * 使用优惠券
 */
$useCoupon.on('click', function() {
    let couponCodeArray = [];

    if (orderInfo('usable_usual_code')) {
        couponCodeArray.push(orderInfo('usable_usual_code'));
    }

    if (orderInfo('usable_free_code')) {
        couponCodeArray.push(orderInfo('usable_free_code'));
    }

    orderInfo('couponCode', couponCodeArray.join(','));

    if (couponCodeArray.length > 0) {
        goToBack();
    } else {
        tip.show('请选择优惠券');
    }
});

/**
 * 不使用优惠券
 */
$notUseCoupon.on('click', function() {
    orderInfo('couponCode', null);
    orderInfo('usable_usual_code', null);
    orderInfo('usable_free_code', null);
    goToBack();
});

/**
 * 优惠券列表处理
 * @param {*} allCoupons
 */
function getCouponHandle(allCoupons) {
    let availableCoupons = allCoupons.availableCoupons;
    let usableFreesCoupons = allCoupons.usableFreesCoupons;
    let notAvailableCoupons = allCoupons.notAvailableCoupons;

    $.each(availableCoupons, function(i, coupon) {
        coupon.couponValue = Math.floor(coupon.couponValue);
    });

    $.each(usableFreesCoupons, function(i, coupon) {
        coupon.couponValue = Math.floor(coupon.couponValue);
    });

    $.each(notAvailableCoupons, function(i, coupon) {
        coupon.couponValue = Math.floor(coupon.couponValue);
    });

    $couponUnavailable.append(conponNotAvaliableTmpl({
        notAvailableCoupons: notAvailableCoupons
    }));

    // 没有优惠券
    if (!(availableCoupons.length || usableFreesCoupons.length)) {
        $('#couponAvailable').html($('#tmplNoCoupon').html());
        fixedLayOut();
        return false;
    }

    // 渲染可用的优惠券
    $couponAvailable.append(conponTmpl({
        availableCoupons: availableCoupons,
        usableFreesCoupons: usableFreesCoupons
    })).find('.coupon').on('touchstart', function() {
        let $theCoupon = $(this);
        let $theCouponCheckBox = $theCoupon.find('.checkbox');

        let couponCode = $theCoupon.data('code');

        // 操作前的选中状态
        let beforeIsChecked = $theCouponCheckBox.hasClass('icon-cb-radio');

        if ($theCoupon.hasClass('usable-usual')) {
            if (beforeIsChecked) {
                $theCouponCheckBox.removeClass('icon-cb-radio').addClass('icon-radio');

                orderInfo('usable_usual_code', null);
            } else {
                $('.usable-usual').find('.checkbox').removeClass('icon-cb-radio').addClass('icon-radio');
                $theCouponCheckBox.removeClass('icon-radio').addClass('icon-cb-radio');

                orderInfo('usable_usual_code', couponCode);
            }
        } else if ($theCoupon.hasClass('usable-free')) {
            if (beforeIsChecked) {
                $theCouponCheckBox.removeClass('icon-cb-radio').addClass('icon-radio');

                orderInfo('usable_free_code', null);
            } else {
                $('.usable-free').find('.checkbox').removeClass('icon-cb-radio').addClass('icon-radio');
                $theCouponCheckBox.removeClass('icon-radio').addClass('icon-cb-radio');

                orderInfo('usable_free_code', couponCode);
            }
        }
    });
}

/**
 * 获取优惠券列表
 */
function getCouponData() {

    if (isGetData) {
        return;
    }

    loading.showLoadingMask();
    isGetData = true;

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

getCouponData();