Authored by 王水玲

sale

@@ -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 }