Authored by yyq

global list

... ... @@ -18,7 +18,8 @@ const globalModel = require(`${mRoot}/global`); // global model
exports.list = (req, res, next) => {
globalModel.getGlobalProductListData(req.query, req.yoho).then(result => {
res.render('list/index', Object.assign({
page: 'list'
page: 'list',
pageClass: 'global-list-page'
}, result));
}).catch(next);
};
... ...
... ... @@ -17,9 +17,133 @@ const searchHandler = require('./search-handler');
const pager = require(`${global.utils}/pager`).setPager;
const productProcess = require(`${global.utils}/product-process`);
const GLOBAL_LIST_URI = '/product/global/list';
const _handelGlobalPathNav = (data, channel, page) => {
let rootName = '首页';
if (channel && _.isString(channel)) {
rootName = `${channel.toUpperCase()}首页`;
}
let pathNav = [{
href: channel === 'boys' ? '/' : helpers.urlFormat(`/${channel}/`),
name: rootName,
pathTitle: rootName
}, {
href: helpers.urlFormat(GLOBAL_LIST_URI),
name: '全球购',
pathTitle: '全球购'
}];
if (data.sort) {
pathNav.push({
href: helpers.urlFormat(GLOBAL_LIST_URI, data.sort.params),
name: data.sort.name,
pathTitle: data.sort.name
});
}
if (data.brand) {
pathNav.push({
name: data.brand.name,
pathTitle: data.brand.name
});
page = 'global-brand';
}
return {
pathNav: pathNav,
listType: page
};
};
const _checkSortEqual = (rp, params) => {
let status = true;
_.forEach(rp, (value, key) => {
if (status && params[key] !== value) {
status = false;
}
});
return status;
};
const _handelGlobalSort = (origin, params, originParams) => {
let all = [{
name: '全部品类',
href: `${searchHandler.handleFilterUrl(params, {}, {msort: true, misort: true, sort: true})}`
}];
let list = [];
let selectSort = {};
_.forEach(origin, value => {
let equalCategory = _checkSortEqual(value.relation_parameter, originParams);
let category = {
name: value.category_name,
num: value.node_count,
childList: [
{
name: `全部${value.category_name}`,
num: value.node_count,
href: `${searchHandler.handleFilterUrl(params, value.relation_parameter)}`,
childActive: _checkSortEqual(value.relation_parameter, originParams)
}
]
};
if (equalCategory) {
Object.assign(selectSort, {
name: value.category_name,
params: value.relation_parameter
});
}
_.forEach(value.sub, subValue => {
let child = {
name: subValue.category_name,
num: subValue.node_count,
href: `${searchHandler.handleFilterUrl(params, subValue.relation_parameter)}`,
childActive: _checkSortEqual(subValue.relation_parameter, originParams)
};
category.childList.push(child);
if (child.childActive) {
category.active = true;
Object.assign(selectSort, {
name: subValue.category_name,
params: subValue.relation_parameter
});
}
});
list.push(category);
});
return {
allSort: {
all: all,
list: list
},
selectSort: selectSort
};
};
const getGlobalProductListData = (params, yoho) => {
let dps = {};
if (params.brand) {
dps.brand = params.brand;
}
return Promise.props({
header: headerModel.requestHeaderData(yoho.channel),
fullList: globalApi.getGlobalProductListAsync({
physical_channel: yoho.channelNum,
limit: 1
}),
list: globalApi.getGlobalProductListAsync(Object.assign({
physical_channel: yoho.channelNum
}, params, {limit: params.limit ? params.limit - 1 : 59}))
... ... @@ -29,23 +153,49 @@ const getGlobalProductListData = (params, yoho) => {
Object.assign(resData, result.header);
if (result.list.code === 200) {
let totalNum = _.get(result.list, 'data.total', 0);
let listData = _.get(result.list, 'data', {});
let totalNum = _.get(listData, 'total', 0);
// let filters = Object.assign(searchHandler.handleFilterDataAll(result[2].data, params),
// finalResult.list.leftContent.sort);
// opts 显示新品、折扣
listData.filter = listData.filter || {};
Object.assign(listData.filter, {
new: 'Y',
specialoffer: 'Y'
});
// filters.checkedConditions.conditions = _.concat(filters.checkedConditions.conditions,
// finalResult.list.leftContent.checked);
resData.list = {
// filters: filters,
// opts: searchHandler.handleOptsData(params, result[2].data.total, result[2].data.filter),
leftContent: _handelGlobalSort(_.get(result.fullList, 'data.filter.group_sort', []), dps, params),
filters: searchHandler.handleFilterDataAll(listData, params),
opts: searchHandler.handleOptsData(params, totalNum, listData.filter),
totalCount: totalNum,
footPager: pager(_.get(result.list, 'data.page_total', 0), params),
goods: productProcess.processProductList(_.get(result.list, 'data.product_list', []),
footPager: pager(_.get(listData, 'page_total', 0), params),
goods: productProcess.processProductList(_.get(listData, 'product_list', []),
Object.assign({showDiscount: false, isGlobal: true}, params)),
hasNextPage: searchHandler.handleNextPage(params, totalNum),
latestWalk: 6 // 最近浏览记录
};
let pathInfo = {};
if (dps.brand) {
let bandInfo = _.find(_.get(result.fullList, 'data.filter.brand', []), o => {
return o.id * 1 === dps.brand * 1;
});
if (bandInfo) {
pathInfo.brand = {
name: bandInfo.brand_name
};
}
}
let selectedSort = _.get(resData.list, 'leftContent.selectSort', {});
if (!_.isEmpty(selectedSort)) {
pathInfo.sort = selectedSort;
}
Object.assign(resData.list, _handelGlobalPathNav(pathInfo, yoho.channel, 'global-list'));
}
return resData;
... ... @@ -68,7 +218,7 @@ const getGlobalProductDetailData = (skn, channelNum, channel) => {
resData.banner = {
bgColor: '#000',
homeUrl: helpers.urlFormat('/product/global/list', {brand: brandInfo.brand_id}),
homeUrl: helpers.urlFormat(GLOBAL_LIST_URI, {brand: brandInfo.brand_id}),
brandName: brandInfo.brand_name,
logo: brandInfo.brand_ico
};
... ... @@ -76,7 +226,7 @@ const getGlobalProductDetailData = (skn, channelNum, channel) => {
resData.pathNav = _.concat(
homeService.getHomeChannelNav(channel),
[
{name: '全球购', href: helpers.urlFormat('/product/global/list')},
{name: '全球购', href: helpers.urlFormat(GLOBAL_LIST_URI)},
{name: detailInfo.product_name || ''}
]
);
... ... @@ -137,7 +287,7 @@ const getGlobalProductDetailData = (skn, channelNum, channel) => {
}
}
if (result.html) {
if (result.html && !_.get(result.html, 'code', '')) {
let regContent = /<body[^>]*>([\s\S]*)<\/body>/.exec(result.html);
html = regContent[1] || '';
... ...
... ... @@ -647,7 +647,9 @@ exports.handleFilterData = (origin, params, total) => {
}
};
dest.brand = formatterFilterBrands(origin.brand, origin.paramBrand, params);
if (origin.brand) {
dest.brand = formatterFilterBrands(origin.brand, origin.paramBrand, params);
}
// 处理价格筛选数据
let priceRangechecked = false;
... ... @@ -751,6 +753,8 @@ exports.handleFilterData = (origin, params, total) => {
// 处理颜色筛选数据
if (!_.isEmpty(origin.color)) {
_.forEach(origin.color, (value) => {
value.color_code = value.color_code.replace(/#/ig, '');
let color = {
checked: parseInt(params.color, 10) === parseInt(value.color_id, 10),
href: handleFilterUrl(params, {color: value.color_id}),
... ... @@ -817,7 +821,7 @@ exports.handleFilterData = (origin, params, total) => {
handleCheckedData(params, dest.gender, 'gender'));
// 处理品牌筛选数据
if (dest.brand.brandsShow) {
if (dest.brand && dest.brand.brandsShow) {
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleBrandCheckedData(params, dest.brand.selectedBrands));
... ... @@ -1364,10 +1368,9 @@ exports.handleFilterUrl = handleFilterUrl;
exports.handleCheckedData = handleCheckedData;
exports.handleNextPage = (params, total) => {
let href;
let currentPage = parseInt((_.isEmpty(params.page) ? 1 : params.page), 10); // 当前页
let perPageCount = parseInt((_.isEmpty(params.limit) ? 60 : params.limit) - 1, 10); // 每页商品数
let currentPage = parseInt((params.page ? params.page : 1), 10); // 当前页
let perPageCount = parseInt((params.limit ? params.limit : 60) - 1, 10); // 每页商品数
let totalPage = _.ceil(total / perPageCount); // 总页数
if (currentPage >= totalPage) {
... ...
<div class="product-page yoho-page product-list-page">
<div class="product-page yoho-page product-list-page {{pageClass}}">
{{#if hideInfo}}
<div id="page-hide-info"{{#each hideInfo}} data-{{@key}}="{{.}}"{{/each}}></div>
{{/if}}
... ...
... ... @@ -6,7 +6,11 @@
{{#each pathNav}}
{{#if name}}
{{#if href}}
<a {{#if @last}}class="last"{{/if}} href="{{href}}" title="{{pathTitle}}">{{{name}}}</a>
{{#if @last}}
<span class="last" title="{{pathTitle}}">{{{name}}}</span>
{{^}}
<a href="{{href}}" title="{{pathTitle}}">{{{name}}}</a>
{{/if}}
{{^}}
<span {{#if @last}}class="last"{{/if}} title="{{pathTitle}}">{{{name}}}</span>
{{/if}}
... ...

2.22 KB | W: | H:

3.76 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
@import "detail";
.global-list-page {
.path-nav:after {
content: "";
width: 54px;
height: 20px;
margin-left: 6px;
display: inline-block;
background-image: url("/product/global-path-icon.png");
vertical-align: bottom;
}
}
... ...
... ... @@ -33,10 +33,11 @@ const joinUrl = (params) => {
*/
exports.setPager = (total, params)=>{
let resData = {};
let defParams = _.cloneDeep(params);
let cutStatus, // 切割状态 1:去头 2:去尾 3:双切
i;
let pages = [];
let currentPage = parseInt(params.page || 1, 10); // 当前页
let currentPage = parseInt(defParams.page || 1, 10); // 当前页
// 小于两页直接退出
if (total < 2) {
... ... @@ -55,7 +56,7 @@ exports.setPager = (total, params)=>{
}
pages.push({
url: joinUrl(Object.assign(params, {page: i})),
url: joinUrl(Object.assign(defParams, {page: i})),
num: i,
cur: currentPage === i
});
... ... @@ -74,7 +75,7 @@ exports.setPager = (total, params)=>{
}
list.push({
url: joinUrl(Object.assign(params, {page: p})),
url: joinUrl(Object.assign(defParams, {page: p})),
num: p
});
}
... ... @@ -88,7 +89,7 @@ exports.setPager = (total, params)=>{
}
list.push({
url: joinUrl(Object.assign(params, {page: p})),
url: joinUrl(Object.assign(defParams, {page: p})),
num: p
});
}
... ... @@ -102,12 +103,12 @@ exports.setPager = (total, params)=>{
if (fnum > 1) {
if (fnum > 2) {
pages = _.concat({
url: joinUrl(Object.assign(params, {page: 1})),
url: joinUrl(Object.assign(defParams, {page: 1})),
num: 1
}, {num: '...'}, pages);
} else {
pages = _.concat({
url: joinUrl(Object.assign(params, {page: 1})),
url: joinUrl(Object.assign(defParams, {page: 1})),
num: 1
}, pages);
}
... ... @@ -116,12 +117,12 @@ exports.setPager = (total, params)=>{
if (lnum < total) {
if (lnum < total - 1) {
pages = _.concat(pages, {num: '...'}, {
url: joinUrl(Object.assign(params, {page: total})),
url: joinUrl(Object.assign(defParams, {page: total})),
num: total
});
} else {
pages = _.concat(pages, {
url: joinUrl(Object.assign(params, {page: total})),
url: joinUrl(Object.assign(defParams, {page: total})),
num: total
});
}
... ... @@ -131,12 +132,12 @@ exports.setPager = (total, params)=>{
// 上一页
if (currentPage > 1) {
resData.prePage = {url: joinUrl(Object.assign(params, {page: currentPage - 1}))};
resData.prePage = {url: joinUrl(Object.assign(defParams, {page: currentPage - 1}))};
}
// 下一页
if (currentPage < total) {
resData.nextPage = {url: joinUrl(Object.assign(params, {page: currentPage + 1}))};
resData.nextPage = {url: joinUrl(Object.assign(defParams, {page: currentPage + 1}))};
}
return resData;
... ...
'use strict';
const _ = require('lodash');
const config = global.yoho.config;
const camelCase = global.yoho.camelCase;
const helpers = global.yoho.helpers;
... ... @@ -208,9 +207,13 @@ exports.processProductList = (list, options) => {
product.is_few = product.is_soon_sold_out === 'Y';
if (product.is_global === 'Y') {
product.url = `${config.siteUrl}/product/global/${product.product_skn}.html`;
product.url = helpers.urlFormat(`/product/global/${product.product_skn}.html`, null);
} else {
product.url = helpers.getUrlBySkc(product.product_id);// eslint-disable-line
if (product.product_id) {
product.url = helpers.getUrlBySkc(product.product_id);
} else if (product.product_skn) {
product.url = helpers.urlFormat('/common/erp2goods', {skn: product.product_skn});
}
}
// 4.6需求 商品列表显示店铺名
... ...