var $cart_info_goods_spec = $('.goods-spec-container'); /** * 获取规格详情 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-14 * @desc description */ function GoodsCartInfoSpecDetail() { // 是否全部选中 var sku_count = $('.goods-spec-content .sku-items').length; var active_count = $('.goods-spec-content .sku-items li.selected').length; if(active_count < sku_count) { return false; } // 获取规格值 var spec = []; $('.goods-spec-content .sku-items li.selected').each(function(k, v) { spec.push({"type": $(this).attr('data-type-value'), "value": $(this).attr('data-value')}) }); // 数量 var stock = $cart_info_goods_spec.find('.number-operate input[type="number"]').val() || 1; // 开启进度条 $.AMUI.progress.start(); // ajax请求 $.ajax({ url: RequestUrlHandle(__goods_spec_detail_url__), type: 'post', dataType: 'json', timeout: 10000, data: {"id": $('.goods-spec-content').attr('data-id'), "spec": spec, "stock": stock}, success: function(res) { $.AMUI.progress.done(); if(res.code == 0) { GoodsCartInfoSpecDetailBackHandle(res.data); } else { Prompt(res.msg); } }, error: function(xhr, type) { $.AMUI.progress.done(); Prompt(HtmlToString(xhr.responseText) || (window['lang_error_text'] || '异常错误'), null, 30); } }); } /** * 获取规格类型 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-14 * @desc description */ function GoodsCartInfoSpecType() { // 是否全部选中 var sku_count = $('.goods-spec-content .sku-items').length; var active_count = $('.goods-spec-content .sku-items li.selected').length; if(active_count <= 0 || active_count >= sku_count) { return false; } // 获取规格值 var spec = []; $('.goods-spec-content .sku-items li.selected').each(function(k, v) { spec.push({"type": $(this).attr('data-type-value'), "value": $(this).attr('data-value')}) }); // 开启进度条 $.AMUI.progress.start(); // ajax请求 $.ajax({ url: RequestUrlHandle(__goods_spec_type_url__), type: 'post', dataType: 'json', timeout: 10000, data: {"id": $('.goods-spec-content').attr('data-id'), "spec": spec}, success: function(res) { $.AMUI.progress.done(); if(res.code == 0) { var spec_count = spec.length; var index = (spec_count > 0) ? spec_count : 0; if(index < sku_count) { $('.goods-spec-content .sku-items').eq(index).find('li').each(function(k, v) { $(this).removeClass('sku-dont-choose'); var value = $(this).attr('data-value').toString(); if(res.data.spec_type.indexOf(value) == -1) { $(this).addClass('sku-items-disabled'); } else { $(this).removeClass('sku-items-disabled'); } }); } } else { Prompt(res.msg); } }, error: function(xhr, type) { $.AMUI.progress.done(); Prompt(HtmlToString(xhr.responseText) || (window['lang_error_text'] || '异常错误'), null, 30); } }); } /** * 数量值改变 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-10-05 * @desc description */ function GoodsNumberChange() { var stock = $cart_info_goods_spec.find('.number-operate input[type="number"]').val() || 1; var spec = []; var sku_count = $('.goods-spec-content .sku-items').length; if(sku_count > 0) { // 未完全选择规格则返回 var spec_count = $('.sku-line.selected').length; if(spec_count < sku_count) { return false; } // 已选规格 $('.goods-spec-content .sku-items li.selected').each(function(k, v) { spec.push({"type": $(this).attr('data-type-value'), "value": $(this).attr('data-value')}) }); } // 开启进度条 $.AMUI.progress.start(); // ajax请求 $.ajax({ url: RequestUrlHandle(__goods_stock_url__), type: 'post', dataType: "json", timeout: 10000, data: { "id": $('.goods-spec-content').attr('data-id'), "stock": stock, "spec": spec }, success: function(res) { $.AMUI.progress.done(); if(res.code == 0) { GoodsCartInfoSpecDetailBackHandle(res.data); } else { Prompt(res.msg); } }, error: function(xhr, type) { $.AMUI.progress.done(); Prompt(HtmlToString(xhr.responseText) || (window['lang_error_text'] || '异常错误'), null, 30); } }); } /** * 商品规格详情返回数据处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-10-05 * @desc description * @param {[object]} data [后端返回数据] */ function GoodsCartInfoSpecDetailBackHandle(data) { // 售价 $cart_info_goods_spec.find('.price').html(__currency_symbol__+data.spec_base.price); // 数量处理 var inventory = parseInt(data.spec_base.inventory); var $input = $cart_info_goods_spec.find('.number-operate input[type="number"]'); var $stock = $cart_info_goods_spec.find('.stock-tips .stock'); var $origina_price = $cart_info_goods_spec.find('.original-price'); if((data.spec_base.inventory_unit || null) != null) { $cart_info_goods_spec.find('.stock-tips .unit').text(data.spec_base.inventory_unit); } // 起购数 var min = parseInt($input.attr('data-original-buy-min-number')); var buy_min_number = parseInt(data.spec_base.buy_min_number); if(buy_min_number > 0) { min = buy_min_number; } $input.attr('min', min); // 限购数 var max = inventory; var buy_max_number = parseInt(data.spec_base.buy_max_number); if(buy_max_number > 0 && buy_max_number < max) { max = buy_max_number; } $input.attr('max', max); $stock.text(inventory); // 原价 if(data.spec_base.original_price > 0) { $origina_price.html(__currency_symbol__+data.spec_base.original_price); $origina_price.parents('.items').show(); } else { $origina_price.parents('.items').hide(); } // 已选数量校验、超出规格数量则以规格数量为准 var stock = parseInt($input.val()); if(min > 0 && stock < min) { stock = min; } if(max > 0 && stock > max) { stock = max; } if(stock > inventory) { stock = inventory; } $input.val(stock); // 起购/限购 if(min > 0) { $stock.attr('data-min-limit', min); } if(max > 0) { $stock.attr('data-max-limit', max); } } /** * 商品基础数据恢复 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-25 * @desc description */ function GoodsCartInfoBaseRestore() { var $input = $cart_info_goods_spec.find('.number-operate input[type="number"]'); var $stock = $cart_info_goods_spec.find('.stock-tips .stock'); var $unit = $cart_info_goods_spec.find('.stock-tips .unit'); var $price = $cart_info_goods_spec.find('.price'); var $original_price = $cart_info_goods_spec.find('.original-price'); $input.attr('min', $input.attr('data-original-buy-min-number')); $input.attr('max', $stock.attr('data-original-max')); $stock.text($stock.attr('data-original-inventory')); $unit.text($unit.attr('data-value')); $stock.attr('data-min-limit', $input.attr('data-original-buy-min-number')); $stock.attr('data-max-limit', $input.attr('data-original-buy-max-number')); $price.html(__currency_symbol__+$price.attr('data-default-price')); if($original_price.length > 0) { $original_price.html(__currency_symbol__+$original_price.attr('data-default-price')); } } /** * 加入购物车校验 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-09-13 * @desc description */ function GoodsCartInfoBuyCartCheck() { // 参数 var $stock = $cart_info_goods_spec.find('.stock-tips .stock'); var $unit = $cart_info_goods_spec.find('.stock-tips .unit'); var stock = parseInt($cart_info_goods_spec.find('.number-operate input').val() || 1); var inventory = parseInt($stock.text()); var min = $stock.attr('data-min-limit') || 1; var max = $stock.attr('data-max-limit') || 0; var unit = $unit.attr('data-value') || ''; if(stock < min) { Prompt((window['lang_goods_stock_min_tips'] || '最低起购数量')+min+unit); return false; } if(max > 0 && stock > max) { Prompt((window['lang_goods_stock_max_tips'] || '最大限购数量')+max+unit); return false; } if(stock > inventory) { Prompt((window['lang_goods_inventory_number_tips'] || '库存数量')+inventory+unit); return false; } // 规格 var spec = []; var sku_count = $('.goods-spec-content .sku-items').length; if(sku_count > 0) { var spec_count = $('.sku-line.selected').length; if(spec_count < sku_count) { $('.goods-spec-content .sku-items').each(function(k, v) { if($(this).find('.sku-line.selected').length == 0) { $(this).addClass('sku-not-active'); } }); Prompt(window['lang_goods_no_choice_spec_tips'] || '请选择规格'); return false; } // 已选规格 spec = GoodsCartInfoSelectedSpec(); } return { stock: stock, spec: spec, }; } /** * 已选规格 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-10-05 * @desc description */ function GoodsCartInfoSelectedSpec() { // 规格 var spec = []; var sku_count = $('.sku-items').length; if(sku_count > 0) { var spec_count = $('.sku-line.selected').length; if(spec_count >= sku_count) { $('.sku-items li.selected').each(function(k, v) { spec.push({"type": $(this).attr('data-type-value'), "value": $(this).attr('data-value')}); }); } } return spec; } $(function() { // 商品规格选择 $(document).on('click', '.spec-options ul>li', function() { // 规格处理 var length = $('.goods-spec-content .sku-items').length; var index = $(this).parents('.sku-items').index(); if($(this).hasClass('selected')) { $(this).removeClass('selected'); // 去掉元素之后的禁止 $('.goods-spec-content .sku-items').each(function(k, v) { if(k > index) { $(this).find('li').removeClass('sku-items-disabled').removeClass('selected').addClass('sku-dont-choose'); } }); // 数据还原 GoodsCartInfoBaseRestore(); } else { if($(this).hasClass('sku-items-disabled') || $(this).hasClass('sku-dont-choose')) { return false; } $(this).addClass('selected').siblings('li').removeClass('selected'); $(this).parents('.sku-items').removeClass('sku-not-active'); // 去掉元素之后的禁止 if(index < length) { $('.goods-spec-content .sku-items').each(function(k, v) { if(k > index) { $(this).find('li').removeClass('sku-items-disabled').removeClass('selected').addClass('sku-dont-choose'); } }); } // 后面是否还有未选择的规格 if(index < length-1) { // 数据还原 GoodsCartInfoBaseRestore(); } // 获取下一个规格类型 GoodsCartInfoSpecType(); // 获取规格详情 GoodsCartInfoSpecDetail(); } }); // 数量操作 $(document).on('click', '.goods-spec-content .number-operate span', function() { var $input = $(this).parents('.number-operate').find('input'); var min = parseInt($input.attr('min') || 0); var max = parseInt($input.attr('max') || 0); var stock = parseInt($input.val()); var type = $(this).attr('data-type'); var temp_stock = (type == 'add') ? stock+1 : stock-1; var unit = $cart_info_goods_spec.find('.stock-tips .unit').attr('data-value') || ''; if(temp_stock < min) { $input.val(min); Prompt((window['lang_goods_stock_min_tips'] || '最低起购数量')+min+unit); return false; } if(temp_stock > max) { $input.val(max); Prompt((window['lang_goods_stock_max_tips'] || '最大限购数量')+max+unit); return false; } $input.val(temp_stock); // 数量更新事件 GoodsNumberChange(); }); // 手动输入、失去焦点 $(document).on('blur', '.goods-spec-content .number-operate input', function() { var $stock_tips = $cart_info_goods_spec.find('.stock-tips .stock'); var min = parseInt($stock_tips.attr('data-min-limit')) || 1; var max = parseInt($stock_tips.attr('data-max-limit')) || 0; var stock = parseInt($(this).val()); var inventory = parseInt($stock_tips.text()); if(isNaN(stock)) { stock = min; } if(max > 0 && stock > max) { stock = max; } if(stock < min) { stock = min; } if(stock > inventory) { stock = inventory; } $(this).val(stock); // 数量更新事件 GoodsNumberChange(); }); $(document).on('focus', '.goods-spec-content .number-operate input', function() { $(this).select(); }); // 加入购物车 $(document).on('click', 'form.form-validation button[type="submit"]', function() { // 参数 var params = GoodsCartInfoBuyCartCheck(); if(params === false) { return false; } $('form.form-validation input[name="spec"]').val(JSON.stringify(params.spec)); return true; }); });