index.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. // index.js
  2. let myPro = require("../../utils/wxRequest.js");
  3. let util = require("../../utils/util.js");
  4. Page({
  5. data: {
  6. setBgHeight: getApp().globalData.setBgHeight,
  7. imgUrl: getApp().globalData.imgUrl,
  8. fare_type: 1, // 0外卖 1自提 默认自取
  9. is_member: 0, // 是否为会员
  10. showGoodsSpec: false,
  11. cartGoods: [], // 购物车商品
  12. addGoodList: [], // 活动加购商品
  13. resultArr: [], // 选中商品
  14. checkedAll: true,
  15. resultAll: [], // 测试
  16. totalNums: 0, // 加购商品总数
  17. totalPrice: 0, // 加购商品总价(原价)
  18. totalMemberPrice: 0, // 加购商品总价(会员价)
  19. showAdGoodsSpec: false,
  20. isHaveGoods: true // 是否有商品
  21. },
  22. onLoad: function (options) {
  23. // Do some initialize when page load.
  24. },
  25. onShow: function () {
  26. // Do something when page show.
  27. let that = this;
  28. that.setData({
  29. is_member: getApp().globalData.is_member
  30. });
  31. // 获取配送方式
  32. if(wx.getStorageSync('fare_type')){
  33. that.setData({
  34. fare_type: wx.getStorageSync('fare_type')
  35. })
  36. };
  37. that.getCartsList();
  38. },
  39. onReady: function () {
  40. // Do something when page ready.
  41. },
  42. onHide: function () {
  43. // Do something when page hide.
  44. },
  45. onUnload: function () {
  46. // Do something when page close.
  47. },
  48. onPullDownRefresh: function () {
  49. // Do something when pull down.
  50. },
  51. onReachBottom: function () {
  52. // Do something when page reach bottom.
  53. },
  54. onPageScroll: function () {
  55. // Do something when page scroll
  56. },
  57. onResize: function () {
  58. // Do something when page resize
  59. },
  60. // 获取购物车商品
  61. getCartsList(){
  62. let that = this;
  63. let params = {};
  64. myPro.wxRequest("user/v3/carts/list","GET",params).then(res=>{
  65. // 普通商品
  66. let list = res.result.list;
  67. if(list.length != 0){
  68. that.setData({
  69. isHaveGoods: true
  70. })
  71. }else{
  72. that.setData({
  73. isHaveGoods: false
  74. })
  75. }
  76. // 活动加购商品
  77. let addGoodList = res.result.add_good_list;
  78. that.setData({
  79. cartGoods: list,
  80. addGoodList: addGoodList,
  81. totalNums: res.result.total_num,
  82. totalPrice: res.result.money // 接口返回的,不需再关注是否为会员价
  83. });
  84. // 商品选中状态
  85. let resultArr = [];
  86. for(let i in list){
  87. if(list[i].selected){
  88. resultArr.push(''+list[i].id);
  89. }
  90. };
  91. that.setData({
  92. resultArr: resultArr
  93. });
  94. }).catch(err=>{
  95. console.log('报错信息',err);
  96. wx.showToast({
  97. title: err,
  98. icon: "none"
  99. });
  100. })
  101. },
  102. // 展示详情
  103. onGoodsSpec(event){
  104. let that = this;
  105. let item = event.currentTarget.dataset.item;
  106. that.setData({
  107. currentGoods: item, // 商品加购的规格(不带多规格)
  108. showGoodsSpec: true
  109. });
  110. },
  111. // 关闭详情
  112. closeGoodsSpec(){
  113. let that = this;
  114. that.setData({
  115. showGoodsSpec: false,
  116. });
  117. },
  118. // 更改购物车商品
  119. onChangeCartNum(event){
  120. let that = this;
  121. let nums = event.detail;
  122. let item = event.currentTarget.dataset.item;
  123. let params = {
  124. id: item.id,
  125. nums: nums
  126. };
  127. // console.log('event',event)
  128. // return;
  129. myPro.wxRequest("user/v3/carts/editnum","POST",params).then(res=>{
  130. that.getCartsList();
  131. }).catch(err=>{
  132. console.log('报错信息',err);
  133. wx.showToast({
  134. title: err,
  135. icon: "none"
  136. });
  137. })
  138. },
  139. // 删除商品
  140. bindDel(event){
  141. let that = this;
  142. console.log('event',event);
  143. let item = event.currentTarget.dataset.item;
  144. let params = {
  145. id: item.id
  146. };
  147. myPro.wxRequest("user/v3/carts/remove","POST",params).then(res=>{
  148. // 主动调购物车,更新信息
  149. that.getCartsList();
  150. }).catch(err=>{
  151. console.log('报错信息',err);
  152. wx.showToast({
  153. title: err,
  154. icon: "none"
  155. })
  156. })
  157. },
  158. // 选择
  159. onChangeResult(event){
  160. let that = this;
  161. console.log(event.detail);
  162. that.setData({
  163. resultArr: event.detail
  164. });
  165. },
  166. // 切换状态
  167. toggleGoods(event){
  168. console.log('切换状态',event);
  169. let that = this;
  170. let id = event.currentTarget.dataset.id;
  171. let resultArr = that.data.resultArr;
  172. let params = {
  173. id: id
  174. };
  175. if(resultArr.includes(''+id)){
  176. params.selected = 1;
  177. // 选中
  178. myPro.wxRequest("user/v3/carts/selected","POST",params).then(res=>{
  179. that.getCartsList();
  180. }).catch(err=>{
  181. console.log('报错信息',err);
  182. wx.showToast({
  183. title: err,
  184. icon: "none"
  185. })
  186. })
  187. }else{
  188. // 取消选中
  189. params.selected = 0;
  190. // 选中
  191. myPro.wxRequest("user/v3/carts/selected","POST",params).then(res=>{
  192. that.getCartsList();
  193. }).catch(err=>{
  194. console.log('报错信息',err);
  195. wx.showToast({
  196. title: err,
  197. icon: "none"
  198. })
  199. })
  200. }
  201. },
  202. // 去结算
  203. toPay(){
  204. let that = this;
  205. // 判断商品是否勾选(如果都未勾选提示一下)
  206. // console.log('resultArr',that.data.resultArr);
  207. let resultArr = that.data.resultArr;
  208. if(resultArr.length == 0){
  209. wx.showToast({
  210. title: "请勾选商品",
  211. icon: "none"
  212. })
  213. return;
  214. };
  215. // 验证是否能下单(有可能不在营业时间)
  216. wx.request({
  217. url: getApp().globalData.api + "user/v3/order/createlist",
  218. data: {
  219. "token": getApp().globalData.token
  220. },
  221. success: function(res) {
  222. if(res.data.code == 200){
  223. // 如果是外卖,看是否有收货地址
  224. if(that.data.fare_type == 0 ){
  225. if(!wx.getStorageSync('checkedAddress')){
  226. wx.navigateTo({
  227. url: "/pages/user/address/list/index"
  228. });
  229. }else{
  230. wx.navigateTo({
  231. url: "/pages/create-order/index"
  232. });
  233. }
  234. }else{
  235. // 路由跳转:需要保留购物车页面(因为从购物车往后的步骤都可能回退),但注意更新购物车
  236. wx.navigateTo({
  237. url: "/pages/create-order/index"
  238. });
  239. }
  240. }else{
  241. wx.showToast({
  242. title: res.data.msg,
  243. icon: "none"
  244. });
  245. }
  246. }
  247. });
  248. },
  249. // 活动加购商品
  250. onAdGoodsSpec(event){
  251. let that = this;
  252. let cartGoods = that.data.cartGoods;
  253. let item = event.currentTarget.dataset.item;
  254. let currentAdGoodsSpec = null;
  255. if(item.add_good_rule_good_spec && item.add_good_rule_good_spec.length != 0){
  256. for(let i in item.add_good_rule_good_spec){
  257. if(i == 0){
  258. item.add_good_rule_good_spec[i].is_checked = true; // 默认选中第一个
  259. currentAdGoodsSpec = item.add_good_rule_good_spec[i];
  260. }else{
  261. item.add_good_rule_good_spec[i].is_checked = false;
  262. }
  263. };
  264. // 跟购物车对比,拿数量
  265. for(let k in cartGoods){
  266. if(currentAdGoodsSpec.good_id == cartGoods[k].good_id && currentAdGoodsSpec.good_spec_id == cartGoods[k].good_specs_id && currentAdGoodsSpec.add_good_rule_id == cartGoods[k].add_good_rule_id){
  267. currentAdGoodsSpec.nums = cartGoods[k].nums;
  268. break;
  269. }
  270. }
  271. };
  272. that.setData({
  273. showAdGoodsSpec: true,
  274. currentAdGoods: item,
  275. currentAdGoodsSpec: currentAdGoodsSpec
  276. });
  277. // console.log('活动加购商品',that.data.currentAdGoods);
  278. },
  279. // 切换规格
  280. onChangeSpecGoods(event){
  281. let that = this;
  282. console.log(event);
  283. let specs = event.currentTarget.dataset.specs;
  284. let currentAdGoods = that.data.currentAdGoods;
  285. let cartGoods = that.data.cartGoods;
  286. if(currentAdGoods.add_good_rule_good_spec && currentAdGoods.add_good_rule_good_spec.length != 0){
  287. for(let i in currentAdGoods.add_good_rule_good_spec){
  288. let item = currentAdGoods.add_good_rule_good_spec[i];
  289. if(item.good_spec_id == specs.good_spec_id){
  290. item.is_checked = true;
  291. }else{
  292. item.is_checked = false;
  293. }
  294. };
  295. // 跟购物车对比,拿数量
  296. for(let k in cartGoods){
  297. if(specs.good_id == cartGoods[k].good_id && specs.good_spec_id == cartGoods[k].good_specs_id && specs.add_good_rule_id == cartGoods[k].add_good_rule_id){
  298. specs.nums = cartGoods[k].nums;
  299. break;
  300. }
  301. };
  302. };
  303. that.setData({
  304. currentAdGoods: currentAdGoods,
  305. currentAdGoodsSpec: specs
  306. });
  307. },
  308. // 关闭活动加购商品
  309. closeAdGoodsSpec(){
  310. let that = this;
  311. that.setData({
  312. showAdGoodsSpec: false
  313. })
  314. },
  315. // 点击活动加购商品(多规格)
  316. onChangeAdGoodsSpecNum(event){
  317. let that = this;
  318. let nums = event.detail;
  319. // console.log('event',event);
  320. let item = event.currentTarget.dataset.item;
  321. let itemObj = {
  322. good_id: item.good_id,
  323. add_good_rule_id: item.add_good_rule_id,
  324. good_specs_id: item.good_spec_id
  325. };
  326. // console.log('当前规格',itemObj);
  327. that.handleAdGoods(itemObj,nums);
  328. },
  329. // 点击活动加购商品(无规格)
  330. onChangeAdGoodsNum(event){
  331. let that = this;
  332. let nums = event.detail;
  333. let item = event.currentTarget.dataset.item;
  334. let itemObj = {
  335. good_id: item.add_good_id,
  336. add_good_rule_id: item.id,
  337. good_specs_id: item.add_good_spec_id
  338. };
  339. that.handleAdGoods(itemObj,nums);
  340. },
  341. // 加购商品增删改查
  342. handleAdGoods(item,nums){
  343. let that = this;
  344. let cartId = that.isAddCart(item);
  345. if(cartId){
  346. console.log('在')
  347. // 在购物车
  348. let params = {
  349. id: cartId // 购物车ID
  350. };
  351. // 活动加购商品
  352. if(nums != 0){
  353. params.nums = nums;
  354. // 修改数量
  355. myPro.wxRequest("user/v3/carts/editnum","POST",params).then(res=>{
  356. that.closeAdGoodsSpec();
  357. that.getCartsList();
  358. }).catch(err=>{
  359. console.log('报错信息',err);
  360. wx.showToast({
  361. title: err,
  362. icon: "none"
  363. })
  364. })
  365. }else{
  366. // 删除
  367. myPro.wxRequest("user/v3/carts/remove","POST",params).then(res=>{
  368. that.closeAdGoodsSpec();
  369. that.getCartsList();
  370. }).catch(err=>{
  371. console.log('报错信息',err);
  372. wx.showToast({
  373. title: err,
  374. icon: "none"
  375. })
  376. })
  377. }
  378. }else{
  379. console.log('不在')
  380. let params = {
  381. good_id: item.good_id,
  382. good_specs_id: item.good_specs_id,
  383. nums: nums,
  384. add_good_rule_id: item.add_good_rule_id,
  385. is_add: 1 // 是否为加购商品(1是 0否)
  386. };
  387. // console.log('参数',params);
  388. // return;
  389. myPro.wxRequest("user/v3/carts/create","POST",params).then(res=>{
  390. that.closeAdGoodsSpec();
  391. that.getCartsList();
  392. }).catch(err=>{
  393. console.log('报错信息',err);
  394. wx.showToast({
  395. title: err,
  396. icon: "none"
  397. })
  398. });
  399. }
  400. },
  401. // 核实商品是否存在于购物车
  402. isAddCart(item){
  403. let that = this;
  404. let oldCartGoods = that.data.cartGoods;
  405. let cartId = null;
  406. // console.log('item',item);
  407. // console.log('购物车',oldCartGoods);
  408. // 检测购物车是否有此商品
  409. for(let i in oldCartGoods){
  410. if(item.good_id == oldCartGoods[i].good_id && oldCartGoods[i].add_good_rule_id && item.add_good_rule_id && item.good_specs_id == oldCartGoods[i].good_specs_id){
  411. cartId = oldCartGoods[i].id;
  412. break;
  413. }
  414. };
  415. return cartId;
  416. },
  417. });