brand-coupon.js 3.4 KB
/* global define */
// amd
define(function(require) {
    'use strict';

    /**
     *  商品详情: 品牌券
     */
    var tip = require('plugin/tip');
    var $ = require('yoho-jquery');
    var $body = $(document.body);

    var brandCoupon = {
        skn: null,
        brandId: null,
        $entry: null,
        $couponDrawer: null,

        template: require('product/detail/coupon-list.hbs'),

        init: function(skn, brandId) {
            var self = this;

            this.skn = skn;
            this.brandId = brandId;

            if (!(skn && brandId)) {
                return;
            }

            this.fetchCoupons(this.skn, this.brandId)
                .done(function(data) {
                    if (data.length) {
                        self.render(data);
                        self.domInit();
                        self.bindEvents();

                        self.$entry.removeClass('hide');
                    }
                })
                .fail();
        },

        domInit: function() {
            this.$entry = $('.brand-coupon').removeClass('hide');
        },

        bindEvents: function() {
            var self = this;

            this.$entry.on('click', function() {
                self.toggleDrawer(true);
            });

            this.$couponDrawer
                .on('click', '.coupon-drawer-mask', $.proxy(this.toggleDrawer, this, false))
                .on('click', '.coupon-btn-valid', $.proxy(this.saveCouponHandler, this));
        },

        render: function(data) {
            this.$couponDrawer = $(this.template({
                coupons: data
            }));
            this.$couponDrawer.appendTo('.good-detail-page');

            return this;
        },

        // 获取 品牌券
        fetchCoupons: function(skn, brandId) {
            return $.get('/product/detail/coupon.json', {
                skn: skn,
                brandId: brandId
            });
        },

        saveCoupon: function(couponId, callback) {
            $.post('/product/detail/coupon/save.json', {
                couponId: couponId
            }).done(function(res) {
                tip.show(res.message);

                if (res.code === 200) {
                    callback(); // eslint-disable-line
                } else {
                    tip.show(
                        res.message || '抱歉,您不符合领用条件'
                    );

                    if (res.redirect) {
                        setTimeout(function() {
                            location.href = res.redirect;
                        }, 1000);
                    }
                }
            }).fail(function() {
                tip.show('网络异常,请稍后再试');
            });
        },

        // 收藏 品牌券
        saveCouponHandler: function(event) {
            var $btn = $(event.target);
            var couponId = $btn.closest('.coupon').data('coupon');

            this.saveCoupon(couponId, function() {
                $btn.prop('disabled', true)
                    .removeClass('coupon-btn-valid')
                    .text('已领取');
            });

            event.stopPropagation();
        },

        toggleDrawer: function(bool) {
            this.$couponDrawer.toggleClass('open', bool);
            $body.toggleClass('coupon-drawer-open', bool);
        }
    };

    brandCoupon.init(
        $('#productSkn').val(),
        $('#brand-id').val()
    );
});