家政小程序
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.js 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. const $ = global;
  2. new $.Page({
  3. data: {
  4. goodsList: [],
  5. selectedAmount: 0,
  6. totalPrice: 0,
  7. isEditing: false, // 是否正在编辑
  8. hasAmountModify: false
  9. },
  10. onShow() {
  11. $.wx.showToast({
  12. title: '加载中'
  13. }, 'loading');
  14. this.setData({
  15. hasAmountModify: false,
  16. isEditing: false
  17. });
  18. this.getCarts();
  19. },
  20. getCarts() {
  21. $.request('shop/getCartList', 'GET', {}).then((res) => {
  22. $.wx.hideToast('loading');
  23. if (res.data && res.data.length > 0) {
  24. this.setData({
  25. goodsList: res.data
  26. });
  27. this.calAmount();
  28. } else {
  29. this.setData({
  30. goodsList: [],
  31. isEditing: false,
  32. selectedAmount: 0,
  33. totalPrice: 0
  34. });
  35. }
  36. });
  37. },
  38. changeEditStatus() {
  39. this.setData({
  40. isEditing: !this.data.isEditing
  41. });
  42. if (!this.data.isEditing && this.data.hasAmountModify) {
  43. this.confirmModify();
  44. }
  45. },
  46. // 删除指定商品
  47. deleteGoods(e) {
  48. const idx = e.currentTarget.dataset.index;
  49. const id = e.currentTarget.dataset.id;
  50. const goodsList = this.data.goodsList;
  51. $.wx.showToast({
  52. title: '删除中'
  53. }, 'loading');
  54. $.request('shop/deleteCart', 'POST', {
  55. cart: id
  56. }).then(() => {
  57. $.wx.hideToast('loading');
  58. if (goodsList.length > 0) {
  59. goodsList.splice(idx, 1);
  60. this.setData({
  61. goodsList
  62. });
  63. if (goodsList.length === 0) {
  64. this.setData({
  65. isEditing: false
  66. });
  67. }
  68. this.calAmount();
  69. }
  70. });
  71. },
  72. // 删除选中的商品
  73. deleteSelected() {
  74. let ids = '';
  75. const goodsList = this.data.goodsList;
  76. goodsList.forEach((g) => {
  77. if (g.checked) {
  78. ids = ids + (ids === '' ? g.cartId : (';' + g.cartId));
  79. }
  80. });
  81. if (ids.length > 0) {
  82. $.wx.showToast({
  83. title: '删除中'
  84. }, 'loading');
  85. $.request('shop/deleteCart', 'POST', {
  86. cart: ids
  87. }).then(() => {
  88. this.getCarts();
  89. });
  90. } else {
  91. $.wx.showToast({
  92. title: '请选择需要删除的商品'
  93. });
  94. }
  95. },
  96. changeSelect(e) {
  97. const idx = e.currentTarget.dataset.index;
  98. const goodsList = this.data.goodsList;
  99. goodsList[idx].checked = !goodsList[idx].checked;
  100. this.setData({
  101. goodsList
  102. });
  103. this.calAmount();
  104. },
  105. changeSelectAll() {
  106. let goodsList = this.data.goodsList;
  107. let selectCount = 0;
  108. for (let goods of goodsList) {
  109. if (goods.checked) {
  110. selectCount++;
  111. }
  112. }
  113. if (selectCount < goodsList.length) {
  114. // 切到全选
  115. goodsList = goodsList.map((g) => {
  116. g.checked = true;
  117. return g;
  118. });
  119. } else {
  120. // 全不选
  121. goodsList = goodsList.map((g) => {
  122. g.checked = false;
  123. return g;
  124. });
  125. }
  126. this.setData({
  127. goodsList
  128. });
  129. this.calAmount();
  130. },
  131. minusAmount(e) {
  132. const idx = e.currentTarget.dataset.index;
  133. const goodsList = this.data.goodsList;
  134. if (goodsList[idx].number > 1) {
  135. goodsList[idx].number--;
  136. this.setData({
  137. goodsList,
  138. hasAmountModify: true
  139. });
  140. this.calAmount();
  141. }
  142. },
  143. addAmount(e) {
  144. const idx = e.currentTarget.dataset.index;
  145. const goodsList = this.data.goodsList;
  146. goodsList[idx].number++;
  147. this.setData({
  148. goodsList,
  149. hasAmountModify: true
  150. });
  151. this.calAmount();
  152. },
  153. calAmount() {
  154. const goodsList = this.data.goodsList;
  155. let totalPrice = 0;
  156. let selectedAmount = 0;
  157. goodsList.forEach((g) => {
  158. if (g.checked) {
  159. selectedAmount++;
  160. totalPrice += g.price * g.number;
  161. }
  162. });
  163. this.setData({
  164. selectedAmount,
  165. totalPrice
  166. });
  167. },
  168. confirmModify() {
  169. let carts = [];
  170. const goodsList = this.data.goodsList;
  171. if (goodsList.length === 0) return;
  172. goodsList.forEach((g) => {
  173. carts.push({
  174. [`${g.cartId}`]: g.number
  175. });
  176. });
  177. $.request('shop/updateCart', 'POST', {
  178. cart: JSON.stringify(carts)
  179. }).then(() => {
  180. this.setData({
  181. hasAmountModify: false
  182. });
  183. });
  184. },
  185. toSettle() {
  186. const products = [];
  187. const goodsList = this.data.goodsList;
  188. if (goodsList.length === 0) return;
  189. goodsList.forEach((g) => {
  190. if (g.checked) {
  191. g.amount = g.number;
  192. products.push(g);
  193. }
  194. });
  195. if (products.length === 0) {
  196. return $.wx.showToast({
  197. title: '请先选择购买商品'
  198. });
  199. }
  200. $.router.goto({
  201. path: '/pages/orderDetail/index',
  202. params: {
  203. isCabinet: false,
  204. products
  205. },
  206. query: {
  207. source: 'cart'
  208. }
  209. });
  210. }
  211. });