Merge remote-tracking branch 'origin/release/1.0' into release/1.0
Conflicts: apps/passport/controllers/reg.js
Showing
8 changed files
with
78 additions
and
54 deletions
@@ -27,15 +27,14 @@ const ticketCacheKey = 'wechatShare:ticket'; | @@ -27,15 +27,14 @@ const ticketCacheKey = 'wechatShare:ticket'; | ||
27 | 27 | ||
28 | // 微信 JS 接口签名校验工具 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign | 28 | // 微信 JS 接口签名校验工具 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign |
29 | 29 | ||
30 | -const wechat = { | ||
31 | - getAccessToken: Promise.coroutine(function* () { | 30 | +let _getAccessToken = Promise.coroutine(function* () { |
32 | let accessToken = yield cache.get(accessTokenCacheKey); | 31 | let accessToken = yield cache.get(accessTokenCacheKey); |
33 | 32 | ||
34 | if (accessToken) { | 33 | if (accessToken) { |
35 | return accessToken; | 34 | return accessToken; |
36 | } | 35 | } |
37 | 36 | ||
38 | - logger.info('调用微信 API 获取 accessToken'); | 37 | + logger.info('get accessToken from wechat API'); |
39 | return request({ | 38 | return request({ |
40 | url: 'https://api.weixin.qq.com/cgi-bin/token', | 39 | url: 'https://api.weixin.qq.com/cgi-bin/token', |
41 | qs: { | 40 | qs: { |
@@ -48,26 +47,26 @@ const wechat = { | @@ -48,26 +47,26 @@ const wechat = { | ||
48 | 47 | ||
49 | // accessToken 有效期 7200s,缓存 7100s | 48 | // accessToken 有效期 7200s,缓存 7100s |
50 | cache.set(accessTokenCacheKey, res.access_token, 7100).catch((err) => { | 49 | cache.set(accessTokenCacheKey, res.access_token, 7100).catch((err) => { |
51 | - logger.error('微信分享 Token, 缓存 accessToken 时出错', JSON.stringify(err)); | 50 | + logger.error('set wechat accessToken cache error', JSON.stringify(err)); |
52 | }); | 51 | }); |
53 | return res.access_token; | 52 | return res.access_token; |
54 | }).catch((err) => { | 53 | }).catch((err) => { |
55 | - logger.error('微信分享 Token, 获取 accessToken 时出错', JSON.stringify(err)); | 54 | + logger.error('get accessToken from wechat API error', JSON.stringify(err)); |
56 | }); | 55 | }); |
57 | - }), | 56 | +}); |
58 | 57 | ||
59 | - getTicket: Promise.coroutine(function* () { | 58 | +let _getTicket = Promise.coroutine(function* () { |
60 | let ticket = yield cache.get(ticketCacheKey); | 59 | let ticket = yield cache.get(ticketCacheKey); |
61 | 60 | ||
62 | if (ticket) { | 61 | if (ticket) { |
63 | return ticket; | 62 | return ticket; |
64 | } | 63 | } |
65 | 64 | ||
66 | - logger.info('调用微信 API 获取 ticket'); | 65 | + logger.info('get ticket from wechat API'); |
67 | return request({ | 66 | return request({ |
68 | url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket', | 67 | url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket', |
69 | qs: { | 68 | qs: { |
70 | - access_token: yield this.getAccessToken(), | 69 | + access_token: yield _getAccessToken(), |
71 | type: 'jsapi' | 70 | type: 'jsapi' |
72 | }, | 71 | }, |
73 | json: true | 72 | json: true |
@@ -75,19 +74,19 @@ const wechat = { | @@ -75,19 +74,19 @@ const wechat = { | ||
75 | 74 | ||
76 | // ticket 有效期 7200s,缓存 7100s | 75 | // ticket 有效期 7200s,缓存 7100s |
77 | cache.set(ticketCacheKey, res.ticket, 7100).catch((err) => { | 76 | cache.set(ticketCacheKey, res.ticket, 7100).catch((err) => { |
78 | - logger.error('微信分享 Token, 缓存 ticket 时出错', JSON.stringify(err)); | 77 | + logger.error('set wechat Token cache error', JSON.stringify(err)); |
79 | }); | 78 | }); |
80 | return res.ticket; | 79 | return res.ticket; |
81 | }).catch((err) => { | 80 | }).catch((err) => { |
82 | - logger.error('微信分享 Token, 获取 ticket 时出错', JSON.stringify(err)); | 81 | + logger.error('get ticket from wechat API error', JSON.stringify(err)); |
83 | }); | 82 | }); |
84 | - }), | 83 | +}); |
85 | 84 | ||
86 | - calcSignature: Promise.coroutine(function* (data) { | 85 | +let calcSignature = Promise.coroutine(function* (data) { |
87 | data = Object.assign({ | 86 | data = Object.assign({ |
88 | nonceStr: Math.random().toString(36).substr(2, 15), | 87 | nonceStr: Math.random().toString(36).substr(2, 15), |
89 | timestamp: Math.floor(Date.now() / 1000) + '', | 88 | timestamp: Math.floor(Date.now() / 1000) + '', |
90 | - ticket: yield this.getTicket(), | 89 | + ticket: yield _getTicket(), |
91 | appId: appId | 90 | appId: appId |
92 | }, data); | 91 | }, data); |
93 | 92 | ||
@@ -95,12 +94,13 @@ const wechat = { | @@ -95,12 +94,13 @@ const wechat = { | ||
95 | 94 | ||
96 | data.signature = sha1(str); | 95 | data.signature = sha1(str); |
97 | return data; | 96 | return data; |
98 | - }) | ||
99 | -}; | 97 | +}); |
100 | 98 | ||
101 | // 测试 | 99 | // 测试 |
102 | -// wechat.calcSignature({ | 100 | +// calcSignature({ |
103 | // url: 'http://www.yohobuy.com/' | 101 | // url: 'http://www.yohobuy.com/' |
104 | // }).then(console.log); | 102 | // }).then(console.log); |
105 | 103 | ||
106 | -module.exports = wechat; | 104 | +module.exports = { |
105 | + calcSignature | ||
106 | +}; |
@@ -43,13 +43,13 @@ let verifyMobile = (req, res, next) => { | @@ -43,13 +43,13 @@ let verifyMobile = (req, res, next) => { | ||
43 | let mobile = +req.body.phoneNum; | 43 | let mobile = +req.body.phoneNum; |
44 | let area = +(req.body.areaCode || 86); | 44 | let area = +(req.body.areaCode || 86); |
45 | 45 | ||
46 | - /* 判断参数是否合法 */ | 46 | + // 判断参数是否合法 |
47 | if (!_.isNumber(mobile) || !_.isNumber(area)) { | 47 | if (!_.isNumber(mobile) || !_.isNumber(area)) { |
48 | data.message = '手机号错误'; | 48 | data.message = '手机号错误'; |
49 | return res.json(data); | 49 | return res.json(data); |
50 | } | 50 | } |
51 | 51 | ||
52 | - /* 设置注册有效时间30分钟, 防机器刷 */ | 52 | + // 设置注册有效时间30分钟, 防机器刷 |
53 | let expire = req.session._REG_EXPIRE; | 53 | let expire = req.session._REG_EXPIRE; |
54 | 54 | ||
55 | if (!expire || expire < Date.now()) { | 55 | if (!expire || expire < Date.now()) { |
@@ -57,13 +57,13 @@ let verifyMobile = (req, res, next) => { | @@ -57,13 +57,13 @@ let verifyMobile = (req, res, next) => { | ||
57 | return res.json(data); | 57 | return res.json(data); |
58 | } | 58 | } |
59 | 59 | ||
60 | - /* 向手机发送注册验证码 */ | 60 | + // 向手机发送注册验证码 |
61 | RegService.sendCodeToMobile(area, mobile).then((result) => { | 61 | RegService.sendCodeToMobile(area, mobile).then((result) => { |
62 | if (!result.code) { | 62 | if (!result.code) { |
63 | return res.json(data); | 63 | return res.json(data); |
64 | } | 64 | } |
65 | 65 | ||
66 | - /* 返回跳转到验证页面的链接 */ | 66 | + // 返回跳转到验证页面的链接 |
67 | if (result.code === 200) { | 67 | if (result.code === 200) { |
68 | let token = sign.makeToken(mobile); | 68 | let token = sign.makeToken(mobile); |
69 | 69 | ||
@@ -112,13 +112,13 @@ let sendCode = (req, res, next) => { | @@ -112,13 +112,13 @@ let sendCode = (req, res, next) => { | ||
112 | let mobile = +req.body.phoneNum; | 112 | let mobile = +req.body.phoneNum; |
113 | let area = +(req.body.areaCode || 86); | 113 | let area = +(req.body.areaCode || 86); |
114 | 114 | ||
115 | - /* 判断参数是否合法 */ | 115 | + // 判断参数是否合法 |
116 | if (!_.isNumber(mobile) || !_.isNumber(area)) { | 116 | if (!_.isNumber(mobile) || !_.isNumber(area)) { |
117 | data.message = '手机号错误'; | 117 | data.message = '手机号错误'; |
118 | return res.json(data); | 118 | return res.json(data); |
119 | } | 119 | } |
120 | 120 | ||
121 | - /* 设置注册有效时间30分钟, 防机器刷 */ | 121 | + // 设置注册有效时间30分钟, 防机器刷 |
122 | let expire = req.session._REG_EXPIRE; | 122 | let expire = req.session._REG_EXPIRE; |
123 | 123 | ||
124 | if (!expire || expire < Date.now()) { | 124 | if (!expire || expire < Date.now()) { |
@@ -126,7 +126,7 @@ let sendCode = (req, res, next) => { | @@ -126,7 +126,7 @@ let sendCode = (req, res, next) => { | ||
126 | return res.json(data); | 126 | return res.json(data); |
127 | } | 127 | } |
128 | 128 | ||
129 | - /* 向手机发送注册验证码 */ | 129 | + // 向手机发送注册验证码 |
130 | RegService.sendCodeToMobile(area, mobile).then((result) => { | 130 | RegService.sendCodeToMobile(area, mobile).then((result) => { |
131 | return result.code ? res.json(result) : res.json(data); | 131 | return result.code ? res.json(result) : res.json(data); |
132 | }).catch(next); | 132 | }).catch(next); |
@@ -148,7 +148,7 @@ let verifyCode = (req, res, next) => { | @@ -148,7 +148,7 @@ let verifyCode = (req, res, next) => { | ||
148 | return res.json(data); | 148 | return res.json(data); |
149 | } | 149 | } |
150 | 150 | ||
151 | - /* 设置注册有效时间30分钟, 防机器刷 */ | 151 | + // 设置注册有效时间30分钟, 防机器刷 |
152 | let expire = req.session._REG_EXPIRE; | 152 | let expire = req.session._REG_EXPIRE; |
153 | 153 | ||
154 | if (!expire || expire < Date.now()) { | 154 | if (!expire || expire < Date.now()) { |
@@ -156,13 +156,13 @@ let verifyCode = (req, res, next) => { | @@ -156,13 +156,13 @@ let verifyCode = (req, res, next) => { | ||
156 | return res.json(data); | 156 | return res.json(data); |
157 | } | 157 | } |
158 | 158 | ||
159 | - /* 验证注册的标识码是否有效 */ | 159 | + // 验证注册的标识码是否有效 |
160 | RegService.validMobileCode(area, mobile, code).then((result) => { | 160 | RegService.validMobileCode(area, mobile, code).then((result) => { |
161 | if (!result.code) { | 161 | if (!result.code) { |
162 | return res.json(data); | 162 | return res.json(data); |
163 | } | 163 | } |
164 | 164 | ||
165 | - /* 返回跳转到设置密码的链接 */ | 165 | + // 返回跳转到设置密码的链接 |
166 | if (result.code === 200) { | 166 | if (result.code === 200) { |
167 | let token = sign.makeToken(mobile); | 167 | let token = sign.makeToken(mobile); |
168 | 168 | ||
@@ -214,19 +214,19 @@ let setPassword = (req, res, next) => { | @@ -214,19 +214,19 @@ let setPassword = (req, res, next) => { | ||
214 | let password = req.body.password; | 214 | let password = req.body.password; |
215 | let token = req.body.token; | 215 | let token = req.body.token; |
216 | 216 | ||
217 | - /* 判断参数是否合法 */ | 217 | + // 判断参数是否合法 |
218 | if (!_.isString(token) || !_.isNumber(mobile) || !_.isNumber(area) || !password) { | 218 | if (!_.isString(token) || !_.isNumber(mobile) || !_.isNumber(area) || !password) { |
219 | data.message = '请求参数不合法'; | 219 | data.message = '请求参数不合法'; |
220 | return res.json(data); | 220 | return res.json(data); |
221 | } | 221 | } |
222 | 222 | ||
223 | - /* 判断是否允许访问 */ | 223 | + // 判断是否允许访问 |
224 | if (!sign.verifyToken(mobile, token)) { | 224 | if (!sign.verifyToken(mobile, token)) { |
225 | data.message = '非法 token'; | 225 | data.message = '非法 token'; |
226 | return res.json(data); | 226 | return res.json(data); |
227 | } | 227 | } |
228 | 228 | ||
229 | - /* 判断密码是否符合规则 */ | 229 | + // 判断密码是否符合规则 |
230 | if (!helpers.verifyPassword(password)) { | 230 | if (!helpers.verifyPassword(password)) { |
231 | return res.json(data); | 231 | return res.json(data); |
232 | } | 232 | } |
@@ -27,7 +27,7 @@ const saleModel = require(`${mRoot}/sale`); | @@ -27,7 +27,7 @@ const saleModel = require(`${mRoot}/sale`); | ||
27 | * @param {[string]} page js文件page名称 | 27 | * @param {[string]} page js文件page名称 |
28 | * @return {[type]} | 28 | * @return {[type]} |
29 | */ | 29 | */ |
30 | -const processPublicData = (req, title, page) => { | 30 | +const _processPublicData = (req, title, page) => { |
31 | let data = {}; | 31 | let data = {}; |
32 | let headerData = headerModel.setNav({ | 32 | let headerData = headerModel.setNav({ |
33 | navTitle: title | 33 | navTitle: title |
@@ -53,8 +53,8 @@ const processPublicData = (req, title, page) => { | @@ -53,8 +53,8 @@ const processPublicData = (req, title, page) => { | ||
53 | * @param {[object]} res | 53 | * @param {[object]} res |
54 | * @return {[type]} | 54 | * @return {[type]} |
55 | */ | 55 | */ |
56 | -exports.index = (req, res, next) => { | ||
57 | - let params = processPublicData(req, 'SALE', 'sale'); | 56 | +let index = (req, res, next) => { |
57 | + let params = _processPublicData(req, 'SALE', 'sale'); | ||
58 | 58 | ||
59 | saleModel.getSaleData(params.channel).then((result) => { | 59 | saleModel.getSaleData(params.channel).then((result) => { |
60 | res.render('sale/index', Object.assign(params.renderData, { | 60 | res.render('sale/index', Object.assign(params.renderData, { |
@@ -74,8 +74,8 @@ exports.index = (req, res, next) => { | @@ -74,8 +74,8 @@ exports.index = (req, res, next) => { | ||
74 | * @param {[object]} res | 74 | * @param {[object]} res |
75 | * @return {[type]} | 75 | * @return {[type]} |
76 | */ | 76 | */ |
77 | -exports.breakingYards = (req, res, next) => { | ||
78 | - let params = processPublicData(req, '断码区', 'break-code'); | 77 | +let breakingYards = (req, res, next) => { |
78 | + let params = _processPublicData(req, '断码区', 'break-code'); | ||
79 | 79 | ||
80 | saleModel.getBreakCodeData({ | 80 | saleModel.getBreakCodeData({ |
81 | yhChannel: params.channel | 81 | yhChannel: params.channel |
@@ -90,8 +90,8 @@ exports.breakingYards = (req, res, next) => { | @@ -90,8 +90,8 @@ exports.breakingYards = (req, res, next) => { | ||
90 | * @param {[object]} res | 90 | * @param {[object]} res |
91 | * @return {[type]} | 91 | * @return {[type]} |
92 | */ | 92 | */ |
93 | -exports.discount = (req, res, next) => { | ||
94 | - let params = processPublicData(req, '折扣专场', 'discount'); | 93 | +let discount = (req, res, next) => { |
94 | + let params = _processPublicData(req, '折扣专场', 'discount'); | ||
95 | 95 | ||
96 | saleModel.getDiscountData(params.channel).then((result) => { | 96 | saleModel.getDiscountData(params.channel).then((result) => { |
97 | res.render('sale/discount', Object.assign(params.renderData, result)); | 97 | res.render('sale/discount', Object.assign(params.renderData, result)); |
@@ -105,9 +105,9 @@ exports.discount = (req, res, next) => { | @@ -105,9 +105,9 @@ exports.discount = (req, res, next) => { | ||
105 | * @param {[object]} res | 105 | * @param {[object]} res |
106 | * @return {[type]} | 106 | * @return {[type]} |
107 | */ | 107 | */ |
108 | -exports.discountDetail = (req, res, next) => { | 108 | +let discountDetail = (req, res, next) => { |
109 | let id = req.query.id; | 109 | let id = req.query.id; |
110 | - let params = processPublicData(req, '', 'discount-detail'); | 110 | + let params = _processPublicData(req, '', 'discount-detail'); |
111 | 111 | ||
112 | saleModel.getDiscountDetailData(id, params.channel).then((result) => { | 112 | saleModel.getDiscountDetailData(id, params.channel).then((result) => { |
113 | params.renderData.pageHeader.navTitle = result.title; | 113 | params.renderData.pageHeader.navTitle = result.title; |
@@ -121,8 +121,8 @@ exports.discountDetail = (req, res, next) => { | @@ -121,8 +121,8 @@ exports.discountDetail = (req, res, next) => { | ||
121 | * @param {[object]} res | 121 | * @param {[object]} res |
122 | * @return {[type]} | 122 | * @return {[type]} |
123 | */ | 123 | */ |
124 | -exports.vip = (req, res, next) => { | ||
125 | - let params = processPublicData(req, '会员专享', 'vip'); | 124 | +let vip = (req, res, next) => { |
125 | + let params = _processPublicData(req, '会员专享', 'vip'); | ||
126 | 126 | ||
127 | saleModel.getVipData(params.channel).then((result) => { | 127 | saleModel.getVipData(params.channel).then((result) => { |
128 | res.render('sale/vip', Object.assign(params.renderData, { | 128 | res.render('sale/vip', Object.assign(params.renderData, { |
@@ -137,7 +137,7 @@ exports.vip = (req, res, next) => { | @@ -137,7 +137,7 @@ exports.vip = (req, res, next) => { | ||
137 | * @param {[object]} res | 137 | * @param {[object]} res |
138 | * @return {[type]} | 138 | * @return {[type]} |
139 | */ | 139 | */ |
140 | -exports.filter = (req, res, next) => { | 140 | +let filter = (req, res, next) => { |
141 | let params = Object.assign({}, req.query); | 141 | let params = Object.assign({}, req.query); |
142 | 142 | ||
143 | saleModel.getFilterData(params).then((result) => { | 143 | saleModel.getFilterData(params).then((result) => { |
@@ -156,7 +156,7 @@ exports.filter = (req, res, next) => { | @@ -156,7 +156,7 @@ exports.filter = (req, res, next) => { | ||
156 | * @param {[object]} res | 156 | * @param {[object]} res |
157 | * @return {[type]} | 157 | * @return {[type]} |
158 | */ | 158 | */ |
159 | -exports.search = (req, res, next) => { | 159 | +let search = (req, res, next) => { |
160 | let params = Object.assign({}, req.query); | 160 | let params = Object.assign({}, req.query); |
161 | 161 | ||
162 | // uid = 9239279 | 162 | // uid = 9239279 |
@@ -184,3 +184,13 @@ exports.search = (req, res, next) => { | @@ -184,3 +184,13 @@ exports.search = (req, res, next) => { | ||
184 | }, vipObj)); | 184 | }, vipObj)); |
185 | }).catch(next); | 185 | }).catch(next); |
186 | }; | 186 | }; |
187 | + | ||
188 | +module.exports = { | ||
189 | + index, | ||
190 | + breakingYards, | ||
191 | + discount, | ||
192 | + discountDetail, | ||
193 | + vip, | ||
194 | + filter, | ||
195 | + search | ||
196 | +}; |
@@ -353,11 +353,11 @@ const getDiscountDetailData = (id, yhChannel) => { | @@ -353,11 +353,11 @@ const getDiscountDetailData = (id, yhChannel) => { | ||
353 | }; | 353 | }; |
354 | 354 | ||
355 | module.exports = { | 355 | module.exports = { |
356 | - getSaleData: getSaleData, | ||
357 | - getBreakCodeData: getBreakCodeData, | ||
358 | - getDiscountData: getDiscountData, | ||
359 | - getDiscountDetailData: getDiscountDetailData, | ||
360 | - getVipData: getVipData, | ||
361 | - getFilterData: getFilterData, | ||
362 | - getSearchData: getSearchData | 356 | + getSaleData, |
357 | + getBreakCodeData, | ||
358 | + getDiscountData, | ||
359 | + getDiscountDetailData, | ||
360 | + getVipData, | ||
361 | + getFilterData, | ||
362 | + getSearchData | ||
363 | }; | 363 | }; |
@@ -31,6 +31,8 @@ module.exports = function(specificGender) { | @@ -31,6 +31,8 @@ module.exports = function(specificGender) { | ||
31 | 31 | ||
32 | var $footer; | 32 | var $footer; |
33 | 33 | ||
34 | + var bottomBannerLoaded; | ||
35 | + | ||
34 | // ajax url | 36 | // ajax url |
35 | if (kidsType) { | 37 | if (kidsType) { |
36 | url = '/product/recom/maylikekids'; | 38 | url = '/product/recom/maylikekids'; |
@@ -95,12 +97,14 @@ module.exports = function(specificGender) { | @@ -95,12 +97,14 @@ module.exports = function(specificGender) { | ||
95 | }, | 97 | }, |
96 | success: function(data) { | 98 | success: function(data) { |
97 | 99 | ||
98 | - if (data === ' ') { | ||
99 | - searching = false; | 100 | + if (!data.length) { |
100 | loading.hideLoadingMask(); | 101 | loading.hideLoadingMask(); |
101 | 102 | ||
102 | // 有货币页面不加载底部 | 103 | // 有货币页面不加载底部 |
103 | if (gender && !specificGender) { | 104 | if (gender && !specificGender) { |
105 | + if (bottomBannerLoaded) { | ||
106 | + return; | ||
107 | + } | ||
104 | url = '/channel/bottomBanner'; | 108 | url = '/channel/bottomBanner'; |
105 | $.ajax({ | 109 | $.ajax({ |
106 | type: 'GET', | 110 | type: 'GET', |
@@ -109,6 +113,8 @@ module.exports = function(specificGender) { | @@ -109,6 +113,8 @@ module.exports = function(specificGender) { | ||
109 | gender: gender | 113 | gender: gender |
110 | }, | 114 | }, |
111 | success: function(res) { | 115 | success: function(res) { |
116 | + res = res.data; | ||
117 | + bottomBannerLoaded = true; | ||
112 | if (res && res.img) { | 118 | if (res && res.img) { |
113 | $('#load-more-img').show(); | 119 | $('#load-more-img').show(); |
114 | $('#load-more-img a').attr('href', res.url); | 120 | $('#load-more-img a').attr('href', res.url); |
@@ -35,6 +35,10 @@ | @@ -35,6 +35,10 @@ | ||
35 | z-index: 2; | 35 | z-index: 2; |
36 | background: #f0f0f0; | 36 | background: #f0f0f0; |
37 | transition: transform 0.3s; | 37 | transition: transform 0.3s; |
38 | + | ||
39 | + .creative-life .classify-name { | ||
40 | + display: none; | ||
41 | + } | ||
38 | } | 42 | } |
39 | 43 | ||
40 | .mobile-wrap.menu-open { | 44 | .mobile-wrap.menu-open { |
-
Please register or login to post a comment