...
|
...
|
@@ -3,89 +3,98 @@ |
|
|
|
|
|
const _ = require('lodash');
|
|
|
const Search = require('../models/list');
|
|
|
const BrandData = require('../models/brand-service');
|
|
|
const camelCase = global.yoho.camelCase;
|
|
|
const DateHelper = require('../models/helpers');
|
|
|
|
|
|
function brandLetters() {
|
|
|
let letters = [];
|
|
|
function newFilter(key, value, name) {
|
|
|
return {
|
|
|
key: key,
|
|
|
value: value,
|
|
|
name: name
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function filterHandle(filter, q) {
|
|
|
let priceRange = filter.priceRange;
|
|
|
let sizeInfo = filter.size;
|
|
|
let genders = DateHelper.genders();
|
|
|
let brands = filter.brand;
|
|
|
let colors = DateHelper.colorConver(filter.color);
|
|
|
let sorts = filter.groupSort;
|
|
|
let filters = [];
|
|
|
|
|
|
genders.forEach(g => {
|
|
|
if (g.value === q.gender) {
|
|
|
g.checked = true;
|
|
|
filters.push(newFilter('gender', q.gender, g.name));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
priceRange = Object.keys(priceRange).map((k) => {
|
|
|
let prices = k.split(',');
|
|
|
|
|
|
letters.push({
|
|
|
letter: '0-9',
|
|
|
selected: false
|
|
|
if (k === q.price) {
|
|
|
filters.push(newFilter('price', q.price, `¥${prices[0]}-¥${prices[1]}`));
|
|
|
}
|
|
|
return {
|
|
|
lower: prices[0],
|
|
|
higher: prices[1]
|
|
|
};
|
|
|
}).sort((a, b) => {
|
|
|
return a.lower - b.lower;
|
|
|
});
|
|
|
|
|
|
for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
|
|
|
letters.push({
|
|
|
letter: String.fromCharCode(i),
|
|
|
selected: false
|
|
|
if (!_.isArray(sizeInfo)) {
|
|
|
sizeInfo.checked = true;
|
|
|
sizeInfo = [sizeInfo];
|
|
|
}
|
|
|
|
|
|
if (q.size) {
|
|
|
sizeInfo.forEach(s => {
|
|
|
if (s.sizeId === parseInt(q.size, 10)) {
|
|
|
filters.push(newFilter('size', q.size, s.sizeName));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return letters;
|
|
|
}
|
|
|
if (q.brand) {
|
|
|
let brandNames = brands.filter(b => {
|
|
|
return (',' + q.brand + ',').indexOf(',' + b.id + ',') >= 0;
|
|
|
}).map(b => {
|
|
|
return b.brandName;
|
|
|
}).join('、');
|
|
|
|
|
|
function peopleChoose() {
|
|
|
return [
|
|
|
{
|
|
|
name: '男士',
|
|
|
value: '1,3'
|
|
|
}, {
|
|
|
name: '女士',
|
|
|
value: '2,3'
|
|
|
}];
|
|
|
}
|
|
|
filters.push(newFilter('brand', q.brand, brandNames));
|
|
|
}
|
|
|
|
|
|
function colorConver(colors) {
|
|
|
return colors.map(c => {
|
|
|
return {
|
|
|
id: c.colorId,
|
|
|
title: c.colorName,
|
|
|
rgb: c.colorValue || '#' + c.colorCode
|
|
|
};
|
|
|
});
|
|
|
}
|
|
|
if (q.color) {
|
|
|
colors.forEach(c => {
|
|
|
if (c.id === parseInt(q.color, 10)) {
|
|
|
c.cur = true;
|
|
|
|
|
|
function newFilter(key, value, name) {
|
|
|
return {
|
|
|
key: key,
|
|
|
value: value,
|
|
|
name: name
|
|
|
};
|
|
|
}
|
|
|
let fi = newFilter('color', q.color, c.title);
|
|
|
|
|
|
function getNav(channel, sort, sorts) {
|
|
|
let nav = [{
|
|
|
link: '#',
|
|
|
pathTitle: '',
|
|
|
name: 'MEN首页'
|
|
|
}];
|
|
|
|
|
|
if (sort) {
|
|
|
sorts.forEach(s => {
|
|
|
if (s.relationParameter.sort === sort) {
|
|
|
nav.push({
|
|
|
link: '#',
|
|
|
pathTitle: '',
|
|
|
name: s.categoryName
|
|
|
});
|
|
|
} else if (s.sub) {
|
|
|
s.sub.forEach(m => {
|
|
|
if (m.relationParameter.sort === sort) {
|
|
|
nav.push({
|
|
|
link: '#',
|
|
|
pathTitle: '',
|
|
|
name: s.categoryName
|
|
|
});
|
|
|
nav.push({
|
|
|
link: '#',
|
|
|
pathTitle: '',
|
|
|
name: m.categoryName
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
fi.color = c;
|
|
|
filters.push(fi);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
return nav;
|
|
|
|
|
|
return {
|
|
|
people: genders,
|
|
|
sortData: sorts,
|
|
|
brandData: brands,
|
|
|
colors: colors,
|
|
|
size: sizeInfo,
|
|
|
priceRange: priceRange,
|
|
|
filters: filters,
|
|
|
showFilters: filters.length > 0,
|
|
|
letters: DateHelper.brandLetters(),
|
|
|
navPath: {
|
|
|
nav: DateHelper.getNav('', q.sort, sorts)
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
const list = {
|
...
|
...
|
@@ -99,6 +108,18 @@ const list = { |
|
|
let color = req.query.color || '';
|
|
|
let order = req.query.order || '';
|
|
|
|
|
|
let retDate = {
|
|
|
module: 'product',
|
|
|
page: 'list',
|
|
|
title: '列表'
|
|
|
};
|
|
|
|
|
|
if (brand) {
|
|
|
BrandData.getBannerInfoAsync(brand).then(brandInfo => {
|
|
|
console.log(brandInfo);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
Search.queryProduct({
|
|
|
page: page,
|
|
|
brand: brand,
|
...
|
...
|
@@ -112,108 +133,21 @@ const list = { |
|
|
|
|
|
if (result && result.code === 200 && result.data) {
|
|
|
let data = camelCase(result.data);
|
|
|
let ret = {};
|
|
|
|
|
|
if (data.filter) {
|
|
|
let priceRange = data.filter.priceRange;
|
|
|
let sizeInfo = data.filter.size;
|
|
|
let genders = peopleChoose(gender);
|
|
|
let brands = data.filter.brand;
|
|
|
let colors = colorConver(data.filter.color);
|
|
|
let sorts = data.filter.groupSort;
|
|
|
let filters = [];
|
|
|
|
|
|
genders.forEach(g => {
|
|
|
if (g.value === gender) {
|
|
|
g.checked = true;
|
|
|
filters.push(newFilter('gender', gender, g.name));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
priceRange = Object.keys(priceRange).map((k) => {
|
|
|
let prices = k.split(',');
|
|
|
|
|
|
if (k === price) {
|
|
|
filters.push(newFilter('price', price, `¥${prices[0]}-¥${prices[1]}`));
|
|
|
}
|
|
|
return {
|
|
|
lower: prices[0],
|
|
|
higher: prices[1]
|
|
|
};
|
|
|
}).sort((a, b) => {
|
|
|
return a.lower - b.lower;
|
|
|
});
|
|
|
|
|
|
if (!_.isArray(sizeInfo)) {
|
|
|
sizeInfo.checked = true;
|
|
|
sizeInfo = [sizeInfo];
|
|
|
}
|
|
|
|
|
|
if (size) {
|
|
|
sizeInfo.forEach(s => {
|
|
|
if (s.sizeId === parseInt(size)) {
|
|
|
filters.push(newFilter('size', size, s.sizeName));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (brand) {
|
|
|
let brandNames = brands.filter(b => {
|
|
|
return (',' + brand + ',').indexOf(',' + b.id + ',') >= 0;
|
|
|
}).map(b => {
|
|
|
return b.brandName;
|
|
|
}).join('、');
|
|
|
|
|
|
filters.push(newFilter('brand', brand, brandNames));
|
|
|
}
|
|
|
|
|
|
if (color) {
|
|
|
colors.forEach(c => {
|
|
|
if (c.id === parseInt(color)) {
|
|
|
c.cur = true;
|
|
|
|
|
|
let fi = newFilter('color', color, c.title);
|
|
|
|
|
|
fi.color = c;
|
|
|
filters.push(fi);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
ret = {
|
|
|
people: genders,
|
|
|
sortData: sorts,
|
|
|
brandData: brands,
|
|
|
colors: colors,
|
|
|
size: sizeInfo,
|
|
|
priceRange: priceRange,
|
|
|
filters: filters,
|
|
|
showFilters: filters.length > 0,
|
|
|
navPath: {
|
|
|
nav: getNav('', sort, sorts)
|
|
|
}
|
|
|
};
|
|
|
retDate.filter = filterHandle(data.filter, req.query);
|
|
|
}
|
|
|
|
|
|
let pagination = {
|
|
|
retDate.paginationData = {
|
|
|
page: page,
|
|
|
limit: data.limit || 45,
|
|
|
total: data.total
|
|
|
};
|
|
|
|
|
|
console.log(pagination);
|
|
|
|
|
|
res.display('list', _.assign(ret, {
|
|
|
letters: brandLetters(),
|
|
|
total: data.total,
|
|
|
pageTotal: data.pageTotal,
|
|
|
pageNo: data.page,
|
|
|
queryParams: req.query
|
|
|
};
|
|
|
res.display('list', _.assign(retDate, {
|
|
|
products: data.productList,
|
|
|
pagination: pagination,
|
|
|
order: order,
|
|
|
module: 'product',
|
|
|
page: 'list',
|
|
|
title: '列表'
|
|
|
order: order
|
|
|
}));
|
|
|
} else {
|
|
|
return Promise.reject('query product error');
|
...
|
...
|
|