Showing
7 changed files
with
160 additions
and
105 deletions
@@ -18,13 +18,6 @@ const saleLogger = (err, res) => { | @@ -18,13 +18,6 @@ const saleLogger = (err, res) => { | ||
18 | res.send('error'); | 18 | res.send('error'); |
19 | }; | 19 | }; |
20 | 20 | ||
21 | -// const typeCont = { | ||
22 | -// price: ['s_p_desc', 's_p_asc'], | ||
23 | -// discount: ['p_d_desc', 'p_d_asc'], | ||
24 | -// sales: ['s_n_desc', 's_n_asc'], | ||
25 | -// newest: ['s_t_desc', 's_t_asc'] | ||
26 | -// }; | ||
27 | - | ||
28 | /** | 21 | /** |
29 | * sale 首页 | 22 | * sale 首页 |
30 | */ | 23 | */ |
@@ -41,8 +34,10 @@ exports.index = (req, res) => { | @@ -41,8 +34,10 @@ exports.index = (req, res) => { | ||
41 | saleModel.getSaleData().then((result) => { | 34 | saleModel.getSaleData().then((result) => { |
42 | res.render('sale', Object.assign(renderData, { | 35 | res.render('sale', Object.assign(renderData, { |
43 | content: result, | 36 | content: result, |
44 | - title: { | ||
45 | - title: '最新降价' | 37 | + floorHeader: { |
38 | + title: { | ||
39 | + title: '最新降价' | ||
40 | + } | ||
46 | } | 41 | } |
47 | })); | 42 | })); |
48 | }).catch((err) => { | 43 | }).catch((err) => { |
@@ -117,7 +112,7 @@ exports.vip = (req, res) => { | @@ -117,7 +112,7 @@ exports.vip = (req, res) => { | ||
117 | let headerData = headerModel.setNavHeader('会员专享'); | 112 | let headerData = headerModel.setNavHeader('会员专享'); |
118 | let renderData = { | 113 | let renderData = { |
119 | module: 'product', | 114 | module: 'product', |
120 | - page: 'break-code', | 115 | + page: 'vip', |
121 | pageHeader: headerData, | 116 | pageHeader: headerData, |
122 | pageFooter: true | 117 | pageFooter: true |
123 | }; | 118 | }; |
@@ -135,7 +130,6 @@ exports.search = (req, res) => { | @@ -135,7 +130,6 @@ exports.search = (req, res) => { | ||
135 | let params = Object.assign({}, req.query); | 130 | let params = Object.assign({}, req.query); |
136 | 131 | ||
137 | saleModel.getSearchData(params).then((result) => { | 132 | saleModel.getSearchData(params).then((result) => { |
138 | - | ||
139 | res.render('product', { | 133 | res.render('product', { |
140 | layout: false, | 134 | layout: false, |
141 | params: params, | 135 | params: params, |
@@ -31,6 +31,13 @@ const timeFormat = { | @@ -31,6 +31,13 @@ const timeFormat = { | ||
31 | ms: '剩{m}分钟{s}秒' | 31 | ms: '剩{m}分钟{s}秒' |
32 | }; | 32 | }; |
33 | 33 | ||
34 | +const typeCont = { | ||
35 | + price: ['s_p_desc', 's_p_asc'], | ||
36 | + discount: ['p_d_desc', 'p_d_asc'], | ||
37 | + sales: ['s_n_desc', 's_n_asc'], | ||
38 | + newest: ['s_t_desc', 's_t_asc'] | ||
39 | +}; | ||
40 | + | ||
34 | /** | 41 | /** |
35 | * 折扣专场专题列表过期时间处理 | 42 | * 折扣专场专题列表过期时间处理 |
36 | */ | 43 | */ |
@@ -143,6 +150,9 @@ const processSearch = (list, options) => { | @@ -143,6 +150,9 @@ const processSearch = (list, options) => { | ||
143 | list = camelCase(list); | 150 | list = camelCase(list); |
144 | 151 | ||
145 | _.forEach(list, (product) => { | 152 | _.forEach(list, (product) => { |
153 | + | ||
154 | + console.log(product); | ||
155 | + | ||
146 | // 商品信息有问题,则不显示 | 156 | // 商品信息有问题,则不显示 |
147 | if (!product.productId || !product.goodsList.length) { | 157 | if (!product.productId || !product.goodsList.length) { |
148 | return; | 158 | return; |
@@ -335,23 +345,6 @@ const processBreakingSort = (list) => { | @@ -335,23 +345,6 @@ const processBreakingSort = (list) => { | ||
335 | return formatData; | 345 | return formatData; |
336 | }; | 346 | }; |
337 | 347 | ||
338 | - | ||
339 | -/** | ||
340 | - * 获取商品数据 | ||
341 | - */ | ||
342 | -exports.getSearchData = (params) => { | ||
343 | - return api.get('', sign.apiSign(Object.assign({ | ||
344 | - method: 'app.search.sales' | ||
345 | - }, params))).then((result) => { | ||
346 | - if (result && result.code === 200) { | ||
347 | - return processSearch(result); | ||
348 | - } else { | ||
349 | - logger.error('SALE 商品搜索返回 code 不是 200'); | ||
350 | - return []; | ||
351 | - } | ||
352 | - }); | ||
353 | -}; | ||
354 | - | ||
355 | /** | 348 | /** |
356 | * 获取资源位数据 | 349 | * 获取资源位数据 |
357 | */ | 350 | */ |
@@ -391,27 +384,6 @@ const getBreakingSort = (yhChannel) => { | @@ -391,27 +384,6 @@ const getBreakingSort = (yhChannel) => { | ||
391 | }); | 384 | }); |
392 | }; | 385 | }; |
393 | 386 | ||
394 | -const getSpecial = (params) => { | ||
395 | - | ||
396 | -} | ||
397 | - | ||
398 | -/** | ||
399 | - * 获取商品数据 | ||
400 | - */ | ||
401 | -exports.getSearchData = (params) => { | ||
402 | - params = params || {}; | ||
403 | - return api.get('', sign.apiSign(Object.assign({ | ||
404 | - method: 'app.search.sales' | ||
405 | - }, params))).then((result) => { | ||
406 | - if (result && result.code === 200) { | ||
407 | - return processSearch(result.data.product_list || []); | ||
408 | - } else { | ||
409 | - logger.error('SALE 商品搜索返回 code 不是 200'); | ||
410 | - return {}; | ||
411 | - } | ||
412 | - }); | ||
413 | -}; | ||
414 | - | ||
415 | /** | 387 | /** |
416 | * 获取sale首页数据 | 388 | * 获取sale首页数据 |
417 | */ | 389 | */ |
@@ -496,3 +468,26 @@ exports.getSpecialDetailData = (id) => { | @@ -496,3 +468,26 @@ exports.getSpecialDetailData = (id) => { | ||
496 | exports.getVipData = (params) => { | 468 | exports.getVipData = (params) => { |
497 | return getResources('vip'); | 469 | return getResources('vip'); |
498 | }; | 470 | }; |
471 | + | ||
472 | + | ||
473 | +/** | ||
474 | + * 获取商品数据 | ||
475 | + */ | ||
476 | +exports.getSearchData = (params) => { | ||
477 | + params = params || {}; | ||
478 | + | ||
479 | + if (typeCont[params.type]) { | ||
480 | + params.order = typeCont[params.type][params.order]; | ||
481 | + } | ||
482 | + | ||
483 | + return api.get('', sign.apiSign(Object.assign({ | ||
484 | + method: 'app.search.sales' | ||
485 | + }, params))).then((result) => { | ||
486 | + if (result && result.code === 200) { | ||
487 | + return processSearch(result.data.product_list || []); | ||
488 | + } else { | ||
489 | + logger.error('SALE 商品搜索返回 code 不是 200'); | ||
490 | + return {}; | ||
491 | + } | ||
492 | + }); | ||
493 | +}; |
@@ -24,13 +24,15 @@ | @@ -24,13 +24,15 @@ | ||
24 | </ul> | 24 | </ul> |
25 | 25 | ||
26 | {{# sub}} | 26 | {{# sub}} |
27 | - <div class="swiper-container" id="size-swiper-{{key}}" {{#if @first}}style="display:block"{{/if}}> | 27 | + <div class="size-area"> |
28 | + <div class="swiper-size" id="size-swiper-{{key}}" {{#if @first}}style="display:block"{{/if}}> | ||
28 | <ul class="swiper-wrapper"> | 29 | <ul class="swiper-wrapper"> |
29 | {{# this}} | 30 | {{# this}} |
30 | <li class="swiper-slide" data-id="{{sizeId}}">{{sizeName}}</li> | 31 | <li class="swiper-slide" data-id="{{sizeId}}">{{sizeName}}</li> |
31 | {{/ this}} | 32 | {{/ this}} |
32 | </ul> | 33 | </ul> |
33 | </div> | 34 | </div> |
35 | + </div> | ||
34 | {{/ sub}} | 36 | {{/ sub}} |
35 | {{/ nav}} | 37 | {{/ nav}} |
36 | 38 |
@@ -9,8 +9,9 @@ | @@ -9,8 +9,9 @@ | ||
9 | {{> resources/thumb-row}} | 9 | {{> resources/thumb-row}} |
10 | {{/if}} | 10 | {{/if}} |
11 | {{/content}} | 11 | {{/content}} |
12 | - | ||
13 | - {{> common/floor-header}} | 12 | + {{#floorHeader}} |
13 | + {{> common/floor-header}} | ||
14 | + {{/floorHeader}} | ||
14 | <ul id="list-nav" class="list-nav clearfix"> | 15 | <ul id="list-nav" class="list-nav clearfix"> |
15 | <li class="new active"> | 16 | <li class="new active"> |
16 | <a href="javascript:void(0);"> | 17 | <a href="javascript:void(0);"> |
@@ -26,6 +26,7 @@ var winH = $(window).height(), | @@ -26,6 +26,7 @@ var winH = $(window).height(), | ||
26 | var defaultOpt = require('./query-param'); | 26 | var defaultOpt = require('./query-param'); |
27 | 27 | ||
28 | var $listNav = $('#list-nav'), | 28 | var $listNav = $('#list-nav'), |
29 | + $swiperSize = $('.swiper-size'), | ||
29 | 30 | ||
30 | // 导航数据信息 | 31 | // 导航数据信息 |
31 | navInfo = { | 32 | navInfo = { |
@@ -33,25 +34,29 @@ var $listNav = $('#list-nav'), | @@ -33,25 +34,29 @@ var $listNav = $('#list-nav'), | ||
33 | order: 1, | 34 | order: 1, |
34 | reload: true, | 35 | reload: true, |
35 | page: 0, | 36 | page: 0, |
36 | - end: false | 37 | + end: false, |
38 | + saleType: 1 | ||
37 | }, | 39 | }, |
38 | trouser: { | 40 | trouser: { |
39 | order: 1, | 41 | order: 1, |
40 | reload: true, | 42 | reload: true, |
41 | page: 0, | 43 | page: 0, |
42 | - end: false | 44 | + end: false, |
45 | + saleType: 1 | ||
43 | }, | 46 | }, |
44 | shoes: { | 47 | shoes: { |
45 | order: 1, | 48 | order: 1, |
46 | reload: true, | 49 | reload: true, |
47 | page: 0, | 50 | page: 0, |
48 | - end: false | 51 | + end: false, |
52 | + saleType: 1 | ||
49 | }, | 53 | }, |
50 | other: { | 54 | other: { |
51 | order: 1, | 55 | order: 1, |
52 | reload: true, | 56 | reload: true, |
53 | page: 0, | 57 | page: 0, |
54 | - end: false | 58 | + end: false, |
59 | + saleType: 1 | ||
55 | } | 60 | } |
56 | }, | 61 | }, |
57 | $pre = $listNav.find('.active'), // 纪录进入筛选前的active项,初始为选中项 | 62 | $pre = $listNav.find('.active'), // 纪录进入筛选前的active项,初始为选中项 |
@@ -67,7 +72,7 @@ ellipsis.init(); | @@ -67,7 +72,7 @@ ellipsis.init(); | ||
67 | 72 | ||
68 | lazyLoad($('img.lazy')); | 73 | lazyLoad($('img.lazy')); |
69 | 74 | ||
70 | -$.each($('.swiper-container'), function(key) { | 75 | +$.each($swiperSize, function(key) { |
71 | swipers[key] = new Swiper('#size-swiper-' + key, { | 76 | swipers[key] = new Swiper('#size-swiper-' + key, { |
72 | slidesPerView: 'auto' | 77 | slidesPerView: 'auto' |
73 | }); | 78 | }); |
@@ -87,7 +92,8 @@ function search(opt) { | @@ -87,7 +92,8 @@ function search(opt) { | ||
87 | ext, | 92 | ext, |
88 | att, | 93 | att, |
89 | nav, navType, | 94 | nav, navType, |
90 | - page; | 95 | + page, |
96 | + i; | ||
91 | 97 | ||
92 | if (searching) { | 98 | if (searching) { |
93 | return; | 99 | return; |
@@ -106,46 +112,49 @@ function search(opt) { | @@ -106,46 +112,49 @@ function search(opt) { | ||
106 | $listNav.children('.active').removeClass('active'); | 112 | $listNav.children('.active').removeClass('active'); |
107 | $pre.addClass('active'); | 113 | $pre.addClass('active'); |
108 | 114 | ||
109 | - switch (opt.type) { | ||
110 | - case 'gender': | ||
111 | - ext = { | ||
112 | - gender: opt.id | ||
113 | - }; | ||
114 | - break; | ||
115 | - case 'brand': | ||
116 | - ext = { | ||
117 | - brand: opt.id | ||
118 | - }; | ||
119 | - break; | ||
120 | - case 'sort': | ||
121 | - ext = { | ||
122 | - sort: opt.id | ||
123 | - }; | ||
124 | - break; | ||
125 | - case 'color': | ||
126 | - ext = { | ||
127 | - color: opt.id | ||
128 | - }; | ||
129 | - break; | ||
130 | - case 'size': | ||
131 | - ext = { | ||
132 | - size: opt.id | ||
133 | - }; | ||
134 | - break; | ||
135 | - case 'price': | ||
136 | - ext = { | ||
137 | - price: opt.id | ||
138 | - }; | ||
139 | - break; | ||
140 | - case 'discount': | ||
141 | - ext = { | ||
142 | - discount: opt.id | ||
143 | - }; | ||
144 | - break; | ||
145 | - default: | ||
146 | - break; | 115 | + for (i = 0; i < opt.length; i++) { |
116 | + switch (opt[i].type) { | ||
117 | + case 'gender': | ||
118 | + ext = { | ||
119 | + gender: opt[i].id | ||
120 | + }; | ||
121 | + break; | ||
122 | + case 'brand': | ||
123 | + ext = { | ||
124 | + brand: opt[i].id | ||
125 | + }; | ||
126 | + break; | ||
127 | + case 'sort': | ||
128 | + ext = { | ||
129 | + sort: opt[i].id | ||
130 | + }; | ||
131 | + break; | ||
132 | + case 'color': | ||
133 | + ext = { | ||
134 | + color: opt[i].id | ||
135 | + }; | ||
136 | + break; | ||
137 | + case 'size': | ||
138 | + ext = { | ||
139 | + size: opt[i].id | ||
140 | + }; | ||
141 | + break; | ||
142 | + case 'price': | ||
143 | + ext = { | ||
144 | + price: opt[i].id | ||
145 | + }; | ||
146 | + break; | ||
147 | + case 'discount': | ||
148 | + ext = { | ||
149 | + discount: opt[i].id | ||
150 | + }; | ||
151 | + break; | ||
152 | + default: | ||
153 | + break; | ||
154 | + } | ||
147 | } | 155 | } |
148 | 156 | ||
157 | + | ||
149 | $.extend(defaultOpt, ext); // 扩展筛选项 | 158 | $.extend(defaultOpt, ext); // 扩展筛选项 |
150 | } | 159 | } |
151 | 160 | ||
@@ -180,8 +189,6 @@ function search(opt) { | @@ -180,8 +189,6 @@ function search(opt) { | ||
180 | searching = true; | 189 | searching = true; |
181 | loading.showLoadingMask(); | 190 | loading.showLoadingMask(); |
182 | 191 | ||
183 | - console.log(setting); | ||
184 | - | ||
185 | $.ajax({ | 192 | $.ajax({ |
186 | type: 'GET', | 193 | type: 'GET', |
187 | url: '/product/sale/search', | 194 | url: '/product/sale/search', |
@@ -352,21 +359,71 @@ $listNav.on('touchend touchcancel', function(e) { | @@ -352,21 +359,71 @@ $listNav.on('touchend touchcancel', function(e) { | ||
352 | $active.removeClass('active'); | 359 | $active.removeClass('active'); |
353 | $this.addClass('active'); | 360 | $this.addClass('active'); |
354 | sortId = $this.data('id'); | 361 | sortId = $this.data('id'); |
355 | - $('.swiper-container').hide(); | 362 | + $swiperSize.hide(); |
356 | $('#size-swiper-' + $this.index()).show(); | 363 | $('#size-swiper-' + $this.index()).show(); |
357 | swipers[$this.index()].onResize(); | 364 | swipers[$this.index()].onResize(); |
358 | } | 365 | } |
359 | 366 | ||
360 | if (nav.reload) { | 367 | if (nav.reload) { |
361 | - search({ | 368 | + search([{ |
362 | type: 'sort', | 369 | type: 'sort', |
363 | id: sortId | 370 | id: sortId |
364 | - }); | 371 | + }]); |
365 | } | 372 | } |
366 | } | 373 | } |
367 | e.stopPropagation(); | 374 | e.stopPropagation(); |
368 | }); | 375 | }); |
369 | 376 | ||
377 | +$swiperSize.on('touchend touchcancel', function(e) { | ||
378 | + var $this = $(e.target).closest('li'), | ||
379 | + index = $this.parents('.swiper-size').index(), | ||
380 | + $parentType = $listNav.find('li').eq(index), | ||
381 | + nav, sortId, sizeId, navType, $active; | ||
382 | + | ||
383 | + e.preventDefault(); | ||
384 | + | ||
385 | + if (typeof $this === 'undefined' || $this.length === 0) { | ||
386 | + return; | ||
387 | + } | ||
388 | + | ||
389 | + if ($parentType.hasClass('coat')) { | ||
390 | + navType = 'coat'; | ||
391 | + } else if ($parentType.hasClass('trouser')) { | ||
392 | + navType = 'trouser'; | ||
393 | + } else if ($parentType.hasClass('shoes')) { | ||
394 | + navType = 'shoes'; | ||
395 | + } else { | ||
396 | + navType = 'other'; | ||
397 | + } | ||
398 | + | ||
399 | + nav = navInfo[navType]; | ||
400 | + | ||
401 | + if ($this.hasClass('active')) { | ||
402 | + nav.reload = true; | ||
403 | + return; | ||
404 | + } else { | ||
405 | + $active = $this.siblings('.active'); | ||
406 | + | ||
407 | + $pre = $this; // $pre为除筛选导航的其他导航项,若当前active的为筛选,则把$pre置为当前点击项 | ||
408 | + | ||
409 | + $active.removeClass('active'); | ||
410 | + $this.addClass('active'); | ||
411 | + sortId = $parentType.data('id'); | ||
412 | + sizeId = $this.data('id'); | ||
413 | + } | ||
414 | + | ||
415 | + if (nav.reload) { | ||
416 | + search([{ | ||
417 | + type: 'sort', | ||
418 | + id: sortId | ||
419 | + }, { | ||
420 | + type: 'size', | ||
421 | + id: sizeId | ||
422 | + }]); | ||
423 | + } | ||
424 | + e.stopPropagation(); | ||
425 | +}); | ||
426 | + | ||
370 | function scrollHandler() { | 427 | function scrollHandler() { |
371 | 428 | ||
372 | // 当scroll到1/4$goodsContainer高度后继续请求下一页数据 | 429 | // 当scroll到1/4$goodsContainer高度后继续请求下一页数据 |
@@ -384,10 +441,10 @@ $(window).scroll(function() { | @@ -384,10 +441,10 @@ $(window).scroll(function() { | ||
384 | }); | 441 | }); |
385 | 442 | ||
386 | // 初始请求最新第一页数据 | 443 | // 初始请求最新第一页数据 |
387 | -search({ | 444 | +search([{ |
388 | type: 'sort', | 445 | type: 'sort', |
389 | id: $('.coat').data('id') | 446 | id: $('.coat').data('id') |
390 | -}); | 447 | +}]); |
391 | 448 | ||
392 | $listNav.on('touchstart', 'li', function() { | 449 | $listNav.on('touchstart', 'li', function() { |
393 | $(this).addClass('bytouch'); | 450 | $(this).addClass('bytouch'); |
@@ -147,6 +147,12 @@ function search(opt) { | @@ -147,6 +147,12 @@ function search(opt) { | ||
147 | return; | 147 | return; |
148 | } | 148 | } |
149 | 149 | ||
150 | + if ($('.sale-vip-page').length > 0) { | ||
151 | + defaultOpt.saleType = 2; | ||
152 | + } else if ($('.sale-channel-page').length > 0) { | ||
153 | + defaultOpt.saleType = 3; | ||
154 | + } | ||
155 | + | ||
150 | $.extend(setting, defaultOpt, { | 156 | $.extend(setting, defaultOpt, { |
151 | type: navType, | 157 | type: navType, |
152 | order: nav.order, | 158 | order: nav.order, |
@@ -33,11 +33,11 @@ | @@ -33,11 +33,11 @@ | ||
33 | 33 | ||
34 | li { | 34 | li { |
35 | width: auto; | 35 | width: auto; |
36 | - margin: 0 22px; | 36 | + padding: 0 22px; |
37 | float: left; | 37 | float: left; |
38 | white-space: nowrap; | 38 | white-space: nowrap; |
39 | 39 | ||
40 | - &.on { | 40 | + &.active { |
41 | color: #000; | 41 | color: #000; |
42 | } | 42 | } |
43 | } | 43 | } |
-
Please register or login to post a comment