如何检查购物车中每个产品的库存



我在Vuex中存储购物车,并通过API调用将产品添加到购物车中。我想做的是根据每个产品的库存,我想禁用API调用。所以在我的getters中:

export const checkStock = (state) => {
let stockAvailable = true;
state.cart.forEach(item => {
if(item.product.attributes.stock <= item.amount){
stockAvailable = false;
}
})
return stockAvailable;
}

我正在检查库存,如果库存是正确的。在产品组件中,我正在进行API调用并将产品添加到购物车中,并且我正在从getter .js文件中获取checkStock函数:

checkStockAvailability() {
return this.$store.getters.checkStock;
},
addToCart: function () {
this.amount = this.itemsCount !== "" ? this.itemsCount : 1;
if(this.variationId != null) {
this.warningMessage = false;
if(this.checkStockAvailability()) {
cartHelper.addToCart(this.product.id, this.variationId, this.amount, (response) => {
this.$store.dispatch('addProductToCart', {
product: this.product,
variation: this.variationId,
amount: parseInt(this.amount)
})
});
}
} else {
this.warningMessage = true;
}
},

所以这两个函数所做的是:例如,我正在添加产品1,它有5个库存,一旦我添加了这5个,我就不能添加更多,这也是正确的。但是我不能添加2号产品,因为它有足够的库存。因此,我认为我需要将checkStock函数更改为产品,但我不知道如何做。所以请看看我的问题,有什么建议请告诉我。

所以,如果我理解正确的话,当产品A有5件库存,而你购买了这5件商品时,产品B(也有N件库存)也被标记为缺货。

问题似乎是在你的功能checkStock,因为你正在做一个forEach操作,而且,一旦你看到一个产品没有足够的项目可用,你设置stockAvailable为假,并返回此值。因此,此功能并不取决于您所要求的产品,而是取决于其中任何一个产品不足以购买。您需要传递产品名称或id(任何最适合您的)。

作为参考:

export const checkStock = (state, productName) => {
let stockAvailable = true;
state.cart.forEach(item => {
// First, you search for your product
if(item.product.name === productName) {
// Then you check if there is enough stock available
if(item.product.attributes.stock <= item.amount){
stockAvailable = false;
}
}
})
return stockAvailable;
}

最终的实现将取决于item对象的配置。您可以通过id而不是名称进行搜索。此外,您可以在state对象中作为字典搜索此特定产品,而不是遍历所有产品。

最新更新