Authored by yyq

断码区

... ... @@ -79,7 +79,8 @@ exports.vip = (req, res, next) => {
req.ctx(sale).getSaleOthersData(params, channel).then((result) => {
res.render('sale/other', Object.assign({
module: 'product',
page: 'sale'
page: 'sale',
pageClass: 'static-list-page'
}, {
saleList: result,
headerData: result.headerData
... ... @@ -127,7 +128,8 @@ exports.breakingYards = (req, res, next) => {
let responseData = {
module: 'product',
page: 'sale'
page: 'sale',
pageClass: 'static-list-page'
};
req.ctx(sale).getSalebreakingYardsData(params, channel).then((result) => {
... ...
... ... @@ -61,10 +61,11 @@ const handleSaleNewSaleSortData = (params) => {
* 处理断码区分类筛选数据
* @return {[type]} [description]
*/
const handleSalebreakingYardsSortData = (origin, params) => {
const handleSalebreakingYardsSortData = (origin, params, seatUrl) => {
let dest = [];
if (!_.isEmpty(params.sort)) {
seatUrl = seatUrl || '';
// 是否有分类筛选参数,如果有
_.forEach(params.sort.split(','), sortParam => {
... ... @@ -79,9 +80,7 @@ const handleSalebreakingYardsSortData = (origin, params) => {
_.forEach(value.sub, subValue => {
dest.push({
checked: +params.size === +subValue.size_id,
href: handleFilterUrl(params, {
size: subValue.size_id
}),
href: seatUrl.replace('{size}', subValue.size_id),
name: subValue.size_name
});
});
... ... @@ -94,9 +93,7 @@ const handleSalebreakingYardsSortData = (origin, params) => {
_.forEach(value.sub, subValue => {
dest.push({
checked: +params.size === +subValue.size_id,
href: handleFilterUrl(params, {
size: subValue.size_id
}),
href: seatUrl.replace('{size}', subValue.size_id),
name: subValue.size_name
});
});
... ... @@ -113,7 +110,7 @@ const handleSalebreakingYardsSortData = (origin, params) => {
* @param {[type]} param [description]
* @return {[type]} [description]
*/
const handleCheckedData = (params, origin, param) => {
const handleCheckedData = (params, origin, param, baseUrl) => {
let dest = [];
// 品牌选中数据
... ... @@ -126,7 +123,7 @@ const handleCheckedData = (params, origin, param) => {
dest.push({
name: value.name,
href: handleFilterUrl(params, tempPatam)
href: handleStaticFilterUrl(baseUrl, params, tempPatam)
});
}
});
... ... @@ -458,9 +455,11 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
name: '0~9'
}],
showMore: true,
showMulti: true
showMulti: true,
seatUrl: handleStaticFilterUrl(baseUrl, params, {brand: '{seat}'})
},
price: [],
priceSeatUrl: handleFilterUrl(baseUrl, params, {price: '{seat}'}),
gender: [],
checkedConditions: {
conditions: []
... ... @@ -486,13 +485,14 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
if (origin.brand) {
let count = 0;
const brandHref = handleStaticFilterUrl(baseUrl, params, {brand: '{brand}'});
_.forEach(origin.brand, function(value) {
let brand = {
checked: (typeof _.find(intBrands, o => {
return _.isEqual(o, value.id);
}) !== 'undefined'),
href: handleStaticFilterUrl(baseUrl, params, {brand: value.id}),
href: brandHref.replace('{brand}', value.id),
name: value.brand_name,
key: value.brand_domain,
id: value.id
... ... @@ -529,13 +529,15 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
let priceRangechecked = false;
if (!_.isEmpty(origin.priceRange)) {
const priceHref = handleStaticFilterUrl(baseUrl, params, {price: '{price}'});
_.forEach(origin.priceRange, (value, key) => {
if (params.price === key) {
priceRangechecked = true;
}
let price = {
checked: params.price === key,
href: handleStaticFilterUrl(baseUrl, params, {price: key}),
href: priceHref.replace('{price}', key),
name: value
};
... ... @@ -559,14 +561,16 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
}
}
const genderHref = handleStaticFilterUrl(baseUrl, params, {gender: '{gender}'});
// 处理性别数据
dest.gender = [{
name: 'BOYS',
href: handleStaticFilterUrl(baseUrl, params, {gender: '1,3'}),
href: genderHref.replace('{gender}', '1,3'),
checked: params.gender === '1,3'
}, {
name: 'GIRLS',
href: handleStaticFilterUrl(baseUrl, params, {gender: '2,3'}),
href: genderHref.replace('{gender}', '2,3'),
checked: params.gender === '2,3'
}];
... ... @@ -576,53 +580,49 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
// 最新降价筛选数据处理
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleCheckedData(params, dest.discount, 'p_d'));
handleCheckedData(params, dest.discount, 'p_d', baseUrl));
}
// 尺码处理
if (!_.isEmpty(origin.size)) {
const sizeHref = handleStaticFilterUrl(baseUrl, params, {size: '{size}'});
if (params.saleType === '5') {
// 断码区尺码处理
dest.size = handleSalebreakingYardsSortData(origin.size, params);
dest.size = handleSalebreakingYardsSortData(origin.size, params, sizeHref);
} else {
dest.size = [];
if (_.isArray(origin.size)) {
_.forEach(origin.size, value => {
dest.size.push({
checked: parseInt(params.size, 10) === parseInt(value.size_id, 10),
href: handleStaticFilterUrl(baseUrl, params, {
size: value.size_id
}),
href: sizeHref.replace('{size}', value.size_id),
name: value.size_name
});
});
} else {
dest.size.push({
checked: parseInt(params.size, 10) === parseInt(origin.size.size_id, 10),
href: handleStaticFilterUrl(baseUrl, params, {
size: origin.size.size_id
}),
href: sizeHref.replace('{size}', origin.size.size_id),
name: origin.size.size_name
});
}
}
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleCheckedData(params, dest.size, 'size'));
handleCheckedData(params, dest.size, 'size', baseUrl));
}
// 年龄处理
dest.ageLevel = origin.ageLevel;
_.forEach(dest.ageLevel, item => {
item.href = handleStaticFilterUrl(baseUrl, params, {age_level: item.id});
const ageHref = handleStaticFilterUrl(baseUrl, params, {age_level: '{age}'});
_.forEach(dest.ageLevel, item => {
item.href = ageHref.replace('{age}', item.id);
item.checked = params.age_level === item.id;
});
// 如果年龄就一个,默认选中
... ... @@ -640,7 +640,7 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
// 处理频道筛选数据
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleCheckedData(params, dest.gender, 'gender'));
handleCheckedData(params, dest.gender, 'gender', baseUrl));
// 处理品牌筛选数据
if (dest.brand.brandsShow) {
... ... @@ -650,11 +650,11 @@ exports.handleSaleFilterData = (origin, params, baseUrl) => {
// 处理价格筛选数据
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleCheckedData(params, dest.price, 'price'));
handleCheckedData(params, dest.price, 'price', baseUrl));
// 处理价格筛选数据
dest.checkedConditions.conditions = _.union(dest.checkedConditions.conditions,
handleCheckedData(params, dest.ageLevel, 'age_level'));
handleCheckedData(params, dest.ageLevel, 'age_level', baseUrl));
return dest;
};
... ...
... ... @@ -448,6 +448,8 @@ function getSaleDiscountData(params, channel) {
* @returns {*|Promise.<TResult>}
*/
function getSalebreakingYardsData(params, channel) {
const baseUrl = `/${_.toLower(channel)}-sale/breakingYards`;
return api.all([
headerModel.requestHeaderData(channel),
this.saleApi.getSaleBannerList(contentCode[channel].breakCode),
... ... @@ -490,7 +492,8 @@ function getSalebreakingYardsData(params, channel) {
// 处理筛选条件数据
if (subResult[0].code === 200) {
finalResult.leftContent =
publicHandler.handleSaleSortData(subResult[0].data.filter.group_sort, params);
publicHandler.handleSaleSortData(subResult[0].data.filter.group_sort,
params, '', baseUrl);
}
// 处理商品数据
... ... @@ -499,13 +502,13 @@ function getSalebreakingYardsData(params, channel) {
if (!_.isEmpty(subResult[1].data.filter)) {
finalResult.filters = publicHandler.handleSaleFilterData(
Object.assign(subResult[1].data.filter, {size: result[2].data}),
params);
params, baseUrl);
}
Object.assign(finalResult, {
goods: productProcess.processProductList(subResult[1].data.product_list),
opts: publicHandler.handleSaleOptsData(params, subResult[1].data.total),
opts: publicHandler.handleSaleOptsData(params, subResult[1].data.total, '', baseUrl),
totalCount: subResult[1].data.total,
footPager: publicHandler.handlePagerData(subResult[1].data.total, params)
footPager: listHandler.handlePagerData(subResult[1].data.total, params, true, baseUrl)
});
// 处理所有商品标题数据
... ...
... ... @@ -59,6 +59,7 @@ router.get('/sale/vip', sale.vip); // VIP 活动专区
router.get('/sale/vip/:pathQs', paramParse, sale.vip); // VIP 活动专区
router.get('/sale/discount/detail', sale.discount); // 折扣专场详情页
router.get('/sale/breakingYards', sale.breakingYards); // 断码区
router.get('/sale/breakingYards/:pathQs', paramParse, sale.breakingYards); // 断码区
router.get('/sale/newSale', sale.newSale); // 最新降价
router.get('/sale/special/detail', sale.special); // sale活动页 原PHP sale.yohobuy.com
router.get('/sale/goods', sale.getGoodsList); // ajax 获取商品列表
... ...
<div class="new-sale-page product-page yoho-page sale-discount-page">
<div class="new-sale-page product-page yoho-page sale-discount-page {{pageClass}}">
{{# saleList}}
{{> sale/sale-banner}}
<div class="center-content clearfix">
{{# pathNav}}
{{# pathNav}}
{{> common/path-nav}}
{{/ pathNav}}
{{# saleTitle}}
<div class="header-title">
{{name}}
... ...
... ... @@ -27,6 +27,15 @@ module.exports = [
},
{
type: TYPE.redirect,
origin: /^\/product\/sale\/(vip|breakingYards)(.*)$/,
target: (req, match, type) => {
let channel = req.query.channel || req.yoho.channel;
return helpers.urlFormat(`/${channel}-sale/${type}`);
}
},
{
type: TYPE.redirect,
origin: '/product/sale/?msort=10',
target: helpers.urlFormat('/product/lifestyle-sale/')
},
... ...