Authored by yyq

Merge branch 'feature/shopTune' into release/5.3

... ... @@ -14,21 +14,36 @@ const searchApi = require(`${mRoot}/search-api`);
// 店铺页
const shop = (shopId, req, res, next, brandInfo) => {
let domain = req.query.domain,
params = req.query;
_.unset(params, 'domain');
shopId = parseInt(shopId, 10);
Object.assign(params, {shopId: shopId});
list.getShopInfo(shopId, req.user.uid).then(shopInfo => {
let pjax = params._pjax;
// 比较品牌域名与店铺域名是否一致,不一致跳转至店铺域名
if (!pjax && shopInfo.domain && domain && domain !== _.toLower(shopInfo.domain)) {
res.redirect(helpers.urlFormat('', params, shopInfo.domain));
return;
}
if (+shopInfo.shopTemplateType === 2) { // 经典模板
let pjax = req.query._pjax;
if (pjax) {
list.getShopGoodsData(shopId, req.yoho.channel, req.query, shopInfo).then(result => {
Object.assign(result, {layout: false});
list.getShopGoodsData(shopId, req.yoho.channel, params, shopInfo).then(result => {
Object.assign(result, {
shopId: shopId,
layout: false
});
res.render('list/goods-list', result);
}).catch(next);
return;
}
list.getShopData(shopId, req.yoho.channel, req.query, shopInfo).then(result => {
list.getShopData(shopId, req.yoho.channel, params, shopInfo).then(result => {
Object.assign(result, {
page: 'shop',
shopId: shopId
... ... @@ -41,7 +56,7 @@ const shop = (shopId, req, res, next, brandInfo) => {
res.render('list/shop-index', result);
}).catch(next);
} else { // 基础模板
list.getBaseShopData(req.query, Object.assign({uid: req.user.uid}, brandInfo),
list.getBaseShopData(params, Object.assign({uid: req.user.uid}, brandInfo),
req.yoho.channel, shopId).then(result => {
Object.assign(result, {page: 'list'});
... ... @@ -111,15 +126,15 @@ exports.brand = (req, res, next) => {
let shopId = req.query.shopId;
let resData = {};
if (!brandDomain) {
return next();
}
// shopId存在,直接走店铺
if (shopId) {
return shop(shopId, req, res, next);
}
if (!brandDomain) {
return next();
}
// 获取品牌信息
list.getBrandInfo({domain: brandDomain}).then(brandInfo => {
if (!brandInfo.hasOwnProperty('type')) {
... ... @@ -224,7 +239,7 @@ exports.getNodeContent = (req, res, next) => {
*/
exports.getAdnav = (req, res, next) => {
if (!req.xhr || !req.body.brandId) {
if (!req.xhr) {
return next();
}
... ...
... ... @@ -15,12 +15,15 @@ const helpers = global.yoho.helpers;
const crypto = global.yoho.crypto;
const _ = require('lodash');
const limitNum = 60; // 商品每页显示数目
// const limitNum = 60; // 商品每页显示数目
const needParams = ['query', 'msort', 'misort', 'gender', 'shelveTime'];
// 品牌页folder名称
const brandFolderSeries = '经典系列';
// 经典店铺list url
const shopListUrl = '/product/shoplist';
// 搜索分类信息需要的参数
const positionId = 10;
... ... @@ -276,16 +279,16 @@ const getBrandData = (params, extra, channel) => {
} else {
// 品牌以品牌ID查询商品
queryBase.brand = extra.brandId;
}
// 设置品牌默认排序方式
let order = params.order || 'b_w_desc';
// 设置品牌默认排序方式
searchParams.order = searchParams.order || 'b_w_desc';
}
// 调用接口
let apiMethod = [
headerModel.requestHeaderData(channel),
searchApi.getSortList(queryBase),
searchApi.getProductList(Object.assign(searchParams, {order: order}, queryBase))
searchApi.getProductList(Object.assign(searchParams, queryBase))
];
if (queryBase.brand) {
... ... @@ -301,6 +304,7 @@ const getBrandData = (params, extra, channel) => {
brandBanner: searchHandler.handleBrandBanner(extra),
leftContent: {},
node: extra.node || '',
brandShopAd: true,
brandId: extra.brandId
}
};
... ... @@ -496,7 +500,7 @@ const getNodeContentData = (params) => {
*/
const getAdnav = (params) => {
return Promise.all([searchApi.getBrandFolder(params), searchApi.getBrandSeries(params)]).then(result => {
return Promise.all([searchApi.getBrandShopFolder(params), searchApi.getBrandShopSeries(params)]).then(result => {
let dest = {
picTitle: '',
... ... @@ -615,8 +619,7 @@ const getShopData = (shopId, channel, params, shopInfo) => {
sknList.push(value.productSkn);
});
let shopBrandIds = [], // 店铺的所有品牌id
articleApiMethod = [], // 通过品牌获取相关文章接口
let articleApiMethod = [], // 通过品牌获取相关文章接口
apiMethod = [
searchApi.getProductList({
viewNum: sknList.length,
... ... @@ -626,7 +629,6 @@ const getShopData = (shopId, channel, params, shopInfo) => {
if (result[3].code === 200 && result[3].data) {
_.forEach(result[3].data, value => {
shopBrandIds.push(value.brand_id);
articleApiMethod.push(
searchApi.getArticleByBrand(value.brand_id, 'udid') // 品牌推荐文章
);
... ... @@ -637,8 +639,8 @@ const getShopData = (shopId, channel, params, shopInfo) => {
finalResult.coupon = searchHandler.handleBrandShopCoupons(result[4].data, {shopId: shopId});
}
// 根据品牌获取分类 (腾讯云测试没有该接口,暂时不调用分类)
apiMethod.push(searchApi.getSortList({brand: shopBrandIds}));
// 根据店铺id获取分类
apiMethod.push(searchApi.getSortList({shop_id: shopId}));
apiMethod = _.concat(apiMethod, articleApiMethod);
return Promise.all(apiMethod).then(subRes => {
... ... @@ -654,8 +656,7 @@ const getShopData = (shopId, channel, params, shopInfo) => {
_.forEach(prodList, value => {
list[value.product_skn] = {
img: helpers.getForceSourceUrl(value.default_images) +
'?imageView2/1/w/{width}/h/{height}',
img: value.default_images,
title: value.product_name,
price: ${value.sales_price}`
};
... ... @@ -681,11 +682,13 @@ const getShopData = (shopId, channel, params, shopInfo) => {
if (subRes[1].code === 200) {
let groupSort = _.get(subRes[1], 'data.sort', []);
finalResult.leftContent = searchHandler.handleSortData(groupSort, params);
finalResult.leftContent = searchHandler.handleSortData(groupSort, params, params, '/product/shoplist');
_.set(finalResult, 'brandShopAd', {baseUrl: shopListUrl});
if (finalResult.allGoods) {
Object.assign(finalResult.allGoods, searchHandler.setShopSort(groupSort, Object.assign({},
params, {page: 1})));
params, {page: 1})), searchHandler.setGenderFilter(params));
}
}
... ... @@ -732,7 +735,7 @@ const getShopGoodsData = (shopId, channel, params) => {
searchApi.getProductList(Object.assign({
shop_id: shopId
}, params)), // 搜索店铺商品
searchApi.getShopBrands(shopId) // 店铺品牌数据
searchApi.getSortList({shop_id: shopId}) // 根据店铺id获取分类
]).then(result => {
// 获取商品数据和顶部筛选条件
if (result[0].code === 200) {
... ... @@ -747,25 +750,14 @@ const getShopGoodsData = (shopId, channel, params) => {
_.set(resData, 'sort.newPage', true); // 启用新的分页导航
}
let shopBrandIds = []; // 店铺的所有品牌id
if (result[1].code === 200) {
let groupSort = _.get(result[1], 'data.sort', []);
if (result[1].code === 200 && result[1].data) {
_.forEach(result[1].data, value => {
shopBrandIds.push(value.brand_id);
});
Object.assign(resData, searchHandler.setShopSort(groupSort, Object.assign({}, params,
{page: 1})), searchHandler.setGenderFilter(params));
}
// 根据品牌获取分类 (腾讯云测试没有该接口,暂时不调用分类)
return searchApi.getSortList({brand: shopBrandIds}).then(subRes => {
if (subRes.code === 200) {
let groupSort = _.get(subRes, 'data.sort', []);
Object.assign(resData, searchHandler.setShopSort(groupSort, Object.assign(params,
{page: 1})));
}
return resData;
});
return resData;
});
};
... ... @@ -778,10 +770,11 @@ const getShopListData = (channel, params, uid) => {
searchApi.getShopDecorator(shopId), // 店铺装修数据
searchApi.getShopInfo(shopId, uid), // 店铺介绍
searchApi.getProductList(Object.assign({shop_id: shopId}, params)), // 搜索店铺商品
searchApi.getShopBrands(shopId) // 店铺品牌数据
searchApi.getSortList({shop_id: shopId}) // 店铺分类
];
if (_.has(params, 'query')) {
// 如果有店内搜索,则并行查询店铺所有商品,搜索不到商品则显示所有商品
apiArr.push(searchApi.getProductList(Object.assign({shop_id: shopId},
params, {query: ''}))); // 搜索店铺所有商品
}
... ... @@ -827,26 +820,18 @@ const getShopListData = (channel, params, uid) => {
let goodsList = _.get(info, 'data.product_list', []);
if (goodsList.length) {
let tip = {
start: (_.get(info, 'data.page', 1) - 1) * limitNum + 1,
total: _.get(info, 'data.total', 0)
};
tip.end = tip.start + limitNum - 1;
if (tip.end > tip.total) {
tip.end = tip.total;
}
let totalPage = _.get(info, 'data.total', 1);
Object.assign(finalResult, {
filters: searchHandler.handleFilterDataAll(info.data, params),
opts: searchHandler.handleOptsData(params, tip.total),
opts: searchHandler.handleOptsData(params, totalPage),
goods: productProcess.processProductList(goodsList, {
newCoverSort: true,
showDiscount: false,
gender: _getGender(channel),
query: params.query
}),
footPager: {tip: tip}
footPager: searchHandler.handlePagerData(totalPage, params)
});
_.set(finalResult, 'filters.checkedConditions.clearUrl',
... ... @@ -873,27 +858,15 @@ const getShopListData = (channel, params, uid) => {
}
if (result[4].code === 200) {
let shopBrandIds = []; // 店铺下的所有品牌id数组
_.forEach(_.get(result[4], 'data', []), value => {
shopBrandIds.push(value.brand_id);
});
return searchApi.getSortList({brand: shopBrandIds}).then(subRes => {
if (subRes.code === 200) {
let groupSort = _.get(subRes, 'data.sort', []),
noPageQs = Object.assign({}, params, {page: 1});
finalResult.leftContent = searchHandler.handleSortData(groupSort, noPageQs);
let groupSort = _.get(result[4], 'data.sort', []),
noPageQs = Object.assign({}, params, {page: 1});
if (finalResult.allGoods) {
Object.assign(finalResult.allGoods, searchHandler.setShopSort(groupSort, noPageQs));
}
}
return finalResult;
});
finalResult.leftContent = searchHandler.handleSortData(groupSort, noPageQs);
if (finalResult.allGoods) {
Object.assign(finalResult.allGoods, searchHandler.setShopSort(groupSort, noPageQs));
}
}
finalResult.criteo = {skn: searchHandler.getCriteo(_.get(finalResult, 'goods'))};
... ... @@ -908,6 +881,7 @@ const getShopListData = (channel, params, uid) => {
const getBaseShopData = (params, extra, channel, shopId) => {
let resData = {};
params.shopId = shopId;
return Promise.all([
getBrandData(params, extra, channel),
searchApi.getShopDecorator(shopId), // 店铺装修数据
... ...
... ... @@ -196,14 +196,21 @@ const getSortAds = (params) => {
* 获取品牌系列
* @return
*/
const getBrandSeries = (params) => {
const getBrandShopSeries = (params) => {
let finalParams = {
method: 'web.brand.series',
brand_id: params.brandId,
status: params.status || 1
};
if (params.brandId) {
finalParams.brand_id = params.brandId;
} else if (params.shopId) {
Object.assign(finalParams, {
method: 'web.shop.series',
shop_id: params.shopId
});
}
return api.get('', finalParams, config.apiCache);
};
... ... @@ -211,14 +218,21 @@ const getBrandSeries = (params) => {
* 获取品牌folder
* @return
*/
const getBrandFolder = (params) => {
const getBrandShopFolder = (params) => {
let finalParams = {
method: 'web.brand.folder',
brand_id: params.brandId,
status: params.status || 1
};
if (params.brandId) {
finalParams.brand_id = params.brandId;
} else if (params.shopId) {
Object.assign(finalParams, {
method: 'web.shop.folder',
shop_id: params.shopId
});
}
return api.get('', finalParams, config.apiCache);
};
... ... @@ -554,8 +568,8 @@ module.exports = {
getSortList,
getSortIntro,
getSortAds,
getBrandFolder,
getBrandSeries,
getBrandShopFolder,
getBrandShopSeries,
getWeekNew,
getBrandCouponAsync,
getBrandShop,
... ...
... ... @@ -468,9 +468,10 @@ exports.handleOptsData = (params, total, extra) => {
* @param origin 分类原始数据,一般是接口返回数据中的 group_sort 字段
* @param params 当前 URL 中已有的参数
* @param extra 可以任意传值用来处理特殊情况
* @param {string} [baseUrl] 需要跳转非当前页面传的相对路径(可不传,默认为空字符串)
* @returns {{}}
*/
exports.handleSortData = (origin, params, originParams) => {
exports.handleSortData = (origin, params, originParams, baseUrl) => {
let leftContent = {
sort: {misort: []},
checked: []
... ... @@ -479,11 +480,13 @@ exports.handleSortData = (origin, params, originParams) => {
let list = [],
allCount = 0;
baseUrl = baseUrl || '';
leftContent.allSort = {};
leftContent.allSort.all = [{
name: '全部品类',
num: allCount,
href: handleFilterUrl(params, {}, {msort: true, misort: true})
href: `${baseUrl}${handleFilterUrl(params, {}, {msort: true, misort: true})}`
}];
_.forEach(origin, value => {
... ... @@ -494,12 +497,12 @@ exports.handleSortData = (origin, params, originParams) => {
{
name: `全部${value.sort_name}`,
num: value.count,
href: handleFilterUrl(params, {msort: value.sort_id}, {misort: true}),
href: `${baseUrl}${handleFilterUrl(params, {msort: value.sort_id}, {misort: true})}`,
childActive: (params.msort === value.sort_id) && !params.misort,
sortId: value.sort_id
}
],
href: handleFilterUrl(params, {msort: value.sort_id}, {misort: true}),
href: `${baseUrl}${handleFilterUrl(params, {msort: value.sort_id}, {misort: true})}`,
active: params.msort === value.sort_id,
sortId: value.sort_id
};
... ... @@ -510,7 +513,7 @@ exports.handleSortData = (origin, params, originParams) => {
category.childList.push({
name: subValue.sort_name,
num: subValue.count,
href: handleFilterUrl(params, {msort: value.sort_id, misort: subValue.sort_id}),
href: `${baseUrl}${handleFilterUrl(params, {msort: value.sort_id, misort: subValue.sort_id})}`,
childActive: params.misort === subValue.sort_id,
sortId: subValue.sort_id
});
... ... @@ -580,6 +583,30 @@ exports.setShopSort = (data, params) => {
};
/**
* 店铺性别筛选
* @param params qs
* @returns {{}}
*/
exports.setGenderFilter = (params) => {
return {genderFilter: [
{
name: '全部',
href: handleFilterUrl(params, {}, {gender: true}),
checked: !params.gender || params.gender === '1,2,3'
},
{
name: 'BOYS',
href: handleFilterUrl(params, {gender: '1,3'}),
checked: params.gender === '1,3'
}, {
name: 'GIRLS',
href: handleFilterUrl(params, {gender: '2,3'}),
checked: params.gender === '2,3'
}
]};
};
/**
* 处理一般筛选数据
* @param origin 要处理的筛选数据 filter
* @param params 当前 URL 中已有的参数,处理选中状态使用
... ...
... ... @@ -136,23 +136,26 @@ const shopTopBannerBase = (data) => {
* @param data 装修数据
* @returns {{}}
*/
const navigationBar = (data, shopId) => {
const navigationBar = (data, shopId, params) => {
params = params || {};
const gender = params.gender ? `&gender=${params.gender}` : '';
let shopNav = [
{
name: '店铺首页',
url: `/?navBar=0&shopId=${shopId}`
url: `/?navBar=0&shopId=${shopId}${gender}`
},
{
name: '全部商品',
url: `${shopListUrl}/?navBar=1&shopId=${shopId}`
url: `${shopListUrl}/?navBar=1&shopId=${shopId}${gender}`
},
{
name: '人气单品',
url: `${shopListUrl}/?navBar=2&order=s_n_desc&shopId=${shopId}`
url: `${shopListUrl}/?navBar=2&order=s_n_desc&shopId=${shopId}${gender}`
},
{
name: '新品上架',
url: `${shopListUrl}/?navBar=3&order=s_t_desc&shopId=${shopId}`
url: `${shopListUrl}/?navBar=3&order=s_t_desc&shopId=${shopId}${gender}`
}
];
... ... @@ -313,8 +316,10 @@ const signboard = (data) => {
// 销售类目
const _handleSaleCategory = (shopId, resourceObj) => {
const thisShop = (categoryId) => shopListUrl + '?' + qs.stringify({
const _handleSaleCategory = (shopId, baseUrl, resourceObj) => {
baseUrl = baseUrl || '';
const thisShop = (categoryId) => baseUrl + '?' + qs.stringify({
productPool: categoryId,
shopId: shopId,
navBar: -1
... ... @@ -353,7 +358,7 @@ exports.getShopDecorator = (data, params, shopId, base) => {
if (base) {
_.forEach(data.list, (value) => {
let info = Fn.pipe(JSON.parse, _.partial(_handleSaleCategory, shopId))(value.resource_data || '[]');
let info = Fn.pipe(JSON.parse, _.partial(_handleSaleCategory, shopId, ''))(value.resource_data || '[]');
switch (value.resource_name) {
case 'signboard':
... ... @@ -373,7 +378,7 @@ exports.getShopDecorator = (data, params, shopId, base) => {
});
_.forEach(data.list, (value) => {
let info = Fn.pipe(JSON.parse, _.partial(_handleSaleCategory, shopId))(value.resource_data || '[]');
let info = Fn.pipe(JSON.parse, _.partial(_handleSaleCategory, shopId, shopListUrl))(value.resource_data || '[]'); // eslint-disable-line
let tabBar;
switch (value.resource_name) {
... ... @@ -392,7 +397,7 @@ exports.getShopDecorator = (data, params, shopId, base) => {
Object.assign(dest, shopTopBanner(info));
break;
case 'navigationBar':
Object.assign(dest, navigationBar(info, shopId));
Object.assign(dest, navigationBar(info, shopId, params));
break;
case 'largeSlideImg':
Object.assign(dest, largeSlideImg(info, shopId));
... ...
... ... @@ -71,38 +71,27 @@ router.get('/detail/coupon', auth, coupon.acquire); // 获得优惠券
// 搜索
router.get('/search/index', search.index);
router.get('/search/filter/brands', search.serachFilterBrands);
// 搜索提示
router.get('/search/suggest', search.suggest);
router.get('/search/suggest', search.suggest); // 搜索提示
router.get('/api/suggest', search.suggest4Old);
// 商品分类列表页
router.get('/list/index', list.index);
// 新品到着
router.get('/list/new', list.new);
// 品牌页
router.get('/index/brand', list.brand);
router.get('/index/about', list.brandAbout);
router.get('/shop/couponsync', list.shopCouponSync);
router.get('/brand/couponsync', list.brandCouponSync);
// 品牌店铺
router.get('/index/brand', list.brand); // 品牌店铺页
router.get('/index/about', list.brandAbout); // 品牌店铺介绍页
router.post('/index/isFavoriteBrand', list.isFavoriteBrand); // 判断用户是否收藏品牌
router.post('/index/getNodeContent', list.getNodeContent); // 品牌页水牌
router.post('/index/getAdnav', list.getAdnav); // 品牌页系列
router.get('/shoplist', list.shopList); // 店铺列表页
router.post('/shop/togglecollect', favorite.collectShop); // 店铺收藏
router.post('/index/isFavoriteShop', favorite.isFavShop); // 判断用户是否收藏品牌
router.get('/brand/couponsync', list.brandCouponSync);
router.get('/shop/couponsync', list.shopCouponSync);
// 品牌页水牌
router.post('/index/getNodeContent', list.getNodeContent);
// 品牌页系列
router.post('/index/getAdnav', list.getAdnav);
// 判断用户是否收藏品牌
router.post('/index/isFavoriteBrand', list.isFavoriteBrand);
// 学生优惠routers
router.get('/students', students.index); // students 首页
... ...
... ... @@ -4,22 +4,49 @@
<span class="menu-tag">所有商品</span>
<ul class="menu-list">
{{#each menuList}}
<li class="{{#if curMenu}} on {{/if}}"><a class="pjax" href="{{href}}">{{name}}</a></li>
<li class="{{#if curMenu}}on{{/if}}"><a class="pjax" href="{{href}}">{{name}}</a></li>
{{/each}}
</ul>
<a href="{{url}}" class="more">MORE</a>
</div>
{{/ goodsMenu}}
{{#if genderFilter}}
<div class="gender-filter">
<span>性别:</span>
{{# genderFilter}}
<a class="pjax{{#if checked}} checked{{/if}}" href="{{href}}">{{name}}</a>
{{/ genderFilter}}
</div>
{{/if}}
{{> common/sort-pager}}
</div>
<div class="goods-container clearfix">
{{# list}}
{{> product/good}}
{{/list}}
<div class="good-item-wrapper">
<div class="good-info-main"></div>
<div class="good-select-color"></div>
{{#if list}}
<div class="goods-container clearfix">
{{# list}}
{{> product/good}}
{{/list}}
<div class="good-item-wrapper">
<div class="good-info-main"></div>
<div class="good-select-color"></div>
</div>
</div>
</div>
{{^}}
<div class="no-result">
<p class="no-title">
抱歉!没有找到相关的商品
</p>
<div class="search-again clearfix">
<form method="GET" action="/product/shoplist">
<input id="no-result-input" name="query" type="text" placeholder="换个关键词试试">
<input type="hidden" name="shopId" value="{{@root.shopId}}">
<button class="search-again-btn" type="submit">
<i class="iconfont">&#xe60f;</i>
</button>
</form>
</div>
<p class="no-tip">建议您:看看输入的文字是否有误 / 减少分类条件限制 / 重新搜索</p>
</div>
{{/if}}
... ...
<ul>
{{#each list}}
<li>
<a class="item item-{{@index}}" href="{{url}}" target= "_blank">
<img class="lazy" data-original="{{image img 235 250}}"/>
<p class="title">
{{title}}
</p>
<p class="price">
{{price}}
</p>
{{#if index}}
<span class="hat">{{index}}</span>
{{/if}}
</a>
<li>
<a class="item item-{{@index}}" href="{{url}}" target= "_blank">
<img class="lazy" data-original="{{image img 235 315}}"/>
<div class="info">
<p class="title">{{title}}</p>
<p class="price">{{price}}</p>
</div>
{{#if index}}
<span class="hat">{{index}}</span>
{{/if}}
</a>
</li>
{{/each}}
</ul>
... ...
... ... @@ -87,25 +87,25 @@
{{/ picLink}}
{{/ leftContent}}
{{#if brandBanner.dataId}}
{{# brandShopAd}}
<script id="pic-link-tpl" type="text/html">
\{{# picLink}}
\{{# picLink}}
\{{#if picTitle}}
<h2 class="nav-pic-title">\{{picTitle}}</h2>
<h2 class="nav-pic-title">\{{picTitle}}</h2>
\{{/if}}
<ul class="pic-nav">
\{{#each list}}
<li>
<a href="\{{href}}">
<img src="\{{src}}">
</a>
</li>
\{{/each}}
</ul>
\{{/ picLink}}
<ul class="pic-nav">
\{{#each list}}
<li>
<a href="\{{href}}">
<img src="{{baseUrl}}\{{src}}">
</a>
</li>
\{{/each}}
</ul>
\{{/ picLink}}
</script>
<div id="brand-ad" class="brand-ad"></div>
{{/if}}
<div id="brand-shop-ad" class="brand-shop-ad"></div>
{{/ brandShopAd}}
{{!-- 水牌广告 --}}
{{#if node}}
... ...
... ... @@ -188,9 +188,10 @@ $productListNav.find('h3').click(function() {
// 左侧需要ajax内容
(function() {
var $brandCard = $('#brand-card');
var $brandFavor = $('#brand-favor');
var html;
var $brandCard = $('#brand-card'),
$brandFavor = $('#brand-favor'),
$shopFavor = $('#shop-favor');
var html, adData;
if ($brandCard.length) {
$.ajax({
... ... @@ -204,19 +205,26 @@ $productListNav.find('h3').click(function() {
});
}
// 品牌页请求
if ($brandFavor.length) {
adData = {brandId: $brandFavor.data('id')};
}
if ($shopFavor.length) {
adData = {shopId: $shopFavor.data('id')};
}
// 款型系列异步请求
if (adData) {
html = $('#pic-link-tpl').html() || '';
$.ajax({
type: 'POST',
url: '/product/index/getAdnav',
data: {
brandId: $brandFavor.data('id')
}
data: adData
}).then(function(data) {
if (data) {
$('#brand-ad').html(Handlebars.compile(html)({
$('#brand-shop-ad').html(Handlebars.compile(html)({
picLink: data
}));
}
... ...
... ... @@ -5,7 +5,8 @@
*/
var $ = require('yoho-jquery'),
lazyLoad = require('yoho-jquery-lazyload');
lazyLoad = require('yoho-jquery-lazyload'),
Handlebars = require('yoho-handlebars');
var product = require('./index/product');
... ... @@ -75,6 +76,23 @@ $('.shop-query-submit').on('click', function() {
$searchForm.submit();
});
(function() {
var $adBox = $('#brand-shop-ad');
var html = $('#pic-link-tpl').html() || '';
$.ajax({
type: 'POST',
url: '/product/index/getAdnav',
data: {shopId: shopId}
}).then(function(data) {
if (data) {
$adBox.parent().append($adBox);
$adBox.html(Handlebars.compile(html)({
picLink: data
}));
}
});
}());
// 收藏店铺
function colloectAction() {
... ... @@ -147,6 +165,8 @@ $allGoods.pjax('a.pjax', '.goods-wrap', {
$this.siblings().removeClass('on');
$this.addClass('on');
}).on('click', 'a.checked', function(e) {
e.preventDefault();
});
$(window).on('scroll', function() {
... ...
... ... @@ -18,7 +18,6 @@
> .iconfont {
position: relative;
top: 2px;
}
}
... ...
... ... @@ -118,7 +118,7 @@
}
.brand-card img,
.brand-ad img {
.brand-shop-ad img {
max-width: 100%;
}
... ...
... ... @@ -247,15 +247,37 @@
margin-bottom: 20px;
width: 235px;
height: 315px;
font-size: 14px;
font-size: 0;
text-align: center;
line-height: 1.5;
background: #f5f5f5;
font-weight: bold;
overflow: hidden;
img {
width: 235px;
height: 250px;
width: 100%;
height: 100%;
}
.info {
width: 100%;
height: 64px;
font-size: 14px;
margin-top: -64px;
overflow: hidden;
}
.info:before {
content: '';
width: 100%;
height: 100%;
background-color: #f5f5f5;
opacity: 0.5;
display: block;
}
.info > p {
position: relative;
top: -52px;
}
.title {
... ... @@ -385,6 +407,27 @@
width: 970px;
}
.gender-filter {
height: 48px;
background: #f5f7f6;
line-height: 48px;
margin: 10px 0;
font-size: 12px;
padding-left: 10px;
> span {
font-weight: 700;
}
> a {
margin: 0 10px;
}
.checked {
color: #e01;
}
}
.all-goods-menu {
width: 100%;
height: 40px;
... ...