cart.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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. this.commit("cart/save", state)
  71. },
  72. selectSeller(state, payload) {
  73. for (let sellerIndex in state) {
  74. if (payload.seller_id === state[sellerIndex].seller_id) {
  75. state[sellerIndex].checked = !state[sellerIndex].checked
  76. }
  77. for (let productIndex in state[sellerIndex].products) {
  78. if (state[sellerIndex].seller_id === payload.seller_id) {
  79. state[sellerIndex].products[productIndex].checked = state[sellerIndex].checked
  80. // this._vm.$set(state[sellerIndex].products[productIndex],"checked",state[sellerIndex].checked)
  81. }
  82. }
  83. }
  84. this.commit("cart/save", state)
  85. },
  86. selectAll(state, payload) {
  87. // console.log(payload)
  88. for (let sellerIndex in state) {
  89. state[sellerIndex].checked = payload.checked
  90. for (let productIndex in state[sellerIndex].products) {
  91. state[sellerIndex].products[productIndex].checked = payload.checked
  92. }
  93. }
  94. this.commit("cart/save", state)
  95. },
  96. select(state, payload) {
  97. // console.log(payload)
  98. for (let sellerIndex in state) {
  99. for (let productIndex in state[sellerIndex].products) {
  100. if (payload.id === state[sellerIndex].products[productIndex].id &&
  101. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  102. state[sellerIndex].products[productIndex].checked = !state[sellerIndex].products[productIndex]
  103. .checked
  104. }
  105. }
  106. }
  107. this.commit("cart/save", state)
  108. },
  109. numchange(context, payload) {
  110. for (let sellerIndex in state) {
  111. for (let productIndex in state[sellerIndex].products) {
  112. if (payload.id === state[sellerIndex].products[productIndex].id &&
  113. payload.spec_index === state[sellerIndex].products[productIndex].spec_index) {
  114. state[sellerIndex].products[productIndex].num = payload.num
  115. }
  116. }
  117. }
  118. this.commit("cart/save", state)
  119. },
  120. save(state) {
  121. uni.setStorageSync("cart", state)
  122. }
  123. }
  124. const actions = {
  125. add(context, payload) {
  126. return new Promise((resolve, reject) => {
  127. this._vm.$http.get({
  128. url: "/product",
  129. data: {
  130. id: payload.id
  131. },
  132. success: (res) => {
  133. // console.log(res.data.data.specs)
  134. const spec = JSON.parse(res.data.data.specs)[payload.specIndex];
  135. const data = {
  136. id: res.data.data.id,
  137. images: res.data.data.images,
  138. name: res.data.data.name,
  139. spec_index: payload.specIndex,
  140. spec_name: spec.name,
  141. spec_image: spec.image,
  142. spec_org_price: Number(spec.org_price).toFixed(2),
  143. spec_price: Number(spec.price).toFixed(2),
  144. spec_stock: spec.stock,
  145. seller_id: res.data.data.user_id,
  146. seller_nickname: res.data.data.user.nickname,
  147. num: payload.num,
  148. time: new Date().getTime(),
  149. checked: false
  150. }
  151. context.commit('add', data)
  152. resolve();
  153. }
  154. })
  155. })
  156. },
  157. remove(context, payload) {
  158. context.commit('remove', payload)
  159. },
  160. load(context) {
  161. let cart = uni.getStorageSync("cart");
  162. for (let sellerIndex in cart) {
  163. for (let productIndex in cart[sellerIndex].products) {
  164. context.dispatch("add", {
  165. id: cart[sellerIndex].products[productIndex].id,
  166. num: cart[sellerIndex].products[productIndex].num,
  167. specIndex: cart[sellerIndex].products[productIndex].spec_index
  168. })
  169. }
  170. }
  171. }
  172. }
  173. export default {
  174. namespaced: true,
  175. state,
  176. getters,
  177. actions,
  178. mutations
  179. }