Authored by htoooth

Merge remote-tracking branch 'origin/release/1.0' into release/1.0

@@ -30,7 +30,7 @@ const product = (req, res, next) => { @@ -30,7 +30,7 @@ const product = (req, res, next) => {
30 code: 403, 30 code: 403,
31 message: '请登录后执行该操作', 31 message: '请登录后执行该操作',
32 data: { 32 data: {
33 - refer: helpers.urlFormat('/signin') 33 + refer: helpers.urlFormat('/passport/login')
34 } 34 }
35 }); 35 });
36 } 36 }
@@ -59,7 +59,7 @@ const brand = (req, res, next) => { @@ -59,7 +59,7 @@ const brand = (req, res, next) => {
59 code: 403, 59 code: 403,
60 message: '请登录后执行该操作', 60 message: '请登录后执行该操作',
61 data: { 61 data: {
62 - refer: helpers.urlFormat('/signin') 62 + refer: helpers.urlFormat('/passport/login')
63 } 63 }
64 }); 64 });
65 } 65 }
@@ -88,7 +88,7 @@ const shop = (req, res, next) => { @@ -88,7 +88,7 @@ const shop = (req, res, next) => {
88 code: 403, 88 code: 403,
89 message: '请登录后执行该操作', 89 message: '请登录后执行该操作',
90 data: { 90 data: {
91 - refer: helpers.urlFormat('/signin') 91 + refer: helpers.urlFormat('/passport/login')
92 } 92 }
93 }); 93 });
94 } 94 }
@@ -9,238 +9,6 @@ const _ = require('lodash'); @@ -9,238 +9,6 @@ const _ = require('lodash');
9 const Item = require('../models/item'); 9 const Item = require('../models/item');
10 10
11 const index = (req, res, next) => { 11 const index = (req, res, next) => {
12 - // let data = {  
13 - // brandBanner: {  
14 - // bgColor: '#93897d',  
15 - // brandLogo: {  
16 - // link: '#',  
17 - // img: 'http://placehold.it/{width}x{height}'  
18 - // },  
19 - // brandHome: {  
20 - // link: '#'  
21 - // }  
22 - // },  
23 - // nav: [  
24 - // {  
25 - // link: '#',  
26 - // name: 'MEN首页'  
27 - // },  
28 - // {  
29 - // link: '#',  
30 - // name: '上衣'  
31 - // },  
32 - // {  
33 - // link: '#',  
34 - // name: '卫衣'  
35 - // },  
36 - // {  
37 - // name: 'Spring 2016NEWT-Shirt 2016迷彩蝴蝶夹克'  
38 - // }  
39 - // ],  
40 - // goodInfo: {  
41 - // name: 'Spring 2016NEWT-Shirt 2016迷彩蝴蝶夹克',  
42 - // brandName: 'Supreme',  
43 - // intro: '2016最新发布',  
44 - // img: 'http://placehold.it/{width}x{height}',  
45 - // sellPrice: 3199,  
46 - // marketPrice: 4009,  
47 - // colors: [  
48 - // {  
49 - // name: '黑色',  
50 - // title: '黑色',  
51 - // focus: true,  
52 - // thumbs: [  
53 - // 'http://placehold.it/{width}x{height}',  
54 - // 'http://placehold.it/{width}x{height}',  
55 - // 'http://placehold.it/{width}x{height}',  
56 - // 'http://placehold.it/{width}x{height}',  
57 - // 'http://placehold.it/{width}x{height}'  
58 - // ],  
59 - // sizes: [  
60 - // {  
61 - // name: 'S',  
62 - // title: 'S',  
63 - // sku: '12313',  
64 - // num: 10  
65 - // },  
66 - // {  
67 - // name: 'M',  
68 - // title: 'M',  
69 - // sku: '12314',  
70 - // num: 14  
71 - // },  
72 - // {  
73 - // name: 'L',  
74 - // title: 'L',  
75 - // sku: '12315',  
76 - // num: 0  
77 - // },  
78 - // {  
79 - // name: 'XL',  
80 - // title: 'XL',  
81 - // sku: '12316',  
82 - // num: 0  
83 - // }  
84 - // ],  
85 - // rgb: '#000'  
86 - // },  
87 - // {  
88 - // name: '黄色',  
89 - // title: '黄色',  
90 - // thumbs: [  
91 - // 'http://placehold.it/{width}x{height}',  
92 - // 'http://placehold.it/{width}x{height}'  
93 - // ],  
94 - // rgb: '#efdc0e',  
95 - // sizes: [  
96 - // {  
97 - // name: 'S',  
98 - // title: 'S',  
99 - // sku: '12313',  
100 - // num: 0  
101 - // },  
102 - // {  
103 - // name: 'M',  
104 - // title: 'M',  
105 - // sku: '12314',  
106 - // num: 14  
107 - // },  
108 - // {  
109 - // name: 'L',  
110 - // title: 'L',  
111 - // sku: '12315',  
112 - // num: 0  
113 - // },  
114 - // {  
115 - // name: 'XL',  
116 - // title: 'XL',  
117 - // sku: '12316',  
118 - // num: 23  
119 - // }  
120 - // ]  
121 - // },  
122 - // {  
123 - // name: '蓝色',  
124 - // title: '蓝色',  
125 - // thumbs: [  
126 - // 'http://placehold.it/{width}x{height}',  
127 - // 'http://placehold.it/{width}x{height}',  
128 - // 'http://placehold.it/{width}x{height}',  
129 - // 'http://placehold.it/{width}x{height}'  
130 - // ],  
131 - // rgb: '#2ea8e6'  
132 - // },  
133 - // {  
134 - // name: '绿色',  
135 - // title: '绿色',  
136 - // thumbs: [  
137 - // 'http://placehold.it/{width}x{height}',  
138 - // 'http://placehold.it/{width}x{height}',  
139 - // 'http://placehold.it/{width}x{height}',  
140 - // 'http://placehold.it/{width}x{height}'  
141 - // ],  
142 - // rgb: '#85b2ef'  
143 - // }  
144 - // ]  
145 - // },  
146 - // description: {  
147 - // titleEn: 'DESCRIPTION',  
148 - // titleCn: '商品信息',  
149 - // basic: [  
150 - // {  
151 - // key: '编号',  
152 - // value: '51144694'  
153 - // },  
154 - // {  
155 - // key: '颜色',  
156 - // value: '灰色'  
157 - // },  
158 - // {  
159 - // key: '性别',  
160 - // value: '男款'  
161 - // },  
162 - // {  
163 - // key: '经典款型',  
164 - // value: '灰色'  
165 - // }  
166 - // ]  
167 - // },  
168 - // material: {  
169 - // titleEn: 'MATERIALS',  
170 - // titleCn: '材料洗涤',  
171 - // detail: [  
172 - // {  
173 - // img: 'http://placehold.it/{width}x{height}',  
174 - // name: '皮革',  
175 - // nameEn: 'Leather',  
176 - // text: '不适宜沾水,避免硬物划花,使用专用清洁膏擦拭。长时间不着用,可用软毛巾抹掉表面尘土,上一层皮革保养油。建议几双鞋交替穿着,不穿时放置通风处保持鞋内干爽。'  
177 - // }  
178 - // ],  
179 - // wash: [  
180 - // {  
181 - // img: 'http://placehold.it/{width}x{height}',  
182 - // name: '分色洗涤'  
183 - // }  
184 - // ]  
185 - // },  
186 - // sizeInfo: {  
187 - // titleEn: 'SIZEINFO',  
188 - // titleCn: '尺码信息',  
189 - // param: {  
190 - // thead: [  
191 - // {  
192 - // width: 126,  
193 - // name: '吊牌尺码'  
194 - // },  
195 - // {  
196 - // width: 126,  
197 - // name: '后衣长'  
198 - // },  
199 - // {  
200 - // width: 126,  
201 - // name: '前衣长'  
202 - // }  
203 - // ],  
204 - // tbody: [  
205 - // ['XS', 66, 66],  
206 - // ['S', 66, 66],  
207 - // ['L', 66, 66]  
208 - // ]  
209 - // },  
210 - // taste: {  
211 - // thead: [  
212 - // {  
213 - // width: 170,  
214 - // name: '模特'  
215 - // },  
216 - // {  
217 - // width: 126,  
218 - // name: '身高'  
219 - // },  
220 - // {  
221 - // width: 126,  
222 - // name: '体重'  
223 - // }  
224 - // ],  
225 - // tbody: [  
226 - // [{  
227 - // img: 'http://placehold.it/{width}x{height}',  
228 - // name: 'Steven'  
229 - // }, 187, 66],  
230 - // [{  
231 - // img: 'http://placehold.it/{width}x{height}',  
232 - // name: 'Oliver'  
233 - // }, 183, 66]  
234 - // ]  
235 - // }  
236 - // },  
237 - // details: {  
238 - // titleEn: 'DETAILS',  
239 - // titleCn: '商品详情',  
240 - // content: 'aaaa'  
241 - // }  
242 - // };  
243 -  
244 Item.getProductItemData(req.params, req.url, req.user.uid).then(result => { 12 Item.getProductItemData(req.params, req.url, req.user.uid).then(result => {
245 if (_.isEmpty(result)) { 13 if (_.isEmpty(result)) {
246 return next(); 14 return next();
@@ -11,6 +11,7 @@ const list = { @@ -11,6 +11,7 @@ const list = {
11 let q = req.query; 11 let q = req.query;
12 12
13 q.page = parseInt(q.page || 1, 10); 13 q.page = parseInt(q.page || 1, 10);
  14 + q.order = q.order || 's_n_desc';
14 15
15 let retData = { 16 let retData = {
16 module: 'product', 17 module: 'product',
@@ -55,6 +56,7 @@ const list = { @@ -55,6 +56,7 @@ const list = {
55 let q = req.query; 56 let q = req.query;
56 57
57 q.page = parseInt(q.page || 1, 10); 58 q.page = parseInt(q.page || 1, 10);
  59 + q.order = q.order || 's_n_desc';
58 60
59 let retData = { 61 let retData = {
60 module: 'product', 62 module: 'product',
@@ -16,8 +16,10 @@ const DataHelper = require('../models/helpers'); @@ -16,8 +16,10 @@ const DataHelper = require('../models/helpers');
16 const Query = { 16 const Query = {
17 index: (req, res, next) => { 17 index: (req, res, next) => {
18 let q = req.query; 18 let q = req.query;
  19 + let query = q.query || '';
19 20
20 q.page = parseInt(q.page || 1, 10); 21 q.page = parseInt(q.page || 1, 10);
  22 + q.order = q.order || 's_n_desc';
21 23
22 let retData = { 24 let retData = {
23 module: 'product', 25 module: 'product',
@@ -32,11 +34,12 @@ const Query = { @@ -32,11 +34,12 @@ const Query = {
32 let nav = [DataHelper.getChannelNav()]; 34 let nav = [DataHelper.getChannelNav()];
33 35
34 nav.push({ 36 nav.push({
35 - name: `"${q.query}" ${data.total}个结果` 37 + name: `"${query}" ${data.total}个结果`
36 }); 38 });
37 39
38 if (data.filter) { 40 if (data.filter) {
39 retData.filter = DataHelper.filterHandle(data.filter, q); 41 retData.filter = DataHelper.filterHandle(data.filter, q);
  42 + retData.filter.showPrice = data.total > 10;
40 } 43 }
41 44
42 retData.navPath = { 45 retData.navPath = {
@@ -92,6 +92,7 @@ const shop = { @@ -92,6 +92,7 @@ const shop = {
92 let uid = cookie.getUid(req); 92 let uid = cookie.getUid(req);
93 let q = req.query; 93 let q = req.query;
94 94
  95 + q.order = q.order || 's_n_desc';
95 q.page = parseInt(q.page || 1, 10); 96 q.page = parseInt(q.page || 1, 10);
96 97
97 ShopData.getShopHeadData(domain, uid).then(result => { 98 ShopData.getShopHeadData(domain, uid).then(result => {
@@ -43,13 +43,17 @@ const helpers = { @@ -43,13 +43,17 @@ const helpers = {
43 }, 43 },
44 44
45 colorConvert(colors) { 45 colorConvert(colors) {
46 - return colors.map((c) => {  
47 - return {  
48 - id: c.colorId,  
49 - title: c.colorName,  
50 - rgb: c.colorValue ? `url(${c.colorValue})` : '#' + c.colorCode  
51 - };  
52 - }); 46 + if (colors) {
  47 + return colors.map((c) => {
  48 + return {
  49 + id: c.colorId,
  50 + title: c.colorName,
  51 + rgb: c.colorValue ? `url(${c.colorValue})` : '#' + c.colorCode
  52 + };
  53 + });
  54 + } else {
  55 + return [];
  56 + }
53 }, 57 },
54 58
55 getChannelNav() { 59 getChannelNav() {
@@ -119,32 +123,43 @@ const helpers = { @@ -119,32 +123,43 @@ const helpers = {
119 123
120 let matchPrice = false; 124 let matchPrice = false;
121 125
122 - priceRange = Object.keys(priceRange).map((k) => {  
123 - let prices = k.split(',');  
124 - let p = {  
125 - lower: prices[0],  
126 - higher: prices[1]  
127 - }; 126 + if (priceRange) {
  127 + priceRange = Object.keys(priceRange).map((k) => {
  128 + let prices = k.split(',');
  129 + let p = {
  130 + lower: prices[0],
  131 + higher: prices[1]
  132 + };
  133 +
  134 + if (k === q.price) {
  135 + p.checked = true;
  136 + matchPrice = true;
  137 + filters.push(this.newFilter('price', q.price, ${prices[0]}-¥${prices[1]}`));
  138 + }
  139 + return p;
  140 + }).sort((a, b) => {
  141 + return a.lower - b.lower;
  142 + });
128 143
129 - if (k === q.price) {  
130 - p.checked = true;  
131 - matchPrice = true;  
132 - }  
133 - return p;  
134 - }).sort((a, b) => {  
135 - return a.lower - b.lower;  
136 - }); 144 + if (!matchPrice && q.price) {
  145 + let prices = q.price.split(',');
  146 + let priceTxt = ${prices[0]}-¥${prices[1]}`;
  147 +
  148 + customPriceLow = prices[0];
  149 + customPriceHigh = prices[1];
137 150
138 - if (!matchPrice && q.price) {  
139 - let prices = q.price.split(','); 151 + if (prices[1] === Number.MAX_SAFE_INTEGER.toString()) {
  152 + priceTxt = `大于¥${prices[0]}`;
  153 + customPriceHigh = '';
  154 + }
140 155
141 - filters.push(this.newFilter('price', q.price, ${prices[0]}-¥${prices[1]}`));  
142 - customPriceLow = prices[0];  
143 - customPriceHigh = prices[1]; 156 + filters.push(this.newFilter('price', q.price, priceTxt));
  157 +
  158 + }
144 } 159 }
145 160
146 161
147 - if (!_.isArray(sizeInfo)) { 162 + if (!_.isArray(sizeInfo) && sizeInfo) {
148 sizeInfo.checked = true; 163 sizeInfo.checked = true;
149 sizeInfo = [sizeInfo]; 164 sizeInfo = [sizeInfo];
150 } 165 }
@@ -197,6 +212,7 @@ const helpers = { @@ -197,6 +212,7 @@ const helpers = {
197 customPriceLow: customPriceLow, 212 customPriceLow: customPriceLow,
198 customPriceHigh: customPriceHigh, 213 customPriceHigh: customPriceHigh,
199 showSize: !!q.sort, 214 showSize: !!q.sort,
  215 + showPrice: true,
200 nav: this.getSortNav(q.sort, sorts) 216 nav: this.getSortNav(q.sort, sorts)
201 }; 217 };
202 }, 218 },
@@ -140,7 +140,10 @@ const setPathNav = (data, name) => { @@ -140,7 +140,10 @@ const setPathNav = (data, name) => {
140 let resData = {}; 140 let resData = {};
141 141
142 if (!_.isEmpty(data)) { 142 if (!_.isEmpty(data)) {
143 - let navs = []; 143 + let navs = [{
  144 + link: helpers.urlFormat(''),
  145 + name: 'MEN首页' // 待处理
  146 + }];
144 let sort = data.sort[0]; 147 let sort = data.sort[0];
145 148
146 navs.push({ 149 navs.push({
@@ -185,6 +188,7 @@ const setPathNav = (data, name) => { @@ -185,6 +188,7 @@ const setPathNav = (data, name) => {
185 */ 188 */
186 const setBrandBanner = brand => { 189 const setBrandBanner = brand => {
187 let data = { 190 let data = {
  191 + brandId: brand.id,
188 bgColor: '#000', 192 bgColor: '#000',
189 brandLogo: { 193 brandLogo: {
190 link: `/product/shop/${brand.brandDomain}`, // 品牌跳转链接 -- 待处理 194 link: `/product/shop/${brand.brandDomain}`, // 品牌跳转链接 -- 待处理
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 7
8 const _ = require('lodash'); 8 const _ = require('lodash');
9 const itemAPI = require('./item-api'); 9 const itemAPI = require('./item-api');
  10 +const brandAPI = require('./brand-api');
10 const itemFUN = require('./item-handler'); 11 const itemFUN = require('./item-handler');
11 12
12 const search = require('./search-api'); 13 const search = require('./search-api');
@@ -14,8 +15,7 @@ const search = require('./search-api'); @@ -14,8 +15,7 @@ const search = require('./search-api');
14 const _getMultiResourceByBaseInfo = (base) => { 15 const _getMultiResourceByBaseInfo = (base) => {
15 let productId = base.id; 16 let productId = base.id;
16 let skn = base.erpProductId; 17 let skn = base.erpProductId;
17 -  
18 - // let brandId = base.brand.id ? base.brand.id : 0; 18 + let brandId = base.brand.id ? base.brand.id : 0;
19 19
20 // 获取相关数据 20 // 获取相关数据
21 let promiseData = [ 21 let promiseData = [
@@ -27,6 +27,7 @@ const _getMultiResourceByBaseInfo = (base) => { @@ -27,6 +27,7 @@ const _getMultiResourceByBaseInfo = (base) => {
27 27
28 if (base.uid) { 28 if (base.uid) {
29 promiseData.push(itemAPI.getUserIsFav(base.uid, productId)); 29 promiseData.push(itemAPI.getUserIsFav(base.uid, productId));
  30 + promiseData.push(brandAPI.getBrandInfo(brandId, base.uid));
30 } 31 }
31 32
32 return Promise.all(promiseData).then(result => { 33 return Promise.all(promiseData).then(result => {
@@ -35,7 +36,8 @@ const _getMultiResourceByBaseInfo = (base) => { @@ -35,7 +36,8 @@ const _getMultiResourceByBaseInfo = (base) => {
35 comfort: result[1].data, 36 comfort: result[1].data,
36 modelTry: result[2].data, 37 modelTry: result[2].data,
37 sort: result[3].data, 38 sort: result[3].data,
38 - productFav: (result[4] && result[4].data) 39 + productFav: (result[4] && result[4].data),
  40 + brandFav: (result[5] && result[5].data && result[5].data.is_favorite === 'Y')
39 }; 41 };
40 }); 42 });
41 }; 43 };
@@ -68,12 +70,14 @@ let getProductItemData = (params, url, uid) => { @@ -68,12 +70,14 @@ let getProductItemData = (params, url, uid) => {
68 } 70 }
69 71
70 return _getMultiResourceByBaseInfo(result).then(mulRes => { 72 return _getMultiResourceByBaseInfo(result).then(mulRes => {
71 - // 面包屑导航  
72 - Object.assign(data, itemFUN.setPathNav(mulRes.sort, result.productName));  
73 73
74 // 收藏状态 74 // 收藏状态
  75 + _.set(data, 'brandBanner.brandFav', mulRes.brandFav);
75 _.set(data, 'goodInfo.productFav', mulRes.productFav); 76 _.set(data, 'goodInfo.productFav', mulRes.productFav);
76 77
  78 + // 面包屑导航
  79 + Object.assign(data, itemFUN.setPathNav(mulRes.sort, result.productName));
  80 +
77 // DESCRIPTION商品描述 81 // DESCRIPTION商品描述
78 Object.assign(data, itemFUN.setDescriptionData(mulRes.sizeInfo, mulRes.comfort)); 82 Object.assign(data, itemFUN.setDescriptionData(mulRes.sizeInfo, mulRes.comfort));
79 83
@@ -3,12 +3,22 @@ @@ -3,12 +3,22 @@
3 const api = global.yoho.API; 3 const api = global.yoho.API;
4 const _ = require('lodash'); 4 const _ = require('lodash');
5 5
6 -function clearEmptyVal(obj) { 6 +function _paramHanlde(obj) {
7 _.keys(obj).forEach(k => { 7 _.keys(obj).forEach(k => {
8 if (obj[k] === null || obj[k] === '') { 8 if (obj[k] === null || obj[k] === '') {
9 _.unset(obj, k); 9 _.unset(obj, k);
10 } 10 }
11 }); 11 });
  12 +
  13 + if (obj.price) {
  14 + let prices = obj.price.split(',');
  15 +
  16 + if (!prices[1]) {
  17 + prices[1] = Number.MAX_SAFE_INTEGER;
  18 + obj.price = prices.join(',');
  19 + }
  20 + }
  21 +
12 return obj; 22 return obj;
13 } 23 }
14 24
@@ -20,7 +30,7 @@ const Search = { @@ -20,7 +30,7 @@ const Search = {
20 limit: 45 30 limit: 45
21 }; 31 };
22 32
23 - Object.assign(finalParams, clearEmptyVal(params)); 33 + Object.assign(finalParams, _paramHanlde(params));
24 34
25 return api.get('', finalParams); 35 return api.get('', finalParams);
26 }, 36 },
@@ -30,7 +40,7 @@ const Search = { @@ -30,7 +40,7 @@ const Search = {
30 limit: 45 40 limit: 45
31 }; 41 };
32 42
33 - Object.assign(finalParams, clearEmptyVal(params)); 43 + Object.assign(finalParams, _paramHanlde(params));
34 44
35 return api.get('', finalParams); 45 return api.get('', finalParams);
36 }, 46 },
@@ -40,7 +50,7 @@ const Search = { @@ -40,7 +50,7 @@ const Search = {
40 limit: 45 50 limit: 45
41 }; 51 };
42 52
43 - Object.assign(finalParams, clearEmptyVal(params)); 53 + Object.assign(finalParams, _paramHanlde(params));
44 54
45 return api.get('', finalParams); 55 return api.get('', finalParams);
46 }, 56 },
@@ -122,8 +122,6 @@ const ShopService = { @@ -122,8 +122,6 @@ const ShopService = {
122 let brandId = domainInfo.id; 122 let brandId = domainInfo.id;
123 let brandInfo = yield BrandService.getBrandInfo(brandId, uid); 123 let brandInfo = yield BrandService.getBrandInfo(brandId, uid);
124 124
125 - console.log(brandInfo);  
126 -  
127 info.name = brandInfo.brandName; 125 info.name = brandInfo.brandName;
128 info.info = brandInfo.brandIntro; 126 info.info = brandInfo.brandIntro;
129 info.btnName = '品牌介绍'; 127 info.btnName = '品牌介绍';
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 </a> 23 </a>
24 {{/ brandIntro}} 24 {{/ brandIntro}}
25 25
26 - <span id="brand-fav" class="brand-fav{{#if coled}} coled{{/if}}"> 26 + <span id="brand-fav" class="brand-fav{{#if brandFav}} cur{{/if}}" data-id={{brandId}}>
27 <i class="iconfont">&#xe627;</i> 27 <i class="iconfont">&#xe627;</i>
28 </span> 28 </span>
29 </p> 29 </p>
@@ -71,6 +71,7 @@ @@ -71,6 +71,7 @@
71 </div> 71 </div>
72 {{/if}} 72 {{/if}}
73 73
  74 +{{#if showPrice}}
74 <div class="yoho-ui-accordion"> 75 <div class="yoho-ui-accordion">
75 <h3>价格</h3> 76 <h3>价格</h3>
76 <div class="body price-body"> 77 <div class="body price-body">
@@ -94,6 +95,7 @@ @@ -94,6 +95,7 @@
94 </div> 95 </div>
95 </div> 96 </div>
96 </div> 97 </div>
  98 +{{/if}}
97 99
98 {{#if showSize}} 100 {{#if showSize}}
99 <div class="yoho-ui-accordion"> 101 <div class="yoho-ui-accordion">
1 <div class="goods-area clearfix"> 1 <div class="goods-area clearfix">
2 {{#each products}} 2 {{#each products}}
3 - <div class="goods" data-id="{{productId}}" data-url="{{url}}">  
4 - <div class="goods-img">  
5 - <img class="lazy" data-original="{{image defaultImages 263 344}}" width="263" height="344" alt=""> 3 + <div class="goods" data-id="{{productId}}" data-url="{{url}}">
  4 + <div class="goods-img">
  5 + <a href="{{url}}">
  6 + <img class="lazy" data-original="{{image defaultImages 263 344}}" width="263" height="344" alt="">
  7 + </a>
  8 + </div>
  9 + <div class="goods-brand">
  10 + <a href="/product/shop/{{brandDomain}}" target="_blank">{{brandName}}</a>
  11 + </div>
  12 + <div class="goods-name">
  13 + <a href="{{url}}">{{productName}}</a>
  14 + </div>
  15 + <div class="goods-price">
  16 + <span>¥{{round salesPrice}}</span>
  17 + {{#if marketPrice}}
  18 + <b>¥{{round marketPrice}}</b>
  19 + {{/if}}
  20 + </div>
  21 + <div class="goods-list hide">
  22 + {{#each goodsList}}
  23 + <i data-url="{{url}}">{{image imagesUrl 256 343}}</i>
  24 + {{/each}}
  25 + </div>
6 </div> 26 </div>
7 - <div class="goods-brand">  
8 - {{brandName}}  
9 - </div>  
10 - <div class="goods-name">  
11 - {{productName}}  
12 - </div>  
13 - <div class="goods-price">  
14 - <span>¥{{round salesPrice}}</span>  
15 - {{#if marketPrice}}  
16 - <b>¥{{round marketPrice}}</b>  
17 - {{/if}}  
18 - </div>  
19 - <div class="goods-list hide">  
20 - {{#each goodsList}}  
21 - <i data-url="{{url}}">{{image imagesUrl 265 344}}</i>  
22 - {{/each}}  
23 - </div>  
24 - </div>  
25 {{/each}} 27 {{/each}}
26 <div class="goods-wrapper"> 28 <div class="goods-wrapper">
27 <div class="goods"> 29 <div class="goods">
1 <div class="order-area"> 1 <div class="order-area">
2 - <div class="order {{#if order}}{{^}}selected{{/if}}" data-order="">综合</div> 2 + <div class="order {{#isEqual order 's_n_desc'}}selected{{/isEqual}}" data-order="s_n_desc">综合</div>
3 <div class="order {{#isEqual order 's_t_desc'}}selected{{/isEqual}}" data-order="s_t_desc">上新时间</div> 3 <div class="order {{#isEqual order 's_t_desc'}}selected{{/isEqual}}" data-order="s_t_desc">上新时间</div>
4 <div class="order order-price {{#isEqual order 's_p_asc'}}selected{{/isEqual}}{{#isEqual order 's_p_desc'}}selected{{/isEqual}}" data-order="s_p_asc,s_p_desc" data-target="price-dest">价格</div> 4 <div class="order order-price {{#isEqual order 's_p_asc'}}selected{{/isEqual}}{{#isEqual order 's_p_desc'}}selected{{/isEqual}}" data-order="s_p_asc,s_p_desc" data-target="price-dest">价格</div>
5 <div class="dest price-dest"> 5 <div class="dest price-dest">
@@ -26,9 +26,9 @@ module.exports = { @@ -26,9 +26,9 @@ module.exports = {
26 useOneapm: false, 26 useOneapm: false,
27 useCache: false, 27 useCache: false,
28 memcache: { 28 memcache: {
29 - master: ['192.168.102.168:11211'],  
30 - slave: ['192.168.102.168:11211'],  
31 - session: ['192.168.102.168:11211'], 29 + master: ['127.0.0.1:11211'],
  30 + slave: ['127.0.0.1:11211'],
  31 + session: ['127.0.0.1:11211'],
32 timeout: 1000, 32 timeout: 1000,
33 retries: 0 33 retries: 0
34 }, 34 },
@@ -12,7 +12,9 @@ @@ -12,7 +12,9 @@
12 </li> 12 </li>
13 {{/ navbars}} 13 {{/ navbars}}
14 </ul> 14 </ul>
15 - <div class="main-logo"></div> 15 + <div class="main-logo">
  16 + <a href="{{../siteUrl}}"></a>
  17 + </div>
16 </div> 18 </div>
17 </div> 19 </div>
18 <div class="sub-nav"> 20 <div class="sub-nav">
@@ -256,6 +256,33 @@ $('#keep-shopping').click(function() { @@ -256,6 +256,33 @@ $('#keep-shopping').click(function() {
256 $tradeWrapper.slideDown(SLIDETIME); 256 $tradeWrapper.slideDown(SLIDETIME);
257 }); 257 });
258 258
  259 +$('#brand-fav').click(function() {
  260 + var $this = $(this),
  261 + info = $this.data(),
  262 + param = {};
  263 +
  264 + if (!info.id) {
  265 + return;
  266 + }
  267 +
  268 + param.brandId = info.id;
  269 + if ($this.hasClass('coll')) {
  270 + param.type = 'cancel';
  271 + }
  272 +
  273 + $.ajax({
  274 + type: 'POST',
  275 + url: '/product/brand/togglecollect',
  276 + data: param
  277 + }).then(function(data) {
  278 + if (data.code === 200) {
  279 + $this.toggleClass('coll');
  280 + } else if (data.code === 403) {
  281 + location.href = data.data.refer;
  282 + }
  283 + });
  284 +});
  285 +
259 // 商品收藏 286 // 商品收藏
260 $('#collect-product').click(function() { 287 $('#collect-product').click(function() {
261 var $this = $(this), 288 var $this = $(this),
@@ -112,9 +112,13 @@ var YohoListPage = { @@ -112,9 +112,13 @@ var YohoListPage = {
112 } 112 }
113 }); 113 });
114 114
  115 + $('.price-input input', this.rootDoc).keyup(function() {
  116 + $(this)[0].value = $(this)[0].value.replace(/\D+/g, '');
  117 + });
  118 +
115 $('.price-btns .confirm', this.rootDoc).click(function() { 119 $('.price-btns .confirm', this.rootDoc).click(function() {
116 var priceLow = $('.price-low', $(this).parent()).val() || 0; 120 var priceLow = $('.price-low', $(this).parent()).val() || 0;
117 - var priceHigh = $('.price-high', $(this).parent()).val() || 0; 121 + var priceHigh = $('.price-high', $(this).parent()).val() || '';
118 122
119 if (priceLow > 0 || priceHigh > 0) { 123 if (priceLow > 0 || priceHigh > 0) {
120 YohoListPage.go({ 124 YohoListPage.go({
@@ -139,7 +143,7 @@ var YohoListPage = { @@ -139,7 +143,7 @@ var YohoListPage = {
139 YohoListPage.openWin(url); 143 YohoListPage.openWin(url);
140 }); 144 });
141 145
142 - $('.goods-wrapper > .goods').click(function() { 146 + $('.goods-wrapper > .goods > img').click(function() {
143 var url = $(this).data('url'); 147 var url = $(this).data('url');
144 148
145 YohoListPage.openWin(url); 149 YohoListPage.openWin(url);
@@ -194,6 +194,12 @@ @@ -194,6 +194,12 @@
194 margin-left: -132px; 194 margin-left: -132px;
195 margin-top: 20px; 195 margin-top: 20px;
196 background: resolve('layout/blk-logo.png') no-repeat center center; 196 background: resolve('layout/blk-logo.png') no-repeat center center;
  197 +
  198 + a {
  199 + display: block;
  200 + width: 100%;
  201 + height: 100%;
  202 + }
197 } 203 }
198 } 204 }
199 205
@@ -36,6 +36,10 @@ @@ -36,6 +36,10 @@
36 cursor: pointer; 36 cursor: pointer;
37 } 37 }
38 38
  39 + .coll {
  40 + color: #1d1d1d;
  41 + }
  42 +
39 .iconfont { 43 .iconfont {
40 font-size: 12px; 44 font-size: 12px;
41 } 45 }