Authored by htoooth

Merge branch 'feature/detail-coupon' into release/5.2

... ... @@ -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="图形验证码"
... ...
/**
* Created by TaoHuang on 2016/11/3.
*/
'use strict';
module.exports = (url) => {
return `<div class="video-wrap">
<a href="javascript:;" class="video-close-btn"></a>
<object id="video_0" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param value="http://rescdn.yohoboys.com/res/new/boys/swf/util/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg"
name="movie">
<param value="high" name="quality">
<param value="#ffffff" name="bgcolor">
<param name="allowFullScreen" value="true">
<param value="always" name="allowScriptAccess">
<param value="transparent" name="wmode">
<embed class="video-player" id="flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" loop="false"
play="true" bgcolor="#ffffff" quality="high" wmode="transparent" name="vMessage"
src="http://rescdn.yohoboys.com/res/new/boys/swf/util/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=${url}/?vframe/jpg/offset/0">
</object>
</div> `;
};
... ...
... ... @@ -10,10 +10,13 @@ const Promise = require('bluebird');
const co = Promise.coroutine;
const _ = require('lodash');
const Fn = require('lodash/fp');
const cheerio = require('cheerio');
const url = require('url');
const helpers = global.yoho.helpers;
const crypto = global.yoho.crypto;
const videoPlayerTpl = require('../helper/video-player-tpl');
const productAPI = require('./detail-product-api');
const detailHelper = require('./detail-helper');
... ... @@ -822,8 +825,7 @@ const _getDetailDataBySizeInfo = (sizeInfo) => {
'<img src=': '<img class="lazy" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///93d3f' +
'///yH5BAEAAAMALAAAAAABAAEAAAICVAEAOw==" data-original=',
'<img border="0" src=': '<img border="0" class="lazy" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP' +
'///93d3f///yH5BAEAAAMALAAAAAABAAEAAAICVAEAOw==" data-original=',
'.jpg': '.jpg?imageView2/0/q/90'
'///93d3f///yH5BAEAAAMALAAAAAABAAEAAAICVAEAOw==" data-original='
};
let intro = _.get(sizeInfo, 'productIntroBo.productIntro', '');
... ... @@ -833,7 +835,18 @@ const _getDetailDataBySizeInfo = (sizeInfo) => {
intro = _.replace(intro, new RegExp(key, 'gm'), value);
});
details += intro;
// 视频链接处理
let $ = cheerio.load(intro);
$('.video-placeholder').each((idx, ele) => {
let $this = $(ele);
let videoSrc = $this.find('source').attr('src');
$this.empty().append(videoPlayerTpl(videoSrc));
});
details += $.html();
return details;
};
... ... @@ -1302,7 +1315,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
});
... ...
... ... @@ -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;
... ...
... ... @@ -18,10 +18,10 @@ module.exports = {
domains: {
favApi: 'http://192.168.102.31:8092/brower',
// api: 'http://api-test3.yohops.com:9999/',
// service: 'http://service-test3.yohops.com:9999/',
api: 'http://api.yoho.cn/',
service: 'http://service.yoho.cn/',
api: 'http://api-test1.yohops.com:9999/',
service: 'http://service-test1.yohops.com:9999/',
//api: 'http://api.yoho.cn/',
//service: 'http://service.yoho.cn/',
search: 'http://192.168.102.216:8080/yohosearch/'
},
subDomains: {
... ... @@ -58,12 +58,13 @@ module.exports = {
name: 'error',
level: 'error',
filename: 'logs/error.log',
handleExceptions: true
handleExceptions: true,
maxFiles: 7
},
udp: { // send by udp
measurement: 'yohobuy_node_log',
level: 'debug', // logger level
host: 'influxdblog.yohoops.org', // influxdb host
host: 'influxdblog.web.yohoops.org', // influxdb host
port: '4444' // influxdb port
},
console: {
... ... @@ -128,7 +129,7 @@ if (isProduction) {
open: false,
url: 'http://123.206.2.55/strategy'
},
zookeeperServer: '10.66.1.97:2181'
zookeeperServer: 'zookeeper.web.yohoops.org:2181'
});
} else if (isTest) {
Object.assign(module.exports, {
... ...
{
"name": "yohobuy-node",
"version": "5.1.3",
"version": "5.1.5",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ... @@ -34,6 +34,7 @@
"bluebird": "^3.4.0",
"body-parser": "^1.15.0",
"captchapng": "0.0.1",
"cheerio": "^0.22.0",
"compression": "^1.6.2",
"cookie-parser": "^1.4.3",
"cookie-session": "^1.2.0",
... ... @@ -53,8 +54,8 @@
"request-ip": "^1.2.2",
"serve-favicon": "^2.3.0",
"uuid": "^2.0.2",
"yoho-node-lib": "0.1.29",
"yoho-zookeeper": "^1.0.3"
"yoho-node-lib": "0.1.30",
"yoho-zookeeper": "^1.0.4"
},
"devDependencies": {
"autoprefixer": "^6.3.6",
... ...
... ... @@ -3,11 +3,11 @@
{
"name": "yohobuy-node",
"script": "app.js",
"instances": "max",
"instances": "6",
"exec_mode": "cluster",
"env": {
"PORT": 6002
}
}
]
}
\ No newline at end of file
}
... ...
... ... @@ -162,6 +162,7 @@ function clearSelectUl($a, code) {
$input.val($a.html());
}
$ul.empty();
$ul.addClass('hide');
$wrap.removeClass('active');
}
... ... @@ -227,6 +228,7 @@ function loadSelectLi(jsonData, param) {
if (data.code === 200) {
fnJson[jsonData.keyData] = data.data;
jsonData.$ul.html(provFn(fnJson));
jsonData.$ul.removeClass('hide');
} else if (data.code === 403) {
location.href = data.data.url;
}
... ... @@ -426,6 +428,7 @@ $stuYear.on('click', function() {
for (i = year - 7; i <= year; i++) {
yearArr.push(i);
}
$ul.removeClass('hide');
$ul.html(provFn({
yearData: yearArr
}));
... ...
... ... @@ -605,8 +605,19 @@
.other-infos {
padding-bottom: 30px;
.video-player {
width: 750px;
height: 420px;
}
}
.video-wrap {
}
.info-block {
margin-top: 30px;
color: #999;
... ...
... ... @@ -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 || '';
};
/**
... ... @@ -170,22 +170,27 @@ exports.processProductList = (list, options) => {
// 判别默认的商品是否将默认的图片URL赋值到skn
let flag = false;
// 如果设置了默认图片,就取默认的图片
_.forEach(product.goods_list, (goods) => {
if (flag) {
return;
}
if (goods.is_default === 'Y') {
product.default_images = procProductImg(goods);
flag = true;
}
_.remove(product.goods_list, function(n) {
return !+n.status;
});
// 如果还未赋值,则取第一个skc产品的默认图片
if (!flag) {
product.default_images = procProductImg(product.goods_list[0]);
}
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]);
}
}
product = Object.assign(product, {
id: product.product_skn,
thumb: product.default_images
... ...