basket.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  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",
  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. },
  352. callBack: function (res) {
  353. shopCartItemDiscounts[scindex].shopCartItems[index].prodCount += prodCount;
  354. ths.setData({
  355. shopCartOrders: shopCartOrders
  356. });
  357. var discountData = {
  358. basketId: shopCartItemDiscounts[scindex].shopCartItems[index].basketId,
  359. discountId: shopCartItemDiscounts[scindex].shopCartItems[index].discountId
  360. }
  361. ths.loadBasketData(discountData)
  362. wx.hideLoading();
  363. }
  364. };
  365. http.request(params);
  366. },
  367. /**
  368. * 删除购物车商品
  369. */
  370. onDelBasket: function () {
  371. var ths = this;
  372. var shopCartOrders = this.data.shopCartOrders;
  373. var basketIds = [];
  374. shopCartOrders.forEach(shopCart => {
  375. var shopCartItemDiscounts = shopCart.shopCartItemDiscounts;
  376. for (var i = 0; i < shopCartItemDiscounts.length; i++) {
  377. var cItems = shopCartItemDiscounts[i].shopCartItems;
  378. for (var j = 0; j < cItems.length; j++) {
  379. if (cItems[j].checked) {
  380. basketIds.push(cItems[j].basketId);
  381. }
  382. }
  383. }
  384. })
  385. if (basketIds.length == 0) {
  386. wx.showToast({
  387. title: '请选择商品',
  388. icon: "none"
  389. })
  390. } else {
  391. wx.showModal({
  392. title: '',
  393. content: '确认要删除选中的商品吗?',
  394. confirmColor: "#eb2444",
  395. success(res) {
  396. if (res.confirm) {
  397. wx.showLoading({
  398. mask: true
  399. });
  400. var params = {
  401. url: "/p/shopCart/deleteItem",
  402. method: "DELETE",
  403. data: basketIds,
  404. callBack: function (res) {
  405. wx.hideLoading();
  406. ths.onShow();
  407. }
  408. };
  409. http.request(params);
  410. }
  411. }
  412. })
  413. }
  414. },
  415. /**
  416. * 点击满减活动 弹窗
  417. */
  418. onChooseDiscount: function (e) {
  419. var that = this;
  420. var basketId = e.currentTarget.dataset.basketid
  421. var discounts = e.currentTarget.dataset.discounts
  422. var discountid = e.currentTarget.dataset.discountid
  423. this.setData({
  424. prodDiscounts: discounts,
  425. hideModal: false,
  426. discountid: discountid,
  427. basketId: basketId
  428. });
  429. var animation = wx.createAnimation({
  430. duration: 500,
  431. timingFunction: 'ease',
  432. })
  433. this.animation = animation
  434. setTimeout(function () {
  435. that.fadeIn();
  436. }, 100)
  437. },
  438. radioChange(e) {
  439. this.loadBasketData({
  440. basketId: this.data.basketId,
  441. discountId: e.detail.value
  442. });
  443. this.setData({
  444. hideModal: true
  445. });
  446. },
  447. // 隐藏遮罩层
  448. hideModal: function () {
  449. var that = this;
  450. var animation = wx.createAnimation({
  451. duration: 600,
  452. timingFunction: 'ease',
  453. })
  454. this.animation = animation
  455. that.fadeDown();
  456. setTimeout(function () {
  457. that.setData({
  458. hideModal: true
  459. })
  460. }, 500)
  461. },
  462. //动画集
  463. fadeIn: function () {
  464. this.animation.translateY(0).step()
  465. this.setData({
  466. animationData: this.animation.export() //动画实例的export方法导出动画数据传递给组件的animation属性
  467. })
  468. },
  469. fadeDown: function () {
  470. this.animation.translateY(300).step()
  471. this.setData({
  472. animationData: this.animation.export(),
  473. })
  474. },
  475. /**
  476. * 跳转到商品详情`
  477. */
  478. toProdPage(e) {
  479. wx.navigateTo({
  480. url: '/pages/prod/prod?prodid=' + e.currentTarget.dataset.prodid,
  481. })
  482. },
  483. /**
  484. * 金额明细弹窗
  485. */
  486. showPriDet() {
  487. var that = this;
  488. if (this.data.hidePriModal == true) {
  489. this.setData({
  490. hidePriModal: false
  491. })
  492. var animation = wx.createAnimation({
  493. duration: 500,
  494. timingFunction: 'ease',
  495. })
  496. this.animation = animation
  497. setTimeout(function () {
  498. that.fadeIn();
  499. }, 100)
  500. } else if (this.data.hidePriModal == false) {
  501. this.hidePriModal()
  502. }
  503. },
  504. hidePriModal() {
  505. var that = this;
  506. var animation = wx.createAnimation({
  507. duration: 800,
  508. timingFunction: 'ease',
  509. })
  510. this.animation = animation
  511. that.fadeDown();
  512. setTimeout(function () {
  513. that.setData({
  514. hidePriModal: true
  515. })
  516. }, 680)
  517. },
  518. })