/** * 购物车商品 * @author: xuqi<qi.xu@yoho.cn> * @date: 2015/10/20 */ var $ = require('jquery'), ellipsis = require('mlellipsis'), chosePanel = require('../cart/chose-panel'), loading = require('../plugin/loading'), lazyLoad = require('yoho.lazyload'); var dialog = require('../me/dialog'), tip = require('../plugin/tip'); var $selectAllBtn = $('.balance .checkbox'), requesting = false; //上次编辑的商品skn var previousEditSkn; ellipsis.init(); lazyLoad({ try_again_css: 'order-failure' }); setTimeout(function() { $('.shopping-cart-good .name').each(function() { this.mlellipsis(2); }); }, 0); function GoodInfo(properties) { this.goods_type = properties.goods_type; this.buy_number = properties.buy_number; this.product_sku = properties.product_sku; this.selected = properties.selected; } //TIP:事件委托在.cart-goods,商品列表的容器统一需要有.cart-goods $('.cart-goods').on('touchstart', '.checkbox', function() { var $this = $(this), $good = $this.closest('.shopping-cart-good'), id = $good.data('id'); var goodsList = [], goodInfo = {}; if (!$this.hasClass('icon-cb-checked') && $this.siblings('.info').find('.low-stocks').length > 0) { tip.show('库存不足,无法购买'); return false; } goodInfo.goods_type = $('#cartType').val(); goodInfo.selected = $this.hasClass('icon-cb-checked') ? 'N' : 'Y'; goodInfo.product_sku = id; goodInfo.buy_number = $good.find('.count').eq(0).text().trim().replace('×', ''); goodsList.push(new GoodInfo(goodInfo)); $.ajax({ type: 'post', url: 'select', data: { skuList: JSON.stringify(goodsList) } }).then(function(data) { if (data.code === 200) { if ($this.hasClass('icon-cb-checked')) { $this.removeClass('icon-cb-checked').addClass('icon-checkbox'); } else { $this.removeClass('icon-checkbox').addClass('icon-cb-checked'); } window.location.href = '/cart/index/index?cartType=' + $('#cartType').val(); } else if (data.code === 400) { tip.show('网络异常'); } }, function() { tip.show('网络异常'); }); }); /* * 显示购物车编辑面板。 * * @param {String} html. chose-pannel模板,由服务端返回 * * @param {String} id. 商品skuid * * @param {Bool} isSelected. 所要编辑的商品是否被选中 * * @param {Bool} isEditNum. 所要编辑的商品是否被选中 * * @return false or undefined * */ function showEditPannelWithSku(html, id, isSelected, isEditNum) { if (html.length < 2) { tip.show('出错啦!'); return false; } //删掉页面上原有的pannel chosePanel.remove(); $(html).appendTo('#mainCart'); chosePanel.init(); chosePanel.setEditModeWithSknId(id, isSelected); if (!isEditNum) { chosePanel.disableNumEdit(); } chosePanel.show(); } $('.icon-edit').on('touchstart', function(e) { var $this = $(this), skn = $this.closest('.shopping-cart-good').data('skn'); var $checkBox, $tag; var id, count, canEditNum; //如果点击的是上次编辑的商品,直接显示chose-pannel if (skn === previousEditSkn) { chosePanel.show(); return; } previousEditSkn = skn; $checkBox = $this.closest('.info').siblings('.checkbox'); $tag = $this.closest('.deps').siblings('.few-tag'); id = $this.closest('.shopping-cart-good').data('id'); count = $this.data('count'); //加价购或者赠品不能编辑数量 canEditNum = $tag.hasClass('gift-tag') || $tag.hasClass('plus-tag') ? false : true; e.stopPropagation(); loading.showLoadingMask(); $.ajax({ url: '/cart/index/goodinfo', data: { skn: skn, buy_num: count }, success: function(res) { showEditPannelWithSku(res, id, $checkBox.hasClass('icon-cb-checked'), canEditNum); }, error: function() { tip.show('网络异常'); window.location.reload(); }, complete: function() { loading.hideLoadingMask(); } }); }); $('.icon-del').on('touchstart', function(e) { var $this = $(this); e.stopPropagation(); dialog.showDialog({ dialogText: '您确定要从购物车中删除吗?', hasFooter: { leftBtnText: '取消', rightBtnText: '确定' } }, function() { var id = $this.closest('.shopping-cart-good').data('id'), count = $this.data('count'); $.ajax({ method: 'post', url: '/cart/index/del', data: { sku: id, count: count } }).then(function(data) { if (data.code === 200) { dialog.showDialog({ dialogText: '删除成功', autoHide: true, fast: true }); window.setCookie('_yoho-cart-refreshByDelete', true); window.location.href = '/cart/index/index?cartType=' + $('#cartType').val(); } else { tip.show(data.message); } }, function() { tip.show('网络异常'); window.location.reload(); }); }); }); function requestUpdateAllGoodsCheckStatus(theGoods, successHandeler) { if (requesting) { return; } requesting = true; $.ajax({ url: 'select', type: 'post', data: { skuList: JSON.stringify(theGoods) }, success: function(res) { if (res.code === 200) { successHandeler(); } else { tip.show(res.message); } }, error: function() { tip.show('网络异常'); }, complete: function() { requesting = false; } }); } function didUpdateAllGoodsCheckStatus() { var $checkedBoxs = $('.shopping-cart-good .icon-cb-checked'), $uncheckedBoxs = $('.shopping-cart-good .icon-checkbox'); var shouldSelectAll; if ($selectAllBtn.hasClass('icon-cb-checked')) { $selectAllBtn.removeClass('icon-cb-checked').addClass('icon-checkbox'); shouldSelectAll = true; } else { $selectAllBtn.removeClass('icon-checkbox').addClass('icon-cb-checked'); shouldSelectAll = false; } if (!shouldSelectAll) { $uncheckedBoxs.each(function(idx, uncheckedBox) { $(uncheckedBox).removeClass('icon-checkbox').addClass('icon-cb-checked'); }); } else { $checkedBoxs.each(function(idx, checkedBox) { $(checkedBox).removeClass('icon-cb-checked').addClass('icon-checkbox'); }); } window.location.href = '/cart/index/index?cartType=' + $('#cartType').val(); } function bottomCheckBoxHandeler(isSelected, type, handlerAfterTouch) { var goodInfo = {}, $goods = $('.cart-content:not(.hide) .shopping-cart-good'), $good = null, goodsList = []; goodInfo.goods_type = type; goodInfo.selected = isSelected ? 'N' : 'Y'; $goods.each(function(idx, good) { $good = $(good); goodInfo.product_sku = $(good).data('id'); goodInfo.buy_number = $good.find('.count').eq(0).text().trim().replace('×', ''); goodsList.push(new GoodInfo(goodInfo)); }); requestUpdateAllGoodsCheckStatus(goodsList, handlerAfterTouch); } //全选按钮点击事件 $selectAllBtn.on('touchend', function() { var cartType = $('#cartType').val(), isSelect = $(this).hasClass('icon-cb-checked'); if ('ordinary' === cartType) { if (!isSelect && $('.common .low-stocks').length > 0) { tip.show('所选商品中含有库存不足的商品'); return false; } } else if ('advance' === cartType) { if (!isSelect && $('.presell .low-stocks').length > 0) { tip.show('所选商品中含有库存不足的商品'); return false; } } bottomCheckBoxHandeler(isSelect, cartType, didUpdateAllGoodsCheckStatus); }); $('.down').on('touchend', function() { chosePanel.show(); });