Authored by lijing

秒杀

... ... @@ -112,38 +112,7 @@ const getProductList = (req, res, next) => {
});
};
/**
* 详情页
*/
const detail = (req, res, next) => {
let headerData = headerModel.setNav({
navTitle: '商品详情'
});
let responseData = {
pageHeader: headerData,
module: 'product',
page: 'detail',
title: '商品详情 | Yoho!Buy有货 | 潮流购物逛不停',
//pageFooter: true
};
let params = {
uid: req.query.uid || 11084019,
productSkn: req.query.product_skn || 51178553,
productId: req.query.product_id || 321819
}
return seckillModel.queryDetail(params).then((result) => {
console.log(result.data);
res.render('detail/detail', Object.assign(responseData, result));
});
};
module.exports = {
index,
detail,
getProductList
};
... ...
... ... @@ -972,6 +972,55 @@ const _getCommonConsult = () => {
});
};
/**
* 获取秒杀列表
*/
const _getSeckillData = (productSkn) => {
let params = {
method: 'app.seckill.data',
product_skn: productSkn
};
return api.get('', params, {
code: 200
}).then(result => {
let data = {};
if (result.data) {
data = result.data;
}
data = {
'productSkn': 512581470,
'activityId': 4,
'startTime': 1474192655,
'endTime': 1478758971,
'formatSecKillPrice': '¥50.00',
'secKillPrice': 50,
'status': 1,
'secKillSku': [
{
'activityId': 4,
'id': 1,
'productSkn': 512581470,
'productSku': 1384138,
'storageNum': 10
},
{
'activityId': 4,
'id': 2,
'productSkn': 512581470,
'productSku': 1384140,
'storageNum': 5
}
]
};
return data;
});
};
let getProductData = (data) => {
let finalResult;
let params = {
... ... @@ -1012,7 +1061,8 @@ let getProductData = (data) => {
productId: result.productId
}),
_getCommonConsult(),
comment.getConsults(result.productId, 1, 2)
comment.getConsults(result.productId, 1, 2),
_getSeckillData(result.productSkn)
]).then((info) => {
result.promotionBoList = info[1];
finalResult = _detailDataPkg(result, data.uid, data.vipLevel, data.ua);
... ... @@ -1021,6 +1071,12 @@ let getProductData = (data) => {
Object.assign(finalResult.feedbacks, info[2]);
Object.assign(finalResult, {// 判断秒杀假数据
is_secKil: {
secKillTime: 5600
}
});
/* 如果有咨询,显示咨询,否则显示常见问题 */
if (info[4].total) {
finalResult.feedbacks.consultsNum = parseInt(info[4].total, 10);
... ... @@ -1037,6 +1093,7 @@ let getProductData = (data) => {
consults: _.take(info[3], 2)
});
}
return finalResult;
});
... ...
... ... @@ -34,22 +34,7 @@ const queryProductList = (activityId) => {
});
};
/**
* 详情页
*/
const queryDetail = (params) => {
return api.get('', {
method: 'app.product.data',
uid: params.uid,
product_skn: params.productSkn,
product_id: params.productId
}, {
cache: true
});
};
module.exports = {
queryActivity,
queryProductList,
queryDetail
queryProductList
};
... ...
... ... @@ -61,7 +61,7 @@ router.get('/recommend-for-you/userCenter', recommendForYou.userCenter);
router.get('/recommend-for-you/cart', recommendForYou.cart);
router.get('/seckill', seckill.index); // 秒杀列表页
router.get('/seckill/detail', seckill.detail); // 秒杀详情页
router.get(/\/seckill\/detail\/pro_([\d]+)_([\d]+)\/(.*)/, detail.getUser, detail.index); // 秒杀详情页
router.get(/\/seckill\/detail\/show_([\d]+)/, detail.getUser, detail.indexSkn); // 秒杀详情页 SKN 进入
router.get('/seckill/get-product-list', seckill.getProductList); // 秒杀列表根据活动id获取商品列表
module.exports = router;
... ...
... ... @@ -63,6 +63,16 @@
<h1 >{{periodOfMarket}}</h1>
</div>
{{/if}}
{{# if is_secKil}}
<div class="seckill-time">
<span>距结束 </span>
<span>12:00:00</span>
</div>
<div class="seckill-time">
<span class="seckill-time-pic">秒杀预告</span>
<span>8月27日 12:00</span>
</div>
{{/if}}
</div>
{{#if studentPrice}}
... ... @@ -158,7 +168,17 @@
<div id="productDesc"> </div>
{{> detail/recommend-for-you}}
{{> cart/chose-panel}}
{{# is_secKil}}
<div class="seckill-count">
<div class="seckill-count-bg"></div>
<div class="seckill-count-num">距开抢
<i class="tick hour">00</i>:
<i class="tick minute">00</i>:
<i class="tick second">00</i>
</div>
<input type="hidden" class="secKill-date" value="{{secKillTime}}">
</div>
{{/is_secKil}}
{{#cartInfo}}
<div class="cart-bar">
<a href="{{cartUrl}}" class="num-incart iconfont"><span class="num-tag hide"></span>&#xe62c;</a>
... ...
... ... @@ -23,6 +23,8 @@ var dialog = require('../plugin/dialog');
require('../common');
require('./tick');
// add extra marign-bottom for footer to show the yoho copyright
function showFooter() {
var $cartBar = $('.cart-bar');
... ...
/**
* [秒抢页面js]
* author: 陈峰<feng.chen@yoho.cn>
* date: 2016/09/08
*/
var $ = require('yoho-jquery'),
IScroll = require('yoho-iscroll'),
tip = require('../plugin/tip'),
seckillObj = {};
require('../common');
var offsetTime = $('.seckill-count').find('.secKill-date').val();
seckillObj = {
el: {
// doms
$navUl: $('.nav-ul'),
$navList: $('.nav-list'),
// 变量
times: $('.nav-ul>li').length,
startX: 0,
timeWidth: 0,
focusTimeWidth: 0,
iScroll: null,
currentTick: null
},
startTick: function(elem, offsetTime) {
var that = this,
$el = this.el,
hour = parseInt(offsetTime / (60 * 60), 10),
minute = parseInt(offsetTime % (60 * 60) / 60, 10),
second = offsetTime % 60;
if (offsetTime) {
$(elem).find('.tick.hour').text(hour < 0 ? '00' : (hour < 10 ? ('0' + hour) : hour));
$(elem).find('.tick.minute').text(minute < 0 ? '00' : (minute < 10 ? ('0' + minute) : minute));
$(elem).find('.tick.second').text(second < 0 ? '00' : (second < 10 ? ('0' + second) : second));
if (offsetTime <= 0) { // 结束倒计时刷新状态
that.refreshList(elem);
} else {
$el.currentTick = setTimeout(function() {
that.startTick(elem, --offsetTime);
}, 1000);
}
}
}
};
seckillObj.startTick($('.seckill-count-num'), offsetTime);
... ...
... ... @@ -371,6 +371,26 @@ $basicBtnC: #eb0313;
}
}
.seckill-time {
float: right;
color: #d0021b;
font-size: 24px;
span {
display: inline-block;
line-height: 88px;
}
.seckill-time-pic {
background-color: #d0021b;
color: #fff;
line-height: 35px;
font-size: 18px;
padding: 0 10px;
border-radius: 5px;
}
}
.vip-level {
box-sizing: box-border;
padding-right: 28px;
... ... @@ -711,7 +731,41 @@ $basicBtnC: #eb0313;
}
}
}
/*
秒杀倒计时栏
*/
.seckill-count {
position: relative;
position: fixed;
bottom: 120px;
left: 50%;
margin-left: -320px;
z-index: 2;
box-sizing: border-box;
width: 640px;
height: 70px;
text-align: left;
.seckill-count-bg {
background-color: #000;
opacity: 0.7;
width: 640px;
height: 70px;
}
.seckill-count-num {
position: absolute;
top: 0;
left: 0;
padding: 0 30px;
color: white;
width: 640px;
height: 70px;
line-height: 70px;
box-sizing: border-box;
font-size: 28px;
}
}
/*
底部固定栏
*/
... ...