|
|
// 调用秒杀js
|
|
|
$(window).on('seckill', function() {
|
|
|
require('./tick');
|
|
|
$(window).on('seckill', function(event, detailData) {
|
|
|
|
|
|
/**
|
|
|
* [秒抢页面js]
|
|
|
* author: 李靖<jing.li@yoho.cn>
|
|
|
* date: 2016/09/08
|
|
|
*/
|
|
|
|
|
|
var $ = require('yoho-jquery'),
|
|
|
tip = require('../plugin/tip');
|
|
|
|
|
|
var seckillObj = {};
|
|
|
|
|
|
var offsetTime = 0;
|
|
|
|
|
|
var nowTime = 0;
|
|
|
|
|
|
var startTime = 0;
|
|
|
|
|
|
var endTime = 0,
|
|
|
diffTime = 0; // 误差时间
|
|
|
|
|
|
var dateText = 0,
|
|
|
newDate = 0,
|
|
|
newMonth = 0,
|
|
|
newDay = 0,
|
|
|
newHour = 0,
|
|
|
newMinus = 0;
|
|
|
|
|
|
var skuFlag,
|
|
|
hideNum,
|
|
|
hideIndex;
|
|
|
|
|
|
var oneIndex = 0,
|
|
|
twoIndex = 0,
|
|
|
secKillPrice = 0;
|
|
|
|
|
|
require('../common');
|
|
|
|
|
|
seckillObj = {
|
|
|
el: {
|
|
|
iScroll: null,
|
|
|
currentTick: null
|
|
|
},
|
|
|
|
|
|
startTick: function(status, offsetTime) {
|
|
|
var that = this,
|
|
|
$el = this.el,
|
|
|
day = parseInt(offsetTime / (60 * 60 * 24), 10),
|
|
|
hour = parseInt(offsetTime % (60 * 60 * 24) / (60 * 60), 10),
|
|
|
minute = parseInt(offsetTime % (60 * 60) / 60, 10),
|
|
|
second = offsetTime % 60;
|
|
|
|
|
|
var $elem = status === 0 ? $('.seckill-count-num') : $('.end-time');
|
|
|
|
|
|
if (offsetTime >= -1) {
|
|
|
if (day <= 0) {
|
|
|
$('.day-c').addClass('hide');
|
|
|
}
|
|
|
$elem.find('.tick.day').text(day < 0 ? '00' : (day < 10 ? ('0' + day) : day));
|
|
|
$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 <= -1) { // 结束倒计时刷新状态
|
|
|
window.location.reload();
|
|
|
} else {
|
|
|
$el.currentTick = setTimeout(function() {
|
|
|
that.startTick(status, --offsetTime);
|
|
|
}, 1000);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
};
|
|
|
|
|
|
$(
|
|
|
function() {
|
|
|
$('#goodsDiscount').hide(); // 隐藏折扣楼层
|
|
|
$('.cart-bar').hide();
|
|
|
$('.current-price').hide();
|
|
|
var ajaxUrl = '/product/seckillDetail/seckillData/' + $('#productSkn').val();
|
|
|
var timestamp = Date.parse(new Date());
|
|
|
|
|
|
$.ajax({
|
|
|
type: 'GET',
|
|
|
url: ajaxUrl + '?tamp=' + timestamp,
|
|
|
success: function(data) {
|
|
|
|
|
|
// 秒杀是否结束
|
|
|
if (data == '' || data.status === 0 || data.status === 3) {
|
|
|
window.location.replace('/product/' + $('#productSkn').val() + '.html'); // 商品url改版
|
|
|
|
|
|
// $('.sold-out').hide();
|
|
|
// $('.cart-bar a:first').append('<a href="javascript:;" class="sold-out">已售罄</a>');
|
|
|
// $('.addto-cart').hide();
|
|
|
// $('.cart-bar').show();
|
|
|
// $('.current-price').show();
|
|
|
} else {
|
|
|
|
|
|
// 秒杀开始前
|
|
|
if (data.status === 1) {
|
|
|
$('.cart-bar').before(
|
|
|
'<div class="seckill-count">' +
|
|
|
'<div class="seckill-count-bg"></div>' +
|
|
|
'<div class="seckill-count-num">距秒杀开始:' +
|
|
|
'<span class="day-c"><i class="tick day">00</i>天</span>' +
|
|
|
'<i class="tick hour">00</i>时' +
|
|
|
'<i class="tick minute">00</i>分' +
|
|
|
'<i class="tick second">00</i>秒' +
|
|
|
'</div>' +
|
|
|
'</div>'
|
|
|
);
|
|
|
$('.current-price').text('¥' + data.secKillPrice).show();
|
|
|
$('.price-date').eq(0).append(
|
|
|
'<div class="seckill-time notStart">' +
|
|
|
'<span class="seckill-time-pic">秒杀预告</span>' +
|
|
|
'<span class="seckill-time-c">月日</span>' +
|
|
|
'</div>'
|
|
|
);
|
|
|
$('.sold-out').hide();
|
|
|
$('.cart-bar a:first').after('<a href="javascript:;" class="sold-out">即将开抢</a>');
|
|
|
$('.addto-cart').hide();
|
|
|
$('.cart-bar').show();
|
|
|
$('.current-price').show();
|
|
|
timeInit(data);
|
|
|
}
|
|
|
|
|
|
// 秒杀进行中
|
|
|
if (data.status === 2) {
|
|
|
$('#addtoCart').off('touchstart');
|
|
|
var chosePanel = require('common/chose-panel-new');
|
|
|
var seckillData = data.secKillSku;
|
|
|
|
|
|
detailData.cartInfo.skus.forEach(
|
|
|
function (val) {
|
|
|
seckillData.forEach(
|
|
|
function(item) {
|
|
|
if (val.skuId === item.productSku) {
|
|
|
val.storage = item.storageNum;
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
}
|
|
|
);
|
|
|
|
|
|
$('#addtoCart').on('touchstart', function() {
|
|
|
$('.cart-bar').hide();
|
|
|
chosePanel.show({
|
|
|
data: detailData,
|
|
|
disableNum: true
|
|
|
}).then(result => {
|
|
|
$('.cart-bar').show();
|
|
|
if (result && result.sku) {
|
|
|
window.location.href = '/cart/index/seckill?skn=' + $('#productSkn').val() + '&sku=' + result.sku.skuId;
|
|
|
}
|
|
|
}, () => {
|
|
|
$('.cart-bar').show();
|
|
|
});
|
|
|
$('.text-info').append($('.seckill-time').clone());
|
|
|
$('.chose-items .num').find('.clearfix').append(
|
|
|
'<span class="limit-num-text">限购1件</span>'
|
|
|
);
|
|
|
$('.sale-price').text('¥' + secKillPrice).show();
|
|
|
return false;
|
|
|
});
|
|
|
|
|
|
// $('.chose-panel .size-list').find('li[data-skuid != \'\']').each(
|
|
|
// function() {
|
|
|
// skuFlag = 0;
|
|
|
// for (var i = 0; i < data.secKillSku.length; i++) {
|
|
|
// if (data.secKillSku[i].productSku === Number($(this).attr('data-skuid'))) {
|
|
|
// skuFlag++;
|
|
|
|
|
|
// // 如果秒杀库存为0
|
|
|
// if (data.secKillSku[i].storageNum === 0) {
|
|
|
// $(this).addClass('zero-stock');
|
|
|
// oneIndex = $(this).index() + 1;
|
|
|
// twoIndex = $(this).parent('ul').index() - 2;
|
|
|
// $('.chose-panel .color-list ul:eq(' + oneIndex + ') li:eq(' + twoIndex + ')').addClass('zero-stock');
|
|
|
// }
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// // alert("没有匹配");
|
|
|
// }
|
|
|
// }
|
|
|
// if (skuFlag === 0) {
|
|
|
// $(this).addClass('zero-stock').attr('data-num', '0').addClass('hide');
|
|
|
// oneIndex = $(this).index() + 1;
|
|
|
// twoIndex = $(this).parent('ul').index() - 2;
|
|
|
|
|
|
// $('.chose-panel .color-list ul:eq(' + oneIndex + ') li:eq(' + twoIndex + ')').addClass('zero-stock').addClass('hide');
|
|
|
// }
|
|
|
// }
|
|
|
// );
|
|
|
// seckHide(); // 非秒杀库存置灰
|
|
|
|
|
|
// 插入倒计时
|
|
|
addTimeout($('.price-date').eq(0));
|
|
|
secKillPrice = toDecimal2(data.secKillPrice);
|
|
|
$('.current-price').text('¥' + secKillPrice).show();
|
|
|
$('.left-num').hide();
|
|
|
$('.btn-plus').removeClass('btn-plus');
|
|
|
$('.addto-cart').text('立即购买');
|
|
|
$('#chose-btn-sure').text('立即购买').addClass('isSecKill');
|
|
|
$('.cart-bar').show();
|
|
|
var seckillNum = 0;
|
|
|
|
|
|
for (var i = 0; i < data.secKillSku.length; i++) {
|
|
|
seckillNum = seckillNum + data.secKillSku[i].storageNum;
|
|
|
}
|
|
|
if (seckillNum === 0) {
|
|
|
$('.sold-out').hide();
|
|
|
$('.cart-bar a:first').append('<a href="javascript:;" class="sold-out">已售罄</a>');
|
|
|
$('.addto-cart').hide();
|
|
|
}
|
|
|
$('.current-price').show();
|
|
|
timeInit(data);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
},
|
|
|
error: function() {
|
|
|
tip.show('网络异常~');
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
);
|
|
|
|
|
|
// function seckHide() {
|
|
|
// $('.chose-panel .size-list ul').each(
|
|
|
// function() {
|
|
|
// hideNum = 0;
|
|
|
// $(this).find('li').each(
|
|
|
// function() {
|
|
|
// if ($(this).hasClass('hide')) {
|
|
|
// oneIndex = $(this).index() + 1;
|
|
|
// twoIndex = $(this).parent('ul').index() - 2;
|
|
|
// $('.color-list ul:eq(' + oneIndex + ') li:eq(' + twoIndex + ')').hide();
|
|
|
// } else {
|
|
|
// hideNum++;
|
|
|
// }
|
|
|
// }
|
|
|
// );
|
|
|
// if (hideNum === 0) {
|
|
|
// hideIndex = $(this).index() - 2;
|
|
|
// $('.color-list ul:first li:eq(' + hideIndex + ')').hide();
|
|
|
// }
|
|
|
// }
|
|
|
// );
|
|
|
|
|
|
// $('.chose-panel .color-list ul').each(
|
|
|
// function() {
|
|
|
// hideNum = 0;
|
|
|
// $(this).find('li').each(
|
|
|
// function() {
|
|
|
// if ($(this).hasClass('hide')) {
|
|
|
// oneIndex = $(this).index() + 1;
|
|
|
// twoIndex = $(this).parent('ul').index() - 2;
|
|
|
// $('.size-list ul:eq(' + oneIndex + ') li:eq(' + twoIndex + ')').hide();
|
|
|
// } else {
|
|
|
// hideNum++;
|
|
|
// }
|
|
|
// }
|
|
|
// );
|
|
|
// if (hideNum === 0) {
|
|
|
// hideIndex = $(this).index() - 2;
|
|
|
// $('.size-list ul:first li:eq(' + hideIndex + ')').hide();
|
|
|
// }
|
|
|
// }
|
|
|
// );
|
|
|
// }
|
|
|
|
|
|
function addTimeout(obj) {
|
|
|
obj.append(
|
|
|
'<div class="seckill-time seckill-time-border">' +
|
|
|
'<span>距结束 </span>' +
|
|
|
'<span class="end-time">' +
|
|
|
'<i class="tick day hide">00</i>' +
|
|
|
'<i class="tick hour">00</i>:' +
|
|
|
'<i class="tick minute">00</i>:' +
|
|
|
'<i class="tick second">00</i>' +
|
|
|
'</span>' +
|
|
|
'</div>'
|
|
|
);
|
|
|
}
|
|
|
|
|
|
// 强制保留2位小数点
|
|
|
function toDecimal2(num) {
|
|
|
var f = parseFloat(num);
|
|
|
|
|
|
if (isNaN(f)) {
|
|
|
return false;
|
|
|
}
|
|
|
var f = Math.round(num * 100) / 100;
|
|
|
var s = f.toString();
|
|
|
var rs = s.indexOf('.');
|
|
|
|
|
|
if (rs < 0) {
|
|
|
rs = s.length;
|
|
|
s += '.';
|
|
|
}
|
|
|
while (s.length <= rs + 2) {
|
|
|
s += '0';
|
|
|
}
|
|
|
return s;
|
|
|
}
|
|
|
|
|
|
function timeInit(data) {
|
|
|
var status = 0;
|
|
|
|
|
|
startTime = data.startTime;
|
|
|
endTime = data.endTime;
|
|
|
diffTime = data.currentTime;
|
|
|
nowTime = diffTime;
|
|
|
if (startTime > nowTime) {
|
|
|
offsetTime = startTime - nowTime;
|
|
|
} else if (nowTime > startTime && nowTime < endTime) {
|
|
|
offsetTime = endTime - nowTime;
|
|
|
status = 1;
|
|
|
}
|
|
|
|
|
|
dateText = Number(data.startTime * 1000);
|
|
|
newDate = new Date(dateText);
|
|
|
newMonth = newDate.getMonth() + 1;
|
|
|
newDay = newDate.getDate();
|
|
|
newHour = newDate.getHours();
|
|
|
newMinus = newDate.getMinutes();
|
|
|
if (newMinus === 0) {
|
|
|
newMinus = '00';
|
|
|
}
|
|
|
$('.notStart').find('.seckill-time-c').text(newMonth + '月' + newDay + '日' + newHour + ':' + newMinus);
|
|
|
seckillObj.startTick(status, offsetTime);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 调用新商品详情页js
|
...
|
...
|
|