Как добавить товар в корзину в соответствии с запасами в вт

#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  },  } }