Authored by 郭成尧

Merge branch 'master' into feature/guang

... ... @@ -349,7 +349,7 @@ exports.receiveCoupon = (receiveData, uid) => {
break;
default:
returnData = {
msg: '领券失败!',
msg: result.message || '领券失败!',
status: false
};
break;
... ...
... ... @@ -156,7 +156,8 @@ const add = (req, res, next) => {
return indexModel.addToCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey).then(data => {
if (!shoppingKey && _.has(data, 'data.shopping_key')) {
res.cookie('_SPK', data.data.shopping_key, {
expires: new Date(Date.now() + 86400 * 360)
expires: new Date(Date.now() + 86400 * 360),
domain: '.m.yohobuy.com'
});
}
data ? res.json(data) : res.status(400).json({
... ...
... ... @@ -70,23 +70,26 @@ exports.orderEnsure = (req, res, next) => {
addressModel.addressData(uid)
];
if (_.isUndefined(req.cookies._isNewUser)) {
allPromise.push(orderModel.isNewUser(uid));
}
/* tar note 170426 品众去除 */
// if (_.isUndefined(req.cookies._isNewUser)) {
// allPromise.push(orderModel.isNewUser(uid));
// }
return Promise.all(allPromise).then(result => {
let order = result[0];
let userProfile = result[1];
let address = result[2];
let isNewUser = result[3];
if (!_.isUndefined(isNewUser)) {
if (isNewUser) {
res.cookie('_isNewUser', true, actCkOpthn);
} else {
res.cookie('_isNewUser', false, actCkOpthn);
}
}
/* tar note 170426 品众去除 */
// let isNewUser = result[3];
// if (!_.isUndefined(isNewUser)) {
// if (isNewUser) {
// res.cookie('_isNewUser', true, actCkOpthn);
// } else {
// res.cookie('_isNewUser', false, actCkOpthn);
// }
// }
if (order.cartUrl) {
logger.info(`orderEnsure: order cartUrl has value:${order.cartUrl}, order data is null`);
... ...
... ... @@ -3,12 +3,27 @@
const api = global.yoho.API;
const cartCount = (uid, shoppingKey) => {
let params = {
method: 'app.Shopping.count'
};
return api.get('', {
method: 'app.Shopping.count',
uid: uid,
shopping_key: shoppingKey
}).then((result) => {
if (!uid && !shoppingKey) {
return Promise.resolve({});
}
if (uid) {
Object.assign(params, {
uid: uid
});
}
if (shoppingKey) {
Object.assign(params, {
shopping_key: shoppingKey
});
}
return api.get('', params).then((result) => {
return result;
});
};
... ...
... ... @@ -56,6 +56,7 @@ const _repaymentList = (req, res, next, opt, params) => {
const index = (req, res, next) => {
let uid = req.user.uid;
logger.info(`installment index info: client_type=${req.query.client_type},req.user.uid=${req.user.uid},req.query.uid=${req.query.uid},cookies=${JSON.stringify(req.cookies)}`); // eslint-disable-line
Promise.all([
installmentModel.getStauts(uid),
installmentModel.getSearchIntallment({
... ...
... ... @@ -145,8 +145,7 @@ const addressModify = (req, res, next) => {
addressModel.getAddressData({uid: uid}).then(result => {
let userAddressList = result;
let addressData = addressProcess.getAddressByAreaCode(areaCode,
_.get(userAddressList, 'data', [])) || {};
let addressData = addressProcess.getAddressByAreaCode(areaCode, _.get(userAddressList, 'data', [])) || {};
Object.assign(addressData, {
orderCode: orderCode,
... ... @@ -154,7 +153,7 @@ const addressModify = (req, res, next) => {
if (provinceAreaCode) {
// 不允许修改省份,字符串拆分
let areaArray = addressData.area.split(' ');
let areaArray = addressData.area ? addressData.area.split(' ') : [];
let area = _.slice(areaArray, 1);
Object.assign(addressData, {
... ...
... ... @@ -28,7 +28,7 @@ const _userData = (params) => {
code: 200
});
} else {
return false;
return Promise.resolve({});
}
};
... ...
... ... @@ -208,7 +208,7 @@ const getStauts = (uid) => {
if (result && result.code === 200) {
return result.data.status;
} else {
logger.error('get installment open status return code is not 200');
logger.error(`get installment open status return code is not 200,uid:${uid},result=${JSON.stringify(result)}`); // eslint-disable-line
return Promise.reject(result);
}
});
... ...
... ... @@ -117,8 +117,29 @@ const common = {
return next();
});
}
}
},
isLoginUser: (req, res, next) => {
// 微信里边已经登录的时候,不再跳转登录
if (req.user.uid) {
AuthHelper.profile(req.user.uid).then(function(result) {
if (result.code !== 200) {
return next();
}
let refer = req.query.refer || decodeURI(req.cookies.refer) || config.siteUrl;
if (/sign|login/.test(refer)) {
refer = `${config.siteUrl}/home`;
}
refer = utils.refererLimit(refer);
return res.redirect(refer);
}).catch(() => {
return next();
});
} else {
return next();
}
}
};
... ... @@ -280,19 +301,6 @@ const local = {
const wechat = {
login: (req, res, next) => {
// 微信里边已经登录的时候,不再跳转登录
// 与 5.6 的 session 有冲突
// if (req.user.uid) {
// let refer = req.query.refer || decodeURI(req.cookies.refer) || config.siteUrl;
// if (/sign|login/.test(refer)) {
// refer = `${config.siteUrl}/home`;
// }
// refer = utils.refererLimit(refer);
// return res.redirect(refer);
// }
// 设置为原链接标识originalUrl
req.session.originalUrl = 'true';
req.session.authState = uuid.v4();
... ...
... ... @@ -75,7 +75,7 @@ router.post('/passport/sms_login/password.json', smsLogin.password);
router.get('/passport/login/user', login.user);
// 微信登录
router.get('/passport/login/wechat', login.common.beforeLogin, login.wechat.login);
router.get('/passport/login/wechat', login.common.beforeLogin, login.common.isLoginUser, login.wechat.login);
router.get('/passport/login/wechat/callback', login.wechat.callback);
// sina登录
... ...
... ... @@ -82,12 +82,19 @@ exports.getShopCategory = (shopId, channel) => {
* 店铺收藏数量
*/
exports.favCount = (shopId, uid, channel, udid) => {
return singleAPI.get('favorite', {
let finalParams = {
method: 'app.favorite.queryFavoriteCountByShopIds',
favIds: shopId,
type: 'shop',
udid: udid,
uid: uid,
physical_channel: yhChannel[channel],
});
};
if (uid) {
Object.assign(finalParams, {
uid: uid
});
}
return singleAPI.get('favorite', finalParams);
};
... ...
... ... @@ -43,6 +43,9 @@
<div id="red-index" class="tab-panel red-shop-index active">
<div class="shop-coupon coupon-group"></div>
{{> reds-shop/modules}}
<div id="indexGoodsContainer" class="goods-container">
<div class="default-goods container clearfix"></div>
</div>
<div class="all-goods">
<a href="{{allGoodsUrl}}">点击查看全部商品</a>
</div>
... ...
<div class="item">
<a {{#if link}}href="{{link}}"{{/if}}>
{{#if isGood}}
{{#ifor triple double}}
<img class="item-pic" src="{{image2 src w=235 h=314}}" alt="">
{{#ifor triple double single}}
{{#within index 3}}
<img class="item-pic" src="{{image2 src w=235 h=314}}">
{{^}}
<img class="item-pic lazy" data-original="{{image2 src w=235 h=314}}">
{{/within}}
{{/ifor}}
{{^}}
<img class="item-pic" src="{{image2 src}}" alt="">
{{#within index 3}}
<img class="item-pic" src="{{image2 src}}" alt="">
{{^}}
<img class="item-pic lazy" data-original="{{image2 src}}">
{{/within}}
{{/if}}
</a>
... ...
... ... @@ -15,13 +15,13 @@
<ul class="swiper-wrapper">
{{#each ../pics}}
<li class="swiper-slide">
{{#if link}}
<a href="{{link}}">
<a{{#if link}} href="{{link}}"{{/if}}>
{{#within @../index 3}}
<img src="{{image2 src}}" alt="">
</a>
{{^}}
<img src="{{image2 src}}" alt="">
{{/if}}
{{^}}
<img class="lazy" data-original="{{image2 src}}" alt="">
{{/within}}
</a>
</li>
{{/each}}
</ul>
... ... @@ -51,7 +51,7 @@
{{#isEqual module_type 'SingleImage'}}
<div class="items-s1 clearfix">
{{#each ../pics}}
{{> reds-shop/item}}
{{> reds-shop/item index=@../index single=true}}
{{/each}}
</div>
{{#if ../isModuleMargin}}
... ... @@ -61,7 +61,7 @@
{{#isEqual module_type 'DoubleImage'}}
<div class="items-s2 clearfix">
{{#each ../pics}}
{{> reds-shop/item double=true}}
{{> reds-shop/item index=@../index double=true}}
{{/each}}
</div>
{{#if ../isModuleMargin}}
... ... @@ -71,7 +71,7 @@
{{#isEqual module_type 'TripleImage'}}
<div class="{{#isEqual ../displayType 1}}items-3-3{{/isEqual}}{{#isEqual ../displayType 2}}items-3-3 items-small{{/isEqual}}{{#isEqual ../displayType 3}}items-3-2 items-3-2-right{{/isEqual}}{{#isEqual ../displayType 4}}items-3-2 items-3-2-left{{/isEqual}} clearfix">
{{#each ../pics}}
{{> reds-shop/item triple=true}}
{{> reds-shop/item index=@../index triple=true}}
{{/each}}
</div>
{{#if ../isModuleMargin}}
... ... @@ -81,7 +81,7 @@
{{#isEqual module_type 'FourImage'}}
<div class="items-s4 clearfix">
{{#each ../pics}}
{{> reds-shop/item four=true}}
{{> reds-shop/item index=@../index four=true}}
{{/each}}
</div>
{{#if ../isModuleMargin}}
... ...
... ... @@ -56,12 +56,12 @@ const qaDetail = (params) => {
// 根据子id,父id,关键字,匹配问题详情
if (params.keyword) {
// 从搜索列表进入,有关键字
// 从搜索列表进入,有关键字
if (result && result[1] && result[1].data) {
let keyList = result[1].data.helper_list;
_.forEach(keyList, function(val) {
if (val.id === params.sonId) {
if (parseInt(val.id, 10) === parseInt(params.sonId, 10)) {
resu = {
caption: val.caption,
content: val.content
... ... @@ -70,11 +70,11 @@ const qaDetail = (params) => {
});
}
} else {
// 常见问题没有parentId
// 常见问题没有parentId
if (result && result[0] && result[0].data) {
if (!params.parentId) {
_.forEach(result[0].data.faqs, function(val) {
if (val.id === params.sonId) {
if (parseInt(val.id, 10) === parseInt(params.sonId, 10)) {
resu = {
caption: val.caption,
content: val.content
... ... @@ -83,10 +83,10 @@ const qaDetail = (params) => {
});
} else {
_.forEach(result[0].data.categorys, function(val) {
if (val.id === params.parentId) {
if (parseInt(val.id, 10) === parseInt(params.parentId, 10)) {
_.forEach(val.contentItems, function(item) {
if (item.id === params.sonId) {
if (parseInt(item.id, 10) === parseInt(params.sonId, 10)) {
resu = {
caption: item.caption,
content: item.content
... ...
... ... @@ -51,6 +51,8 @@ exports.serverError = () => {
forceNoCache(res);
if (err && err.code === 401) {
logger.error(`401 error info:client_type=${req.query.client_type},req.user=${JSON.stringify(req.user)},req.query=${JSON.stringify(req.query)},cookies=${JSON.stringify(req.cookies)}`); // eslint-disable-line
if (req.xhr) {
return res.status(401).json(err);
} else if (req.yoho.isApp) {
... ...
... ... @@ -6,33 +6,36 @@ const authcode = require('../../utils/authcode');
module.exports = () => {
return (req, res, next) => {
// 从 SESSION 中获取到当前登录用户的 UID
if (req.session && _.isNumber(req.session.LOGIN_UID)) {
// 调用接口传参时切勿使用toString获得字符串
req.user.uid = {
toString: () => {
return req.session.LOGIN_UID;
},
sessionKey: req.session.SESSION_KEY
};
let userData = _.get(req.session, 'USER', {});
_.merge(req.user, userData);
}
if (!req.yoho.isApp) {
// 从 SESSION 中获取到当前登录用户的 UID
if (req.session && _.isNumber(req.session.LOGIN_UID)) {
// 调用接口传参时切勿使用toString获得字符串
req.user.uid = {
toString: () => {
return _.parseInt(req.session.LOGIN_UID);
},
sessionKey: req.session.SESSION_KEY
};
let userData = _.get(req.session, 'USER', {});
// session 没有读取到的时候,从 cookie 读取 UID
if (!req.user.uid && req.cookies._UID) {
let sessionKey = req.cookies._SESSION_KEY && authcode(req.cookies._SESSION_KEY, '_SESSION_KEY', 2592000000);
_.merge(req.user, userData);
}
// 调用接口传参时切勿使用toString获得字符串
req.user.uid = {
toString: () => {
return cookie.getUid(req);
},
sessionKey
};
}
// session 没有读取到的时候,从 cookie 读取 UID
if (!req.user.uid && req.cookies._UID) {
let sessionKey = req.cookies._SESSION_KEY &&
authcode(req.cookies._SESSION_KEY, '_SESSION_KEY', 2592000000);
// 调用接口传参时切勿使用toString获得字符串
req.user.uid = {
toString: () => {
return _.parseInt(cookie.getUid(req));
},
sessionKey
};
}
}
if (!req.user.uid &&
req.cookies.app_uid &&
req.cookies.app_uid !== '0' &&
... ...
... ... @@ -57,7 +57,7 @@
<link rel="apple-touch-startup-image" sizes="320x460" href="http://static.yohobuy.com/m/v1/img/startup/startup.png" media="screen and (max-device-width: 320)">
</head>
<body class="{{pageStyle}} {{#if isWechat}}wechat-body{{/if}} {{#if width750}}width750{{/if}} {{#if isPassportPage}}passport-body{{/if}} {{#if isStarIndexPage}}star-index-bg{{/if}} {{#if isStarDetailPage}}star-class-body{{/if}} {{#if isInstallmentPage}}installment-body{{/if}}">
<div class="main-wrap" id="main-wrap" {{#if appPath}}data-apppath='{{appPath}}'{{/if}}>
<div class="main-wrap" id="main-wrap" {{#if appPath}}data-apppath='{{{appPath}}}'{{/if}}>
{{#if systemUpdate}}
{{> updata}}
{{/if}}
... ...
... ... @@ -75,8 +75,8 @@
}, 1000);
}());
/* tar add 190222 */
window._fxcmd = window._fxcmd || [];
/* tar add 170426 品众代码去除 */
{{!--window._fxcmd = window._fxcmd || [];
_fxcmd.sid = 'bb3b16fa1106a6ab8619da0095755f32';
_fxcmd.trackAll = false;
// 参数配置(可选)...
... ... @@ -89,7 +89,7 @@
_pzfx.src = '//static.w3t.cn/fx/1/1/fx.js';
var sc = document.getElementsByTagName('script')[0];
sc.parentNode.insertBefore(_pzfx,sc);
}, 1000);
}, 1000);--}}
</script>
... ...
{
"name": "m-yohobuy-node",
"version": "5.6.3",
"version": "5.6.4",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ...
... ... @@ -323,15 +323,15 @@ function submitOrder() {
}, true);
}
/* tar add 190222 */
if (window._fxcmd) {
window._fxcmd.push(['trackOrder', {
oid: res.data.order_code,
otp: res.data.order_amount,
u_info: cookie.get('_UID'),
u_type: cookie.get('_isNewUser') ? 1 : 0
}, []]);
}
/* tar add 170426 品众代码去除 */
// if (window._fxcmd) {
// window._fxcmd.push(['trackOrder', {
// oid: res.data.order_code,
// otp: res.data.order_amount,
// u_info: cookie.get('_UID'),
// u_type: cookie.get('_isNewUser') ? 1 : 0
// }, []]);
// }
cookie.remove(['order-info', 'activity-info']);
window.location.href = url;
... ...
... ... @@ -2,19 +2,64 @@
* @Author: Targaryen
* @Date: 2017-03-23 11:31:51
* @Last Modified by: Targaryen
* @Last Modified time: 2017-04-14 11:17:55
* @Last Modified time: 2017-04-25 11:45:13
*/
/** *****************
* 红人店铺首页
********************/
const Swiper2 = require('yoho-swiper2');
const lazyLoad = require('yoho-jquery-lazyload');
let tip = require('../../plugin/tip');
let $goodsContainer = $('.index-goods-container');
let $indexGoodsContaniner = $('#indexGoodsContainer');
let $collect = $('#collect');
const shopId = $('#shopId').val();
lazyLoad($('.lazy'));
/**
* 异步检测是否已经收藏
*/
$.ajax({
type: 'GET',
url: location.protocol + '//m.yohobuy.com/product/index/shopFav',
xhrFields: {
withCredentials: true
},
data: {
shopId: shopId
},
success: function(data) {
if (data.collect) {
$collect.attr('class', 'already-collect pull-left');
}
},
error: function() {
tip.show('网络断开连接了~');
}
});
/**
* 店铺轮播图
*/
if ($('.shop-swiper')) {
let num = $('.shop-swiper').length;
for (let i = 1; i <= num; i++) {
new Swiper2('.shop-swiper-' + i, {
lazyLoading: true,
lazyLoadingInPrevNext: true,
loop: true,
autoplay: 3000,
slideElement: 'li',
paginationClickable: true,
pagination: $(this).closest('.shop-swiper-' + i).find('.pagination-inner').get(0)
});
}
}
/**
* 异步加载推荐商品
*/
... ... @@ -47,51 +92,33 @@ $.each($goodsContainer, function(index, elem) {
},
data: data,
success: function(result) {
let $result = $(result);
lazyLoad($result.find('img[class=lazy]'));
$(elem).html(result);
}
});
});
/**
* 异步检测是否已经收藏
* 异步加载首页全部商品
*/
$.ajax({
type: 'GET',
url: location.protocol + '//m.yohobuy.com/product/index/shopFav',
url: '/product/search/search',
xhrFields: {
withCredentials: true
},
data: {
shopId: shopId
shop_id: shopId
},
success: function(data) {
if (data.collect) {
$collect.attr('class', 'already-collect pull-left');
}
},
error: function() {
tip.show('网络断开连接了~');
}
});
success: function(result) {
let $result = $(result);
/**
* 店铺轮播图
*/
if ($('.shop-swiper')) {
let num = $('.shop-swiper').length;
for (let i = 1; i <= num; i++) {
new Swiper2('.shop-swiper-' + i, {
lazyLoading: true,
lazyLoadingInPrevNext: true,
loop: true,
autoplay: 3000,
slideElement: 'li',
paginationClickable: true,
pagination: $(this).closest('.shop-swiper-' + i).find('.pagination-inner').get(0)
});
lazyLoad($result.find('img[class=lazy]'));
$indexGoodsContaniner.find('.container').html($result);
}
}
});
/**
* 店铺收藏取消收藏操作
... ...
... ... @@ -53,6 +53,8 @@ body {
.goods-container {
overflow: hidden;
background-color: #fff;
padding-left: 15px;
.goods-box {
.no-result {
... ...
... ... @@ -2,7 +2,7 @@
* @Author: Targaryen
* @Date: 2017-03-23 17:12:53
* @Last Modified by: Targaryen
* @Last Modified time: 2017-04-20 10:19:41
* @Last Modified time: 2017-04-25 15:54:23
*/
// 红人店铺首页
... ... @@ -230,16 +230,29 @@
/* 四张小图 */
.items-s4 {
border-bottom: 1px solid #e0e0e0;
.item {
float: left;
width: 25%;
border-top: 1px solid #e0e0e0;
border-right: 1px solid #e0e0e0;
}
.item:last-child {
border-right: none;
}
.item-info {
text-align: center;
background-color: #f5f7f6;
color: #000;
position: relative;
.text {
line-height: 36px;
}
.name,
.price {
display: none;
... ...
... ... @@ -2,7 +2,7 @@
* @Author: Targaryen
* @Date: 2017-03-23 11:02:31
* @Last Modified by: Targaryen
* @Last Modified time: 2017-04-20 15:41:44
* @Last Modified time: 2017-04-26 16:33:07
*/
/* 红人店铺数据处理 */
... ... @@ -339,8 +339,11 @@ const pushGoodsInfo = (decorators, goodsList) => {
decorators[key].pics[subKey].marketPrice = marketPrice ? '¥' + marketPrice : '';
decorators[key].pics[subKey].isGood = true;
if (value.module_type === 'TripleImage' || value.module_type === 'DoubleImage') {
decorators[key].pics[subKey].src = imageSrc;
if (value.module_type === 'TripleImage' ||
value.module_type === 'DoubleImage' ||
value.module_type === 'SingleImage') {
// decorators[key].pics[subKey].src = imageSrc; // 为了和 APP 统一,图暂时不取商品图
} else if (value.module_type === 'FourImage') {
decorators[key].pics[subKey].isGood = false;
} else {
... ...