basket.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. // pages/basket/basket.js
  2. var http = require("../../utils/http.js");
  3. var util = require("../../utils/util.js");
  4. const Big = require("../../utils/big.min.js");
  5. Page({
  6. /**
  7. * 页面的初始数据
  8. */
  9. data: {
  10. // picDomain: config.picDomain,
  11. shopCartOrders: [], //所有店铺的数据
  12. shopCartItemDiscounts: [],
  13. finalMoney: 0,
  14. totalMoney: 0,
  15. subtractMoney: 0,
  16. allChecked: true,
  17. hideModal: true, //模态框的状态 true-隐藏 false-显示
  18. hidePriModal: true, //金额明细模态框的状态 true-隐藏 false-显示
  19. animationData: {},
  20. prodDiscounts: [],
  21. discountid: -1,
  22. basketId: 0,
  23. toPayArray: []
  24. },
  25. /**
  26. * 生命周期函数--监听页面加载
  27. */
  28. onLoad: function (options) {
  29. },
  30. /**
  31. * 生命周期函数--监听页面初次渲染完成
  32. */
  33. onReady: function () {
  34. },
  35. /**
  36. * 生命周期函数--监听页面显示
  37. */
  38. onShow: function () {
  39. //加载购物车
  40. this.loadBasketData(null)
  41. },
  42. /**
  43. * 生命周期函数--监听页面隐藏
  44. */
  45. onHide: function () {
  46. this.setData({
  47. shopCartOrders: [],
  48. })
  49. },
  50. /**
  51. * 加载订单数据
  52. */
  53. loadBasketData(discountData) {
  54. var reqData = [];
  55. var shopCartIds = [];
  56. if (discountData) {
  57. reqData.push(discountData);
  58. this.data.shopCartOrders.forEach(shopCart => {
  59. shopCart.shopCartItemDiscounts.forEach(cItems => {
  60. cItems.shopCartItems.forEach(pItem => {
  61. if (pItem.checked) {
  62. shopCartIds.push(pItem.basketId);
  63. }
  64. })
  65. })
  66. })
  67. }
  68. //加载购物车
  69. var params = {
  70. url: "/p/shopCart/info/1",
  71. method: "POST",
  72. data: reqData,
  73. dontTrunLogin: true,
  74. callBack: res => {
  75. let img=''
  76. res.forEach(item=>{
  77. item.shopCartItemDiscounts.forEach(cart=>{
  78. cart.shopCartItems.map(e=>{
  79. img=e.pic.split(',')
  80. e.pic=img[0]
  81. })
  82. })
  83. })
  84. if (res.length > 0) {
  85. var shopCartOrders = res;
  86. if (shopCartIds.length == 0) { // 初始加载
  87. this.setData({
  88. shopCartOrders: shopCartOrders,
  89. });
  90. } else { // 修改购物车
  91. var checkedLog = [] // 之前勾选的basketId数组
  92. this.data.shopCartOrders.forEach(shopCart => {
  93. shopCart.shopCartItemDiscounts.forEach(shopCartItemDiscount => {
  94. shopCartItemDiscount.shopCartItems.forEach(shopCartItem => {
  95. if (shopCartItem.checked) {
  96. checkedLog.push(shopCartItem.basketId)
  97. }
  98. })
  99. })
  100. })
  101. shopCartOrders.forEach(newShopCart => {
  102. newShopCart.shopCartItemDiscounts.forEach(newShopCartItemDiscount => {
  103. newShopCartItemDiscount.shopCartItems.forEach(shopCartItem => {
  104. if (checkedLog.includes(shopCartItem.basketId)) {
  105. shopCartItem.checked = true
  106. }
  107. })
  108. });
  109. })
  110. this.setData({
  111. shopCartOrders
  112. })
  113. }
  114. } else {
  115. this.setData({
  116. shopCartOrders: [],
  117. });
  118. }
  119. this.checkAllSelected()
  120. this.calTotalPrice(); //计算总价
  121. },
  122. };
  123. http.request(params);
  124. http.getCartCount(); //重新计算购物车总数量
  125. },
  126. /**
  127. * 去结算
  128. */
  129. toFirmOrder: function () {
  130. var shopCartOrders = this.data.shopCartOrders;
  131. var basketIds = [];
  132. let arr =[]
  133. shopCartOrders.forEach(shopCart => {
  134. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  135. shopCartItemDiscounts.forEach(shopCartItemDiscount => {
  136. shopCartItemDiscount.shopCartItems.forEach(shopCartItem => {
  137. if (shopCartItem.checked) {
  138. arr.push({...shopCartItem})
  139. basketIds.push(shopCartItem.basketId)
  140. }
  141. })
  142. })
  143. })
  144. if (!basketIds.length) {
  145. wx.showToast({
  146. title: '请选择商品',
  147. icon: "none"
  148. })
  149. return
  150. }
  151. const result =arr.every(item => item.shopId === arr[0].shopId);
  152. console.log(result);
  153. if (result==false) {
  154. wx.showToast({
  155. title: '多个门店不可同时结算~',
  156. icon: "none"
  157. })
  158. return
  159. }
  160. wx.setStorageSync("basketIds", JSON.stringify(basketIds));
  161. wx.navigateTo({
  162. url: '/pages/submit-order/submit-order?orderEntry=0',
  163. })
  164. },
  165. /**
  166. * 全选
  167. */
  168. onSelAll: function () {
  169. var allChecked = this.data.allChecked;
  170. allChecked = !allChecked; //改变状态
  171. var shopCartOrders = this.data.shopCartOrders;
  172. if (allChecked) {
  173. this.setData({
  174. toPayArray: shopCartOrders
  175. })
  176. } else {
  177. this.setData({
  178. toPayArray: []
  179. })
  180. }
  181. shopCartOrders.forEach(shopCart => {
  182. shopCart.checked = allChecked;
  183. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  184. for (var i = 0; i < shopCartItemDiscounts.length; i++) {
  185. var cItems = shopCartItemDiscounts[i].shopCartItems;
  186. for (var j = 0; j < cItems.length; j++) {
  187. cItems[j].checked = allChecked;
  188. }
  189. }
  190. })
  191. this.setData({
  192. allChecked: allChecked,
  193. shopCartOrders: shopCartOrders
  194. });
  195. this.calTotalPrice(); //计算总价
  196. },
  197. /**
  198. * 每一项的选择事件
  199. */
  200. onSelectedItem: function (e) {
  201. var index = e.currentTarget.dataset.index; // 获取data- 传进来的index
  202. var scindex = e.currentTarget.dataset.scindex;
  203. var topindex = e.currentTarget.dataset.topindex;
  204. var shopCartOrders = this.data.shopCartOrders;
  205. var shopCartItemDiscounts = shopCartOrders[topindex].shopCartItemDiscounts; // 获取购物车列表
  206. var checked = shopCartItemDiscounts[scindex].shopCartItems[index].checked; // 获取当前商品的选中状态
  207. shopCartItemDiscounts[scindex].shopCartItems[index].checked = !checked; // 改变状态
  208. this.setData({
  209. shopCartOrders: shopCartOrders
  210. });
  211. this.checkAllSelected(); //检查全选状态
  212. this.calTotalPrice(); //计算总价
  213. },
  214. /**
  215. * 每一个店铺的选择
  216. */
  217. onSelectedShopItem: function (e) {
  218. let arr=[]
  219. var topindex = e.currentTarget.dataset.topindex;
  220. var shopCartOrders = this.data.shopCartOrders;
  221. var checked = shopCartOrders[topindex].checked; // 获取当前商品的选中状态
  222. shopCartOrders[topindex].checked = !checked; // 改变状态
  223. if (shopCartOrders[topindex].checked) {
  224. arr.push({...e})
  225. this.setData({
  226. toPayArray:arr
  227. })
  228. }else{
  229. this.setData({
  230. toPayArray:[]
  231. })
  232. }
  233. shopCartOrders[topindex].shopCartItemDiscounts.forEach(shopCartItem => {
  234. var cItems = shopCartItem.shopCartItems;
  235. for (var j = 0; j < cItems.length; j++) {
  236. cItems[j].checked = !checked;
  237. }
  238. })
  239. this.setData({
  240. shopCartOrders: shopCartOrders
  241. });
  242. this.checkAllSelected(); //检查全选状态
  243. this.calTotalPrice(); //计算总价
  244. },
  245. /**
  246. * 检查全选状态
  247. */
  248. checkAllSelected: function () {
  249. var allChecked = true;
  250. var shopCartOrders = this.data.shopCartOrders;
  251. var flag = false;
  252. shopCartOrders.forEach(shopCart => {
  253. var shopChecked = true;
  254. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  255. for (var i = 0; i < shopCartItemDiscounts.length; i++) {
  256. var cItems = shopCartItemDiscounts[i].shopCartItems;
  257. for (var j = 0; j < cItems.length; j++) {
  258. if (!cItems[j].checked) {
  259. shopChecked = false;
  260. allChecked = false;
  261. flag = true;
  262. break;
  263. }
  264. }
  265. if (flag) {
  266. break;
  267. }
  268. }
  269. shopCart.checked = shopChecked;
  270. })
  271. this.setData({
  272. allChecked: allChecked,
  273. shopCartOrders: shopCartOrders
  274. });
  275. },
  276. /**
  277. * 计算购物车总额
  278. */
  279. calTotalPrice: function () {
  280. var shopCartOrders = this.data.shopCartOrders;
  281. var shopCartIds = [];
  282. shopCartOrders.forEach(shopCart => {
  283. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  284. for (var i = 0; i < shopCartItemDiscounts.length; i++) {
  285. var cItems = shopCartItemDiscounts[i].shopCartItems;
  286. for (var j = 0; j < cItems.length; j++) {
  287. if (cItems[j].checked) {
  288. shopCartIds.push(cItems[j].basketId);
  289. }
  290. }
  291. }
  292. });
  293. var ths = this;
  294. wx.showLoading();
  295. var params = {
  296. url: "/p/shopCart/totalPay",
  297. method: "POST",
  298. data: shopCartIds,
  299. callBack: function (res) {
  300. ths.setData({
  301. finalMoney: res.finalMoney,
  302. totalMoney: res.totalMoney,
  303. subtractMoney: res.subtractMoney
  304. });
  305. wx.hideLoading();
  306. }
  307. };
  308. http.request(params);
  309. },
  310. /**
  311. * 减少数量
  312. */
  313. onCountMinus: function (e) {
  314. var index = e.currentTarget.dataset.index;
  315. var scindex = e.currentTarget.dataset.scindex;
  316. var topindex = e.currentTarget.dataset.topindex;
  317. var shopCartOrders = this.data.shopCartOrders;
  318. var shopCartItemDiscounts = shopCartOrders[topindex].shopCartItemDiscounts;
  319. var prodCount = shopCartItemDiscounts[scindex].shopCartItems[index].prodCount;
  320. if (prodCount > 1) {
  321. this.updateCount(shopCartOrders, topindex, scindex, index, -1);
  322. }
  323. },
  324. /**
  325. * 增加数量
  326. */
  327. onCountPlus: function (e) {
  328. var index = e.currentTarget.dataset.index;
  329. var scindex = e.currentTarget.dataset.scindex;
  330. var topindex = e.currentTarget.dataset.topindex;
  331. var shopCartOrders = this.data.shopCartOrders;
  332. this.updateCount(shopCartOrders, topindex, scindex, index, 1);
  333. },
  334. /**
  335. * 改变购物车数量接口
  336. */
  337. updateCount: function (shopCartOrders, topindex, scindex, index, prodCount) {
  338. var shopCartItemDiscounts = shopCartOrders[topindex].shopCartItemDiscounts;
  339. var ths = this;
  340. wx.showLoading({
  341. mask: true
  342. });
  343. var params = {
  344. url: "/p/shopCart/changeItem",
  345. method: "POST",
  346. data: {
  347. count: prodCount,
  348. prodId: shopCartItemDiscounts[scindex].shopCartItems[index].prodId,
  349. skuId: shopCartItemDiscounts[scindex].shopCartItems[index].skuId,
  350. shopId: shopCartItemDiscounts[scindex].shopCartItems[index].shopId,
  351. platform:1
  352. },
  353. callBack: function (res) {
  354. shopCartItemDiscounts[scindex].shopCartItems[index].prodCount += prodCount;
  355. ths.setData({
  356. shopCartOrders: shopCartOrders
  357. });
  358. var discountData = {
  359. basketId: shopCartItemDiscounts[scindex].shopCartItems[index].basketId,
  360. discountId: shopCartItemDiscounts[scindex].shopCartItems[index].discountId
  361. }
  362. ths.loadBasketData(discountData)
  363. wx.hideLoading();
  364. }
  365. };
  366. http.request(params);
  367. },
  368. /**
  369. * 删除购物车商品
  370. */
  371. onDelBasket: function () {
  372. var ths = this;
  373. var shopCartOrders = this.data.shopCartOrders;
  374. var basketIds = [];
  375. shopCartOrders.forEach(shopCart => {
  376. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  377. for (var i = 0; i < shopCartItemDiscounts.length; i++) {
  378. var cItems = shopCartItemDiscounts[i].shopCartItems;
  379. for (var j = 0; j < cItems.length; j++) {
  380. if (cItems[j].checked) {
  381. basketIds.push(cItems[j].basketId);
  382. }
  383. }
  384. }
  385. })
  386. if (basketIds.length == 0) {
  387. wx.showToast({
  388. title: '请选择商品',
  389. icon: "none"
  390. })
  391. } else {
  392. wx.showModal({
  393. title: '',
  394. content: '确认要删除选中的商品吗?',
  395. confirmColor: "#eb2444",
  396. success(res) {
  397. if (res.confirm) {
  398. wx.showLoading({
  399. mask: true
  400. });
  401. var params = {
  402. url: "/p/shopCart/deleteItem",
  403. method: "DELETE",
  404. data: basketIds,
  405. callBack: function (res) {
  406. wx.hideLoading();
  407. ths.onShow();
  408. }
  409. };
  410. http.request(params);
  411. }
  412. }
  413. })
  414. }
  415. },
  416. /**
  417. * 点击满减活动 弹窗
  418. */
  419. onChooseDiscount: function (e) {
  420. var that = this;
  421. var basketId = e.currentTarget.dataset.basketid
  422. var discounts = e.currentTarget.dataset.discounts
  423. var discountid = e.currentTarget.dataset.discountid
  424. this.setData({
  425. prodDiscounts: discounts,
  426. hideModal: false,
  427. discountid: discountid,
  428. basketId: basketId
  429. });
  430. var animation = wx.createAnimation({
  431. duration: 500,
  432. timingFunction: 'ease',
  433. })
  434. this.animation = animation
  435. setTimeout(function () {
  436. that.fadeIn();
  437. }, 100)
  438. },
  439. radioChange(e) {
  440. this.loadBasketData({
  441. basketId: this.data.basketId,
  442. discountId: e.detail.value
  443. });
  444. this.setData({
  445. hideModal: true
  446. });
  447. },
  448. // 隐藏遮罩层
  449. hideModal: function () {
  450. var that = this;
  451. var animation = wx.createAnimation({
  452. duration: 600,
  453. timingFunction: 'ease',
  454. })
  455. this.animation = animation
  456. that.fadeDown();
  457. setTimeout(function () {
  458. that.setData({
  459. hideModal: true
  460. })
  461. }, 500)
  462. },
  463. //动画集
  464. fadeIn: function () {
  465. this.animation.translateY(0).step()
  466. this.setData({
  467. animationData: this.animation.export() //动画实例的export方法导出动画数据传递给组件的animation属性
  468. })
  469. },
  470. fadeDown: function () {
  471. this.animation.translateY(300).step()
  472. this.setData({
  473. animationData: this.animation.export(),
  474. })
  475. },
  476. /**
  477. * 跳转到商品详情`
  478. */
  479. toProdPage(e) {
  480. wx.navigateTo({
  481. url: '/pages/prod/prod?prodid=' + e.currentTarget.dataset.prodid,
  482. })
  483. },
  484. /**
  485. * 金额明细弹窗
  486. */
  487. showPriDet() {
  488. var that = this;
  489. if (this.data.hidePriModal == true) {
  490. this.setData({
  491. hidePriModal: false
  492. })
  493. var animation = wx.createAnimation({
  494. duration: 500,
  495. timingFunction: 'ease',
  496. })
  497. this.animation = animation
  498. setTimeout(function () {
  499. that.fadeIn();
  500. }, 100)
  501. } else if (this.data.hidePriModal == false) {
  502. this.hidePriModal()
  503. }
  504. },
  505. hidePriModal() {
  506. var that = this;
  507. var animation = wx.createAnimation({
  508. duration: 800,
  509. timingFunction: 'ease',
  510. })
  511. this.animation = animation
  512. that.fadeDown();
  513. setTimeout(function () {
  514. that.setData({
  515. hidePriModal: true
  516. })
  517. }, 680)
  518. },
  519. })