header.js 8.74 KB
/**
 * 公共头部
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/5/9
 */
/* eslint-disable */
var $ = require('yoho-jquery');
    // handlebars = require('yoho.handlebars'),
    // json2 = require('json2');

var $tool = $('.tool-wrapper'),
    $yohoGroup = $tool.find('.yoho-group'),
    $loginBox = $('#loginBox');

var $head = $('.head-wrapper'),
    $searchForm = $('#search-form'),
    $searchSug = $head.find('.search-suggest'),
    $goCart = $head.find('.go-cart'),
    $goodsNum = $goCart.find('.goods-num-tip'),
    $miniCart = $head.find('.mini-cart-wrapper');

var $subNav = $('.sub-nav-list .contain-third');

var apiDomain = $('#api-domain').val(), // 获取登陆状态的地址
    apiBanner = 'http://new.yohobuy.com/common/getbanner',
    thirdLineNum = 9,
    delayer,
    centerFn,
    loginFn,
    cartFn;

$('#api-domain').remove(); // 删除地址信息

// handlebars模板
// centerFn = handlebars.compile($('#simple-account-info-tpl').html());
// loginFn = handlebars.compile($('#header-login-info-tpl').html());
// cartFn = handlebars.compile($('#mini-cart-tpl').html());

// handlebars helper
// handlebars.registerHelper('notzero', function(v1, options) {
//     if (v1 !== '0') {
//         return options.fn(this);
//     } else {
//         return options.inverse(this);
//     }
// });

// 格式化三级菜单
function formatThirdMenu() {
    $subNav.each(function() {
        var $thirdList = $(this).find('.hide-list'),
            list = [],
            i = 0;

        if ($thirdList.length) {
            $thirdList.children().each(function() {
                if (i % thirdLineNum === 0) {
                    list.push('');
                }
                list[list.length - 1] += this.outerHTML + '';
                i++;
            });
            for (i = 0; i < 3; i++) {
                $thirdList.before('<dl class="category-list">' + list[i] + '</dl>');
            }
            $thirdList.remove();
        }
    });
}

// 更新头部登陆信息
function updateLoginInfo(data) {
    var info = {
        usercenter: 'http://www.yohobuy.com/home?t=' + new Date().getTime(),
        nickname: data.profile_name,
        signout: 'http://www.yohobuy.com/logout_' + data.token
    };

    if (data.vip.curVipInfo.curLevel * 1 === 3) {
        data.vip3 = true;
    }

    $tool.find('.simple-user-center').html(centerFn(data));
    $loginBox.html(loginFn(info));
}

// 同步sso登录状态
function syncLoginInfo() {
    var param = {
        return_type: 'jsonp',
        method: 'open.passport.get'
    };

    $.getJSON(apiDomain + '/?callback=?', param, function(jsonData) {
        if (jsonData && jsonData.data && jsonData.data.result !== -1) {
            updateLoginInfo(jsonData.data.data);
        } else {
            window.setCookie('_UID', '', {
                domain: '.yohobuy.com',
                expires: -1
            });
        }
    });
}

// 关键词搜索联想
function searchSuggest(key) {
    var param = {
        return_type: 'jsonp',
        query: key
    };

    $.getJSON('http://search.yohobuy.com/api/suggest/?callback=?', param, function(jsonData) {
        if (jsonData.code === 200) {
            if (jsonData.data && jsonData.data.length) {
                $searchSug.html(jsonData.data).show();
            } else {
                $searchSug.hide();
            }
        }
    });
}

// 同步mini购物车数据
function syncCratInfo(strG) {
    // var info, total;
    //
    // if (strG) {
    //     window.setCookie('_g', strG, {
    //         path: '/',
    //         domain: '.yohobuy.com'
    //     });
    // }
    // if (window.cookie('_g')) {
    //     info = json2.parse(window.cookie('_g'));
    //     total = parseInt(info._nac) + parseInt(info._ac);
    //     total = total > 0 ? total : 0;
    //     $goCart.data({
    //         key: info._k,
    //         num: total
    //     });
    //     $goodsNum.text(total);
    // }
}

