Authored by 李奇

Merge branch 'master' into feature/customerService

# Conflicts:
#	package.json
#	public/js/service/client.page.js
#	public/js/service/socket-chat.js
... ... @@ -27,7 +27,7 @@ const favicon = require('serve-favicon');
const _ = require('lodash');
const fp = require('lodash/fp');
const session = require('cookie-session');
const session = require('client-sessions');
const pkg = require('./package.json');
const app = express();
const helpers = global.yoho.helpers;
... ... @@ -68,7 +68,8 @@ app.use(cookieParser());
app.use(compression());
app.use(session({
name: 'yohobuy_session_cookie',
requestKey: 'session',
cookieName: 'yohobuy_session_cookie',
secret: '82dd7e724f2c6870472c89dfa43cf48d',
domain: config.cookieDomain
}));
... ... @@ -77,6 +78,10 @@ app.use((req, res, next) => {
req.user = {}; // 全局的用户数据
req.yoho = {}; // req和res绑定yoho对象,用于传递全局数据, 如req.yoho.channel等
if (!req.session) {
req.session = {};
}
next();
});
... ...
... ... @@ -172,7 +172,7 @@ exports.sendcoupon = (couponId, uid) => {
default:
returnData = {
code: 500,
message: '领券失败!'
message: result.message
};
break;
}
... ...
... ... @@ -48,7 +48,7 @@ const homeNav = [
/* {name: '我的投诉', href: '/home/complaints'}, */
{name: '我的信息', href: '/home/message', count: 0},
{name: '在线客服', href: '/service/client', isBlank: true}
{name: '在线客服', href: 'http://chat8.live800.com/live800/chatClient/chatbox.jsp?companyID=620092&configID=149091&jid=8732423409', isBlank: true}
]
},
{
... ...
... ... @@ -25,7 +25,7 @@ const index = (req, res, next) => {
});
// 清除 session
req.session = null;
req.session.reset();
service.indexPageDataAsync()
.then(result => {
... ...
... ... @@ -117,7 +117,7 @@ const local = {
domain: config.cookieDomain
});
req.session = null;
req.session.reset();
let bindMobile = _.trim(req.query.bindMobile || '');
let bindArea = '+' + _.trim(req.query.bindArea || '86');
... ... @@ -206,7 +206,7 @@ const local = {
})(req, res, next);
},
logout: (req, res) => {
req.session = null;
req.session.reset();
res.clearCookie('_UID', {
domain: config.cookieDomain
... ...
... ... @@ -35,13 +35,18 @@ const syncUserSession = (uid, req, res, sessionKey) => {
}
return Promise.all([userService.profile(uid), cartService.goodsCount(uid)]).spread((userInfo, count) => {
let token = sign.makeToken(uid);
let salt = uuid.v4().substr(0, 8);
let saltedUid = uid + salt;
let saltedToken = sign.makeToken(saltedUid);
let publicToken = saltedToken + salt;
let data = userInfo.data;
let encryptionUid = aes.encryptionUid(data.uid);
if (data) {
let uidCookie =
`${encodeURIComponent(data.profile_name)}::${encryptionUid}::${data.vip_info.title}::${token}`;
`${encodeURIComponent(data.profile_name)}::${encryptionUid}::${data.vip_info.title}::${saltedToken}`;
let isStudent = data.vip_info.is_student || 0;
res.cookie('_UID', uidCookie, {
... ... @@ -62,11 +67,12 @@ const syncUserSession = (uid, req, res, sessionKey) => {
});
}
req.session.TOKEN_ = token;
req.session.TOKEN_ = publicToken;
req.session.LOGIN_UID_ = uid;
res.cookie('_TOKEN', token, {
domain: config.cookieDomain
res.cookie('_TOKEN', publicToken, {
domain: config.cookieDomain,
httpOnly: true
});
}).catch(console.log);
... ...
... ... @@ -908,6 +908,8 @@ const getShopListData = (channel, params, uid) => {
const getBaseShopData = (params, extra, channel, shopId) => {
let resData = {};
params.shopId = shopId;
return Promise.all([
getBrandData(params, extra, channel),
searchApi.getShopDecorator(shopId), // 店铺装修数据
... ... @@ -960,11 +962,6 @@ const getBaseShopData = (params, extra, channel, shopId) => {
searchHandler.handleBrandShopCoupons(result[3].data, {shopId: shopId}));
}
// 临时删除seo信息
_.unset(resData, 'title');
_.unset(resData, 'keywords');
_.unset(resData, 'description');
return resData;
});
};
... ...
... ... @@ -189,7 +189,7 @@
</div>
<div class="left">
<span class="iconfont rgbf">&#xe602;</span>
<a href="/service/client" target="_blank">
<a href="http://chat8.live800.com/live800/chatClient/chatbox.jsp?companyID=620092&amp;configID=149091&amp;jid=8732423409" target="_blank">
<span class="red">便捷</span>
<span class="rgbf">在线客服</span>
</a>
... ...
{
"name": "yohobuy-node",
"version": "5.2.12",
"version": "5.2.14",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ... @@ -36,6 +36,7 @@
"body-parser": "^1.15.0",
"captchapng": "0.0.1",
"cheerio": "^0.22.0",
"client-sessions": "^0.7.0",
"compression": "^1.6.2",
"connect-multiparty": "^2.0.0",
"cookie-parser": "^1.4.3",
... ... @@ -58,7 +59,7 @@
"request-promise": "^3.0.0",
"serve-favicon": "^2.3.0",
"uuid": "^2.0.2",
"yoho-node-lib": "0.2.0",
"yoho-node-lib": "0.2.2",
"yoho-zookeeper": "^1.0.4"
},
"devDependencies": {
... ...
... ... @@ -102,15 +102,11 @@ alertConfig = {
},
failed: {
content: '领取失败',
subContents: ['请刷新重试,', '多次无效请联系客服'],
className: 'subcontent-dialog',
btns: [{
id: 1,
name: '刷新',
btnClass: ['btn-close'],
cb: function() {
window.location.reload();
}
name: '关闭',
btnClass: ['btn-close']
}]
}
};
... ... @@ -129,7 +125,9 @@ makeAlert = {
300: function() {
couponAlert(alertConfig.paramerror);
},
500: function() {
500: function(msg) {
msg = msg || '';
alertConfig.failed.subContents = [msg];
couponAlert(alertConfig.failed);
}
};
... ... @@ -150,10 +148,10 @@ function requestCoupon(id) {
}
// 如果返回的数据里有url,则执行redirect里的方法
res.url && res.url.length > 0 && redirect[code] && redirect[code](res.url + '?' + location.href.split('?')[1]);
res.url && res.url.length > 0 && redirect[code] && redirect[code](res.url + '?' + location.href.split('?')[1]); // eslint-disable-line
// 如果能找到对应code则执行相应方法,如果没有的对应code则执行error提示
makeAlert[code] ? makeAlert[code]() : makeAlert['500']();
makeAlert[code] ? makeAlert[code](res.message) : makeAlert['500'](res.message);
},
error: function() {
var Alert = require('../common/dialog').Alert;
... ... @@ -167,7 +165,8 @@ function getCouponStatus() {
var hash,
data = {},
search = window.location.search,
hashes = search ? decodeURIComponent(search).slice(1).split('&') : [];
hashes = search ? decodeURIComponent(search).slice(1).split('&') : [],
i;
for (i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
... ... @@ -183,9 +182,9 @@ function getCouponStatus() {
url: '/coupon/couponstatus',
data: data,
success: function(res) {
if (res.code === 200) {
var cates = res.categories || [];
var cates = res.categories || [];
if (res.code === 200) {
cates.forEach(function(obj) {
var e = document.getElementById(obj.id) || {};
var child = e.children;
... ... @@ -196,12 +195,13 @@ function getCouponStatus() {
e.classList.remove('enable');
for (var i = 0; i < child.length; i++) {
for (i = 0; i < child.length; i++) {
if (child[i].className === 'normal') {
child[i].classList.add('hidden');
}
if ((obj.got && child[i].className.indexOf('got') > -1) || (obj.empty && child[i].className.indexOf('empty') > -1)) {
if ((obj.got && child[i].className.indexOf('got') > -1) ||
(obj.empty && child[i].className.indexOf('empty') > -1)) {
child[i].classList.remove('hidden');
}
}
... ...
... ... @@ -62,15 +62,11 @@ var couponPickConfig = {
},
failed: {
content: '<i class="iconfont">&#xe61f;</i>领取失败',
subContents: ['请刷新重试,', '多次无效请联系客服'],
className: 'top-coupon-dialog',
btns: [{
id: 1,
name: '刷新',
btnClass: ['btn-close'],
cb: function() {
window.location.reload();
}
name: '关闭',
btnClass: ['btn-close']
}]
},
over: {
... ... @@ -210,6 +206,7 @@ function pickCoupon(info) {
opt = couponPickConfig.got;
break;
default:
couponPickConfig.failed.subContents = data.message ? [data.message] : [''];
opt = couponPickConfig.failed;
break;
}
... ...
... ... @@ -291,18 +291,12 @@ alertConfig = {
},
failed: {
content: '领取失败',
subContents: ['请刷新重试,', '多次无效请联系客服'],
className: 'subcontent-dialog',
btns: [
{
id: 1,
name: '刷新',
btnClass: ['btn-close'],
cb: function() {
window.location.reload();
}
}
]
btns: [{
id: 1,
name: '关闭',
btnClass: ['btn-close']
}]
}
};
... ... @@ -317,7 +311,9 @@ makeAlert = {
315: function() {
couponAlert(alertConfig.expired);
},
400: function() {
400: function(msg) {
msg = msg || '';
alertConfig.failed.subContents = [msg];
couponAlert(alertConfig.failed);
},
403: function() {
... ... @@ -341,7 +337,7 @@ function requestCoupon(id) {
redirect[code](res.url + '?' + location.href.split('?')[1]);
// 如果能找到对应code则执行相应方法,如果没有的对应code则执行error提示
makeAlert[code] ? makeAlert[code]() : makeAlert['400']();
makeAlert[code] ? makeAlert[code](res.message) : makeAlert['400'](res.message);
},
error: function() {
... ...
... ... @@ -1095,6 +1095,8 @@
color: #999;
line-height: 16px;
margin-left: -10px;
overflow: hidden;
text-overflow: ellipsis;
> * {
float:none;
... ...