Showing
14 changed files
with
391 additions
and
169 deletions
1 | /* | 1 | /* |
2 | - * @Author: Targaryen | ||
3 | - * @Date: 2016-05-21 10:59:20 | ||
4 | - * @Last Modified by: Targaryen | ||
5 | - * @Last Modified time: 2016-06-08 13:37:17 | 2 | + * @Author: sefon |
3 | + * @Date: 2016-07-24 11:40:21 | ||
6 | */ | 4 | */ |
7 | 5 | ||
8 | 'use strict'; | 6 | 'use strict'; |
9 | const mRoot = '../models'; | 7 | const mRoot = '../models'; |
10 | - | ||
11 | -// list 页 model | ||
12 | const list = require(`${mRoot}/list`); | 8 | const list = require(`${mRoot}/list`); |
13 | -const headerModel = require('../../../doraemon/models/header'); | ||
14 | - | ||
15 | -exports.getProductPic = (req, res) => { | ||
16 | - | ||
17 | - res.jsonp(); | ||
18 | -}; | ||
19 | 9 | ||
20 | /** | 10 | /** |
21 | - * 商品列表页 | 11 | + * 商品分类列表页 |
22 | * @param {[type]} req [description] | 12 | * @param {[type]} req [description] |
23 | * @param {[type]} res [description] | 13 | * @param {[type]} res [description] |
24 | * @return {[type]} [description] | 14 | * @return {[type]} [description] |
25 | */ | 15 | */ |
26 | exports.index = (req, res, next) => { | 16 | exports.index = (req, res, next) => { |
27 | - let params = Object.assign({ | ||
28 | - order: 's_t_asc,s_s_asc' | ||
29 | - }, req.query); | 17 | + let resData = {}; |
30 | 18 | ||
31 | - let channel = req.query.channel || req.cookies._Channel || 'boys'; | ||
32 | - | ||
33 | - params.uid = req.user.uid || 0; | ||
34 | - | ||
35 | - let responseData = { | ||
36 | - module: 'product', | ||
37 | - page: 'sale', | ||
38 | - footerTop: true | ||
39 | - }; | 19 | + list.getListData(req.query).then(result => { |
20 | + Object.assign(resData, result); | ||
21 | + res.render('list/index', resData); | ||
22 | + }).catch(next); | ||
40 | 23 | ||
41 | - let headerData = {}; | 24 | +}; |
42 | 25 | ||
43 | - headerModel.requestHeaderData(channel).then(result => { | ||
44 | - headerData = result.headerData; | ||
45 | - }); | 26 | +/** |
27 | + * 新品到着 | ||
28 | + * @param {[type]} req [description] | ||
29 | + * @param {[type]} res [description] | ||
30 | + * @return {[type]} [description] | ||
31 | + */ | ||
32 | +exports.new = (req, res, next) => { | ||
33 | + let resData = {}; | ||
46 | 34 | ||
47 | - list.getSaleOthersData(params, channel).then((result) => { | ||
48 | - responseData.saleList = result; | ||
49 | - responseData.resultShow = JSON.stringify(result, null, 4); | ||
50 | - responseData.headerData = headerData; | ||
51 | - res.render('sale/other', responseData); | 35 | + list.getListData(req.query).then(result => { |
36 | + Object.assign(resData, result); | ||
37 | + res.render('list/index', resData); | ||
52 | }).catch(next); | 38 | }).catch(next); |
53 | 39 | ||
54 | }; | 40 | }; |
apps/product/controllers/outletsList.js
0 → 100644
1 | +/* | ||
2 | + * @Author: Targaryen | ||
3 | + * @Date: 2016-05-21 10:59:20 | ||
4 | + * @Last Modified by: Targaryen | ||
5 | + * @Last Modified time: 2016-06-08 13:37:17 | ||
6 | + */ | ||
7 | + | ||
8 | +'use strict'; | ||
9 | +const mRoot = '../models'; | ||
10 | + | ||
11 | +// list 页 model | ||
12 | +const list = require(`${mRoot}/outletsList`); | ||
13 | +const headerModel = require('../../../doraemon/models/header'); | ||
14 | + | ||
15 | +exports.getProductPic = (req, res) => { | ||
16 | + | ||
17 | + res.jsonp(); | ||
18 | +}; | ||
19 | + | ||
20 | +/** | ||
21 | + * 商品列表页 | ||
22 | + * @param {[type]} req [description] | ||
23 | + * @param {[type]} res [description] | ||
24 | + * @return {[type]} [description] | ||
25 | + */ | ||
26 | +exports.index = (req, res, next) => { | ||
27 | + let params = Object.assign({ | ||
28 | + order: 's_t_asc,s_s_asc' | ||
29 | + }, req.query); | ||
30 | + | ||
31 | + let channel = req.query.channel || req.cookies._Channel || 'boys'; | ||
32 | + | ||
33 | + params.uid = req.user.uid || 0; | ||
34 | + | ||
35 | + let responseData = { | ||
36 | + module: 'product', | ||
37 | + page: 'sale', | ||
38 | + footerTop: true | ||
39 | + }; | ||
40 | + | ||
41 | + let headerData = {}; | ||
42 | + | ||
43 | + headerModel.requestHeaderData(channel).then(result => { | ||
44 | + headerData = result.headerData; | ||
45 | + }); | ||
46 | + | ||
47 | + list.getListData(params, channel).then((result) => { | ||
48 | + responseData.saleList = result; | ||
49 | + responseData.resultShow = JSON.stringify(result, null, 4); | ||
50 | + responseData.headerData = headerData; | ||
51 | + res.render('sale/other', responseData); | ||
52 | + }).catch(next); | ||
53 | + | ||
54 | +}; |
@@ -17,7 +17,6 @@ const search = require(`${mRoot}/search`); | @@ -17,7 +17,6 @@ const search = require(`${mRoot}/search`); | ||
17 | exports.index = (req, res, next) => { | 17 | exports.index = (req, res, next) => { |
18 | let resData = {}; | 18 | let resData = {}; |
19 | 19 | ||
20 | - // req.cookie._channel;//频道 | ||
21 | search.getSearchData(req.query).then(result => { | 20 | search.getSearchData(req.query).then(result => { |
22 | Object.assign(resData, result); | 21 | Object.assign(resData, result); |
23 | res.render('search/index', resData); | 22 | res.render('search/index', resData); |
1 | /* | 1 | /* |
2 | - * @Author: Targaryen | ||
3 | - * @Date: 2016-06-02 15:11:15 | ||
4 | - * @Last Modified by: Targaryen | ||
5 | - * @Last Modified time: 2016-06-08 14:57:54 | 2 | + * @Author: sefon |
3 | + * @Date: 2016-07-24 11:48:22 | ||
6 | */ | 4 | */ |
7 | 5 | ||
8 | 'use strict'; | 6 | 'use strict'; |
9 | const utils = '../../../utils'; | 7 | const utils = '../../../utils'; |
10 | const api = global.yoho.API; | 8 | const api = global.yoho.API; |
11 | -const saleApi = require('./sale-api'); | ||
12 | -const outletsApi = require('./outlets-api'); | 9 | +const searchApi = require('./search-api'); |
10 | +const headerModel = require('../../../doraemon/models/header'); | ||
13 | const productProcess = require(`${utils}/product-process`); | 11 | const productProcess = require(`${utils}/product-process`); |
14 | -const publicHandler = require('./public-handler'); | 12 | +const searchHandler = require('./search-handler'); |
13 | + | ||
14 | +// 搜索分类信息需要的参数 | ||
15 | +const positionId = 10; | ||
15 | 16 | ||
16 | /** | 17 | /** |
17 | - * 获取商品列表商品数据 Controller 调用 | ||
18 | - * @param {[type]} params [常规参数] | ||
19 | - * @param {[type]} extra [左侧列表额外要拼接的参数] | ||
20 | - * @return {[type]} [description] | 18 | + * 获取商品分类列表数据 |
21 | */ | 19 | */ |
22 | -exports.getListData = (params, channel) => { | ||
23 | - let apiArr = []; | ||
24 | - | ||
25 | - if (params.productPool) { | ||
26 | - // 奥莱活动页调用app.search.sales | ||
27 | - apiArr = [ | ||
28 | - saleApi.getSaleGoodsList({limit: '1', channel: channel }), | ||
29 | - saleApi.getSaleGoodsList(Object.assign(params, { channel: channel })) | ||
30 | - ]; | ||
31 | - } else { | ||
32 | - // 奥莱品类页调用app.search.li | ||
33 | - apiArr = [ | ||
34 | - outletsApi.getOutletsGoodsList({limit: '1', channel: channel }), | ||
35 | - outletsApi.getOutletsGoodsList(Object.assign(params, { channel: channel })) | ||
36 | - ]; | ||
37 | - } | ||
38 | - return api.all(apiArr).then(result => { | ||
39 | - let finalResult = {}; | 20 | +exports.getListData = (params) => { |
21 | + // 调用接口 | ||
22 | + let apiMethod = [ | ||
23 | + headerModel.requestHeaderData(), | ||
24 | + searchApi.getSortList(), | ||
25 | + searchApi.getProductList(params) | ||
26 | + ]; | ||
40 | 27 | ||
41 | - // 获取商品数据和顶部筛选条件 | ||
42 | - if (result[0].code === 200) { | ||
43 | - finalResult.leftContent = publicHandler.handleSaleSortData(result[0].data.filter.group_sort, params); | ||
44 | - finalResult.pathNav = publicHandler.handlePathNavData(result[0].data.filter.group_sort, params); | 28 | + // 搜索分类介绍和广告 |
29 | + if (params.msort && params.misort) { | ||
30 | + let IntroParams = { | ||
31 | + position_id: positionId, | ||
32 | + max_sort_id: params.msort, | ||
33 | + middle_sort_id: params.misort, | ||
34 | + gender: params.gender || '1,3' | ||
35 | + }; | ||
45 | 36 | ||
46 | - } | 37 | + apiMethod.push(searchApi.getSortIntro(IntroParams)); |
38 | + apiMethod.push(searchApi.getSortAds(IntroParams)); | ||
39 | + } | ||
40 | + | ||
41 | + return api.all(apiMethod).then(result => { | ||
42 | + let finalResult = { | ||
43 | + headerData: Object.assign(result[0].headerData, { | ||
44 | + header: true | ||
45 | + }), | ||
46 | + search: {} | ||
47 | + }; | ||
47 | 48 | ||
48 | // 获取左侧类目数据 | 49 | // 获取左侧类目数据 |
49 | if (result[1].code === 200) { | 50 | if (result[1].code === 200) { |
50 | - Object.assign(finalResult, { | ||
51 | - filters: publicHandler.handleSaleFilterData(result[1].data.filter, params), | ||
52 | - opts: publicHandler.handleSaleOptsData(params, result[1].data.total), | ||
53 | - totalCount: result[1].data.total, | ||
54 | - footPager: publicHandler.handlePagerData(result[1].data.total, params), | ||
55 | - goods: productProcess.processProductList(result[1].data.product_list) | 51 | + finalResult.search = { |
52 | + leftContent: searchHandler.handleSortData(result[1].data.sort, params), | ||
53 | + pathNav: searchHandler.handlePathNavData(result[1].data.sort, params, 'sort') | ||
54 | + }; | ||
55 | + } | ||
56 | + | ||
57 | + // 获取商品数据和顶部筛选条件 | ||
58 | + if (result[2].code === 200) { | ||
59 | + Object.assign(finalResult.search, { | ||
60 | + filters: searchHandler.handleFilterData(result[2].data.filter, params), | ||
61 | + opts: searchHandler.handleOptsData(params, result[2].data.total, result[2].data.filter), | ||
62 | + totalCount: result[2].data.total, | ||
63 | + footPager: searchHandler.handlePagerData(result[2].data.total, params), | ||
64 | + goods: productProcess.processProductList(result[2].data.product_list, | ||
65 | + Object.assign({showDiscount: false}, params)) | ||
56 | }); | 66 | }); |
57 | } | 67 | } |
58 | 68 | ||
69 | + // 分类介绍 | ||
70 | + if (result[3] && result[3].code === 200) { | ||
71 | + finalResult.sortIntro = searchHandler.handleSortIntro(result[3].data); | ||
72 | + } | ||
73 | + | ||
74 | + // 分类广告 | ||
75 | + if (result[4] && result[4].code === 200) { | ||
76 | + finalResult.sortIntro = searchHandler.handleSortAds(result[4].data); | ||
77 | + } | ||
59 | return finalResult; | 78 | return finalResult; |
60 | }); | 79 | }); |
61 | }; | 80 | }; |
apps/product/models/outletsList.js
0 → 100644
1 | +/* | ||
2 | + * @Author: Targaryen | ||
3 | + * @Date: 2016-06-02 15:11:15 | ||
4 | + * @Last Modified by: Targaryen | ||
5 | + * @Last Modified time: 2016-06-08 14:57:54 | ||
6 | + */ | ||
7 | + | ||
8 | +'use strict'; | ||
9 | +const utils = '../../../utils'; | ||
10 | +const api = global.yoho.API; | ||
11 | +const saleApi = require('./sale-api'); | ||
12 | +const outletsApi = require('./outlets-api'); | ||
13 | +const productProcess = require(`${utils}/product-process`); | ||
14 | +const publicHandler = require('./public-handler'); | ||
15 | + | ||
16 | +/** | ||
17 | + * 获取商品列表商品数据 Controller 调用 | ||
18 | + * @param {[type]} params [常规参数] | ||
19 | + * @param {[type]} extra [左侧列表额外要拼接的参数] | ||
20 | + * @return {[type]} [description] | ||
21 | + */ | ||
22 | +exports.getListData = (params, channel) => { | ||
23 | + let apiArr = []; | ||
24 | + | ||
25 | + if (params.productPool) { | ||
26 | + // 奥莱活动页调用app.search.sales | ||
27 | + apiArr = [ | ||
28 | + saleApi.getSaleGoodsList({limit: '1', channel: channel }), | ||
29 | + saleApi.getSaleGoodsList(Object.assign(params, { channel: channel })) | ||
30 | + ]; | ||
31 | + } else { | ||
32 | + // 奥莱品类页调用app.search.li | ||
33 | + apiArr = [ | ||
34 | + outletsApi.getOutletsGoodsList({limit: '1', channel: channel }), | ||
35 | + outletsApi.getOutletsGoodsList(Object.assign(params, { channel: channel })) | ||
36 | + ]; | ||
37 | + } | ||
38 | + return api.all(apiArr).then(result => { | ||
39 | + let finalResult = {}; | ||
40 | + | ||
41 | + // 获取商品数据和顶部筛选条件 | ||
42 | + if (result[0].code === 200) { | ||
43 | + finalResult.leftContent = publicHandler.handleSaleSortData(result[0].data.filter.group_sort, params); | ||
44 | + finalResult.pathNav = publicHandler.handlePathNavData(result[0].data.filter.group_sort, params); | ||
45 | + | ||
46 | + } | ||
47 | + | ||
48 | + // 获取左侧类目数据 | ||
49 | + if (result[1].code === 200) { | ||
50 | + Object.assign(finalResult, { | ||
51 | + filters: publicHandler.handleSaleFilterData(result[1].data.filter, params), | ||
52 | + opts: publicHandler.handleSaleOptsData(params, result[1].data.total), | ||
53 | + totalCount: result[1].data.total, | ||
54 | + footPager: publicHandler.handlePagerData(result[1].data.total, params), | ||
55 | + goods: productProcess.processProductList(result[1].data.product_list) | ||
56 | + }); | ||
57 | + } | ||
58 | + | ||
59 | + return finalResult; | ||
60 | + }); | ||
61 | +}; |
@@ -13,6 +13,9 @@ const getSortByConditionAsync = (condition) => { | @@ -13,6 +13,9 @@ const getSortByConditionAsync = (condition) => { | ||
13 | return api.get('sortgroup.json', condition); | 13 | return api.get('sortgroup.json', condition); |
14 | }; | 14 | }; |
15 | 15 | ||
16 | +// 获取list页广告 | ||
17 | +const adsUrl = 'shops/api/v1/ads/getList'; | ||
18 | + | ||
16 | /** | 19 | /** |
17 | * 获取商品列表 | 20 | * 获取商品列表 |
18 | * @return | 21 | * @return |
@@ -33,8 +36,9 @@ const getProductList = (params) => { | @@ -33,8 +36,9 @@ const getProductList = (params) => { | ||
33 | */ | 36 | */ |
34 | const getSortList = (params) => { | 37 | const getSortList = (params) => { |
35 | let finalParams = { | 38 | let finalParams = { |
36 | - // method: 'web.regular.groupsort' | ||
37 | - method: 'app.search.li' | 39 | + method: 'web.regular.groupsort' |
40 | + | ||
41 | + // method: 'app.search.li' | ||
38 | }; | 42 | }; |
39 | 43 | ||
40 | Object.assign(finalParams, params); | 44 | Object.assign(finalParams, params); |
@@ -45,16 +49,21 @@ const getSortList = (params) => { | @@ -45,16 +49,21 @@ const getSortList = (params) => { | ||
45 | * 获取分类图文介绍 | 49 | * 获取分类图文介绍 |
46 | * @return | 50 | * @return |
47 | */ | 51 | */ |
48 | -const getSortIntroList = (params) => { | ||
49 | - return yohoApi.get('', params); | 52 | +const getSortIntro = (params) => { |
53 | + let finalParams = { | ||
54 | + method: 'web.search.banner' | ||
55 | + }; | ||
56 | + | ||
57 | + Object.assign(finalParams, params); | ||
58 | + return yohoApi.get('', finalParams); | ||
50 | }; | 59 | }; |
51 | 60 | ||
52 | /** | 61 | /** |
53 | - * 获取分类左侧广告 | 62 | + * 获取分类广告 |
54 | * @return | 63 | * @return |
55 | */ | 64 | */ |
56 | -const getSortads = (params) => { | ||
57 | - return yohoApi.get('', params); | 65 | +const getSortAds = (params) => { |
66 | + return yohoApi.get(adsUrl, params); | ||
58 | }; | 67 | }; |
59 | 68 | ||
60 | /** | 69 | /** |
@@ -92,8 +101,8 @@ module.exports = { | @@ -92,8 +101,8 @@ module.exports = { | ||
92 | getSortByConditionAsync, | 101 | getSortByConditionAsync, |
93 | getProductList, | 102 | getProductList, |
94 | getSortList, | 103 | getSortList, |
95 | - getSortIntroList, | ||
96 | - getSortads, | 104 | + getSortIntro, |
105 | + getSortAds, | ||
97 | getBrandFolder, | 106 | getBrandFolder, |
98 | getWeekNew, | 107 | getWeekNew, |
99 | getBrandShop | 108 | getBrandShop |
@@ -48,10 +48,10 @@ const handleFilterUrl = (originParam, newParam) => { | @@ -48,10 +48,10 @@ const handleFilterUrl = (originParam, newParam) => { | ||
48 | const handleCheckedData = (params, origin, param) => { | 48 | const handleCheckedData = (params, origin, param) => { |
49 | let dest = []; | 49 | let dest = []; |
50 | 50 | ||
51 | - // 品牌选中数据 | ||
52 | if (!_.isEmpty(origin)) { | 51 | if (!_.isEmpty(origin)) { |
53 | _.forEach(origin, value => { | 52 | _.forEach(origin, value => { |
54 | if (value.checked) { | 53 | if (value.checked) { |
54 | + console.log(value); | ||
55 | let tempPatam = {}; | 55 | let tempPatam = {}; |
56 | 56 | ||
57 | tempPatam[param] = ''; | 57 | tempPatam[param] = ''; |
@@ -63,7 +63,6 @@ const handleCheckedData = (params, origin, param) => { | @@ -63,7 +63,6 @@ const handleCheckedData = (params, origin, param) => { | ||
63 | } | 63 | } |
64 | }); | 64 | }); |
65 | } | 65 | } |
66 | - | ||
67 | return dest; | 66 | return dest; |
68 | }; | 67 | }; |
69 | 68 | ||
@@ -331,7 +330,7 @@ exports.handleOptsData = (params, total, extra) => { | @@ -331,7 +330,7 @@ exports.handleOptsData = (params, total, extra) => { | ||
331 | * @param extra 可以任意传值用来处理特殊情况 | 330 | * @param extra 可以任意传值用来处理特殊情况 |
332 | * @returns {{}} | 331 | * @returns {{}} |
333 | */ | 332 | */ |
334 | -exports.handleSortData = (origin, params, extra) => { | 333 | +exports.handleSortData = (origin, params) => { |
335 | let leftContent = {}; | 334 | let leftContent = {}; |
336 | 335 | ||
337 | leftContent.allSort = {}; | 336 | leftContent.allSort = {}; |
@@ -341,41 +340,47 @@ exports.handleSortData = (origin, params, extra) => { | @@ -341,41 +340,47 @@ exports.handleSortData = (origin, params, extra) => { | ||
341 | // delete params.msort; | 340 | // delete params.msort; |
342 | // delete params.misort; | 341 | // delete params.misort; |
343 | 342 | ||
344 | - if (extra === 'discount') { | ||
345 | - let tempParams = _.cloneDeep(params); | 343 | + // if (extra === 'discount') { |
344 | + // let tempParams = _.cloneDeep(params); | ||
346 | 345 | ||
347 | - delete tempParams.sort; | 346 | + // delete tempParams.sort; |
348 | 347 | ||
349 | - leftContent.allSort.all = { | ||
350 | - name: '全部品类', | ||
351 | - href: handleFilterUrl(tempParams, {sort: ''}), | ||
352 | - active: _.isEmpty(params.sort) | ||
353 | - }; | ||
354 | - } else { | ||
355 | - leftContent.allSort.all = { | ||
356 | - name: '全部品类', | ||
357 | - href: handleFilterUrl(params, {sort: ''}) | ||
358 | - }; | ||
359 | - } | 348 | + // leftContent.allSort.all = { |
349 | + // name: '全部品类', | ||
350 | + // href: handleFilterUrl(tempParams, {sort: ''}), | ||
351 | + // active: _.isEmpty(params.sort) | ||
352 | + // }; | ||
353 | + // } else { | ||
354 | + // leftContent.allSort.all = { | ||
355 | + // name: '全部品类', | ||
356 | + // href: handleFilterUrl(params, {sort: ''}) | ||
357 | + // }; | ||
358 | + // } | ||
360 | 359 | ||
361 | _.forEach(origin, value => { | 360 | _.forEach(origin, value => { |
362 | - | ||
363 | let category = { | 361 | let category = { |
364 | - name: value.category_name, | ||
365 | - num: value.node_count, | ||
366 | - childList: [], | ||
367 | - href: handleFilterUrl(params, {sort: value.relation_parameter.sort}), | ||
368 | - active: params.sort === value.relation_parameter.sort | 362 | + name: value.sort_name, |
363 | + num: value.count, | ||
364 | + childList: [ | ||
365 | + { | ||
366 | + name: '全部' + value.sort_name, | ||
367 | + num: value.count, | ||
368 | + href: handleFilterUrl(params, {msort: value.sort_id}), | ||
369 | + childActive: params.misort === value.sort_id | ||
370 | + } | ||
371 | + ], | ||
372 | + href: handleFilterUrl(params, {msort: value.sort_id}), | ||
373 | + active: params.msort === value.sort_id | ||
369 | }; | 374 | }; |
370 | 375 | ||
371 | _.forEach(value.sub, subValue => { | 376 | _.forEach(value.sub, subValue => { |
372 | category.childList.push({ | 377 | category.childList.push({ |
373 | - name: subValue.category_name, | ||
374 | - num: subValue.node_count, | ||
375 | - href: handleFilterUrl(params, {sort: subValue.relation_parameter.sort}), | ||
376 | - childActive: params.sort === subValue.relation_parameter.sort | 378 | + name: subValue.sort_name, |
379 | + num: subValue.count, | ||
380 | + href: handleFilterUrl(params, {msort: value.sort_id, misort: subValue.sort_id}), | ||
381 | + childActive: params.misort === subValue.sort_id | ||
377 | }); | 382 | }); |
378 | - if (params.sort === subValue.relation_parameter.sort) { | 383 | + if (params.misort === subValue.sort_id) { |
379 | category.active = true; | 384 | category.active = true; |
380 | } | 385 | } |
381 | 386 | ||
@@ -551,29 +556,40 @@ exports.handleFilterData = (origin, params) => { | @@ -551,29 +556,40 @@ exports.handleFilterData = (origin, params) => { | ||
551 | 556 | ||
552 | // 处理颜色筛选数据 | 557 | // 处理颜色筛选数据 |
553 | if (!_.isEmpty(origin.color)) { | 558 | if (!_.isEmpty(origin.color)) { |
554 | - _.forEach(origin.color, (value, key) => { | 559 | + _.forEach(origin.color, (value) => { |
555 | let color = { | 560 | let color = { |
556 | - checked: params.price === key, | 561 | + checked: parseInt(params.color, 10) === parseInt(value.color_id, 10), |
557 | href: handleFilterUrl(params, {color: value.color_id}), | 562 | href: handleFilterUrl(params, {color: value.color_id}), |
558 | name: value.color_name, | 563 | name: value.color_name, |
559 | rgb: value.color_value ? 'url(' + value.color_value + ')' : '#' + value.color_code | 564 | rgb: value.color_value ? 'url(' + value.color_value + ')' : '#' + value.color_code |
560 | }; | 565 | }; |
561 | 566 | ||
567 | + // 处理颜色选中数据 | ||
568 | + if (color.checked) { | ||
569 | + dest.checkedConditions.conditions.push(color); | ||
570 | + } | ||
571 | + | ||
562 | dest.color.push(color); | 572 | dest.color.push(color); |
563 | }); | 573 | }); |
564 | } | 574 | } |
565 | 575 | ||
566 | - //处理年龄段 | 576 | + // 处理年龄段 |
567 | if (!_.isEmpty(origin.ageLevel)) { | 577 | if (!_.isEmpty(origin.ageLevel)) { |
568 | - _.forEach(origin.ageLevel, (value, key) => { | 578 | + _.forEach(origin.ageLevel, (value) => { |
569 | let ageLevel = { | 579 | let ageLevel = { |
570 | - checked: params.ageLevel === key, | 580 | + checked: params.ageLevel === value.id, |
571 | href: handleFilterUrl(params, {ageLevel: value.id}), | 581 | href: handleFilterUrl(params, {ageLevel: value.id}), |
572 | name: value.name | 582 | name: value.name |
573 | }; | 583 | }; |
574 | 584 | ||
585 | + // 处理颜色年龄段数据 | ||
586 | + if (ageLevel.checked) { | ||
587 | + dest.checkedConditions.conditions.push(ageLevel); | ||
588 | + } | ||
589 | + | ||
575 | dest.ageLevel.push(ageLevel); | 590 | dest.ageLevel.push(ageLevel); |
576 | }); | 591 | }); |
592 | + console.log(dest.ageLevel); | ||
577 | } | 593 | } |
578 | 594 | ||
579 | // 清除所有选中数据 | 595 | // 清除所有选中数据 |
@@ -647,23 +663,23 @@ exports.handlePathNavData = (data, params, page) => { | @@ -647,23 +663,23 @@ exports.handlePathNavData = (data, params, page) => { | ||
647 | default : | 663 | default : |
648 | // 分类 | 664 | // 分类 |
649 | _.forEach(data, (sort) => { | 665 | _.forEach(data, (sort) => { |
650 | - if (sort.relation_parameter.sort === params.sort) { | 666 | + if (sort.sort_id === params.msort) { |
667 | + console.log(params.msort); | ||
651 | pathNav.push({ | 668 | pathNav.push({ |
652 | - name: sort.category_name, | ||
653 | - pathTitle: sort.category_name | 669 | + name: sort.sort_name, |
670 | + href: helpers.urlFormat('/product/outlets/list', {msort: sort.sort_id}), | ||
671 | + pathTitle: sort.sort_name | ||
654 | }); | 672 | }); |
655 | } | 673 | } |
674 | + | ||
656 | if (!_.isEmpty(sort.sub)) { | 675 | if (!_.isEmpty(sort.sub)) { |
657 | _.forEach(sort.sub, misort => { | 676 | _.forEach(sort.sub, misort => { |
658 | - if (misort.relation_parameter.sort === params.sort) { | 677 | + if (misort.sort_id === params.misort) { |
659 | pathNav.push({ | 678 | pathNav.push({ |
660 | - href: helpers.urlFormat('/product/outlets/list', {sort: sort.relation_parameter.sort}), | ||
661 | - name: sort.category_name, | ||
662 | - pathTitle: sort.category_name | ||
663 | - }, { | ||
664 | - name: misort.category_name, | ||
665 | - pathTitle: misort.category_name | 679 | + name: misort.sort_name, |
680 | + pathTitle: misort.sort_name | ||
666 | }); | 681 | }); |
682 | + | ||
667 | } | 683 | } |
668 | }); | 684 | }); |
669 | } | 685 | } |
@@ -784,6 +800,44 @@ exports.handlePagerData = (total, params) => { | @@ -784,6 +800,44 @@ exports.handlePagerData = (total, params) => { | ||
784 | }; | 800 | }; |
785 | 801 | ||
786 | /** | 802 | /** |
803 | + * 处理分类介绍 | ||
804 | + * @type {[type]} | ||
805 | + */ | ||
806 | +exports.handleSortIntro = (data, params) => { | ||
807 | + let sortIntro = { | ||
808 | + name: data.title, | ||
809 | + enName: data.subtitle, | ||
810 | + description: data.intro, | ||
811 | + img: data.logo, | ||
812 | + keyEntry: [] | ||
813 | + }; | ||
814 | + | ||
815 | + _.forEach(data.keyword, function(value) { | ||
816 | + sortIntro.keyEntry.push({ | ||
817 | + name: value.word, | ||
818 | + url: helpers.urlFormat(value.url, params) | ||
819 | + }); | ||
820 | + }); | ||
821 | + | ||
822 | + | ||
823 | + return sortIntro; | ||
824 | +}; | ||
825 | + | ||
826 | +/** | ||
827 | + * 处理分类页左侧广告 | ||
828 | + * @type {[type]} | ||
829 | + */ | ||
830 | +exports.handleSortAds = (data, params) => { | ||
831 | + let sortAds = { | ||
832 | + data: data, | ||
833 | + params: params | ||
834 | + }; | ||
835 | + | ||
836 | + | ||
837 | + return sortAds; | ||
838 | +}; | ||
839 | + | ||
840 | +/** | ||
787 | * 筛选类链接处理的对外接口 | 841 | * 筛选类链接处理的对外接口 |
788 | * @type {[type]} | 842 | * @type {[type]} |
789 | */ | 843 | */ |
@@ -41,7 +41,7 @@ exports.getSearchData = (params) => { | @@ -41,7 +41,7 @@ exports.getSearchData = (params) => { | ||
41 | // 获取左侧类目数据 | 41 | // 获取左侧类目数据 |
42 | if (result[1].code === 200) { | 42 | if (result[1].code === 200) { |
43 | finalResult.search = { | 43 | finalResult.search = { |
44 | - leftContent: searchHandler.handleSortData(result[1].data.filter.group_sort, params), | 44 | + leftContent: searchHandler.handleSortData(result[1].data.sort, params), |
45 | pathNav: searchHandler.handlePathNavData({total: result[1].data.total }, params, 'search') | 45 | pathNav: searchHandler.handlePathNavData({total: result[1].data.total }, params, 'search') |
46 | }; | 46 | }; |
47 | } | 47 | } |
@@ -22,6 +22,9 @@ const sale = require(`${cRoot}/sale`); | @@ -22,6 +22,9 @@ const sale = require(`${cRoot}/sale`); | ||
22 | const outlets = require(`${cRoot}/outlets`); | 22 | const outlets = require(`${cRoot}/outlets`); |
23 | 23 | ||
24 | // 商品促销controller | 24 | // 商品促销controller |
25 | +const outletsList = require(`${cRoot}/outletsList`); | ||
26 | + | ||
27 | +// 商品分类列表 | ||
25 | const list = require(`${cRoot}/list`); | 28 | const list = require(`${cRoot}/list`); |
26 | 29 | ||
27 | // 搜索页 | 30 | // 搜索页 |
@@ -42,18 +45,23 @@ router.get('/outlets/special/detail', outlets.special); // 奥莱活动页 | @@ -42,18 +45,23 @@ router.get('/outlets/special/detail', outlets.special); // 奥莱活动页 | ||
42 | router.get('/outlets/list', outlets.list); // 奥莱品类页 | 45 | router.get('/outlets/list', outlets.list); // 奥莱品类页 |
43 | router.get('/outlets/:channel', outlets.channel); // 奥莱频道页 | 46 | router.get('/outlets/:channel', outlets.channel); // 奥莱频道页 |
44 | 47 | ||
45 | -// 商品列表页 | ||
46 | -router.get('/list', list.index); // 商品列表页 | ||
47 | - | 48 | +// 商品分类列表页 |
49 | +router.get('/list', outletsList.index); | ||
48 | router.get(/\/pro_([\d]+)_([\d]+)\/(.*)/, detail.showMain); // 商品详情routers | 50 | router.get(/\/pro_([\d]+)_([\d]+)\/(.*)/, detail.showMain); // 商品详情routers |
49 | router.get('/detail/comment', detail.indexComment);// 商品评论 | 51 | router.get('/detail/comment', detail.indexComment);// 商品评论 |
50 | router.get('/detail/consult', detail.indexConsult);// 商品咨询 | 52 | router.get('/detail/consult', detail.indexConsult);// 商品咨询 |
51 | router.post('/detail/consult', detail.createConsult);// 创建咨询 | 53 | router.post('/detail/consult', detail.createConsult);// 创建咨询 |
52 | router.get('/detail/hotarea', detail.indexHotArea);// 商品热区 | 54 | router.get('/detail/hotarea', detail.indexHotArea);// 商品热区 |
53 | router.post('/index/favoriteBrand', favorite.changeFavoriteBrand);// 收藏品牌 | 55 | router.post('/index/favoriteBrand', favorite.changeFavoriteBrand);// 收藏品牌 |
54 | -router.post('/item/togglecollect', favorite.collectProduct); //收藏商品 | 56 | +router.post('/item/togglecollect', favorite.collectProduct); // 收藏商品 |
55 | 57 | ||
56 | // 搜索 | 58 | // 搜索 |
57 | router.get('/search/index', search.index); | 59 | router.get('/search/index', search.index); |
58 | 60 | ||
61 | +// 商品分类列表页 | ||
62 | +router.get('/list/index', list.index); | ||
63 | + | ||
64 | +// 新品到着 | ||
65 | +router.get('/list/new', list.new); | ||
66 | + | ||
59 | module.exports = router; | 67 | module.exports = router; |
apps/product/views/action/list/index.hbs
0 → 100644
1 | +{{> list/list}} |
1 | -<div class="product-page yoho-page"> | ||
2 | - {{# search}} | ||
3 | - <div class="center-content clearfix"> | ||
4 | - {{# pathNav}} | ||
5 | - {{> common/path-nav}} | ||
6 | - {{/ pathNav}} | ||
7 | - | ||
8 | - | ||
9 | - <div class="list-left pull-left"> | ||
10 | - {{> product/left-content}} | ||
11 | - </div> | ||
12 | - | ||
13 | - <div class="list-right pull-right"> | ||
14 | - {{# sortIntro}} | ||
15 | - <div class="sort-intro clearfix"> | ||
16 | - <div class="texts pull-left"> | ||
17 | - <p class="name">{{name}}</p> | ||
18 | - <p class="en-name">{{enName}}</p> | ||
19 | - <p class="desc">{{{description}}}</p> | ||
20 | - <div class="key-entry"> | ||
21 | - {{#each keyEntry}} | ||
22 | - <a href="{{url}}">{{name}}</a> | ||
23 | - {{/each}} | ||
24 | - </div> | ||
25 | - </div> | ||
26 | - <img class="pull-right img" src="{{img}}"> | ||
27 | - </div> | ||
28 | - {{/ sortIntro}} | ||
29 | - {{> list/shop-entry}} | ||
30 | - {{> product/standard-content}} | ||
31 | - </div> | ||
32 | - </div> | ||
33 | - {{/search}} | ||
34 | -</div> | 1 | +{{> list/list}} |
apps/product/views/partial/list/list.hbs
0 → 100644
1 | +<div class="product-page yoho-page"> | ||
2 | + {{# search}} | ||
3 | + <div class="center-content clearfix"> | ||
4 | + {{# pathNav}} | ||
5 | + {{> common/path-nav}} | ||
6 | + {{/ pathNav}} | ||
7 | + | ||
8 | + | ||
9 | + <div class="list-left pull-left"> | ||
10 | + {{> product/left-content}} | ||
11 | + </div> | ||
12 | + | ||
13 | + <div class="list-right pull-right"> | ||
14 | + {{# sortIntro}} | ||
15 | + <div class="sort-intro clearfix"> | ||
16 | + <div class="texts pull-left"> | ||
17 | + <p class="name">{{name}}</p> | ||
18 | + <p class="en-name">{{enName}}</p> | ||
19 | + <p class="desc">{{{description}}}</p> | ||
20 | + <div class="key-entry"> | ||
21 | + {{#each keyEntry}} | ||
22 | + <a href="{{url}}">{{name}}</a> | ||
23 | + {{/each}} | ||
24 | + </div> | ||
25 | + </div> | ||
26 | + <img class="pull-right img" src="{{img}}"> | ||
27 | + </div> | ||
28 | + {{/ sortIntro}} | ||
29 | + {{> list/shop-entry}} | ||
30 | + {{> product/standard-content}} | ||
31 | + </div> | ||
32 | + </div> | ||
33 | + {{/search}} | ||
34 | +</div> |
@@ -14,11 +14,14 @@ module.exports = { | @@ -14,11 +14,14 @@ module.exports = { | ||
14 | port: 6002, | 14 | port: 6002, |
15 | siteUrl: 'http://www.yohobuy.com', | 15 | siteUrl: 'http://www.yohobuy.com', |
16 | domains: { | 16 | domains: { |
17 | + api: 'http://api.yoho.yohoops.org', | ||
18 | + | ||
17 | // api: 'http://devapi.yoho.cn:58078/', | 19 | // api: 'http://devapi.yoho.cn:58078/', |
18 | - api: 'http://testapi.yoho.cn:28078/', | 20 | + // api: 'http://testapi.yoho.cn:28078/', |
21 | + | ||
22 | + service: 'http://devservice.yoho.cn:58077/', | ||
19 | 23 | ||
20 | - // service: 'http://devservice.yoho.cn:58077/', | ||
21 | - service: 'http://testservice.yoho.cn:28077/', | 24 | + // service: 'http://testservice.yoho.cn:28077/', |
22 | search: 'http://192.168.102.216:8080/yohosearch/' | 25 | search: 'http://192.168.102.216:8080/yohosearch/' |
23 | }, | 26 | }, |
24 | subDomains: { | 27 | subDomains: { |
public/js/product/list.page.js
0 → 100644
1 | +/** | ||
2 | + * search | ||
3 | + * @author: sefon 2016-7-12 15:28:22 | ||
4 | + */ | ||
5 | + | ||
6 | +var $ = require('yoho-jquery'), | ||
7 | + lazyLoad = require('yoho-jquery-lazyload'); | ||
8 | + | ||
9 | +var product = require('./index/product'); | ||
10 | + | ||
11 | +require('../common'); | ||
12 | +require('../plugins/filter'); | ||
13 | +require('../plugins/sort-pager'); | ||
14 | + | ||
15 | +product.init(4); | ||
16 | + | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | + | ||
24 | + | ||
25 | +lazyLoad($('img.lazy'), { | ||
26 | + failure_limit: 20 | ||
27 | +}); |
-
Please register or login to post a comment