Merge remote-tracking branch 'origin/release/1.0' into release/1.0
Showing
20 changed files
with
157 additions
and
304 deletions
@@ -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"></i> | 27 | <i class="iconfont"></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 |
-
Please register or login to post a comment