|
|
/**
|
|
|
* 购物车商品
|
|
|
* @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;
|
|
|
|
|
|
if ($this.parents('.off-shell-goods').length) {
|
|
|
tip.show('商品已下架');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 如果点击的是上次编辑的商品,直接显示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 $shoppingCartGood = $this.closest('.shopping-cart-good'),
|
|
|
count = $this.data('count');
|
|
|
|
|
|
$.ajax({
|
|
|
method: 'post',
|
|
|
url: '/cart/index/del',
|
|
|
data: {
|
|
|
sku: $shoppingCartGood.data('id'),
|
|
|
count: count,
|
|
|
promotionId: $shoppingCartGood.data('promotion')
|
|
|
}
|
|
|
}).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.hasPromotion = $(good).data('promotion');
|
|
|
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 (cartType === 'ordinary') {
|
|
|
if (!isSelect && $('.common .low-stocks').length > 0) {
|
|
|
tip.show('所选商品中含有库存不足的商品');
|
|
|
return false;
|
|
|
}
|
|
|
} else if (cartType === 'advance') {
|
|
|
if (!isSelect && $('.presell .low-stocks').length > 0) {
|
|
|
tip.show('所选商品中含有库存不足的商品');
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bottomCheckBoxHandeler(isSelect, cartType, didUpdateAllGoodsCheckStatus);
|
|
|
});
|
|
|
|
|
|
$('.down').on('touchend', function() {
|
|
|
chosePanel.show();
|
|
|
}); |
...
|
...
|
|