seckill-detail.page.js 13.7 KB
// 调用秒杀js
$(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>距结束&nbsp</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
require('./new-detail');