Authored by 姜枫

Merge branch 'master' of http://git.yoho.cn/fe/yohobuy-node

... ... @@ -24,9 +24,9 @@ router.get('/logout.html', login.local.logout);
// 本地登录
// 短信验证码
router.post('/passport/login/sms/send', login.local.sms.send); // 发短信验证码
router.post('/passport/login/sms/auth', login.local.sms.auth); // 验证短信验证码
router.post('/passport/login/sms/checkuser', login.local.sms.checkUser); // 短信检查用户是否注册
// router.post('/passport/login/sms/send', login.local.sms.send); // 发短信验证码
// router.post('/passport/login/sms/auth', login.local.sms.auth); // 验证短信验证码
// router.post('/passport/login/sms/checkuser', login.local.sms.checkUser); // 短信检查用户是否注册
router.post('/passport/login/password/checkuser', back.fakeGetUserInfoAPI);// 假的,密码登录检查用户是否注册
// 二维码登录
... ...
... ... @@ -28,10 +28,12 @@
</li>
<li class="relative">
<li class="relative hide">
<div class="switch">
<div class="left selected" data-type="PasswordLogin">普通登录</div>
{{#if smsLogin}}
<div class="right" data-type="SMSLogin">手机验证码登录</div>
{{/if}}
</div>
</li>
... ... @@ -55,7 +57,7 @@
</span>
</li>
{{#if smsLogin}}
<li class="relative clearfix sms-login hide">
<input id="account2" class="account input va" name="account2" value="{{bindMobile}}"
type="text"
... ... @@ -76,6 +78,7 @@
<em></em>
</span>
</li>
{{/if}}
<li class="clearfix captcha-wrap hide">
<input id="captcha" class="input va captcha" type="text" name="captcha" placeholder="图形验证码"
... ...
... ... @@ -1274,7 +1274,7 @@ const _detailDataPkg = (origin, uid, vipLevel, cookies) => {
// 单品店显示新版的店铺banner
let basisData = yield shopService.basisTemplateAsync(domainBrand.shopId);
bandInfo.bgImg = basisData.shopTopBanner.banner || bandInfo.bgImg;
bandInfo.bgImg = basisData.shopTopBanner_base.detailSrc || bandInfo.bgImg;
}
}
}
... ...
... ... @@ -679,7 +679,7 @@ const getShopData = (shopId, channel, params, shopInfo) => {
trendList.push({
href: helpers.urlFormat(`/${articleList[i].id}.html`, '', 'guang'),
src: helpers.getForceSourceUrl(articleList[i].src) +
'?imageView/1/w/{width}/h/{height}',
'?imageView2/1/w/{width}/h/{height}',
mainTitle: articleList[i].title,
Subtitle: articleList[i].intro
});
... ...
... ... @@ -3,6 +3,7 @@
*/
'use strict';
const _ = require('lodash');
const Fn = require('lodash/fp');
const md5 = require('md5');
const api = global.yoho.API;
... ... @@ -26,16 +27,15 @@ const isFavoriteBrandUrl = '/shops/service/v1/favorite/getUidBrandFav';
// 根据品牌查询相关文章
const relateArticleUrl = 'guang/service/v2/article/getArticleByBrand';
const getSearchCackeKey = params => {
let ks = [];
// 缓存生效时间
const CACHE_TIME_S = 60;
_.forEach(params, (val, key) => {
if (params.hasOwnProperty(key) && !_.includes(['page', 'limit', 'need_filter', 'order'], key)) {
ks.push(val);
}
});
const getSearchCacheKey = params => {
let removeUnusedKey = Fn.omit(['page', 'limit', 'need_filter', 'order']);
let sortByKey = Fn.pipe(Fn.toPairs, Fn.sortBy(0), Fn.flatten);
let genKey = Fn.pipe(Fn.cloneDeep, removeUnusedKey, sortByKey, Fn.join('_'));
return 'search_custom_' + md5(ks.join('_'));
return 'search_custom_' + md5(genKey(params));
};
const saveCache = (key, kv, cacheTime) => {
... ... @@ -79,7 +79,7 @@ const getProductList = (params, from) => {
if (!config.useCache) {
return getProductListOrig(finalParams);
} else {
let cKey = getSearchCackeKey(finalParams);
let cKey = getSearchCacheKey(finalParams);
return cache.get(cKey)
.catch(err => logger.debug(`product query save cache data fail:${err.toString()}`))
... ... @@ -108,7 +108,7 @@ const getProductList = (params, from) => {
saveCache(cKey, Object.assign({}, {
filter: result.data.filter,
standard: result.data.standard
}), 3600);
}), CACHE_TIME_S);
}
}
... ... @@ -137,7 +137,7 @@ const getSortList = (params) => {
if (!config.useCache) {
return getSortListOrig(finalParams);
} else {
let cKey = getSearchCackeKey(finalParams);
let cKey = getSearchCacheKey(finalParams);
return cache.get(cKey)
.catch(err => logger.debug(`product query save cache data fail:${err.toString()}`))
... ... @@ -157,7 +157,7 @@ const getSortList = (params) => {
} else {
return getSortListOrig(finalParams).then(ret => {
if (ret && ret.code === 200) {
saveCache(cKey, ret, 3600);
saveCache(cKey, ret, CACHE_TIME_S);
}
return ret;
});
... ... @@ -262,7 +262,7 @@ const getBrandShop = (query) => {
Object.assign(finalParams, {keyword: query});
let cKey = getSearchCackeKey(finalParams);
let cKey = getSearchCacheKey(finalParams);
return cache.get(cKey)
.catch(err => logger.debug(`product query save cache data fail:${err.toString()}`))
... ... @@ -283,7 +283,7 @@ const getBrandShop = (query) => {
return api.get('', finalParams).then(ret => {
if (ret && ret.code === 200) {
saveCache(cKey, ret.data, 3600);
saveCache(cKey, ret.data, CACHE_TIME_S);
return ret.data;
}
return null;
... ... @@ -302,7 +302,7 @@ const getShopsByBrandId = bid => {
brand_id: bid
};
let cKey = getSearchCackeKey(finalParams);
let cKey = getSearchCacheKey(finalParams);
return cache.get(cKey)
.catch(err => logger.debug(`product query save cache data fail:${err.toString()}`))
... ... @@ -323,7 +323,7 @@ const getShopsByBrandId = bid => {
return api.get('', finalParams).then(ret => {
if (ret && ret.code === 200) {
saveCache(cKey, ret.data, 3600);
saveCache(cKey, ret.data, CACHE_TIME_S);
return ret.data;
}
return null;
... ... @@ -555,5 +555,5 @@ module.exports = {
getShopList,
getBrands4Filter,
getProductListOrig,
getSearchCackeKey
getSearchCacheKey
};
... ...
... ... @@ -77,15 +77,16 @@ const _signboard = data => {
};
};
const _shopTopBanner_base = _shopTopBanner;
/**
* 基础模板
*/
exports.basisTemplateAsync = shopId => {
return co(function * () {
let data = {signboard: {}, shopTopBanner: {}};
let data = { shopTopBanner_base: {}};
const ResourceHandler = {
shopTopBanner: _shopTopBanner,
signboard: _signboard
shopTopBanner_base: _shopTopBanner_base
};
let shops = yield api.shopsDecoratorListAsync(shopId);
... ... @@ -103,8 +104,7 @@ exports.basisTemplateAsync = shopId => {
let resourceData = ResourceHandler[resourceHandlerName](_getResourceData(shop));
switch (resourceHandlerName) {
case 'shopTopBanner':
case 'signboard':
case 'shopTopBanner_base':
{
data[resourceHandlerName] = resourceData;
break;
... ...
... ... @@ -138,7 +138,7 @@ exports.getStudentsProduct = (params) => {
if (!config.useCache) {
return searchApi.getProductListOrig(finalParams);
} else {
let cKey = searchApi.getSearchCackeKey(finalParams);
let cKey = searchApi.getSearchCacheKey(finalParams);
return cache.get(cKey).catch().then(cdata => {
let hasCache = false;
... ...
... ... @@ -65,7 +65,7 @@ module.exports = {
port: '4444' // influxdb port
},
console: {
level: 'error',
level: 'info',
colorize: 'all',
prettyPrint: true
}
... ...
{
"name": "yohobuy-node",
"version": "5.1.4",
"version": "5.1.5",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ...
... ... @@ -385,7 +385,7 @@
}
img {
width: 100%;
max-width: 100%;
margin-top: 10px;
}
}
... ...
... ... @@ -24,14 +24,14 @@ const itemFromBase = {
*/
const procProductImg = (product, gender, newSort) => {
if (gender === '2,3') {
return product.cover_2 || product.cover_1 || product.images_url || '';
return product.cover_2 || product.images_url || '';
}
if (newSort && gender === '1,2,3') {
return product.images_url || '';
}
return product.cover_1 || product.cover_2 || product.images_url || '';
return product.cover_1 || product.images_url || '';
};
/**
... ... @@ -174,22 +174,23 @@ exports.processProductList = (list, options) => {
return !+n.status;
});
// 如果设置了默认图片,就取默认的图片
_.forEach(product.goods_list, (goods) => {
if (flag) {
return;
}
if (goods.is_default === 'Y') {
product.default_images = procProductImg(goods);
flag = true;
}
});
if (!product.default_images) {
// 如果设置了默认图片,就取默认的图片
_.forEach(product.goods_list, (goods) => {
if (flag) {
return;
}
if (goods.is_default === 'Y') {
product.default_images = procProductImg(goods);
flag = true;
}
});
// 如果还未赋值,则取第一个skc产品的默认图片
if (!flag) {
product.default_images = procProductImg(product.goods_list[0]);
// 如果还未赋值,则取第一个skc产品的默认图片
if (!flag) {
product.default_images = procProductImg(product.goods_list[0]);
}
}
product = Object.assign(product, {
id: product.product_skn,
thumb: product.default_images
... ...