Merge branch 'master' into translate/cart
Showing
17 changed files
with
291 additions
and
124 deletions
@@ -5,6 +5,10 @@ | @@ -5,6 +5,10 @@ | ||
5 | */ | 5 | */ |
6 | 'use strict'; | 6 | 'use strict'; |
7 | 7 | ||
8 | +if (process.env.USE_APM === '1' && process.env.NODE_ENV === 'production') { | ||
9 | + require('oneapm'); | ||
10 | +} | ||
11 | + | ||
8 | const config = require('./config/common'); | 12 | const config = require('./config/common'); |
9 | 13 | ||
10 | global.Promise = require('bluebird'); | 14 | global.Promise = require('bluebird'); |
apps/3party/controllers/ads.js
0 → 100644
1 | +/** | ||
2 | + * Created by yoho on 2016/11/8. | ||
3 | + */ | ||
4 | +'use strict'; | ||
5 | +const helpers = global.yoho.helpers; | ||
6 | +const crypto = global.yoho.crypto; | ||
7 | + | ||
8 | +exports.index = (req, res) => { | ||
9 | + let quhUnion = crypto.encryption('', decodeURI(req.query._QYH_UNION)); | ||
10 | + | ||
11 | + res.cookie('_QYH_UNION', quhUnion, { | ||
12 | + domain: 'yohobuy.com', | ||
13 | + expires: new Date(Date.now() + 24 * 60 * 60 * 1000) | ||
14 | + }); | ||
15 | + | ||
16 | + return res.redirect(req.query.target || helpers.urlFormat('/')); | ||
17 | +}; |
apps/3party/index.js
0 → 100644
1 | +/** | ||
2 | + * sub app coupon | ||
3 | + * @author: lixia.zhang<lixia.zhang@yoho.cn> | ||
4 | + * @date: 2016/05/31 | ||
5 | + */ | ||
6 | + | ||
7 | +var express = require('express'), | ||
8 | + path = require('path'), | ||
9 | + helpers = require(path.join(global.utils, 'helpers')); | ||
10 | + | ||
11 | +var app = express(); | ||
12 | + | ||
13 | +// set view engin | ||
14 | +var doraemon = path.join(__dirname, '../../doraemon/views'); // parent view root | ||
15 | + | ||
16 | +app.on('mount', function(parent) { | ||
17 | + delete parent.locals.settings; // 不继承父 App 的设置 | ||
18 | + Object.assign(app.locals, parent.locals); | ||
19 | +}); | ||
20 | +app.use(global.yoho.hbs({ | ||
21 | + extname: '.hbs', | ||
22 | + defaultLayout: 'layout', | ||
23 | + layoutsDir: doraemon, | ||
24 | + partialsDir: path.join(__dirname, 'views/partial'), | ||
25 | + views: path.join(__dirname, 'views/action'), | ||
26 | + helpers: Object.assign({}, global.yoho.helpers, helpers) | ||
27 | +})); | ||
28 | + | ||
29 | +// router | ||
30 | +app.use(require('./router')); | ||
31 | + | ||
32 | +module.exports = app; |
apps/3party/router.js
0 → 100644
1 | +/** | ||
2 | + * router of sub app coupon | ||
3 | + * @author: lixia.zhang<lixia.zhang@yoho.cn> | ||
4 | + * @date: 2016/05/31 | ||
5 | + */ | ||
6 | + | ||
7 | +'use strict'; | ||
8 | + | ||
9 | +const router = require('express').Router(); // eslint-disable-line | ||
10 | +const cRoot = './controllers'; | ||
11 | +const ads = require(`${cRoot}/ads`); | ||
12 | + | ||
13 | +// routers | ||
14 | + | ||
15 | +router.get('/ads', ads.index); | ||
16 | + | ||
17 | +module.exports = router; |
@@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
7 | 'use strict'; | 7 | 'use strict'; |
8 | 8 | ||
9 | const indexModel = require('../models/market'); | 9 | const indexModel = require('../models/market'); |
10 | +const _ = require('lodash'); | ||
10 | 11 | ||
11 | exports.index = (req, res, next) => { | 12 | exports.index = (req, res, next) => { |
12 | 13 | ||
@@ -21,3 +22,26 @@ exports.index = (req, res, next) => { | @@ -21,3 +22,26 @@ exports.index = (req, res, next) => { | ||
21 | }).catch(next); | 22 | }).catch(next); |
22 | 23 | ||
23 | }; | 24 | }; |
25 | + | ||
26 | +/** | ||
27 | + * 市场推广活动升级版,自定义下载渠道 | ||
28 | + * @param req | ||
29 | + * @param res | ||
30 | + * @param next | ||
31 | + */ | ||
32 | +exports.v2 = (req, res, next) => { | ||
33 | + | ||
34 | + indexModel.index({ | ||
35 | + | ||
36 | + }).then((result) => { | ||
37 | + if (_.has(result, 'download[0].url') && req.query.union_type) { | ||
38 | + result.download[0].url = result.download[0].url.split('?')[0] + | ||
39 | + '?union_type=' + req.query.union_type; | ||
40 | + } | ||
41 | + res.render('market/market', Object.assign(result, { | ||
42 | + title: 'Yoho!Buy 有货' | ||
43 | + })); | ||
44 | + | ||
45 | + }).catch(next); | ||
46 | + | ||
47 | +}; |
@@ -71,6 +71,7 @@ router.get('/invite', invite.checkType, invite.index); | @@ -71,6 +71,7 @@ router.get('/invite', invite.checkType, invite.index); | ||
71 | router.get('/invite/index', invite.checkType, invite.index); | 71 | router.get('/invite/index', invite.checkType, invite.index); |
72 | 72 | ||
73 | router.get('/market', market.index); // 市场推广活动 | 73 | router.get('/market', market.index); // 市场推广活动 |
74 | +router.get('/market/v2', market.v2); // 市场推广活动升级版,自定义下载渠道 | ||
74 | 75 | ||
75 | router.get(/\/invite\/share_([\d]+)_([\d]+)_([\d]+).html/, invite.checkType, invite.share); | 76 | router.get(/\/invite\/share_([\d]+)_([\d]+)_([\d]+).html/, invite.checkType, invite.share); |
76 | 77 |
@@ -60,13 +60,14 @@ exports.ensure = (req, res, next) => { | @@ -60,13 +60,14 @@ exports.ensure = (req, res, next) => { | ||
60 | let view; | 60 | let view; |
61 | 61 | ||
62 | if (paymentInfo.code !== 200) { | 62 | if (paymentInfo.code !== 200) { |
63 | - if (paymentInfo.message) { | ||
64 | - view = { | ||
65 | - orderEnsure: false, | ||
66 | - message: paymentInfo.message | ||
67 | - }; | ||
68 | - } else { | ||
69 | - return Promise.reject(paymentInfo); | 63 | + view = { |
64 | + orderEnsure: false, | ||
65 | + message: paymentInfo.message | ||
66 | + }; | ||
67 | + | ||
68 | + // hotfix: nginx 接口限流, code:9999991时没message 信息 | ||
69 | + if (!view.message) { | ||
70 | + view.message = '挤爆啦,系统繁忙'; | ||
70 | } | 71 | } |
71 | } else { | 72 | } else { |
72 | // 渲染 | 73 | // 渲染 |
@@ -7,7 +7,7 @@ const paymentProcess = require(global.utils + '/payment-process'); | @@ -7,7 +7,7 @@ const paymentProcess = require(global.utils + '/payment-process'); | ||
7 | 7 | ||
8 | /** | 8 | /** |
9 | * 购物车结算 | 9 | * 购物车结算 |
10 | - * | 10 | + * doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/订单/shopping.md |
11 | * @param int $uid 用户ID | 11 | * @param int $uid 用户ID |
12 | * @param string $cartType 购物车类型,ordinary表示普通购物车 | 12 | * @param string $cartType 购物车类型,ordinary表示普通购物车 |
13 | * @param int $isUseYohoCoin 是否使用有货币,0不使用, 1使用 | 13 | * @param int $isUseYohoCoin 是否使用有货币,0不使用, 1使用 |
@@ -33,8 +33,46 @@ function cartPayAPI(uid, cartType, isUseYohoCoin, skuList) { | @@ -33,8 +33,46 @@ function cartPayAPI(uid, cartType, isUseYohoCoin, skuList) { | ||
33 | 33 | ||
34 | 34 | ||
35 | /** | 35 | /** |
36 | + * 购物车结算--支付方式和配送方式选择以及是否使用有货币接口返回的数据处理 | ||
37 | + * doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/订单/shopping.md | ||
38 | + * @param int $uid 用户ID | ||
39 | + * @param string $cartType 购物车类型,ordinary表示普通购物车 | ||
40 | + * @param int $deliveryWay 配送方式,1表示普通快递,2表示顺丰速运 | ||
41 | + * @param int $paymentType 支付方式,1表示在线支付,2表示货到付款 | ||
42 | + * @param string $couponCode 优惠券码 | ||
43 | + * @param mixed $yohoCoin 使用的有货币数量 | ||
44 | + * @param string $skuList 购买限购商品时需要传递的参数 | ||
45 | + * @return array 接口返回的数据 | ||
46 | + */ | ||
47 | +function orderComputeAPI(uid, cartType, deliveWay, paymentType, couponCode, yohoCoin, skuList) { | ||
48 | + let param = { | ||
49 | + method: 'app.Shopping.compute', | ||
50 | + cart_type: cartType, | ||
51 | + delive_way: deliveWay, | ||
52 | + payment_type: paymentType | ||
53 | + }; | ||
54 | + | ||
55 | + if (couponCode) { | ||
56 | + param.coupon_code = couponCode; | ||
57 | + } | ||
58 | + | ||
59 | + if (yohoCoin) { | ||
60 | + param.use_yoho_coin = yohoCoin; | ||
61 | + } | ||
62 | + | ||
63 | + if (!_.isEmpty(skuList)) { | ||
64 | + param.product_sku_list = skuList; | ||
65 | + } | ||
66 | + | ||
67 | + return api.get('', param); | ||
68 | +} | ||
69 | + | ||
70 | + | ||
71 | +/** | ||
36 | * 调用购物车结算接口返回的数据处理 | 72 | * 调用购物车结算接口返回的数据处理 |
37 | * | 73 | * |
74 | + * | ||
75 | + * | ||
38 | * @param int $uid 用户ID | 76 | * @param int $uid 用户ID |
39 | * @param string $cartType 购物车类型,ordinary表示普通购物车 | 77 | * @param string $cartType 购物车类型,ordinary表示普通购物车 |
40 | * @param array $orderInfo cookie中记录的一些订单有关数据 | 78 | * @param array $orderInfo cookie中记录的一些订单有关数据 |
@@ -49,21 +87,35 @@ exports.cartPay = (uid, cartType, orderInfo, limitProductCode, sku, skn, buyNumb | @@ -49,21 +87,35 @@ exports.cartPay = (uid, cartType, orderInfo, limitProductCode, sku, skn, buyNumb | ||
49 | isAjax = isAjax || false; | 87 | isAjax = isAjax || false; |
50 | 88 | ||
51 | let result = {}; | 89 | let result = {}; |
52 | - let skuList = null; | 90 | + let skuList = []; |
53 | let isLimitGoods = skn && sku && buyNumber; // 存在sku, skn 和buyNumber时为限购商品 | 91 | let isLimitGoods = skn && sku && buyNumber; // 存在sku, skn 和buyNumber时为限购商品 |
92 | + let orderCompute; | ||
54 | 93 | ||
55 | if (isLimitGoods) { | 94 | if (isLimitGoods) { |
56 | - skuList = { | 95 | + skuList.push({ |
57 | type: 'limitcode', | 96 | type: 'limitcode', |
58 | limitproductcode: limitProductCode, | 97 | limitproductcode: limitProductCode, |
59 | buy_number: buyNumber, | 98 | buy_number: buyNumber, |
60 | skn, | 99 | skn, |
61 | sku | 100 | sku |
62 | - }; | 101 | + }); |
63 | 102 | ||
64 | result.isLimit = true; | 103 | result.isLimit = true; |
65 | } | 104 | } |
66 | 105 | ||
106 | + // cookie保存的数据 | ||
107 | + if (!_.isEmpty(orderInfo)) { | ||
108 | + orderInfo.paymentType = orderInfo.paymentType ? orderInfo.paymentType : ''; | ||
109 | + orderCompute = orderComputeAPI( | ||
110 | + uid, | ||
111 | + cartType, | ||
112 | + orderInfo.deliveryId, | ||
113 | + orderInfo.paymentType, | ||
114 | + orderInfo.couponCode, | ||
115 | + orderInfo.yohoCoin, skuList | ||
116 | + ); | ||
117 | + } | ||
118 | + | ||
67 | return cartPayAPI(uid, cartType, 0, skuList) | 119 | return cartPayAPI(uid, cartType, 0, skuList) |
68 | .then(pay => { | 120 | .then(pay => { |
69 | let goodsList = _.get(pay, 'data.goods_list', []); | 121 | let goodsList = _.get(pay, 'data.goods_list', []); |
@@ -12,10 +12,6 @@ | @@ -12,10 +12,6 @@ | ||
12 | {{/if}} | 12 | {{/if}} |
13 | <!--/tab-nav--> | 13 | <!--/tab-nav--> |
14 | 14 | ||
15 | - {{#if isApp}} | ||
16 | - <div class='empty-height'></div> | ||
17 | - {{/if}} | ||
18 | - | ||
19 | <div class="plusstar-resources"> | 15 | <div class="plusstar-resources"> |
20 | <!--资源位数据模板--> | 16 | <!--资源位数据模板--> |
21 | </div><!--/plusstar-resources--> | 17 | </div><!--/plusstar-resources--> |
@@ -290,7 +290,7 @@ const orderDetailData = (uid, orderCode) => { | @@ -290,7 +290,7 @@ const orderDetailData = (uid, orderCode) => { | ||
290 | } | 290 | } |
291 | 291 | ||
292 | if (orderDetail.invoice) { | 292 | if (orderDetail.invoice) { |
293 | - orderDetail.invoice.type = orderDetail.invoice.type === '2'; | 293 | + orderDetail.invoice.type = (orderDetail.invoice.type + '' === '2'); |
294 | } | 294 | } |
295 | 295 | ||
296 | // 取消订单原因列表 | 296 | // 取消订单原因列表 |
@@ -25,106 +25,107 @@ const list = (req, res, next) => { | @@ -25,106 +25,107 @@ const list = (req, res, next) => { | ||
25 | let isQuerySecondClass = false; // 标识用户搜的是不是二级品类 | 25 | let isQuerySecondClass = false; // 标识用户搜的是不是二级品类 |
26 | let domain = null; | 26 | let domain = null; |
27 | 27 | ||
28 | - if (params.query) { | ||
29 | - let activity = _.get(searchModel.searchKeyActivity(params.query), 'data.urlobj.appUrl', ''); | ||
30 | - | ||
31 | - if (activity) { | ||
32 | - res.redirect(activity); | ||
33 | - } | ||
34 | - } | ||
35 | - | ||
36 | if (params.shop_id) { | 28 | if (params.shop_id) { |
37 | params.shopId = params.shop_id; | 29 | params.shopId = params.shop_id; |
38 | } | 30 | } |
39 | 31 | ||
40 | - /* 判断是不是品牌, 是品牌跳到品牌列表页(显示搜索框),判断是不是品类, 是品类加导航标题(不显示搜索框) */ | ||
41 | - Promise.all([ | ||
42 | - searchModel.getAllBrandNames(), | ||
43 | - searchModel.getClassNames() | ||
44 | - ]).then(result => { | ||
45 | - if (query) { | ||
46 | - query = query.toLowerCase(); | ||
47 | - _.forEach(result[0], obj => { | ||
48 | - | ||
49 | - if (query === obj.brandDomain) { // 精确查品牌域名 | ||
50 | - domain = query; | ||
51 | - return false; | ||
52 | - } | ||
53 | - | ||
54 | - if (query === obj.brandName || query === obj.brandName || query === obj.brandName) { // 精确查品牌名称 | ||
55 | - domain = obj.brandDomain; | ||
56 | - return false; | ||
57 | - } | ||
58 | - | ||
59 | - // if (obj.brandDomain.indexOf(query) > 0) { // 模糊查品牌域名 | ||
60 | - // domain = obj.brandDomain; | ||
61 | - // return false; | ||
62 | - // } | ||
63 | - }); | ||
64 | - | ||
65 | - // 跳转到品牌商品列表页 | ||
66 | - if (domain !== null && !params.shop_id) { | ||
67 | - let url = helpers.urlFormat('', { | ||
68 | - from: 'search', | ||
69 | - query: query | ||
70 | - | ||
71 | - }, domain); | ||
72 | - | ||
73 | - return res.redirect(url); | ||
74 | - } | 32 | + return searchModel.searchKeyActivity(params.query || '').then(activityResult => { |
33 | + let activity = _.get(activityResult, 'urlobj.appUrl', ''); | ||
75 | 34 | ||
76 | - // 品类名称为空时跳出 | ||
77 | - if (!result[1]) { | ||
78 | - return; | ||
79 | - } | 35 | + if (activity) { |
36 | + return res.redirect(activity); | ||
37 | + } else { | ||
80 | 38 | ||
81 | - _.forEach(result[1].first, (obj) => { | ||
82 | - // 精确查一级品类 | ||
83 | - if (obj === query) { | ||
84 | - isQueryFirstClass = true; | ||
85 | - return false; | 39 | + /* 判断是不是品牌, 是品牌跳到品牌列表页(显示搜索框),判断是不是品类, 是品类加导航标题(不显示搜索框) */ |
40 | + return Promise.all([ | ||
41 | + searchModel.getAllBrandNames(), | ||
42 | + searchModel.getClassNames() | ||
43 | + ]).then(result => { | ||
44 | + if (query) { | ||
45 | + query = query.toLowerCase(); | ||
46 | + _.forEach(result[0], obj => { | ||
47 | + | ||
48 | + if (query === obj.brandDomain) { // 精确查品牌域名 | ||
49 | + domain = query; | ||
50 | + return false; | ||
51 | + } | ||
52 | + | ||
53 | + if (query === obj.brandName || query === obj.brandName || query === obj.brandName) { // 精确查品牌名称 | ||
54 | + domain = obj.brandDomain; | ||
55 | + return false; | ||
56 | + } | ||
57 | + | ||
58 | + // if (obj.brandDomain.indexOf(query) > 0) { // 模糊查品牌域名 | ||
59 | + // domain = obj.brandDomain; | ||
60 | + // return false; | ||
61 | + // } | ||
62 | + }); | ||
63 | + | ||
64 | + // 跳转到品牌商品列表页 | ||
65 | + if (domain !== null && !params.shop_id) { | ||
66 | + let url = helpers.urlFormat('', { | ||
67 | + from: 'search', | ||
68 | + query: query | ||
69 | + | ||
70 | + }, domain); | ||
71 | + | ||
72 | + return res.redirect(url); | ||
73 | + } | ||
74 | + | ||
75 | + // 品类名称为空时跳出 | ||
76 | + if (!result[1]) { | ||
77 | + return; | ||
78 | + } | ||
79 | + | ||
80 | + _.forEach(result[1].first, (obj) => { | ||
81 | + // 精确查一级品类 | ||
82 | + if (obj === query) { | ||
83 | + isQueryFirstClass = true; | ||
84 | + return false; | ||
85 | + } | ||
86 | + }); | ||
87 | + | ||
88 | + _.forEach(result[1].second, (obj) => { | ||
89 | + // 精确查二级品类 | ||
90 | + if (obj === query) { | ||
91 | + isQuerySecondClass = true; | ||
92 | + return false; | ||
93 | + } | ||
94 | + }); | ||
95 | + } else { | ||
96 | + params.query = ''; | ||
86 | } | 97 | } |
87 | - }); | ||
88 | 98 | ||
89 | - _.forEach(result[1].second, (obj) => { | ||
90 | - // 精确查二级品类 | ||
91 | - if (obj === query) { | ||
92 | - isQuerySecondClass = true; | ||
93 | - return false; | 99 | + // 搜索是一级品类 |
100 | + if (isQueryFirstClass) { | ||
101 | + title = '全部' + query; | ||
102 | + } else if (isQuerySecondClass) { // 搜索是二级品类 | ||
103 | + title = query; | ||
104 | + } else { // 搜索其它内容 | ||
105 | + if (query || params.form) { | ||
106 | + params.search = { | ||
107 | + default: query === '' ? false : query, | ||
108 | + url: helpers.urlFormat('', null, 'search') | ||
109 | + }; | ||
110 | + } | ||
111 | + title = '搜索'; | ||
94 | } | 112 | } |
95 | - }); | ||
96 | - } else { | ||
97 | - params.query = ''; | ||
98 | - } | ||
99 | 113 | ||
100 | - // 搜索是一级品类 | ||
101 | - if (isQueryFirstClass) { | ||
102 | - title = '全部' + query; | ||
103 | - } else if (isQuerySecondClass) { // 搜索是二级品类 | ||
104 | - title = query; | ||
105 | - } else { // 搜索其它内容 | ||
106 | - if (query || params.form) { | ||
107 | - params.search = { | ||
108 | - default: query === '' ? false : query, | ||
109 | - url: helpers.urlFormat('', null, 'search') | ||
110 | - }; | ||
111 | - } | ||
112 | - title = '搜索'; | 114 | + title = params.title ? params.title : title; |
115 | + | ||
116 | + res.render('search/list', { | ||
117 | + module: 'product', | ||
118 | + page: 'search-list', | ||
119 | + pageHeader: headerModel.setNav({ | ||
120 | + navTitle: title | ||
121 | + }), | ||
122 | + title: title, | ||
123 | + goodList: params, | ||
124 | + pageFooter: true | ||
125 | + }); | ||
126 | + }).catch(next); | ||
113 | } | 127 | } |
114 | - | ||
115 | - title = params.title ? params.title : title; | ||
116 | - | ||
117 | - res.render('search/list', { | ||
118 | - module: 'product', | ||
119 | - page: 'search-list', | ||
120 | - pageHeader: headerModel.setNav({ | ||
121 | - navTitle: title | ||
122 | - }), | ||
123 | - title: title, | ||
124 | - goodList: params, | ||
125 | - pageFooter: true | ||
126 | - }); | ||
127 | - }).catch(next); | 128 | + }); |
128 | }; | 129 | }; |
129 | 130 | ||
130 | /** | 131 | /** |
@@ -132,6 +133,7 @@ const list = (req, res, next) => { | @@ -132,6 +133,7 @@ const list = (req, res, next) => { | ||
132 | */ | 133 | */ |
133 | const index = (req, res, next) => { | 134 | const index = (req, res, next) => { |
134 | let title = '搜索'; | 135 | let title = '搜索'; |
136 | + | ||
135 | ((render) => { | 137 | ((render) => { |
136 | if (_.get(req, 'app.locals.wap.search.removeHotSearch', false)) { | 138 | if (_.get(req, 'app.locals.wap.search.removeHotSearch', false)) { |
137 | render([]); | 139 | render([]); |
@@ -140,7 +142,7 @@ const index = (req, res, next) => { | @@ -140,7 +142,7 @@ const index = (req, res, next) => { | ||
140 | render(result); | 142 | render(result); |
141 | }).catch(next); | 143 | }).catch(next); |
142 | } | 144 | } |
143 | - | 145 | + |
144 | })((result) => { | 146 | })((result) => { |
145 | res.render('search/index', { | 147 | res.render('search/index', { |
146 | module: 'product', | 148 | module: 'product', |
@@ -156,8 +158,8 @@ const index = (req, res, next) => { | @@ -156,8 +158,8 @@ const index = (req, res, next) => { | ||
156 | } | 158 | } |
157 | 159 | ||
158 | }); | 160 | }); |
159 | - }) | ||
160 | - | 161 | + }); |
162 | + | ||
161 | }; | 163 | }; |
162 | 164 | ||
163 | /** | 165 | /** |
@@ -14,6 +14,10 @@ | @@ -14,6 +14,10 @@ | ||
14 | <link rel="dns-prefetch" href="//static.yohobuy.com"> | 14 | <link rel="dns-prefetch" href="//static.yohobuy.com"> |
15 | <link rel="dns-prefetch" href="//img12.static.yhbimg.com"> | 15 | <link rel="dns-prefetch" href="//img12.static.yhbimg.com"> |
16 | <link rel="dns-prefetch" href="//img13.static.yhbimg.com"> | 16 | <link rel="dns-prefetch" href="//img13.static.yhbimg.com"> |
17 | + | ||
18 | + <!-- oneapm agent --> | ||
19 | + <script type='text/javascript'>window.BWEUM||(BWEUM={});BWEUM.info = {"stand":true,"agentType":"browser","agent":"bi-collector.oneapm.com/static/js/bw-send-411.4.9.js","beaconUrl":"bi-collector.oneapm.com/beacon","licenseKey":"NQVuf~6yrQbvJnqr","applicationID":2283639};</script><script type="text/javascript">/*!OneAPM-v411.4.9 */!function(){window.NREUM||(window.NREUM={}),window.BWEUM||(window.BWEUM=window.NREUM);var a;window.BWEUM.require=a,window.apmFirstbyte=window.apmUserFirstbyte||(new Date).getTime(),a=function b(c,d,e){function f(h,i){if(!d[h]){if(!c[h]){var j="function"==typeof a&&a;if(!i&&j)return j(h,!0);if(g)return g(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var l=d[h]={exports:{}};c[h][0].call(l.exports,function(a){var b=c[h][1][a];return f(b?b:a)},l,l.exports,b,c,d,e)}return d[h].exports}for(var g="function"==typeof a&&a,h=0;h<e.length;h++)f(e[h]);return f}({38:[function(a,b){b.exports=function(a){var b=document.createElement("a"),c=window.location,d={};b.href=a,d.port=b.port;var e=b.href.split("://");return!d.port&&e[1]&&(d.port=e[1].split("/")[0].split(":")[1]),d.port&&"0"!==d.port||(d.port="https"===e[0]?"443":"80"),d.hostname=b.hostname||c.hostname,d.pathname=b.pathname,"/"!==d.pathname.charAt(0)&&(d.pathname="/"+d.pathname),d.sameOrigin=!b.hostname||b.hostname===document.domain&&b.port===c.port&&b.protocol===c.protocol,d}},{}],34:[function(a,b){function c(){var a=m.info=window.BWEUM.info;if(a&&a.agent&&a.licenseKey&&a.applicationID&&i&&i.body){m.proto="https"===l.split(":")[0]||a.sslForHttp?"https://":"http://",g("mark",["onload",f()]);var b=i.createElement("script");b.src=0==a.agent.indexOf("//")?a.agent:m.proto+a.agent,b.src+="?v=411.4.9 ",i.body.appendChild(b)}}function d(){o||"complete"===i.readyState&&e()}function e(){g("mark",["domContent",f()])}function f(){return(new Date).getTime()}var g=a("handle"),h=window,i=h.document,j="addEventListener",k="attachEvent",l=(""+location).split("?")[0],m=b.exports={offset:window.apmFirstbyte||f(),origin:l,features:{}};g("mark",["firstbyte",window.apmFirstbyte||f()]),"complete"===document.readyState?(e(),c()):i[j]?(i[j]("DOMContentLoaded",e,!1),h[j]("load",c,!1)):(i[k]("onreadystatechange",d),h[k]("onload",c));var n=!1,o=!1;try{n=null==window.frameElement&&document.documentElement}catch(m){}n&&n.doScroll&&!function p(){if(!o){try{n.doScroll("left")}catch(a){return setTimeout(p,50)}o=!0,e()}}()},{handle:33}],33:[function(a,b){function c(a,b,c){return d.listeners(a).length?d.emit(a,b,c):(e[a]||(e[a]=[]),void e[a].push(b))}var d=a("ee").create(),e={};b.exports=c,c.ee=d,d.q=e},{ee:31}],36:[function(a,b){function c(a,b,c){b||(b=0),"undefined"==typeof c&&(c=a?a.length:0);for(var d=-1,e=c-b||0,f=new Array(0>e?0:e);++d<e;)f[d]=a[b+d];return f}b.exports=c},{}],31:[function(a,b){function c(a){function b(b,c,g){a&&a(b,c,g),g||(g={});var i=h(b),j=i.length,k={};try{k=f(g,e,d)}catch(l){}for(var m=0;j>m;m++)i[m].apply(k,c);return k}function g(a,b){j[a]=h(a).concat(b)}function h(a){return j[a]||[]}function i(){return c(b)}var j={};return{on:g,emit:b,create:i,listeners:h,_events:j}}function d(){return{}}var e="bw@context",f=a("gos");b.exports=c()},{gos:32}],32:[function(a,b){function c(a,b,c){if(d.call(a,b))return a[b];var e=c();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(a,b,{value:e,writable:!0,enumerable:!1}),e}catch(f){}try{a[b]=e}catch(f){}return e}var d=Object.prototype.hasOwnProperty;b.exports=c},{}]},{},[]),a=function c(b,d,e){function f(h,i){if(!d[h]){if(!b[h]){var j="function"==typeof a&&a;if(!i&&j)return j(h,!0);if(g)return g(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var l=d[h]={exports:{}};b[h][0].call(l.exports,function(a){var c=b[h][1][a];return f(c?c:a)},l,l.exports,c,b,d,e)}return d[h].exports}for(var g="function"==typeof a&&a,h=0;h<e.length;h++)f(e[h]);return f}({1:[function(a){a("loader"),a("errorload"),a("xhrload"),a("perfload")},{errorload:5,loader:34,perfload:6,xhrload:7}],7:[function(a){function b(a){if("string"==typeof a&&a.length)return a.length;if("object"!=typeof a)return void 0;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer&&a.byteLength)return a.byteLength;if("undefined"!=typeof Blob&&a instanceof Blob&&a.size)return a.size;if("undefined"!=typeof FormData&&a instanceof FormData)return void 0;try{return JSON.stringify(a).length}catch(b){return void 0}}function c(a,b){return b}function d(a){a.send=o.wrapOld(a.send,"send-xhr-",c),a.onreadystatechange=o.wrapOld(a.onreadystatechange,"iexhr-onreadystatechange-",c),a.onerror=o.wrapOld(a.onerror,"iexhr-onerror-",c)}function e(a){var c=this.params,d=this.metrics;if(!this.ended){if(this.ended=!0,a.removeEventListener)for(var e=0;m>e;e++)a.removeEventListener(l[e],this.listener,!1);if(!c.aborted){if(d.duration=(new Date).getTime()-this.startTime,4===a.readyState){c.status=a.status;var f=a.responseType,g="arraybuffer"===f||"blob"===f||"json"===f?a.response:a.responseText,h=b(g);h&&(d.rxSize=h)}else c.status=0;d.cbTime=this.cbTime,c&&c.pathname&&c.pathname.indexOf("beacon/resources")<0&&i("xhr",[c,d,this.startTime,this.creatType])}}}function f(a,b){var c=j(b),d=a.params;d.host=c.hostname+":"+c.port,d.pathname=c.pathname,a.sameOrigin=c.sameOrigin}var g=window,h=(g.performance,window.XMLHttpRequest);if(h&&h.prototype&&!/CriOS/.test(navigator.userAgent)){a("loader").features.xhr=!0;var i=a("handle"),j=a("parse-url"),k=a("ee"),l=["load","error","abort","timeout"],m=l.length,n=a("loader_id"),o=a("wrap-function")(k);a("wrap-events"),a("wrap-xhr"),k.on("new-xhr",function(){this.totalCbs=0,this.called=0,this.cbTime=0,this.end=e,this.ended=!1,this.xhrGuids={}}),k.on("open-xhr-start",function(a){this.params={method:a[0]},f(this,a[1]),this.metrics={}}),k.on("open-xhr-end",function(a,b){b.__oldie&&d(b)}),k.on("send-xhr-start",function(a,c){var d=this.metrics,e=a[0],f=this;if(d&&e){var g=b(e);g&&(d.txSize=g)}if(this.startTime=(new Date).getTime(),this.listener=function(a){try{"abort"===a.type&&(f.params.aborted=!0),("load"!==a.type||f.called===f.totalCbs&&(f.onloadCalled||"function"!=typeof c.onload))&&f.end&&f.end(c)}catch(b){try{k.emit("internal-error",[b])}catch(d){}}},c.addEventListener)for(var h=0;m>h;h++)c.addEventListener(l[h],this.listener,!1)}),k.on("iexhr-onreadystatechange-start",function(a,b){if(1==b.readyState){var d=b.onreadystatechange;setTimeout(function(){b.onreadystatechange!==d&&(b.onreadystatechange=o.wrapOld(b.onreadystatechange,"iexhr-onreadystatechange-",c))},0)}4==b.readyState&&(this.xhrCbStart=(new Date).getTime())}),k.on("iexhr-onreadystatechange-end",function(a,b){var c=this;this.xhrCbStart&&k.emit("xhr-cb-time",[(new Date).getTime()-this.xhrCbStart,this.onload,b],b),4==b.readyState&&c.end(b)}),k.on("xhr-cb-time",function(a,b,c){this.cbTime+=a,b?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof c.onload||this.end(c)}),k.on("xhr-load-added",function(a,b){var c=""+n(a)+!!b;this.xhrGuids&&!this.xhrGuids[c]&&(this.xhrGuids[c]=!0,this.totalCbs+=1)}),k.on("xhr-load-removed",function(a,b){var c=""+n(a)+!!b;this.xhrGuids&&this.xhrGuids[c]&&(delete this.xhrGuids[c],this.totalCbs-=1)}),k.on("addEventListener-end",function(a,b){b instanceof XMLHttpRequest&&"load"===a[0]&&k.emit("xhr-load-added",[a[1],a[2]],b)}),k.on("removeEventListener-end",function(a,b){b instanceof XMLHttpRequest&&"load"===a[0]&&k.emit("xhr-load-removed",[a[1],a[2]],b)}),k.on("fn-start",function(a,b,c){b instanceof XMLHttpRequest&&("onload"===c&&(this.onload=!0),("load"===(a[0]&&a[0].type)||this.onload)&&(this.xhrCbStart=(new Date).getTime()))}),k.on("fn-end",function(a,b){this.xhrCbStart&&k.emit("xhr-cb-time",[(new Date).getTime()-this.xhrCbStart,this.onload,b],b)})}},{ee:31,handle:33,loader:34,loader_id:35,"parse-url":38,"wrap-events":28,"wrap-function":39,"wrap-xhr":30}],35:[function(a,b){function c(a){var b=typeof a;return!a||"object"!==b&&"function"!==b?-1:a===window?0:f(a,e,function(){return d++})}var d=1,e="bw@id",f=a("gos");b.exports=c},{gos:32}],6:[function(a){var b=window.performance;if(b&&b.timing&&b.getEntriesByType){var c=a("ee"),d=a("handle"),e=(a("wrap-timer"),a("loader"));e.features.stn=!0,c.on("fn-start",function(a){var b=a[0];b instanceof Event&&(this.bstStart=Date.now())}),c.on("fn-end",function(a,b){var c=a[0];c instanceof Event&&d("bst",[c,b,this.bstStart,Date.now()])})}},{ee:31,handle:33,loader:34,"wrap-timer":29}],5:[function(a){function b(a,b,d,g,i){try{j?j-=1:e("err",[i||new c(a,b,d)])}catch(k){try{e("ierr",[k,(new Date).getTime(),!0])}catch(l){}}return"function"==typeof h?h.apply(this,f(arguments)):!1}function c(a,b,c){this.message=a||"Uncaught error with no additional information",this.sourceURL=b,this.line=c}function d(a){e("err",[a,(new Date).getTime()])}var e=a("handle"),f=a("lodash._slice"),g=a("ee"),h=window.onerror,i=!1,j=0;a("loader").features.err=!0,window.onerror=b,window.BWEUM.noticeError=d;var k=window.XMLHttpRequest;try{throw new Error}catch(l){"stack"in l&&(a("wrap-timer"),"addEventListener"in window&&a("wrap-events"),k&&k.prototype&&k.prototype.addEventListener&&a("wrap-xhr"),i=!0)}g.on("fn-start",function(){i&&(j+=1)}),g.on("fn-err",function(a,b,c){i&&(this.thrown=!0,d(c))}),g.on("fn-end",function(){i&&!this.thrown&&j>0&&(j-=1)}),g.on("internal-error",function(a){e("ierr",[a,(new Date).getTime(),!0])})},{ee:31,handle:33,loader:34,"lodash._slice":36,"wrap-events":28,"wrap-timer":29,"wrap-xhr":30}],30:[function(a,b){function c(){j.inPlace(this,m,"fn-")}function d(a,b){j.inPlace(b,["onreadystatechange"],"fn-")}function e(a){a.open=j.wrapOld(a.open,"open-xhr-",f)}function f(a,b){return b}var g=a("ee").create(),h=a("wrap-events"),i=a("wrap-function"),j=i(g),k=i(h),l=window.XMLHttpRequest,m=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"];b.exports=g,window._ApmXMLHttpRequest=window.XMLHttpRequest,window.XMLHttpRequest=function(a){var b=new l(a);try{g.emit("new-xhr",[],b),l.prototype.addEventListener?(k.inPlace(b,["addEventListener","removeEventListener"],"-",function(a,b){return b}),b.addEventListener("readystatechange",c,!1)):(b.__oldie=!0,e(b))}catch(d){try{g.emit("internal-error",[d])}catch(f){}}return b},window.XMLHttpRequest.prototype=l.prototype,j.inPlace(XMLHttpRequest.prototype,["open","send"],"-xhr-",f),g.on("send-xhr-start",d),g.on("open-xhr-start",d)},{ee:31,"wrap-events":28,"wrap-function":39}],29:[function(a,b){function c(a,b,c){var d=a[0];"string"==typeof d&&(d=new Function(d)),a[0]=e(d,"fn-",null,c)}var d=(a("lodash._slice"),a("ee").create()),e=a("wrap-function")(d);b.exports=d,e.inPlace(window,["setTimeout","setInterval","setImmediate"],"setTimer-"),d.on("setTimer-start",c)},{ee:31,"lodash._slice":36,"wrap-function":39}],28:[function(a,b){function c(a){f.inPlace(a,["addEventListener","removeEventListener"],"-",d)}function d(a){return a[1]}var e=(a("lodash._slice"),a("ee").create()),f=a("wrap-function")(e),g=a("gos");if(b.exports=e,c(window),"getPrototypeOf"in Object){for(var h=document;h&&!h.hasOwnProperty("addEventListener");)h=Object.getPrototypeOf(h);h&&c(h);for(var i=XMLHttpRequest.prototype;i&&!i.hasOwnProperty("addEventListener");)i=Object.getPrototypeOf(i);i&&c(i)}else Object.prototype.hasOwnProperty.call(XMLHttpRequest,"addEventListener")&&c(XMLHttpRequest.prototype);e.on("addEventListener-start",function(a){if(a[1]){var b=a[1];"function"==typeof b?this.wrapped=a[1]=g(b,"bw@wrapped",function(){return f(b,"fn-",null,b.name||"anonymous")}):"function"==typeof b.handleEvent&&f.inPlace(b,["handleEvent"],"fn-")}}),e.on("removeEventListener-start",function(a){var b=this.wrapped;b&&(a[1]=b)})},{ee:31,gos:32,"lodash._slice":36,"wrap-function":39}],39:[function(a,b){function c(a){return!(a&&"function"==typeof a&&a.apply&&!a[f])}var d=a("ee"),e=a("lodash._slice"),f="bw@wrapper",g=Object.prototype.hasOwnProperty;b.exports=function(a){function b(a,b,d,g,i){function j(){var c=this;return h(a,b,c,e(arguments),d,g,i)}if(c(a))return a;b||(b="");try{j[f]=!0}catch(k){}return l(a,j),j}function h(a,b,c,d,e,f){var d,c,g,h;try{g=e&&e(d,c)||{}}catch(i){m([i,"",[d,c,f],g])}_apmfnName=a.name||"",k(b+"start",[d,c,f,_apmfnName],g);try{return h=a.apply(c,d)}catch(j){var l=window.console;throw void 0!=l&&l.error&&l.log&&void 0!=j.stack&&(l.log("OneAPM catch error"),l.error(j.stack)),k(b+"err",[d,c,j],g),j}finally{k(b+"end",[d,c,h,_apmfnName],g)}}function i(a,b,c){var a=a||function(){},b=b||"-";return function(){var d=this;return h(a,b,d,e(arguments),c)}}function j(a,d,e,f){e||(e="");var g,h,i,j="-"===e.charAt(0);for(i=0;i<d.length;i++)h=d[i],g=a[h],c(g)||(a[h]=b(g,j?h+e:e,f,h,a))}function k(b,c,d){try{a.emit(b,c,d)}catch(e){m([e,b,c,d])}}function l(a,b){if(Object.defineProperty&&Object.keys)try{var c=Object.keys(a);return c.forEach(function(c){Object.defineProperty(b,c,{get:function(){return a[c]},set:function(b){return a[c]=b,b}})}),b}catch(d){m([d])}for(var e in a)g.call(a,e)&&(b[e]=a[e]);return b}function m(b){try{a.emit("internal-error",b)}catch(c){}}return a||(a=d),b.inPlace=j,b.flag=f,b.wrapOld=i,b}},{ee:31,"lodash._slice":36}]},{},[1]),window.BWEUM.require=a}();</script> | ||
20 | + | ||
17 | {{#if width750}} | 21 | {{#if width750}} |
18 | <script type="text/javascript"> | 22 | <script type="text/javascript"> |
19 | (function(d,c){var e=d.documentElement,a="orientationchange" in window?"orientationchange":"resize",b=function(){var f=e.clientWidth;if(!f){return}if(f>=750){e.style.fontSize="40px"}else{e.style.fontSize=40*(f/750)+"px"}};if(!d.addEventListener){return}b();c.addEventListener(a,b,false);d.addEventListener("DOMContentLoaded",b,false)})(document,window); | 23 | (function(d,c){var e=d.documentElement,a="orientationchange" in window?"orientationchange":"resize",b=function(){var f=e.clientWidth;if(!f){return}if(f>=750){e.style.fontSize="40px"}else{e.style.fontSize=40*(f/750)+"px"}};if(!d.addEventListener){return}b();c.addEventListener(a,b,false);d.addEventListener("DOMContentLoaded",b,false)})(document,window); |
oneapm.js
0 → 100644
1 | +/** | ||
2 | + * OneAPM agent configuration | ||
3 | + */ | ||
4 | + | ||
5 | +const commonConfig = require('./config/common'); | ||
6 | + | ||
7 | +exports.config = { | ||
8 | + app_name: [commonConfig.appName], | ||
9 | + license_key: 'BwEGA1dRDlQ6357HHQ1AD1xJVkbc9fNfWRtQUwhQG41c5QFWGFIDSQoHc0e8AgMaUlcUVw0=', | ||
10 | + logging: { | ||
11 | + level: 'info' | ||
12 | + }, | ||
13 | + transaction_events: { | ||
14 | + enabled: true | ||
15 | + } | ||
16 | +}; |
1 | { | 1 | { |
2 | "name": "m-yohobuy-node", | 2 | "name": "m-yohobuy-node", |
3 | - "version": "5.1.9", | 3 | + "version": "5.1.10", |
4 | "private": true, | 4 | "private": true, |
5 | "description": "A New Yohobuy Project With Express", | 5 | "description": "A New Yohobuy Project With Express", |
6 | "repository": { | 6 | "repository": { |
@@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
12 | "dev": "nodemon -e js,hbs -i public/ app.js", | 12 | "dev": "nodemon -e js,hbs -i public/ app.js", |
13 | "online": "NODE_ENV=\"production\" node app.js", | 13 | "online": "NODE_ENV=\"production\" node app.js", |
14 | "debug": "DEBUG=\"express:*\" nodemon -e js,hbs -i public/ app.js", | 14 | "debug": "DEBUG=\"express:*\" nodemon -e js,hbs -i public/ app.js", |
15 | - "lint-js": "eslint -c .eslintrc --cache --fix .", | 15 | + "lint-js": "eslint -c .eslintrc --cache .", |
16 | "lint-css": "stylelint --config .stylelintrc public/scss/**/*.css", | 16 | "lint-css": "stylelint --config .stylelintrc public/scss/**/*.css", |
17 | "precommit": "node lint.js" | 17 | "precommit": "node lint.js" |
18 | }, | 18 | }, |
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | "md5": "^2.1.0", | 30 | "md5": "^2.1.0", |
31 | "moment": "^2.15.1", | 31 | "moment": "^2.15.1", |
32 | "morgan": "^1.7.0", | 32 | "morgan": "^1.7.0", |
33 | + "oneapm": "^1.2.20", | ||
33 | "passport": "^0.3.2", | 34 | "passport": "^0.3.2", |
34 | "passport-local": "^1.0.0", | 35 | "passport-local": "^1.0.0", |
35 | "passport-qq": "0.0.3", | 36 | "passport-qq": "0.0.3", |
@@ -4,8 +4,7 @@ var $ = require('yoho-jquery'), | @@ -4,8 +4,7 @@ var $ = require('yoho-jquery'), | ||
4 | loading = require('../plugin/loading'), | 4 | loading = require('../plugin/loading'), |
5 | debounce = require('lodash/debounce'); | 5 | debounce = require('lodash/debounce'); |
6 | 6 | ||
7 | -var plusstar = {}, | ||
8 | - $footer = $('#yoho-footer'); | 7 | +var plusstar = {}; |
9 | 8 | ||
10 | var windowHeight = $(window).height(); | 9 | var windowHeight = $(window).height(); |
11 | var scrollFn, | 10 | var scrollFn, |
@@ -186,6 +185,9 @@ plusstar = { | @@ -186,6 +185,9 @@ plusstar = { | ||
186 | return true; | 185 | return true; |
187 | } | 186 | } |
188 | 187 | ||
188 | + // 固定底部去除 | ||
189 | + window.rePosFooter(); | ||
190 | + | ||
189 | // 记录切换tab位置 | 191 | // 记录切换tab位置 |
190 | $(document).scrollTop(window.cookie(code) || 0); | 192 | $(document).scrollTop(window.cookie(code) || 0); |
191 | 193 | ||
@@ -303,23 +305,17 @@ $(function() { | @@ -303,23 +305,17 @@ $(function() { | ||
303 | apt: window.queryString.client_type || '', | 305 | apt: window.queryString.client_type || '', |
304 | sid: window.queryString.session_id || '', | 306 | sid: window.queryString.session_id || '', |
305 | }; | 307 | }; |
306 | - } | ||
307 | - | ||
308 | - // 男:1,女:2,潮童:3,创意生活:4 | ||
309 | - speckParamApp.CID = window.queryString.yh_channel || window._ChannelVary[window.cookie('_Channel')] || 1; | ||
310 | 308 | ||
311 | - if (!isApp) { | 309 | + $('.plusstar-resources').css({'margin-top': $('.tab-nav').height()}); |
310 | + } else { | ||
312 | $('.tab-nav').css({ | 311 | $('.tab-nav').css({ |
313 | position: 'relative' | 312 | position: 'relative' |
314 | }); | 313 | }); |
315 | - | ||
316 | - $footer.css({ | ||
317 | - 'max-width': '650px' | ||
318 | - }).before( | ||
319 | - '<div style="height: ' + parseInt($footer.css('height'), 0) + 'px"></div>' | ||
320 | - ); | ||
321 | } | 314 | } |
322 | 315 | ||
316 | + // 男:1,女:2,潮童:3,创意生活:4 | ||
317 | + speckParamApp.CID = window.queryString.yh_channel || window._ChannelVary[window.cookie('_Channel')] || 1; | ||
318 | + | ||
323 | plusstar.init(); | 319 | plusstar.init(); |
324 | 320 | ||
325 | // 滚动翻页 | 321 | // 滚动翻页 |
@@ -18,12 +18,13 @@ | @@ -18,12 +18,13 @@ | ||
18 | position: fixed; | 18 | position: fixed; |
19 | z-index: 10; | 19 | z-index: 10; |
20 | background-color: #fff; | 20 | background-color: #fff; |
21 | + top: 0; | ||
21 | 22 | ||
22 | li { | 23 | li { |
23 | display: block; | 24 | display: block; |
24 | float: left; | 25 | float: left; |
25 | height: 100%; | 26 | height: 100%; |
26 | - width: 33.33%; | 27 | + width: 50%; |
27 | line-height: 60px; | 28 | line-height: 60px; |
28 | color: #999; | 29 | color: #999; |
29 | white-space: nowrap; | 30 | white-space: nowrap; |
-
Please register or login to post a comment