cart.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. const state = {
  2. cart: [],
  3. total: 0,
  4. productToDiscount: null
  5. }
  6. const getters = {
  7. cartItems(state) {
  8. return state.cart
  9. },
  10. total(state) {
  11. return state.total
  12. },
  13. cartIsEmpty(state) {
  14. return state.cart.length !== 0
  15. },
  16. productToDiscount(state) {
  17. return state.productToDiscount
  18. }
  19. }
  20. const mutations = {
  21. addToCart(state, payload) {
  22. let finded = state.cart.find(item => item.id == payload.product.id)
  23. if (finded) {
  24. payload.product.qty = payload.product.qty + 1
  25. } else {
  26. state.cart = [payload.product, ...state.cart]
  27. }
  28. },
  29. subtractFromCart(state, payload) {
  30. let finded = state.cart.find(item => item.id == payload.product.id)
  31. finded.qty = finded.qty - 1
  32. },
  33. discountFromCart(state, payload) {
  34. state.productToDiscount = payload
  35. },
  36. applyDiscount(state, payload) {
  37. let finded = state.cart.find(item => item.id == state.productToDiscount.id)
  38. finded.price = state.productToDiscount.discount
  39. },
  40. removeFromCart(state, payload) {
  41. let findedIndex = state.cart.findIndex(item => item.id == payload.product.id)
  42. state.cart.splice(findedIndex, 1)
  43. },
  44. calculateTotal(state) {
  45. let sum = 0
  46. state.cart.forEach(item => {
  47. sum = sum + ((item.price || item.list_price) * (item.qty || 1))
  48. })
  49. console.log(sum)
  50. state.total = sum
  51. }
  52. }
  53. const actions = {
  54. addToCart({ commit, dispatch }, payload) {
  55. commit('addToCart', {
  56. product: payload
  57. })
  58. commit('calculateTotal')
  59. // dispatch('setSelectedProduct', {
  60. // product: null
  61. // })
  62. },
  63. subtractFromCart({ commit, dispatch }, payload) {
  64. if (payload.qty > 1) {
  65. commit('subtractFromCart', {
  66. product: payload
  67. })
  68. } else {
  69. commit('removeFromCart', {
  70. product: payload
  71. })
  72. }
  73. commit('calculateTotal')
  74. },
  75. discountFromCart({ commit, dispatch }, payload) {
  76. if (payload && !payload.minimum_price && !payload.maximum_price) {
  77. dispatch('notify', 'No hay descuento para este producto')
  78. return
  79. }
  80. commit('discountFromCart', payload)
  81. },
  82. applyDiscount({ getters, commit, dispatch }, payload) {
  83. console.log(payload, getters.productToDiscount)
  84. if(payload.apply) {
  85. let product = getters.productToDiscount
  86. console.log(product.discount)
  87. if (product.discount < product.minimum_price || product.discount > product.maximum_price) {
  88. dispatch('notify', 'No se puede aplicar este descuento')
  89. return
  90. }
  91. commit('applyDiscount', product.id)
  92. commit('calculateTotal')
  93. }
  94. dispatch('discountFromCart', null)
  95. },
  96. removeFromCart({ commit, dispatch }, payload) {
  97. commit('removeFromCart', {
  98. product: payload
  99. })
  100. commit('calculateTotal')
  101. }
  102. }
  103. export default {
  104. state,
  105. getters,
  106. mutations,
  107. actions
  108. }