Authored by 姜敏

Merge branch 'release/1.0' of http://git.yoho.cn/fe/yoho-blk into release/1.0

@@ -27,13 +27,16 @@ const list = { @@ -27,13 +27,16 @@ const list = {
27 title: '列表' 27 title: '列表'
28 }; 28 };
29 29
30 - Search.queryProduct(q).then(result => { 30 + Promise.all([Search.queryAllSort(), Search.queryProduct(q)]).then(allResult => {
  31 + let allSort = camelCase(allResult[0]);
  32 + let result = allResult[1];
31 33
32 if (result && result.code === 200 && result.data) { 34 if (result && result.code === 200 && result.data) {
33 let data = camelCase(result.data); 35 let data = camelCase(result.data);
34 let nav = [DataHelper.getChannelNav()]; 36 let nav = [DataHelper.getChannelNav()];
35 37
36 if (data.filter) { 38 if (data.filter) {
  39 + data.filter.groupSort = DataHelper.sortConvert(allSort.data.sort);
37 retData.filter = DataHelper.filterHandle(data.filter, q); 40 retData.filter = DataHelper.filterHandle(data.filter, q);
38 retData.filter.showPrice = data.total > 10; 41 retData.filter.showPrice = data.total > 10;
39 nav = _.concat(nav, retData.filter.nav); 42 nav = _.concat(nav, retData.filter.nav);
@@ -74,9 +77,10 @@ const list = { @@ -74,9 +77,10 @@ const list = {
74 title: '列表' 77 title: '列表'
75 }; 78 };
76 79
77 - Promise.all([Resouces.newProductBanner(), Search.queryNewProduct(q)]).then(result => { 80 + Promise.all([Resouces.newProductBanner(), Search.queryAllSort(), Search.queryNewProduct(q)]).then(result => {
78 let banner = result[0]; 81 let banner = result[0];
79 - let listData = result[1]; 82 + let sortData = camelCase(result[1]);
  83 + let listData = result[2];
80 let nav = [DataHelper.getChannelNav(), { 84 let nav = [DataHelper.getChannelNav(), {
81 name: '新品' 85 name: '新品'
82 }]; 86 }];
@@ -87,6 +91,7 @@ const list = { @@ -87,6 +91,7 @@ const list = {
87 let data = camelCase(listData.data); 91 let data = camelCase(listData.data);
88 92
89 if (data.filter) { 93 if (data.filter) {
  94 + data.filter.groupSort = DataHelper.sortConvert(sortData.data.sort);
90 retData.filter = DataHelper.filterHandle(data.filter, q); 95 retData.filter = DataHelper.filterHandle(data.filter, q);
91 retData.filter.showPrice = data.total > 10; 96 retData.filter.showPrice = data.total > 10;
92 } 97 }
@@ -28,7 +28,9 @@ const Query = { @@ -28,7 +28,9 @@ const Query = {
28 query: query 28 query: query
29 }; 29 };
30 30
31 - Search.queryProduct(q).then(result => { 31 + Promise.all([Search.queryAllSort(), Search.queryProduct(q)]).then(allResult => {
  32 + let allSort = camelCase(allResult[0]);
  33 + let result = allResult[1];
32 34
33 if (result && result.code === 200 && result.data) { 35 if (result && result.code === 200 && result.data) {
34 let data = camelCase(result.data); 36 let data = camelCase(result.data);
@@ -39,6 +41,7 @@ const Query = { @@ -39,6 +41,7 @@ const Query = {
39 }); 41 });
40 42
41 if (data.filter) { 43 if (data.filter) {
  44 + data.filter.groupSort = DataHelper.sortConvert(allSort.data.sort);
42 retData.filter = DataHelper.filterHandle(data.filter, q); 45 retData.filter = DataHelper.filterHandle(data.filter, q);
43 retData.filter.showPrice = data.total > 10; 46 retData.filter.showPrice = data.total > 10;
44 } 47 }
@@ -111,15 +111,23 @@ const shop = { @@ -111,15 +111,23 @@ const shop = {
111 }); 111 });
112 } else { 112 } else {
113 res.status(404); 113 res.status(404);
114 - return Promise.reject('brand not found'); 114 + return Promise.reject('brand-not-found');
115 } 115 }
116 }).then(() => { 116 }).then(() => {
117 - return Search.queryProductOfBrand(q).then(result => { 117 + return Promise.all([Search.queryAllSort({
  118 + brand: q.brand,
  119 + shop: q.shop_id,
  120 + small_sort: 1
  121 + }), Search.queryProductOfBrand(q)]).then(allResult => {
  122 + let allSort = camelCase(allResult[0]);
  123 + let result = allResult[1];
  124 +
118 if (result && result.code === 200 && result.data) { 125 if (result && result.code === 200 && result.data) {
119 let ret = camelCase(result.data); 126 let ret = camelCase(result.data);
120 127
121 if (ret.filter) { 128 if (ret.filter) {
122 delete q.brand; 129 delete q.brand;
  130 + ret.filter.groupSort = DataHelper.sortConvert(allSort.data.sort);
123 data.filter = DataHelper.filterHandle(ret.filter, req.query); 131 data.filter = DataHelper.filterHandle(ret.filter, req.query);
124 data.filter.showPrice = ret.total > 10; 132 data.filter.showPrice = ret.total > 10;
125 } 133 }
@@ -96,27 +96,28 @@ const helpers = { @@ -96,27 +96,28 @@ const helpers = {
96 * @param sorts 96 * @param sorts
97 * @returns {Array} 97 * @returns {Array}
98 */ 98 */
99 - getSortNav(sort, sorts) { 99 + getSortNav(msort, misort, sorts) {
100 let nav = []; 100 let nav = [];
  101 + let sortQuery = '?';
101 102
102 - if (sort && sorts) { 103 + if (msort && sorts) {
103 sorts.forEach(s => { 104 sorts.forEach(s => {
104 - if (s.relationParameter.sort === sort) { 105 + if (s.categoryId === msort) {
  106 + sortQuery += 'msort=' + msort;
  107 + s.checked = true;
105 nav.push({ 108 nav.push({
106 - link: '#', 109 + link: sortQuery,
107 pathTitle: '', 110 pathTitle: '',
108 name: s.categoryName 111 name: s.categoryName
109 }); 112 });
110 - } else if (s.sub) { 113 + }
  114 + if (s.sub && misort) {
111 s.sub.forEach(m => { 115 s.sub.forEach(m => {
112 - if (m.relationParameter.sort === sort) {  
113 - nav.push({  
114 - link: '#',  
115 - pathTitle: '',  
116 - name: s.categoryName  
117 - }); 116 + if (m.categoryId === misort) {
  117 + sortQuery += '&misort=' + misort;
  118 + m.checked = true;
118 nav.push({ 119 nav.push({
119 - link: '#', 120 + link: sortQuery,
120 pathTitle: '', 121 pathTitle: '',
121 name: m.categoryName 122 name: m.categoryName
122 }); 123 });
@@ -143,6 +144,16 @@ const helpers = { @@ -143,6 +144,16 @@ const helpers = {
143 }; 144 };
144 }, 145 },
145 146
  147 + sortConvert(sorts) {
  148 + return _.map(sorts, s => {
  149 + return {
  150 + categoryId: s.sortId,
  151 + categoryName: s.sortName,
  152 + sub: helpers.sortConvert(s.sub)
  153 + };
  154 + });
  155 + },
  156 +
146 /** 157 /**
147 * 筛选器数据处理 158 * 筛选器数据处理
148 * @param filter 159 * @param filter
@@ -160,6 +171,7 @@ const helpers = { @@ -160,6 +171,7 @@ const helpers = {
160 let filters = []; 171 let filters = [];
161 let customPriceLow = ''; 172 let customPriceLow = '';
162 let customPriceHigh = ''; 173 let customPriceHigh = '';
  174 + let showSize = (!!q.sort || !!q.misort);
163 175
164 genders.forEach(g => { 176 genders.forEach(g => {
165 if (g.value === q.gender) { 177 if (g.value === q.gender) {
@@ -222,6 +234,7 @@ const helpers = { @@ -222,6 +234,7 @@ const helpers = {
222 } 234 }
223 235
224 if (q.size) { 236 if (q.size) {
  237 + showSize = false;
225 sizeInfo.forEach(s => { 238 sizeInfo.forEach(s => {
226 if (s.sizeId === parseInt(q.size, 10)) { 239 if (s.sizeId === parseInt(q.size, 10)) {
227 s.checked = true; 240 s.checked = true;
@@ -270,9 +283,9 @@ const helpers = { @@ -270,9 +283,9 @@ const helpers = {
270 letters: this.brandLetters(), 283 letters: this.brandLetters(),
271 customPriceLow: customPriceLow, 284 customPriceLow: customPriceLow,
272 customPriceHigh: customPriceHigh, 285 customPriceHigh: customPriceHigh,
273 - showSize: !!q.sort, 286 + showSize: showSize,
274 showPrice: true, 287 showPrice: true,
275 - nav: this.getSortNav(q.sort, sorts) 288 + nav: this.getSortNav(q.msort, q.misort, sorts)
276 }; 289 };
277 }, 290 },
278 291
@@ -47,7 +47,7 @@ const Search = { @@ -47,7 +47,7 @@ const Search = {
47 }, 47 },
48 queryProductOfBrand(params) { 48 queryProductOfBrand(params) {
49 let finalParams = { 49 let finalParams = {
50 - method: 'app.search.brand', 50 + method: 'app.search.li',
51 limit: 45, 51 limit: 45,
52 app_type: 1 52 app_type: 1
53 }; 53 };
@@ -67,11 +67,11 @@ const Search = { @@ -67,11 +67,11 @@ const Search = {
67 67
68 return api.get('', finalParams); 68 return api.get('', finalParams);
69 }, 69 },
70 - queryAllSort() {  
71 - return api.get('', {  
72 - method: 'app.sort.get', 70 + queryAllSort(params) {
  71 + return api.get('', _.assign({
  72 + method: 'web.regular.groupsort',
73 app_type: 1 73 app_type: 1
74 - }); 74 + }, params), {code: 200});
75 } 75 }
76 }; 76 };
77 77
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 {{> list/banner-info }} 10 {{> list/banner-info }}
11 </div> 11 </div>
12 12
13 - <div class="center-content clearfix"> 13 + <div class="yoho-product-list-content center-content clearfix">
14 <div class="left"> 14 <div class="left">
15 {{!-- 筛选区域 --}} 15 {{!-- 筛选区域 --}}
16 {{#filter}} 16 {{#filter}}
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 <div class="title">全部品类</div> 34 <div class="title">全部品类</div>
35 <div class="yoho-ui-accordion no-active"> 35 <div class="yoho-ui-accordion no-active">
36 {{#each sortData}} 36 {{#each sortData}}
37 - <h3>{{categoryName}}</h3> 37 + <h3 {{#if checked}}class="active"{{/if}}>{{categoryName}}</h3>
38 <div class="body" data-value="{{categoryId}}"> 38 <div class="body" data-value="{{categoryId}}">
39 <div class="list-body nano"> 39 <div class="list-body nano">
40 <div class="nano-content"> 40 <div class="nano-content">
@@ -19,8 +19,10 @@ module.exports = { @@ -19,8 +19,10 @@ module.exports = {
19 }, 19 },
20 cookieDomain: 'yohobuy.com', 20 cookieDomain: 'yohobuy.com',
21 domains: { 21 domains: {
22 - api: 'http://testapi.yoho.cn:28078/', // devapi.yoho.cn:58078 testapi.yoho.cn:28078 devapi.yoho.cn:58078  
23 - service: 'http://testservice.yoho.cn:28077/', // testservice.yoho.cn:28077 devservice.yoho.cn:58077 22 + api: 'http://devapi.yoho.cn:58078/', // devapi.yoho.cn:58078 testapi.yoho.cn:28078 devapi.yoho.cn:58078
  23 + service: 'http://devservice.yoho.cn:58077/', // testservice.yoho.cn:28077 devservice.yoho.cn:58077
  24 + // api: 'http://api.yoho.cn/',
  25 + // service: 'http://service.yoho.cn/',
24 search: 'http://192.168.102.216:8080/yohosearch/' 26 search: 'http://192.168.102.216:8080/yohosearch/'
25 }, 27 },
26 useOneapm: false, 28 useOneapm: false,
@@ -23,12 +23,18 @@ var YohoListPage = { @@ -23,12 +23,18 @@ var YohoListPage = {
23 $('.yoho-ui-accordion', this.rootDoc).each(function() { 23 $('.yoho-ui-accordion', this.rootDoc).each(function() {
24 var opts = { 24 var opts = {
25 collapsible: true, 25 collapsible: true,
26 - heightStyle: 'content' 26 + heightStyle: 'content',
  27 + active: 0
27 }; 28 };
28 29
29 if ($(this).hasClass('no-active')) { 30 if ($(this).hasClass('no-active')) {
30 opts.active = false; 31 opts.active = false;
31 } 32 }
  33 + $(this).find('h3').each(function(index) {
  34 + if ($(this).hasClass('active')) {
  35 + opts.active = index;
  36 + }
  37 + });
32 $(this).accordion(opts); 38 $(this).accordion(opts);
33 }); 39 });
34 40
@@ -45,14 +51,13 @@ var YohoListPage = { @@ -45,14 +51,13 @@ var YohoListPage = {
45 $('.list-body .input-radio', this.rootDoc).check({ 51 $('.list-body .input-radio', this.rootDoc).check({
46 type: 'radio', 52 type: 'radio',
47 group: 'sort', 53 group: 'sort',
48 - onChange: function(ele, checked, value) { 54 + onChange: function(ele) {
49 var subCategoryId = $(ele).data('category'); 55 var subCategoryId = $(ele).data('category');
50 var categoryId = $(ele).parents('.body').data('value'); 56 var categoryId = $(ele).parents('.body').data('value');
51 57
52 YohoListPage.go({ 58 YohoListPage.go({
53 - categoryId: categoryId,  
54 - subCategoryId: subCategoryId,  
55 - sort: checked ? value : '' 59 + msort: categoryId,
  60 + misort: subCategoryId
56 }); 61 });
57 } 62 }
58 }); 63 });
@@ -340,6 +340,11 @@ @@ -340,6 +340,11 @@
340 text-align: center; 340 text-align: center;
341 margin: 20px 0 40px; 341 margin: 20px 0 40px;
342 342
  343 + li {
  344 + width: auto;
  345 + margin: 0 4px;
  346 + }
  347 +
343 li:first-child, 348 li:first-child,
344 li:last-child { 349 li:last-child {
345 border-width: 2px; 350 border-width: 2px;
1 .yoho-product-list, 1 .yoho-product-list,
2 .yoho-shop-index { 2 .yoho-shop-index {
3 3
  4 + .yoho-product-list-content {
  5 + margin-top: 30px;
  6 + }
  7 +
4 .brand-banner { 8 .brand-banner {
5 width: 100%; 9 width: 100%;
6 height: 150px; 10 height: 150px;
@@ -37,7 +41,6 @@ @@ -37,7 +41,6 @@
37 .shop-menu { 41 .shop-menu {
38 42
39 border-bottom: 1px solid #eee; 43 border-bottom: 1px solid #eee;
40 - margin-bottom: 30px;  
41 44
42 li { 45 li {
43 display: inline-block; 46 display: inline-block;