Authored by jinhu.tung

control storage of good

... ... @@ -64,11 +64,6 @@ exports.changeProductNum = (req, res) => {
}
});
// res.json({
// code: '1000',
// num: parseInt(changeTo, 10) - 1,
// changed: false
// });
} else if (changeType === 'DECREASE') {
cartModel.modifyProductNum({
decreaseNum: 1, // 默认是1
... ...
... ... @@ -10,7 +10,6 @@
* 乘法
* @param {[Number]} num1
* @param {[Number]} num2
* @param {[object]} options 上下文环境,一般不手动传
* @return {[boolen]}
*/
exports.multiple = (num1, num2) => {
... ... @@ -23,3 +22,20 @@ exports.multiple = (num1, num2) => {
console.error('multiplication needs two number parameters');
}
};
/**
* 小于等于
* @param {[Number]} num1
* @param {[Number]} num2
* @param {[object]} options 上下文环境,一般不手动传
* @return {[boolen]}
*/
exports.lte = (num1, num2, options) => {
num1 = typeof num1 === 'number' ? num1 : parseFloat(num1, 10);
num2 = typeof num2 === 'number' ? num2 : parseFloat(num2, 10);
if (num1 <= num2) {
return options.fn(this);
}
return options.inverse(this);
};
... ...
... ... @@ -218,6 +218,9 @@ const filterCartData = (result, uid) => {
_.forEach(advancedGoods, function(good) {
buyNumber = parseInt(good.buy_number, 10);
totalNum += buyNumber;
_.merge(good, {
left_number: parseInt(good.storage_number, 10) - buyNumber
});
if (good.selected === 'Y') {
selectedAdvanceNum += buyNumber;
}
... ... @@ -236,13 +239,16 @@ const filterCartData = (result, uid) => {
_.forEach(ordinaryGoods, function(good) {
buyNumber = parseInt(good.buy_number, 10);
totalNum += buyNumber;
_.merge(good, {
left_number: parseInt(good.storage_number, 10) - buyNumber
});
if (good.selected === 'Y') {
selectedOrdinaryNum += buyNumber;
}
});
}
// console.log('ordinaryGoods:', ordinaryGoods);
console.log('ordinaryGoods:', ordinaryGoods);
return _.merge(resData, {
... ... @@ -273,7 +279,10 @@ const modifyProductNum = (options) => {
const uid = options.uid;
const shoppingKey = options.shoppingKey;
const sku = options.sku;
const goodType = options.goodType;
const goodType = options.goodTpye;
let buyNumber,
storageNumber;
let params = {
product_sku: options.sku
... ... @@ -309,14 +318,48 @@ const modifyProductNum = (options) => {
product_sku: sku
});
console.log('goodType-----:', goodType);
return getCartData(shoppingKey, uid).then(function(result) {
console.log('getCartData--pre-callback-result:', result);
console.log('getCartData--pre-callback-result:', JSON.stringify(result, '', 4));
console.log('modifyProductNum---params:', params);
if (goodType === 'advance') {
// 检查库存量
} else if (goodType === 'ordinary') {
// 检查库存量
_.find(result.data.ordinary_cart_data.goods_list, (goodItem) => {
if (goodItem.product_sku === sku) {
buyNumber = parseInt(goodItem.buy_number, 10);
storageNumber = parseInt(goodItem.storage_number, 10);
// 计算剩余多少
_.merge(goodItem, {
left_number: storageNumber - buyNumber
});
}
});
// 增加
if (increaseNum && (buyNumber + increaseNum) > storageNumber) {
return {
code: '1000',
message: '商品库存不足'
};
}
// else if(increaseNum && (buyNumber + 4) >= storageNumber) {
// leftNumber = storageNumber - buyNumber - 1;
// }
}
// 显示仅剩3, 2, 1件
// if(leftNumber) {
// return api.get('', params).then(changeResult => {
// return _.merge(changeResult, {leftNumber})
// });
// }
return api.get('', params);
});
... ...
... ... @@ -58,16 +58,25 @@
</li>
<li class="price-num">
<span class="price sale-price">¥\{{sales_price}}</span>
<div class="stepper" data-productId=\{{productId}}>
<div class="minus action">
<div class="stepper" data-productType=\{{goods_type}}>
<div class="minus action \{{#isEqual buy_number 1}}disable\{{/isEqual}}">
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value=\{{buy_number}} />
</div>
<div class="plus action">
<div class="plus action \{{#isEqual left_number 0}}disable\{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
</div>
<div class="warning">
\{{#lte left_number 3}}
\{{#if left_number}}
仅剩\{{left_number}}件
\{{^}}
仅剩0件
\{{/if}}
\{{/lte}}
</div>
</div>
</li>
<li class="total-price-action">
... ... @@ -122,16 +131,25 @@
</li>
<li class="price-num">
<span class="price sale-price">¥\{{sales_price}}</span>
<div class="stepper" data-productId=\{{productId}}>
<div class="minus action">
<div class="stepper" data-productType=\{{goods_type}}>
<div class="minus action \{{#isEqual buy_number 1}}disable\{{/isEqual}}">
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value=\{{buy_number}} />
</div>
<div class="plus action">
<div class="plus action \{{#isEqual left_number 0}}disable\{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
</div>
<div class="warning">
\{{#lte left_number 3}}
\{{#if left_number}}
仅剩\{{left_number}}件
\{{^}}
仅剩0件
\{{/if}}
\{{/lte}}
</div>
</div>
</li>
<li class="total-price-action">
... ... @@ -175,16 +193,25 @@
</li>
<li class="price-num">
<span class="price sale-price">¥\{{salesPrice}}</span>
<div class="stepper" data-productId=\{{productId}}>
<div class="minus action">
<div class="stepper" data-productType=\{{goods_type}}>
<div class="minus action \{{#isEqual buy_number 1}}disable\{{/isEqual}}">
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value=\{{buy_number}} />
</div>
<div class="plus action">
<div class="plus action \{{#isEqual left_number 0}}disable\{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
</div>
<div class="warning">
\{{#lte left_number 3}}
\{{#if left_number}}
仅剩\{{left_number}}件
\{{^}}
仅剩0件
\{{/if}}
\{{/lte}}
</div>
</div>
</li>
<li class="total-price-action">
... ... @@ -211,7 +238,7 @@
</div>
<div id="remove_selected" class="action hoverable">删除选中的商品</div>
<div id="send_favorite" class="action hoverable">移入收藏夹</div>
<div id="clear_invalid" class="action hoverable">清除实效商品</div>
<div id="warning_invalid" class="action hoverable">清除实效商品</div>
<div class="selected-num">已选<span>\{{selectedNum}}</span>件</div>
<div class="checkout-total">
<div class="total-title">商品金额:</div>
... ...
<div class="stepper" data-productType={{goods_type}}>
<div class="minus action">
<div class="minus action {{#isEqual buy_number 1}}disable{{/isEqual}}">
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value={{buy_number}} />
</div>
<div class="plus action">
<div class="plus action {{#isEqual left_number 0}}disable{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
</div>
<div class="warning">
{{#lte left_number 3}}
{{#if left_number}}
仅剩{{left_number}}
{{^}}
仅剩0件
{{/if}}
{{/lte}}
</div>
</div>
\ No newline at end of file
... ...
... ... @@ -21,8 +21,6 @@ var Stepper = {
changeType: 'DECREASE',
sku: sku,
goodType: goodType
// changeTo: parseInt(currNum, 10) - 1
},
success: function(res) {
Util.refreshCart(res, function() {
... ... @@ -43,15 +41,8 @@ var Stepper = {
changeType: 'INCREASE',
sku: sku,
goodType: goodType
// changeTo: parseInt(currNum, 10) + 1
},
success: function(res) {
// if (res.code === '0') {
// return callback(res.num, res.changed);
// } else {
// return callback(res.num, res.changed, res.code === '1000');
// }
Util.refreshCart(res, function() {
Stepper.init();
});
... ... @@ -101,7 +92,6 @@ var Stepper = {
if (changed && plus.hasClass('disable')) {
plus.removeClass('disable');
}
});
}
});
... ...
... ... @@ -55,6 +55,16 @@ var Util = {
return options.inverse(this);
});
hbs.registerHelper('lte', function(num1, num2, options) {
num1 = typeof num1 === 'number' ? num1 : parseFloat(num1, 10);
num2 = typeof num2 === 'number' ? num2 : parseFloat(num2, 10);
if (num1 <= num2) {
return options.fn(this);
}
return options.inverse(this);
});
hbs.registerHelper('image', function(url, width, height, mode) {
mode = parseInt(mode, 10) ? mode : 2;
url = url || '';
... ...
... ... @@ -39,4 +39,14 @@
height: 28px;
text-align: center;
}
.warning {
clear: both;
text-align: center;
width: 100%;
margin-top: 5px;
color: #e8044f;
font-size: 13px;
font-weight: bold;
}
}
... ...