|
|
|
|
|
'use strict';
|
|
|
|
|
|
const _ = require('lodash');
|
|
|
const Search = require('../models/list');
|
|
|
const camelCase = global.yoho.camelCase;
|
|
|
|
...
|
...
|
@@ -22,53 +23,112 @@ function brandLetters() { |
|
|
return letters;
|
|
|
}
|
|
|
|
|
|
function peopleChoose(channel) {
|
|
|
function peopleChoose(gender) {
|
|
|
return [
|
|
|
{
|
|
|
name: '男士',
|
|
|
value: '0',
|
|
|
checked: channel === 'men'
|
|
|
value: '1,3'
|
|
|
}, {
|
|
|
name: '女士',
|
|
|
value: '1',
|
|
|
checked: channel === 'women'
|
|
|
value: '2,3'
|
|
|
}];
|
|
|
}
|
|
|
|
|
|
function newFilter(key, value, name) {
|
|
|
return {
|
|
|
key: key,
|
|
|
value: value,
|
|
|
name: name
|
|
|
};
|
|
|
}
|
|
|
|
|
|
const list = {
|
|
|
index: (req, res, next) => {
|
|
|
let channel = req.query.channel || req.cookies._Channel;
|
|
|
let sex = req.query.sex;
|
|
|
let page = req.query.page || 1;
|
|
|
let brand = req.query.brand || 0;
|
|
|
let sort = req.query.sort || '';
|
|
|
let gender = req.query.gender || '';
|
|
|
let price = req.query.price || '';
|
|
|
let size = req.query.size || '';
|
|
|
|
|
|
if (sex === '0') {
|
|
|
channel = 'men';
|
|
|
} else if (sex === '1') {
|
|
|
channel = 'women';
|
|
|
}
|
|
|
Search.queryProduct({
|
|
|
page: page,
|
|
|
brand: brand,
|
|
|
sort: sort,
|
|
|
gender: gender,
|
|
|
size: size,
|
|
|
price: price
|
|
|
}).then(result => {
|
|
|
|
|
|
Search.queryProduct({}).then(result => {
|
|
|
if (result && result.code === 200 && result.data) {
|
|
|
let data = camelCase(result.data);
|
|
|
let priceRange = data.filter.priceRange;
|
|
|
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 = data.filter.color;
|
|
|
let sorts = data.filter.groupSort;
|
|
|
let filters = [];
|
|
|
|
|
|
genders.forEach(g => {
|
|
|
if (g.value === gender) {
|
|
|
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;
|
|
|
});
|
|
|
|
|
|
priceRange = Object.keys(priceRange).map((k) => {
|
|
|
let prices = k.split(',');
|
|
|
if (!_.isArray(sizeInfo)) {
|
|
|
sizeInfo.checked = true;
|
|
|
sizeInfo = [sizeInfo];
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
lower: prices[0],
|
|
|
higher: prices[1]
|
|
|
if (size) {
|
|
|
sizeInfo.forEach(s => {
|
|
|
if (s.sizeId === size) {
|
|
|
filters.push(newFilter('size', size, s.sizeName));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (brand) {
|
|
|
let brandNames = brands.filter(b => {
|
|
|
return (',' + brand + ',').index(',' + b.id + ',') >= 0;
|
|
|
}).map(b => {
|
|
|
return b.brandName;
|
|
|
}).join('、');
|
|
|
|
|
|
filters.push('brand', brand, brandNames);
|
|
|
}
|
|
|
|
|
|
ret = {
|
|
|
people: genders,
|
|
|
sortData: sorts,
|
|
|
brandData: brands,
|
|
|
colors: colors,
|
|
|
size: sizeInfo,
|
|
|
priceRange: priceRange,
|
|
|
filters: filters
|
|
|
};
|
|
|
}).sort((a, b) => {
|
|
|
return a.lower - b.lower;
|
|
|
});
|
|
|
res.display('list', {
|
|
|
}
|
|
|
|
|
|
res.display('list', _.assign(ret, {
|
|
|
letters: brandLetters(),
|
|
|
people: peopleChoose(channel),
|
|
|
sortData: data.filter.groupSort,
|
|
|
brandData: data.filter.brand,
|
|
|
colors: data.filter.color,
|
|
|
size: data.filter.size,
|
|
|
priceRange: priceRange,
|
|
|
total: data.total,
|
|
|
pageTotal: data.pageTotal,
|
|
|
pageNo: data.page,
|
...
|
...
|
@@ -99,7 +159,7 @@ const list = { |
|
|
module: 'product',
|
|
|
page: 'list',
|
|
|
title: '列表'
|
|
|
});
|
|
|
}));
|
|
|
} else {
|
|
|
throw 'query product error';
|
|
|
}
|
...
|
...
|
|