cart.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // [{
  2. // seller_id: 0,
  3. // seller_nickname: "店铺名称",
  4. // products: [{
  5. // id: 0
  6. // }]
  7. // }]
  8. const defaults = []
  9. const state = JSON.parse(JSON.stringify(defaults));
  10. const getters = {
  11. total(state) {
  12. let sum = 0;
  13. // console.log(state)
  14. for (let sellerIndex in state) {
  15. for (let productIndex in state[sellerIndex].products) {
  16. if (state[sellerIndex].products[productIndex].checked) {
  17. sum += state[sellerIndex].products[productIndex].spec_price * state[sellerIndex].products[
  18. productIndex].num
  19. }
  20. }
  21. }
  22. return sum.toFixed(2);
  23. }
  24. }
  25. const mutations = {
  26. add(state, payload) {
  27. let sellerIsExist = false;
  28. let productIsExist = false;
  29. for (let sellerIndex in state) {
  30. if (payload.seller_id === state[sellerIndex].seller_id) {
  31. sellerIsExist = true;
  32. for (let productIndex in state[sellerIndex].products) {
  33. if (payload.id === state[sellerIndex].products[productIndex].id &&
  34. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  35. productIsExist = true;
  36. state[sellerIndex].products[productIndex].num = payload.num;
  37. break;
  38. }
  39. }
  40. if (!productIsExist) {
  41. state[sellerIndex].products.unshift(payload)
  42. }
  43. break;
  44. }
  45. }
  46. if (!sellerIsExist) {
  47. state.unshift({
  48. seller_id: payload.seller_id,
  49. seller_nickname: payload.seller_nickname,
  50. products: [payload],
  51. checked: false
  52. })
  53. }
  54. // console.log(this)
  55. this.commit("cart/save", state)
  56. },
  57. remove(state, payload) {
  58. for (let sellerIndex in state) {
  59. for (let productIndex in state[sellerIndex].products) {
  60. if (payload.id === state[sellerIndex].products[productIndex].id &&
  61. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  62. //如果商品已经存在于购物车
  63. state[sellerIndex].products.splice(productIndex, 1)
  64. if (state[sellerIndex].products.length === 0) {
  65. state.splice(sellerIndex, 1)
  66. }
  67. }
  68. }
  69. }
  70. },
  71. selectSeller(state, payload) {
  72. for (let sellerIndex in state) {
  73. if (payload.seller_id === state[sellerIndex].seller_id) {
  74. state[sellerIndex].checked = !state[sellerIndex].checked
  75. }
  76. for (let productIndex in state[sellerIndex].products) {
  77. if (state[sellerIndex].seller_id === payload.seller_id) {
  78. state[sellerIndex].products[productIndex].checked = state[sellerIndex].checked
  79. // this._vm.$set(state[sellerIndex].products[productIndex],"checked",state[sellerIndex].checked)
  80. }
  81. }
  82. }
  83. this.commit("cart/save", state)
  84. },
  85. selectAll(state, payload) {
  86. // console.log(payload)
  87. for (let sellerIndex in state) {
  88. state[sellerIndex].checked = payload.checked
  89. for (let productIndex in state[sellerIndex].products) {
  90. state[sellerIndex].products[productIndex].checked = payload.checked
  91. }
  92. }
  93. this.commit("cart/save", state)
  94. },
  95. select(state, payload) {
  96. // console.log(payload)
  97. for (let sellerIndex in state) {
  98. for (let productIndex in state[sellerIndex].products) {
  99. if (payload.id === state[sellerIndex].products[productIndex].id &&
  100. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  101. state[sellerIndex].products[productIndex].checked = !state[sellerIndex].products[productIndex]
  102. .checked
  103. }
  104. }
  105. }
  106. this.commit("cart/save", state)
  107. },
  108. numchange(context, payload) {
  109. for (let sellerIndex in state) {
  110. for (let productIndex in state[sellerIndex].products) {
  111. if (payload.id === state[sellerIndex].products[productIndex].id &&
  112. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  113. state[sellerIndex].products[productIndex].num = payload.num
  114. }
  115. }
  116. }
  117. this.commit("cart/save", state)
  118. },
  119. save(state) {
  120. uni.setStorageSync("cart", state)
  121. }
  122. }
  123. const actions = {
  124. add(context, payload) {
  125. return new Promise((resolve, reject) => {
  126. this._vm.$http.get({
  127. url: "/product",
  128. data: {
  129. id: payload.id
  130. },
  131. success: (res) => {
  132. // console.log(res.data.data.specs)
  133. const spec = JSON.parse(res.data.data.specs)[payload.specIndex];
  134. const data = {
  135. id: res.data.data.id,
  136. images: res.data.data.images,
  137. name: res.data.data.name,
  138. spec_index: payload.specIndex,
  139. spec_name: spec.name,
  140. spec_image: spec.image,
  141. spec_org_price: spec.org_price.toFixed(2),
  142. spec_price: spec.price.toFixed(2),
  143. spec_stock: spec.stock,
  144. seller_id: res.data.data.user_id,
  145. seller_nickname: res.data.data.user.nickname,
  146. num: payload.num,
  147. time: new Date().getTime(),
  148. checked: false
  149. }
  150. context.commit('add', data)
  151. resolve();
  152. }
  153. })
  154. })
  155. },
  156. remove(context, payload) {
  157. context.commit('remove', payload)
  158. },
  159. load(context) {
  160. let cart = uni.getStorageSync("cart");
  161. for (let sellerIndex in cart) {
  162. for (let productIndex in cart[sellerIndex].products) {
  163. context.dispatch("add", {
  164. id: cart[sellerIndex].products[productIndex].id,
  165. num: cart[sellerIndex].products[productIndex].num,
  166. specIndex: cart[sellerIndex].products[productIndex].spec_index
  167. })
  168. }
  169. }
  170. }
  171. }
  172. export default {
  173. namespaced: true,
  174. state,
  175. getters,
  176. actions,
  177. mutations
  178. }