shopCart.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. const getReq = require('./../../config.js').getReq
  2. import Bundle from '../../utils/Bundle'
  3. import recordSource from '../../utils/recordSource'
  4. let app = getApp()
  5. Page({
  6. data: {
  7. loadAnimation: true,
  8. free_info: [],
  9. summary: [],
  10. cart_list: [],
  11. n_cart_list: [],
  12. all_checked: false,
  13. allPrice: 0,
  14. allGoodsPrice: 0,
  15. hasmore: false,
  16. curpage: 0,
  17. special_datas: {},
  18. prop_special: [],
  19. summery: [],
  20. canShow: false,
  21. fromSource: '',
  22. firstLoad: true
  23. },
  24. onLoad: function () {
  25. },
  26. onShow: function () {
  27. this.setData({
  28. loadAnimation: true,
  29. free_info: [],
  30. summary: [],
  31. cart_list: [],
  32. n_cart_list: [],
  33. all_checked: false,
  34. allPrice: 0,
  35. allGoodsPrice: 0,
  36. hasmore: false,
  37. curpage: 0,
  38. special_datas: {},
  39. prop_special: [],
  40. summery: []
  41. });
  42. this.req_datas();
  43. this.getFavorite()
  44. },
  45. getFavorite() {
  46. let self = this
  47. getReq({
  48. act: 'member_bonus',
  49. op: 'match_goodsex',
  50. curpage: 1
  51. }, function (res) {
  52. if (res.code == 200) {
  53. let special_datas = res.datas
  54. let prop_special = res.datas.special_list
  55. let summery = res.datas.summary
  56. self.setData({
  57. special_datas,
  58. prop_special,
  59. summery
  60. })
  61. }
  62. })
  63. },
  64. getCartList(cart_list, summary, bundling) {
  65. let summaryMap = new Map()
  66. let bundlingMap = new Map()
  67. summary.map(item => {
  68. summaryMap.set(item['goods_id'], item)
  69. })
  70. if (bundling.length) {
  71. bundling.map(item => {
  72. bundlingMap.set(item['bl_id'], item)
  73. })
  74. }
  75. let n_cart_list = new Bundle(cart_list, summaryMap, bundlingMap).createOrders()
  76. return n_cart_list
  77. },
  78. req_datas() {
  79. let self = this;
  80. let fromSource = this.data.fromSource
  81. if (this.data.firstLoad) {
  82. fromSource = recordSource(app, `act=cart&op=list&minest_cartid=${self.data.curpage}&client_type=mini`);
  83. this.setData({
  84. fromSource: app.globalData.fromSource
  85. })
  86. }
  87. else {
  88. app.setFromSource(this.data.fromSource)
  89. }
  90. getReq({
  91. act: 'cart',
  92. op: 'list',
  93. minest_cartid: self.data.curpage,
  94. from: fromSource
  95. }, function (res) {
  96. if (res.code == 200) {
  97. let hasmore = res.datas.mobile_page.hasmore;
  98. let free_info = res.datas.free_info;
  99. let summary_datas = res.datas.summary;
  100. let cart_list = res.datas.cart_list;
  101. let bundling = res.datas.bundling
  102. let summary = [];
  103. if (cart_list.length <= 0) {
  104. self.setData({
  105. free_info: free_info || self.data.free_info,
  106. loadAnimation: false
  107. });
  108. return;
  109. }
  110. for (let item of cart_list) {
  111. item.checked = false;
  112. }
  113. for (let i = 0; i < cart_list.length; i++) {
  114. for (let j = 0; j < summary_datas.length; j++) {
  115. if (cart_list[i].goods_id == summary_datas[j].goods_id) {
  116. summary.push(summary_datas[j]);
  117. break;
  118. }
  119. }
  120. }
  121. if (hasmore) {
  122. let lastCartListId = cart_list[cart_list.length - 1].cart_id;
  123. self.setData({
  124. hasmore: true,
  125. curpage: lastCartListId
  126. })
  127. }
  128. else {
  129. self.setData({
  130. canShow: true,
  131. hasmore: false
  132. })
  133. }
  134. cart_list = self.getCartList(cart_list, summary_datas, bundling);
  135. let localSummary = self.data.summary;
  136. let localCartList = self.data.cart_list;
  137. self.setData({
  138. free_info: free_info || self.data.free_info,
  139. summary: localSummary.concat(summary),
  140. cart_list: localCartList.concat(cart_list),
  141. loadAnimation: false,
  142. firstLoad: false
  143. });
  144. }
  145. })
  146. },
  147. goods_checked(e) {
  148. let cartid = e.currentTarget.dataset.cartid;
  149. let cart_list = this.data.cart_list;
  150. let all_checked_state = 0;
  151. for (let item of cart_list) {
  152. if (item.cart_id == cartid) {
  153. item.checked = !item.checked;
  154. }
  155. }
  156. for (let item of cart_list) {
  157. if (item.checked) {
  158. all_checked_state = all_checked_state + 1;
  159. }
  160. }
  161. if (all_checked_state == cart_list.length) {
  162. all_checked_state = true;
  163. }
  164. else {
  165. all_checked_state = false;
  166. }
  167. this.setData({
  168. cart_list,
  169. all_checked: all_checked_state
  170. });
  171. this.total();
  172. },
  173. all_checked() {
  174. let cart_list = this.data.cart_list;
  175. let all_checked_state = this.data.all_checked;
  176. for (let item of cart_list) {
  177. item.checked = !all_checked_state;
  178. }
  179. this.setData({
  180. cart_list,
  181. all_checked: !all_checked_state
  182. });
  183. this.total();
  184. },
  185. req_goods_num(cart_id, quantity, callback) {
  186. let self = this;
  187. getReq({
  188. act: 'cart',
  189. op: 'edit',
  190. cart_id,
  191. quantity
  192. }, function (res) {
  193. if (res.code == 200) {
  194. let goods_num = res.datas.goods_num;
  195. let cart_list = self.data.cart_list;
  196. for (let item of cart_list) {
  197. if (item.cart_id == cart_id) {
  198. item.goods_num = goods_num;
  199. }
  200. }
  201. self.setData({
  202. cart_list
  203. });
  204. callback;
  205. for (let i = 0; i < self.data.cart_list.length; i++) {
  206. if (self.data.cart_list[i].checked) {
  207. self.total();
  208. break;
  209. }
  210. }
  211. }
  212. else {
  213. wx.showToast({
  214. title: res.message,
  215. icon: "none"
  216. })
  217. }
  218. })
  219. },
  220. goods_num_handle(e) {
  221. let self = this;
  222. let cart_id = e.target.dataset.cartid;
  223. let num = e.target.dataset.num;
  224. let compute_function = e.target.dataset.function;
  225. let goods_id = e.target.dataset.goodsid;
  226. let quantity = 1;
  227. if (compute_function == 'add') {
  228. quantity = num + quantity;
  229. this.req_goods_num(cart_id, quantity);
  230. }
  231. else {
  232. quantity = num - quantity;
  233. if (quantity <= 0) {
  234. this.cancal_cart(e, goods_id, cart_id);
  235. }
  236. else {
  237. self.req_goods_num(cart_id, quantity);
  238. }
  239. }
  240. },
  241. del_cart(cart_id, goods_id) {
  242. let summary = this.data.summary;
  243. let cart_list = this.data.cart_list;
  244. for (let i = 0; i < summary.length; i++) {
  245. if (summary[i].goods_id == goods_id) {
  246. summary.splice(i, 1);
  247. }
  248. }
  249. for (let i = 0; i < cart_list.length; i++) {
  250. if (cart_list[i].goods_id == goods_id) {
  251. cart_list.splice(i, 1);
  252. }
  253. }
  254. this.setData({
  255. summary,
  256. cart_list
  257. })
  258. },
  259. cancal_cart(e, goodsid, cartid) {
  260. let self = this;
  261. let goods_id = e.target.dataset.goodsid || goodsid;
  262. let cart_id = e.target.dataset.cartid || cartid;
  263. wx.showModal({
  264. title: "提示",
  265. content: "确定要删除吗?",
  266. success: function (res) {
  267. if (res.confirm) {
  268. self.req_goods_num(cart_id, 0, self.del_cart(cart_id, goods_id));
  269. } else if (res.cancel) {
  270. return;
  271. }
  272. }
  273. })
  274. },
  275. total() {
  276. let self = this;
  277. let cart_item = [];
  278. for (let item of this.data.cart_list) {
  279. if (item.checked) {
  280. cart_item.push(item.cart_id);
  281. }
  282. }
  283. if (cart_item.length <= 0) {
  284. self.setData({
  285. allPrice: 0,
  286. allGoodsPrice: 0
  287. })
  288. }
  289. let carts = cart_item.join(",");
  290. getReq({
  291. act: 'member_buy',
  292. op: 'calc_cash',
  293. ifcart: 1,
  294. cart_id: carts
  295. }, function (res) {
  296. if (res.code == 200) {
  297. let { payinfo } = res.datas
  298. let allPrice = parseFloat(payinfo['pay_car_pred'])
  299. let allGoodsPrice = parseFloat(payinfo['pay_car_nopred'])
  300. self.setData({
  301. allPrice,
  302. allGoodsPrice
  303. })
  304. }
  305. })
  306. },
  307. onReachBottom() {
  308. let self = this;
  309. let hasmore = this.data.hasmore;
  310. if (hasmore) {
  311. let req_curpage = this.data.curpage;
  312. getReq({
  313. act: 'cart',
  314. op: 'list',
  315. minest_cartid: req_curpage
  316. }, function (res) {
  317. self.req_datas();
  318. })
  319. }
  320. },
  321. settlement() {
  322. const cart_id_list = [];
  323. for (let cart_item of this.data.cart_list) {
  324. if (cart_item.checked) {
  325. cart_id_list.push(cart_item.cart_id);
  326. }
  327. }
  328. if (cart_id_list.length <= 0) {
  329. wx.showToast({
  330. title: "请最少选择一件商品",
  331. icon: "none"
  332. });
  333. return;
  334. }
  335. let cart_list = cart_id_list.join(',');
  336. wx.navigateTo({
  337. url: `/pages/confirmOrder/confirmOrder?iscart=1&cart_id=${cart_list}`
  338. })
  339. },
  340. skip_index() {
  341. wx.switchTab({
  342. url: "/pages/index/index"
  343. })
  344. },
  345. toDetails(e) {
  346. let goods_id = e.currentTarget.dataset.goodsid
  347. wx.navigateTo({
  348. url: `/pages/details/details?goods_id=${goods_id}&title=商品详情`
  349. })
  350. }
  351. })