#vue.js #vuejs2 #vue-component #vuex #vuejs3
Вопрос:
Я пытаюсь добавить товары в свою корзину, но только в том случае, если их количество меньше, чем на складе. Поэтому, когда я нажимаю кнопку «Добавить в корзину», я получаю такой объект:
Таким образом, сумма определяется пользователем. Но я не хочу добавлять товар в корзину, если запас меньше, чем сумма.
За это мой картелпер:
getCart: function (callback = undefined) { return apiHelper.getRequest( "/carts", (response) =gt; { document.cookie = `${this.cartCookieName}=${response.data.attributes.cart_guid};`; this.cookieValue = response.data.attributes.cart_guid; if (callback) { callback(response); } } ) }, addToCart: function (product, variation_id, amount, callback = undefined) { if(this.cookieValue == "") { this.getCart(() =gt; { this._addToCart(product, variation_id, amount, callback); }); } else { this._addToCart(product, variation_id, amount, callback) } }, _addToCart(product, variation_id, amount, callback = undefined) { return apiHelper.postRequest( `/carts/${this.cookieValue}/add-item`, (response) =gt; { document.cookie = `${this.cartCookieName}=${response.data.attributes.cart_guid};`; if (callback) { callback(response); } }, { product_id: product, variation_id: variation_id, amount: amount, } ) },
Я вызываю корзину здесь и сохраняю идентификатор в файле cookie. В соответствии с этим идентификатором я звоню еще раз с телеграммой, чтобы положить товар в корзину. Чтобы положить товар в корзину, я также использую Vuex, и вот мои мутации:
export const ADD_TO_CART = (state, {product, variation, amount}) =gt; { let productInCart = state.cart.find(item =gt; { return item.product.id === product.id; }); if(productInCart) { productInCart.amount = amount; return; } state.cart.push({ product, variation, amount }) }
и вот моя функция AddToCart в компоненте продукта:
addToCart: function () { let amount = this.itemsCount !== "" ? this.itemsCount : 1; if(this.variationId != null) { this.warningMessage = false; cartHelper.addToCart(this.product.id, this.variationId, amount, (response) =gt; { this.$store.dispatch('addProductToCart', { product: this.product, variation: this.variationId, amount: parseInt(amount) }) }); } else { this.warningMessage = true; } },
Я действительно в замешательстве по поводу того, где мне следует проверить, достаточно ли запасов, чтобы товар можно было добавить в корзину. Если вы сможете мне в этом помочь, я был бы очень рад.
Ответ №1:
Похоже product
, что аргумент мутации содержит количество запасов, поэтому вы можете выполнить проверку мутации:
export const ADD_TO_CART = (state, {product, variation, amount}) =gt; { if (amount gt; product.attributes.stock) { return } ⋮ // add to cart }
Или вы можете сделать это в Product
компоненте перед отправкой:
export default { methods: { addToCart: function () { let amount = this.itemsCount !== "" ? this.itemsCount : 1; if (amount gt; this.product.attributes.stock) { return; } ⋮ // dispatch action }, } }