function loadCartDetail(key) {
    // var param = {
    //         return_type: 'jsonp',
    //         method: 'open.Shoppingcart.getCartData',
    //         shopping_key: key
    //     };
    //
    // $.getJSON(apiDomain + '/?callback=?', param, function(jsonData) {
    //     var totalGoods, data;
    //
    //     if (jsonData.code === 200) {
    //         data = jsonData.data;
    //         totalGoods = $.merge(data.main_goods, data.advance_goods);
    //         totalGoods = $.merge(totalGoods, data.outlet_goods);
    //         totalGoods = $.merge(totalGoods, data.gift_goods);
    //         totalGoods = $.merge(totalGoods, data.need_pay_gifts);
    //         if (totalGoods && totalGoods.length) {
    //             data.totalGoods = totalGoods;
    //             $miniCart.html(cartFn({
    //                 carData: data
    //             }));
    //         } else {
    //             $miniCart.html('<div class="empty-cart"><h3>您的购物车暂无商品</h3></div>');
    //         }
    //     }
    // });
}

function delCartGoods(data, callback) {
    // var param = {
    //         return_type: 'jsonp',
    //         method: 'open.Shoppingcart.delone',
    //         shopping_key: data.key,
    //         id: data.id,
    //         isreduce: data.isreduce
    //     };
    //
    // $.getJSON(apiDomain + '/?callback=?', param, function(jsonData) {
    //     var strG = '';
    //
    //     if (jsonData.code === 200) {
    //         callback();
    //         strG = '{"_k":"' + data.key + '","_nac":' + jsonData.data.total_goods_num + ',"_ac":0,"_r":0}';
    //         syncCratInfo(strG);
    //     }
    // });
}

syncLoginInfo();
formatThirdMenu();
setInterval(syncCratInfo, 2000);

$yohoGroup.hover(function() {
    var data = $(this).data();

    $(this).text(data.cn);
}, function() {
    var data = $(this).data();

    $(this).text(data.en);
});

$searchForm.on('keyup', '.search-key', function(e) {
    var val = $.trim($(this).val()),
        $child = $searchSug.find('li'),
        $act = $searchSug.find('.action'),
        $focus;

    if (e.which > 36 && e.which < 41) {

        if (e.which === 38) {
            $focus = $act.prev();
            if (!$act.length || !$focus.length) {
                $focus = $child.eq($child.length - 1);
            }
        } else if (e.which === 40) {
            $focus = $act.next();
            if (!$act.length || !$focus.length) {
                $focus = $child.eq(0);
            }
        } else {
            return;
        }

        $child.removeClass('action');
        $focus.addClass('action');
        $(this).val($focus.find('.searchvalue').text());
    } else if (e.which === 13) {
        if (val !== '') {
            $searchForm.submit();
        }
    } else {
        val = val.replace(new RegExp('\'', 'gm'), ''); // 去掉特殊字符

        $(this).val(val);
        searchSuggest(val);
    }

    // http://search.yohobuy.com/api/suggest
    // searchSuggest
});

$goCart.hover(function() {
    var data, _html = '';

    if ($goCart.hasClass('on-hover')) {
        return;
    }

    data = $goCart.data();
    if (data && data.num * 1) {
        _html = '<div class="loading-cart"><h3>加载中,请稍后</h3></div>';
        loadCartDetail(data.key);
    } else {
        _html = '<div class="empty-cart"><h3>您的购物车暂无商品</h3></div>';
    }
    $miniCart.html(_html);
    $goCart.addClass('on-hover');
}, function() {
    $goCart.removeClass('on-hover');
});

$goCart.on('click', '.cart-goods-del', function(e) {
    var $dom = $(this),
        data = $dom.data(),
        callback;

    if (data) {
        callback = function() {
            $dom.closest('.goods-item').remove();
        };
        data.key = $goCart.data().key;
        delCartGoods(data, callback);
    }
});

$subNav.on({
    mouseenter: function() {
        var $thirdNav = $(this).children('.third-nav-wrapper'),
            $show = $thirdNav.find('.show-detail'),
            param = {};

        delayer = setTimeout(function() {
            $thirdNav.show();
        }, 200);

        if (!$show.length || $show.hasClass('show')) {
            return;
        }
        param.content_code = $show.data().code;
        param.client_type = 'web';
        param.width = 174;
        param.height = 155;
        param._ = new Date();
        // $.getJSON(apiBanner + '/?callback=?', param, function(JsonData) {
        //     if (JsonData.code === 200) {
        //         $show.addClass('show');
        //         $show.find('img').attr('src', JsonData.data.src);
        //         $show.find('a').attr('href', JsonData.data.url);
        //         $show.find('.title').text(JsonData.data.title);
        //     }
        // });
    },
    mouseleave: function() {
        var $thirdNav = $(this).children('.third-nav-wrapper');

        if (delayer) {
            clearTimeout(delayer);
        }
        $thirdNav.hide();
    }
});


/* eslint-ensable */