如何检查购物车中每个产品的库存
How to check the stock for each product in the cart
我正在将我的购物车存储在 Vuex 中,并通过 API 调用将产品添加到购物车。我想做的是根据每种产品的库存,我想禁用 API 调用。所以在我的 getetrs 中:
export const checkStock = (state) => {
let stockAvailable = true;
state.cart.forEach(item => {
if(item.product.attributes.stock <= item.amount){
stockAvailable = false;
}
})
return stockAvailable;
}
我正在检查库存,如果库存正确。
在我进行 API 调用并将产品添加到购物车的产品组件中,我从 getters.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;
}
},
所以这2个函数的作用是:比如我添加了Product 1,它有5只股票,一旦我添加了这5只,我就不能再添加了,这也是对的。但是我也不能添加有足够库存的产品 2。
所以我认为我需要将我的 checkStock 功能更改为产品,但我不知道该怎么做。所以请看看我的问题,让我知道任何建议。
因此,如果我没理解错的话,当产品 A 有 5 件商品,而您购买了这 5 件商品时,产品 B(也有 N 件商品)也被标记为缺货.
问题似乎出在您的函数 checkStock
中,因为您正在执行 forEach
操作,并且,一旦您看到一个产品没有足够的项目可用,你设置stockAvailable
为false,return这个值。因此,此功能不取决于您要求的产品,但其中任何一个都不足以购买。您需要传递产品名称或 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
对象中搜索此特定产品作为字典,而不是遍历所有产品。
我正在将我的购物车存储在 Vuex 中,并通过 API 调用将产品添加到购物车。我想做的是根据每种产品的库存,我想禁用 API 调用。所以在我的 getetrs 中:
export const checkStock = (state) => {
let stockAvailable = true;
state.cart.forEach(item => {
if(item.product.attributes.stock <= item.amount){
stockAvailable = false;
}
})
return stockAvailable;
}
我正在检查库存,如果库存正确。 在我进行 API 调用并将产品添加到购物车的产品组件中,我从 getters.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;
}
},
所以这2个函数的作用是:比如我添加了Product 1,它有5只股票,一旦我添加了这5只,我就不能再添加了,这也是对的。但是我也不能添加有足够库存的产品 2。 所以我认为我需要将我的 checkStock 功能更改为产品,但我不知道该怎么做。所以请看看我的问题,让我知道任何建议。
因此,如果我没理解错的话,当产品 A 有 5 件商品,而您购买了这 5 件商品时,产品 B(也有 N 件商品)也被标记为缺货.
问题似乎出在您的函数 checkStock
中,因为您正在执行 forEach
操作,并且,一旦您看到一个产品没有足够的项目可用,你设置stockAvailable
为false,return这个值。因此,此功能不取决于您要求的产品,但其中任何一个都不足以购买。您需要传递产品名称或 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
对象中搜索此特定产品作为字典,而不是遍历所有产品。