index.page.js 4.39 KB
/**
 * 购物车商品
 * @author: feng.chen<feng.chen@yoho.cn>
 * @date: 2016/12/22
 */
'use strict';

require('scss/cart/index.page.scss');
require('js/common');
require('./index/precell-dia'); // 预售商品购物须知弹框

let cookie = require('yoho-cookie');

let $ = require('yoho-jquery'),
    hbsTemplate = require('hbs/cart/index/index.hbs'),
    lazyLoad = require('yoho-jquery-lazyload'),
    loading = require('js/plugin/loading');

let indexObj = {
    cartData: {},
    editMode: false,
    posting: false,
    init() {
        let self = this;

        self.setCartReferrer();
        $('.nav-btn').on('click', () => {
            self.navBtnClick();
        });
        $('.nav-back').on('click', () => {
            self.navBackClick();
        });
        let promise = self.refreshPage();

        if (promise) {
            promise.then(() => {
                require('./index/recommend-for-you').init(self);
            });
        }
    },
    setCartReferrer() {
        let referrer = document.referrer || window.queryString.referrer || '';
        let localUrl = window.location.href.replace(/\/?\?.*$/, '').replace(/https?:\/\//, '');
        let referrerPath = referrer.replace(/\/?\?.*$/, '').replace(/https?:\/\//, '');

        if (referrer && localUrl !== referrerPath &&
            referrer.indexOf('orderEnsure') === -1 && referrer.indexOf('/gift') === -1 &&
            referrer.indexOf('/advanceBuy') === -1 && referrer.indexOf('/product/index/index?promotion_id=') === -1) {
            cookie.set('_cartReferrer', referrer);
        }
    },
    navBtnClick() {
        let self = this;

        $('.main-wrap').toggleClass('edit');
        if ($('.main-wrap').hasClass('edit')) {
            self.editMode = true;
            $('.chk.edit').removeClass('checked');
        } else {
            self.editMode = false;
        }
    },
    navBackClick() {
        let referrer = cookie.get('_cartReferrer');

        if (referrer && referrer !== window.location.href) {
            cookie.remove('_cartReferrer');
            if (referrer === document.referrer || referrer === window.queryString.referrer) {
                window.history.go(-1);
            } else {
                window.location.href = referrer;
            }
        } else {
            window.location.href = '/?go=1';
        }
    },
    getCartData() {
        return $.ajax({
            url: '/cart/index/new/data',
            type: 'POST'
        });
    },
    refreshPage(data) {
        let self = this;

        if (!data) {
            loading.showLoading();
            return self.getCartData().then(cartData => {
                return self.renderPage(cartData.data, true).then(() => {
                    loading.hideLoading();
                });
            });
        }
        return self.renderPage(data);
    },
    renderPage(data, no_try) {
        let self = this;

        if ((!data || (!data.commonCart && !data.preSellCart)) && no_try !== true) {
            return self.refreshPage();
        }
        let cartType = cookie.get('_cartType') || 'ordinary';

        // 普通购物车空,则显示预售购物车

        if (data.commonGoodsCount === 0 && data.ordinarySoldOut === 0) {
            data.cartNav = false;
            data.cartType = 'advance';
            self.cartData = data.preSellCart;
        } else if (data.presellGoodsCount === 0 && data.advanceSoldOut === 0) { // 预售购物车空,则显示普通购物车
            data.cartNav = false;
            data.cartType = 'ordinary';
            self.cartData = data.commonCart;
        } else { // 以上两个购物车中都有数据, 默认显示普通购物车
            data.cartNav = true;
            data.cartType = cartType || 'ordinary';
            self.cartData = data.commonCart;
        }
        cookie.set('_cartType', data.cartType);
        data.ordinaryCart = data.cartType === 'ordinary';
        data.advanceCart = !data.ordinaryCart;
        if (data.isEmptyCart) {
            $('.nav-btn').hide();
        } else {
            $('.nav-btn').show();
        }
        $('.cart-box').html(hbsTemplate(data));
        require('./index/cart').init(self);
        require('./index/good').init(self);
        require('./index/bundle').init(self);
        $('.btn-edit').on('click', () => {
            self.navBtnClick();
        });
        lazyLoad($('img.lazy'));
        return Promise.resolve();
    }
};

$(() => {
    indexObj.init();
});