Authored by lijing

Merge branch 'feature/crm' into feature/baseAct

... ... @@ -14,6 +14,7 @@ exports.index = function(req, res, next) {
page: 'feature',
title: result.name || 'Yoho!Buy有货',
content: result,
activity_id: req.params.code,
isFeature: true
});
}).catch(next);
... ...
... ... @@ -8,38 +8,71 @@ const channels = {
};
exports.productLst = function(req, res, next) {
let keys = ['sort', 'misort', 'msort', 'gender', 'brand'],
params = {
uid: req.user.uid || req.query.uid,
udid: req.query.udid,
promotion: req.query.pid,
let uid = req.user.uid || req.query.uid;
let udid = req.query.udid;
let getProductList;
if (req.query.maybeLike) {
getProductList = model.maybeLikeList(Object.assign({
uid: uid,
udid: udid,
yh_channel: req.query.yh_channel || (req.cookies._Channel && channels[req.cookies._Channel]) || 1,
specified_sort: req.query.enum,
stocknumber: req.query.sn,
p_d: req.query.pd,
noDup: req.query.noDup,
limit: req.query.limit || 10
};
keys.forEach(function(k) {
if (req.query[k]) {
params[k] = req.query[k];
}
});
if (params.specified_sort) {
if (params.brand) {
params.limit = params.brand.split(',').length;
} else if (params.sort) {
params.limit = params.sort.split(',').length;
} else if (params.misort) {
params.limit = params.misort.split(',').length;
} else if (params.msort) {
params.limit = params.msort.split(',').length;
limit: req.query.limit
}, req.query));
} else {
let keys = ['sort', 'misort', 'msort', 'gender', 'brand'],
params = {
uid: uid,
udid: udid,
promotion: req.query.pid,
yh_channel: req.query.yh_channel || (req.cookies._Channel && channels[req.cookies._Channel]) || 1,
specified_sort: req.query.enum,
stocknumber: req.query.sn,
p_d: req.query.pd,
noDup: req.query.noDup,
limit: req.query.limit || 10
};
keys.forEach(function(k) {
if (req.query[k]) {
params[k] = req.query[k];
}
});
if (params.specified_sort) {
if (params.brand) {
params.limit = params.brand.split(',').length;
} else if (params.sort) {
params.limit = params.sort.split(',').length;
} else if (params.misort) {
params.limit = params.misort.split(',').length;
} else if (params.msort) {
params.limit = params.msort.split(',').length;
}
}
getProductList = model.productLst(params);
}
getProductList.then((result) => {
res.jsonp(result);
}).catch(next);
};
exports.coupon = function(req, res, next) {
let activity_template_id = req.query.activity_id;
let uid = req.user.uid || req.query.uid;
if (!uid || !activity_template_id) {
return res.jsonp({
code: 400
});
}
model.productLst(params).then((result) => {
model.getCoupon({
activity_template_id,
uid
}).then((result) => {
res.jsonp(result);
}).catch(next);
};
... ...
... ... @@ -359,12 +359,24 @@ exports.receiveCoupon = (receiveData, uid) => {
};
exports.couponSend = (uid, token) => {
return api.get('', {
let data = {
method: 'app.coupons.couponSend',
uid: uid,
coupon_send_token: token
}).then(result => {
};
if (/:/.test(token)) {
let [couponId, personCouponId] = token.split(':');
data = {
method: 'app.promotion.getCoupon',
uid: uid,
couponId: couponId,
personCouponId: personCouponId
};
}
return api.get('', data).then(result => {
if (!result) {
result.code = 404;
... ...
... ... @@ -10,10 +10,8 @@ const _getProductBySkns = function(productObj) {
productObj.defaultPros = [];
if (result && result.data && result.data.product_list && result.code === 200) {
result.data.product_list.forEach(function(val) {
var goods_id = Array.isArray(val.goods_list) &&
val.goods_list.length ? val.goods_list[0].goods_id : null;
var obj = {
producturl: `//m.yohobuy.com/product/pro_${val.product_id}_${goods_id}/${val.cn_alphabet}.html?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${val.product_skn}}}`, // eslint-disable-line
producturl: `//m.yohobuy.com/product/${val.product_skn}.html?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${val.product_skn}}}`, // eslint-disable-line
productimg: helpers.image(val.default_images, 213, 284, 2, 60).replace('quality/80', 'quality/60'),
productname: val.product_name,
vipprice: val.vip_price,
... ... @@ -67,6 +65,14 @@ module.exports = {
f.component[0].type === 'productGroup' && f.component[0].defaultSkns) {
sknsArr.push(_getProductBySkns(f.component[0]));
}
if (f.component && f.component[0] &&
f.component[0].type === 'productGroup' && f.component[0].favourite_prds_enable === '1') {
f.component[0].searchCondition = Object.assign({
maybeLike: '1',
limit: '12'
}, f.component[0].searchCondition || {});
}
});
}
... ...
... ... @@ -39,5 +39,32 @@ module.exports = {
});
return data;
});
},
maybeLikeList: function(params) {
return api.get('', {
method: 'app.search.newLast7day',
uid: params.uid || 0,
udid: params.udid || 0,
yh_channel: params.yh_channel,
limit: params.limit,
need_filter: 'null'
}, {
cache: true
}).then(res => {
var data = [],
lst = (res && res.data && res.data.product_list) || [];
lst.forEach(function(o) {
o && data.push(_getProduct(o));
});
return data;
});
},
getCoupon: function(params) {
return api.get('', Object.assign({
method: 'app.coupons.personalCoupons'
}, params), {
cache: true
});
}
};
... ...
... ... @@ -226,6 +226,7 @@ router.get('/redbag/2017', redbag.index);
// 获取活动页面个性化推荐商品数据
router.get('/individuation', individuation.productLst);
router.get('/individuation/coupon', individuation.coupon);
// 活动页模版
router.get('/feature/:code.html', feature.index);
... ...
<div class="feature-page yoho-page">
<div class="feature-page yoho-page" data-id="{{activity_id}}">
{{#unless content.visiable}}
<div class="over">
<p>此活动已结束</p>
... ... @@ -41,7 +41,8 @@
{{#isEqualOr type 'coupon'}}
{{! 优惠券}}
<a class="anchor yoho-conpon" style="{{styleFormat this percent=1}}" data-token="{{token}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../this @index}}"></a>
<a class="anchor yoho-conpon" style="{{styleFormat this percent=1}}" data-persenal-enable="{{persenal_enable}}" data-token="{{token}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}"
fp="{{getAnalysis ../this @index}}"></a>
{{/isEqualOr}}
{{#isEqualOr type 'yohoCoin'}}
... ...
... ... @@ -139,6 +139,30 @@ const common = {
} else {
return next();
}
},
check: (req, res, next) => {
let refer = req.query.refer;
// 短信推广的链接强制检查登录
if (req.user.uid) {
AuthHelper.profile(req.user.uid).then(function(result) {
if (result && result.code === 200) {
return res.redirect(refer);
}
return res.redirect(helpers.urlFormat('/signin.html', {
refer: refer
}));
}).catch(() => {
return res.redirect(helpers.urlFormat('/signin.html', {
refer: refer
}));
});
} else {
return res.redirect(helpers.urlFormat('/signin.html', {
refer: refer
}));
}
}
};
... ...
... ... @@ -59,6 +59,9 @@ router.get('/passport/international',
// 本地登录
router.post('/passport/login/auth', validateCode.check, login.local.login);
// 检查登录状态
router.get('/passport/login/check', login.common.check);
// SMS 短信
router.use('/passport/sms_login', login.common.beforeLogin, smsLogin.beforeIn);
router.get('/passport/sms_login', validateCode.load, smsLogin.loginPage);
... ...
... ... @@ -11,16 +11,12 @@ const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
const domains = {
liveApi: 'http://testapi.live.yohops.com:9999/',
singleApi: 'http://api-test3.yohops.com:9999/',
api: 'http://api-test3.yohops.com:9999/',
service: 'http://service-test3.yohops.com:9999/',
global: 'http://api-global.yohobuy.com',
// liveApi: 'http://api.live.yoho.cn/',
// singleApi: 'http://single.yoho.cn/',
global: 'http://global-test-soa.yohops.com:9999',
liveApi: 'http://testapi.live.yohops.com:9999/',
singleApi: 'http://api-test3.yohops.com:9999/',
imSocket: 'ws://socket.yohobuy.com:10240',
imCs: 'http://im.yohobuy.com/api'
};
... ...
var $ = require('yoho-jquery');
var lazyLoad = require('yoho-jquery-lazyload');
var Swiper = require('yoho-swiper');
var qs = require('yoho-qs');
var yoho = require('../yoho-app');
global.jQuery = $;
... ... @@ -156,7 +157,29 @@ function modalInit() {
});
}
function persenalCouponInit() {
let activityId = $('.feature-page').data('id');
$('.yoho-conpon').each(function() {
let $this = $(this);
if ($this.data('persenal-enable')) {
$.ajax({
url: '//m.yohobuy.com/activity/individuation/coupon',
dataType: 'jsonp',
data: {
uid: qs.uid || 0,
activity_id: activityId
},
success: function(res) {
if (res.code === 200 && res.data && res.data.couponId && res.data.personCouponId) {
$this.attr('data-token', `${res.data.couponId}:${res.data.personCouponId}`);
}
}
});
}
});
}
$(function() {
if ($('.over').length) {
... ... @@ -197,4 +220,7 @@ $(function() {
// 模态框
modalInit();
// 个性化券查询
persenalCouponInit();
});
... ...