diff --git a/app.js b/app.js index 6db2554..13adf0f 100644 --- a/app.js +++ b/app.js @@ -51,7 +51,7 @@ App({ config: null, //门店参数 config2: null, //门店配置 code: null, - user_id:null,//6520491,// 6519913,//6520352 + user_id:null, //6520509,//6520491,// 6519913,//6520352 // user_id:6520314,// qa-6519858,// // user_id:14148118,// qa-6519858,// buy_now: null, @@ -1584,6 +1584,15 @@ App({ return cx_arr; }, + get_has_cx_act2(act_arr){ + var cx_arr=[]; + if(act_arr && act_arr.length) + cx_arr=act_arr.filter(function (e) { + return e.s_time < ut.gettimestamp() && [3,5,7,10].indexOf(e.prom_type)>-1; + }) + return cx_arr; + }, + //-- 获取判断注册成功后,是跳转等级卡,还是新人有礼 -- async go_to_page(is_reg,func){ if(!is_reg) { diff --git a/packageE/pages/cart/cart2/cart2.js b/packageE/pages/cart/cart2/cart2.js index 3ce362d..149f6be 100644 --- a/packageE/pages/cart/cart2/cart2.js +++ b/packageE/pages/cart/cart2/cart2.js @@ -170,7 +170,12 @@ Page({ showFold:true, ly_map:{}, - template_id:[] + template_id:[], + + //用于后台计算的多促销集合 + show_can_cx_map:{}, + //优惠促销活动的集合 + yhcx_act_map: {}, }, @@ -909,7 +914,7 @@ Page({ var th = this, app = getApp(); var state = 0; if (th.data.state) state = 1; - a.get("/api/weshop/cart/list", { + a.get("/api/weshop/cart/listNew1", { data: { user_id: to.globalData.user_id, selected: 1, state: state, store_id: oo.stoid, pageSize: 600, @@ -926,18 +931,18 @@ Page({ if (pick_id_arr.length == 0 || pick_id_arr.indexOf(carr[i].pick_id) == -1) pick_id_arr.push(carr[i].pick_id); } - var req_d = { - store_id: os.stoid, ids: pick_id_arr.join(',') - } - //-- 获取门店的列表 -- - await getApp().request.promiseGet("/api/weshop/pickup/list", { data: req_d }).then(res => { - if (ut.ajax_ok(res)) { - th.data.allsto = res.data.data.pageData; - } - }) + //-- 门店不在获取2024-2-3 -- + // var req_d = { + // store_id: os.stoid, ids: pick_id_arr.join(',') + // } + // //-- 获取门店的列表 -- + // await getApp().request.promiseGet("/api/weshop/pickup/list", { data: req_d }).then(res => { + // if (ut.ajax_ok(res)) { + // th.data.allsto = res.data.data.pageData; + // } + // }) th.data.cartlist_y =JSON.parse(JSON.stringify(carr)); //存储原始购物车列表 - wx.showLoading(); th.get_cart_next(carr); @@ -950,7 +955,7 @@ Page({ is_last(gid,goods,map){ let last_id=0; for (let i = 0; i -1){ + if(map && map.indexOf(goods[i].goods_id)>-1){ last_id=goods[i].goods_id; } } @@ -958,6 +963,7 @@ Page({ return false; }, + //-- is_change是有没有切换活动的意思 -- async get_cart_next(carr,is_change,old_prom){ @@ -973,7 +979,7 @@ Page({ var c_ok=1; if(old_prom && (carr[ir].prom_type!=old_prom.prom_type || carr[ir].prom_id!=old_prom.prom_id) ){ - c_ok=0; + c_ok=0; } if(carr[ir].is_gift && carr[ir].id && c_ok) { @@ -995,22 +1001,22 @@ Page({ var map=this.data.prom_goods_map; if(map){ for (var ky in map) { - if(map[ky]){ - var ob=map[ky]; - for (var ii in ob) { - var item_map = ob[ii]; - if (item_map.hasOwnProperty('cy_cx')) { - delete item_map.cy_cx; - } - } + if(map[ky]){ + var ob=map[ky]; + for (var ii in ob) { + var item_map = ob[ii]; + if (item_map.hasOwnProperty('cy_cx')) { + delete item_map.cy_cx; + } } + } } } } //按门店分类的数组 var arr = new Array(); - + var th=this; th.data.in_zhact_gdmap = {}; //---是不是购买等级卡成功的返回---等级卡显示的判断--- @@ -1018,40 +1024,40 @@ Page({ //-- 判断组合购是总数量是不是存在 -- var no_zh_num={}; - + //-- 多促销活动调用接口需要的参数,和商品的购买数量和活动的购买数量的请求参数 -- + var dug_cx_arr = []; + //获取 限购 和 多活动的促销---2024-2-1 for (var i = 0; i < carr.length; i++) { - var item1 = carr[i]; - //-- 获取一下商品的所有活动 -- - await th.buy_pro_group(item1); - //把已经购买了多少见的内容填入 - var goodsbuynum = 0, promgoodsbuynum = 0; - //--要获得商品,该用户买了多少件,同步应用-- - await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { - data: { - store_id: os.stoid, - user_id: getApp().globalData.user_id, - goods_id: item1.goods_id, - prom_type: item1.prom_type, - prom_id: item1.prom_id, - isnew:1 - }, - }).then(res => { - var buy_num_data = res.data.data; - if (buy_num_data.promgoodsbuynum) { - promgoodsbuynum = buy_num_data.promgoodsbuynum; + let item1 = carr[i]; + //如果不是活动的时候,不是代发商品的时候,不是赠品的时候,不是阶梯商品拆分的,不是组合购拆分的 + if([1, 2, 4, 6, 8, 9].indexOf(item1.prom_type)== -1 && !item1.whsle_id + && !item1.is_gift && !item1.is_ld_split && !item1.is_zh_split ){ + //-- 快速查找,组装查询多活动的列表 -- + let f_idx=dug_cx_arr.findIndex(function (ele) { + return ele.goods_id == item1.goods_id + }); + if(f_idx==-1) { + let gd_ite={ + goods_id:carr[i].goods_id, + goods_num:1, + is_limit_show:1, + is_state:0 + } + dug_cx_arr.push(gd_ite); } - goodsbuynum = buy_num_data.goodsbuynum; - }) - //如果有购买活动 - item1.promgoodsbuynum = promgoodsbuynum; + + } if(is_change){ carr[i].collocationList=null; } - } + //-- 对商品的多促销进行判断 ---2024-2-1-- + if(dug_cx_arr.length){ + await th.buy_pro_group(dug_cx_arr,carr); + } //在分组的时候,就不要再调用接口,await for (var i = 0; i < carr.length; i++) { var item = carr[i]; @@ -1079,10 +1085,9 @@ Page({ } - //商品的图片不能重复的赋值 if(item.original_img.indexOf(oo.imghost)==-1) - item.original_img = oo.imghost + item.original_img; + item.original_img = oo.imghost + item.original_img; var car_item = item; /*----接口要弄出来的,先顶着-----*/ @@ -1095,10 +1100,10 @@ Page({ if (arr[j].pickup_id == pcid) { if (item.is_gift != 1) { - //确定配送方式 - if (arr[j].distr_t == 0) { - arr[j].distr_t = car_item.distr_type; - } + //确定配送方式 + if (arr[j].distr_t == 0) { + arr[j].distr_t = car_item.distr_type; + } }else{ item.distr_type=0; //赠品不控制物流的方式 } @@ -1112,10 +1117,10 @@ Page({ switch (dis_t) { case 0: if(!arr[j].exp_sure){ - e_t = 1; - //-- 系统后台有设置要默认的 -- - if (th.data.json_d.pickupway && th.data.json_d.pickupway == 1) e_t = 0; - arr[j].exp_type=e_t + e_t = 1; + //-- 系统后台有设置要默认的 -- + if (th.data.json_d.pickupway && th.data.json_d.pickupway == 1) e_t = 0; + arr[j].exp_type=e_t } break; case 1: @@ -1147,8 +1152,8 @@ Page({ } if(car_item.is_gift != 1){ - arr[j].exp_type = e_t; - if (e_t == 0) th.setData({ is_all_zt: 0 }); + arr[j].exp_type = e_t; + if (e_t == 0) th.setData({ is_all_zt: 0 }); } //else if (e_t == 1) th.setData({ is_all_zt: 1 }); @@ -1176,13 +1181,12 @@ Page({ if (find == 0) { var pikname = '', sto = null; //----找到门店名称----- - for (var k = 0; k < th.data.allsto.length; k++) { - if (pcid == th.data.allsto[k].pickup_id) { - pikname = th.data.allsto[k].pickup_name; - sto = th.data.allsto[k]; - break; - } - } + pikname = item.pickup_name; + sto ={ + pickup_id:item.pick_id, + pickup_name:pikname, + distr_type:item.pickup_distr_type + }; var e_t = 0, dis_t = 0;//物流方式,配送方式 if (item.distr_type == 0) { dis_t = sto.distr_type; @@ -1191,7 +1195,6 @@ Page({ } let exp_sure=0; - switch (dis_t) { case 0: e_t = 1; @@ -1224,12 +1227,10 @@ Page({ } } } - - if (back_data && parseFloat(back_data)) { - c_item.can_usecommise = parseFloat(parseFloat(back_data).toFixed(2)); - cart_commission += c_item.can_usecommise; - } + c_item.can_usecommise = parseFloat(parseFloat(back_data).toFixed(2)); + cart_commission += c_item.can_usecommise; + } var ie = { pickup_id: pcid, @@ -1285,6 +1286,8 @@ Page({ } + + var cart_commission = 0; //-- 循环计算一下线下取价 -- for (var k = 0; k < arr.length; k++) { @@ -1292,8 +1295,31 @@ Page({ if (!is_change) { //-- 要进行归类一下活动 -- await m_cx.cart_cx_group(th, arr[k].goods, c_item, 0, 0, (show_can_cx) => { - - arr[k].show_can_cx = show_can_cx; + //后台计算使用 + th.data.show_can_cx_map[c_item.pickup_id]=show_can_cx; + //-- 把活动组装进去 --- + let show_can_cx1 = ut.deep_cp(show_can_cx); + //前端处理渲染的时,要处理一些不需要的字段属性 + if(show_can_cx1){ + for (const key in show_can_cx1) { + let element = show_can_cx1[key]; + if(element.cur_act){ + let c_act=element.cur_act; + delete c_act.goods; + } + if(element.ch_map){ + delete element.ch_map; + } + if(element.act_arr && element.act_arr.length>0){ + for (var ij = 0; ij < element.act_arr.length; ij++) { + var act_ite = element.act_arr[ij]; + delete act_ite.goods; + delete act_ite.key; + } + } + } + } + arr[k].show_can_cx = show_can_cx1; },2) } else { var show_can_cx = this.data.cartlist[k].show_can_cx; @@ -1314,13 +1340,13 @@ Page({ //-- 如果初始活动在计算的时候,是不满足的时候,就要把活动清理掉 -- var is_no_ok=arr[k].show_can_cx[key_o].cur_act.is_no_ok; if(is_no_ok==1){ - item1.prom_id = 0; - item1.prom_type = 0; + item1.prom_id = 0; + item1.prom_type = 0; - //这里要判断一下活动的最后一个商品,is_act_last - if(th.is_last(item1.goods_id,arr[k].goods,arr[k].show_can_cx[key_o].ch_map)){ - item1.is_act_last=1; //这个是要在前端显示按钮切换的 - } + //这里要判断一下活动的最后一个商品,is_act_last + if(th.is_last(item1.goods_id,arr[k].goods,arr[k].show_can_cx[key_o].ch_map)){ + item1.is_act_last=1; //这个是要在前端显示按钮切换的 + } } } @@ -1331,7 +1357,7 @@ Page({ if (item1.prom_type == 3 && item1.is_gift != 1 && !item1.whsle_id) { // th.check_is_youhui(item1.goods_id, item1.pick_id); //增加优惠活动次数限制 - let limit_num = await th.getprom(item1) //活动限制次数 + let limit_num = th.getprom(item1) //活动限制次数 if (!limit_num) { await th.add_prom_goods_map(item1); @@ -1431,7 +1457,7 @@ Page({ } else { - + item1.act = th.data.zhhe_act_map[item1.prom_id]; } } @@ -1511,29 +1537,48 @@ Page({ //如果是秒杀,团购的时候,优惠促销和搭配购的时候 if([1,2,3,5,6,7,10].indexOf(item1.prom_type)>-1){ + //由于是购物车购买,所以prom_type 基本不会员等于6 if(item1.prom_type==1 || item1.prom_type==6) { item1.is_quan=0; } - - var url= "/api/weshop/activitylist/getSJGoodsPriceNew/" + os.stoid - + "/" + item1.goods_id + "/"+item1.prom_type+"/" + item1.prom_id + "/" + app.globalData.user_id; - await app.request.promiseGet(url,{}).then(res=>{ - if(res.data.code==0){ - console.log(res.data.data,"111"); - //组合促销有另外一个字段名is_orderyh,在控制订单促销的叠加 - + let t_goodsActinfo=item1.goodsActinfo; + if(t_goodsActinfo && t_goodsActinfo.length){ + let ff_prom=t_goodsActinfo.find(function (e){ + return e.prom_type==item1.prom_type; + }) + if(ff_prom){ if(item1.prom_type!=7 && item1.prom_type!=10) { - item1.is_order_yh=res.data.data.is_order_yh; + item1.is_order_yh=ff_prom.is_order_yh; }else item1.is_order_yh=0; - item1.is_post_temp=res.data.data.is_post_temp; + item1.is_post_temp=ff_prom.is_post_temp; + //由于是购物车购买,所以prom_type 基本不会员等于6 if(item1.prom_type==1 || item1.prom_type==6) { - item1.is_quan=res.data.data.is_quan; + item1.is_quan=item1.cartActinfo.is_quan; } - } - }) + } + + // var url= "/api/weshop/activitylist/getSJGoodsPriceNew/" + os.stoid + // + "/" + item1.goods_id + "/"+item1.prom_type+"/" + item1.prom_id + "/" + app.globalData.user_id; + // await app.request.promiseGet(url,{}).then(res=>{ + // if(res.data.code==0){ + // console.log(res.data.data,"111"); + // //组合促销有另外一个字段名is_orderyh,在控制订单促销的叠加 + // + // if(item1.prom_type!=7 && item1.prom_type!=10) { + // item1.is_order_yh=res.data.data.is_order_yh; + // }else item1.is_order_yh=0; + // + // item1.is_post_temp=res.data.data.is_post_temp; + // + // if(item1.prom_type==1 || item1.prom_type==6) { + // item1.is_quan=res.data.data.is_quan; + // } + // + // } + // }) } } @@ -1662,12 +1707,37 @@ Page({ } } } - //深拷贝 th.data.old_cartlist = JSON.parse(JSON.stringify(arr)); - th.setData({ - cartlist: arr, - }); + + th.data.cartlist=arr; + + //-- 大于20使用逐步渲染 -- + if(arr.length>10){ + for (let ib = 0; ib { + th.setData({ + [txt]:tt_goods[iz] + }) + },ib*200+iz*300+100) + } + } + }else{ + th.setData({ + cartlist: arr, + }); + } //--- 获取一下看有没有优惠券 ---- setTimeout(function () { @@ -1684,6 +1754,7 @@ Page({ }, 500) }, + //-----单个商品购买的入口判断---- get_buy_goods: function (e) { var th = this; @@ -2202,60 +2273,68 @@ Page({ } }, + //-- 立即购买的时候,获取商品优惠活动,is_state判断是不是单个商品购买, // 很多活动需要判断会员的plus等级, 权益登陆,user_id调用接口是必须的 -- //先用着,后面会用接口来代替 - async buy_pro_group(item1, is_state) { - //-- 代发商品不参与任何活动 -- - if (item1.whsle_id) return false; - if (item1.is_gift) return false; - if (item1.is_collocation) return false; - if (item1.is_ld_split) return false; //是阶梯 - if (item1.is_zh_split) return false; - - //-- 购物车的秒杀和团购不计算 -- - var p_type=parseInt(item1.prom_type); - if([1,2].indexOf(p_type)>-1) return false; - + async buy_pro_group(g_arr,carr) { var th=this; - var req_d = { - store_id: os.stoid, - user_id: getApp().globalData.user_id, - goods_id: item1.goods_id, - goods_num: item1.goods_num, - goods_price: item1.goods_price, - } - //--- 调用接口获取活动 --- - await getApp().promiseGet('/api/weshop/goods/getGoodsPromInfo', {data:req_d}).then(res => { - if(res.data.code==0){ - var more_cx=res.data.data.more_cx; - for(var i=0;i -1 ) continue; + //再g_list中快速查找 + let i_fd=g_list.find(function (ele) { + return ele.goods_id == carr[ia].goods_id + }); + if(i_fd.goodsPromInfoRespDto){ + //-- 多促销活动的优化 -- + i_fd=i_fd.goodsPromInfoRespDto; + //-- 赋值多促销活动的优化-- + carr[ia].more_cx=i_fd.more_cx; + + //商品优惠促销的缓存 + if (i_fd.yhcx_pro) { + th.data.yhcx_act_map[i_fd.yhcx_pro.id] = i_fd.yhcx_pro; + } + //商品组合促销的缓存 + if (i_fd.zh_pro) { + th.data.zhhe_act_map[i_fd.zh_pro.id] = i_fd.zh_pro; + } + //商品阶梯促销的缓存 + if (i_fd.ladder_pro) { + var ladder_pro = i_fd.ladder_pro; + th.data.ladder_map[ladder_pro.id] = ladder_pro; + var fd_ite = i_fd.more_cx.find(function (e) { + return e.prom_type == 10; + }) + if (fd_ite) { + th.data.ladder_map[ladder_pro.id].ladder_list = fd_ite.ladder_list; } - } - }) + } + + } + + } + } }, + + + //---------------检查是否有收货地址------------------- checkAddressList: function () { var t = this; @@ -2393,11 +2472,11 @@ Page({ newd.is_past=1; } - ord_goods.splice(pos+1,0,newd); + //ord_goods.splice(pos+1,0,newd); th.data.old_cartlist[i].goods.splice(pos2+1,0,newd); - var txt9 = "cartlist[" + i + "].goods"; - th.setData({ [txt9]: ord_goods }) + var txt9 = "cartlist[" + i + "].goods["+(pos+1)+"]"; + th.setData({ [txt9]: newd }) } @@ -6610,25 +6689,26 @@ Page({ }).then(res => { if (res.data.code == 0) { var quan_list = res.data.data.pageData; - arr[ind].quan_list = th.check_is_frozenQuan(quan_list, th.data.frozenQuan); + //arr[ind].quan_list = th.check_is_frozenQuan(quan_list, th.data.frozenQuan); + quan_list= th.check_is_frozenQuan(quan_list, th.data.frozenQuan); + var set_txt = "cartlist[" + ind + "].quan_list"; + th.setData({ + [set_txt]:quan_list + }) } }) } - - } - - //如果是搭配购的立即购买的时候 if (th.data.is_b_now) { if (arr && arr.length > 0) { var quanlist = arr[0].quan_list; - th.setData({ selected_quan_list: quanlist, cartlist: arr }) + th.setData({ selected_quan_list: quanlist }) } } else { - th.setData({ cartlist: arr }) + //th.setData({ cartlist: arr }) th.set_can_num(); } @@ -6899,25 +6979,38 @@ Page({ } return user_pre_buynum }, + + //获取优惠活动 - async getprom(item){ - + getprom(item){ + let prom_id=item.prom_id let pickup_id=item.pick_id let limit_num=0 - await getApp().request.promiseGet("/api/weshop/promgoods/get/" + oo.stoid + "/" + prom_id, {}).then(res => { - if (res.data.code == 0) { - let prom = res.data.data; - limit_num =prom.limit_num - let yh_is_xz_yh=this.data.yh_is_xz_yh - yh_is_xz_yh[pickup_id]=prom.is_xz_yh - this.setData({ - ['yh_is_xz_yh']:yh_is_xz_yh - }) - } - }) + //不再调用接口活动优惠促销活动的内容 + // await getApp().request.promiseGet("/api/weshop/promgoods/get/" + oo.stoid + "/" + prom_id, {}).then(res => { + // if (res.data.code == 0) { + // let prom = res.data.data; + // limit_num =prom.limit_num + // let yh_is_xz_yh=this.data.yh_is_xz_yh + // yh_is_xz_yh[pickup_id]=prom.is_xz_yh + // this.setData({ + // ['yh_is_xz_yh']:yh_is_xz_yh + // }) + // } + // }) + if(this.data.yhcx_act_map[prom_id]){ + let prom = this.data.yhcx_act_map[prom_id]; + limit_num =prom.limit_num + let yh_is_xz_yh=this.data.yh_is_xz_yh + yh_is_xz_yh[pickup_id]=prom.is_xz_yh + this.setData({ + ['yh_is_xz_yh']:yh_is_xz_yh + }) + } return limit_num }, + //--检查订单优惠-- check_is_order_prom: function (condition, func, pick) { var th = this; @@ -6971,10 +7064,11 @@ Page({ } else { var prom = null; - - await getApp().request.promiseGet("/api/weshop/promgoods/get/" + os.stoid + "/" + item.prom_id, {}).then(res => { - if (res.data.code == 0) { - prom = res.data.data; + + + if(th.data.yhcx_act_map[item.prom_id]){ + + prom = th.data.yhcx_act_map[item.prom_id]; let min_value = 0 if (prom && prom.is_xz_yh) { @@ -7001,7 +7095,8 @@ Page({ } } } - }) + + if(!prom) return false; var ob = {}; ob.prom_id = item.prom_id; ob.name = prom.name; @@ -7033,11 +7128,9 @@ Page({ } else { var ob = {}; var prom = null; - - await getApp().request.promiseGet("/api/weshop/promgoods/get/" + os.stoid + "/" + item.prom_id, {}).then(res => { - if (res.data.code == 0) { - prom = res.data.data; + if(th.data.yhcx_act_map[item.prom_id]){ + prom = th.data.yhcx_act_map[item.prom_id]; let min_value = 0 if (prom && prom.is_xz_yh) { let arr = prom.promGoodsList || [] @@ -7063,9 +7156,8 @@ Page({ } } } - }) - + if(!prom) return false; //优惠促销取价的优化 let f_price=item.goods_price; @@ -8283,6 +8375,7 @@ Page({ pro_pop.set_init(1,cp_arr); }, + //--- 选择回来时候的选择 --- sure_cx_group:function(e){ var th=this; @@ -8291,8 +8384,12 @@ Page({ //-- 获取到当前的show_can_cx-- var idx=this.data.sele_cx_group_cidx; var gd_key= this.data.cx_group_gd_key; + + + var pk_id=this.data.cartlist[idx].pickup_id; + var cx_prom_group2= th.data.show_can_cx_map[pk_id][gd_key].act_arr; + var cx_prom_group=this.data.cartlist[idx].show_can_cx[gd_key].act_arr; - var pk=this.data.cartlist[idx].pickup_id; th.setData({ send_lb:{}, @@ -8311,12 +8408,19 @@ Page({ //如果活动不是选择的 if(cx_prom_group[dx].prom_type!=sele_prom_type) cx_prom_group[dx].sele=0; else cx_prom_group[dx].sele=1; + + if(cx_prom_group2[dx].prom_type!=sele_prom_type) cx_prom_group2[dx].sele=0; + else cx_prom_group2[dx].sele=1; } //选择后就要把活动确定下来 //确定一下活动,先看一下有没有选择的活动 var ck_prom_type=cx_prom_group.find(function (el){ return el.sele; }) + var ck_prom_type2=cx_prom_group2.find(function (el){ + return el.sele; + }) + this.cx_check_ok2(function (ck_res){ @@ -8328,16 +8432,16 @@ Page({ var goods0= JSON.parse(JSON.stringify(th.data.cartlist_y)); var goods=[]; for(var ik=0;ik-1 && g_item.pick_id==pk && g_item.is_gift==0; }) @@ -8352,10 +8456,10 @@ Page({ } for(var ik=0;ik< th.data.cartlist[idx].goods.length;ik++){ - if(th.data.cartlist[idx].goods[ik].id==goods[fg].id){ - th.data.cartlist[idx].goods[ik].prom_type= goods[fg].prom_type; - th.data.cartlist[idx].goods[ik].prom_id= goods[fg].prom_id; - } + if(th.data.cartlist[idx].goods[ik].id==goods[fg].id){ + th.data.cartlist[idx].goods[ik].prom_type= goods[fg].prom_type; + th.data.cartlist[idx].goods[ik].prom_id= goods[fg].prom_id; + } } //原始数据要有深拷贝不能有地址的牵连 diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index 593eeb8..98b1762 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -59,6 +59,9 @@ Page({ is_cart:1, //标记是购物车计算的时候 + //送赠品的优化 + cart_zp:{} + }, //-- 立即购买的时候,获取商品优惠活动,is_state判断是不是单个商品购买, @@ -126,6 +129,9 @@ Page({ }, onShow: function () { + //-- 清空 checkouting 结算的标记 -- + this.data.checkouting=0; + if(getApp().globalData.from_act_link){ this.data.from_act_link= ut.deep_cp(getApp().globalData.from_act_link); getApp().globalData.from_act_link=null; @@ -140,7 +146,8 @@ Page({ //每次显示都清空 this.data.in_zhact_gdmap = {}; this.setData({ - invalidList: [] + invalidList: [], + cart_zp:{} //-- 赠品也要清理显示 -- }); if (typeof this.getTabBar === 'function' && this.getTabBar()) { @@ -290,7 +297,6 @@ Page({ var user = getApp().globalData.userInfo; //如果后台有开启等级价的功能 if (user && parseInt(s_list.rank_switch) == 2 && user['card_expiredate']) { - var str = user['card_expiredate'].replace(/-/g, '/'); var end = new Date(str); end = Date.parse(end) / 1000; @@ -517,7 +523,18 @@ Page({ wx.showLoading(); - getApp().request.get("/api/weshop/cart/list", { + //一次性把购物车selected状态变成0 + var url = '/api/weshop/cart/updateUserCart'; + getApp().request.put(url, { + data: { + user_id: app.globalData.user_id, + store_id: oo.stoid, + selected: 0, + state:0 + } + }); + + getApp().request.get("/api/weshop/cart/listNew1", { data: { user_id: app.globalData.user_id, rd: rd, @@ -534,65 +551,81 @@ Page({ if (carr && carr.length > 0) { var g_arr = []; + var by_map = null; + for (var i = 0; i < carr.length; i++) { - //-- 清理购物车的选中状态 -- - var url = '/api/weshop/cart/update'; - getApp().request.put(url, { - data: { - id: carr[i].id, - store_id: oo.stoid, - selected: 0, - } - }); + //填充一下已经买了多少件,只有在商品是有限购条件的时候才进行计算good.viplimited>0 + if(carr[i].viplimited>0){ + if(!by_map) by_map={}; + by_map[carr[i].goods_id] = carr[i].goodsbuynum?carr[i].goodsbuynum:0; + } - if (g_arr.length == 0) g_arr.push(carr[i].goods_id); - else { - var ind = g_arr.findIndex(function (ele) { + //如果不是活动的时候,不是代发商品的时候,不是赠品的时候 + if([1, 2, 4, 6, 8, 9].indexOf(carr[i].prom_type)== -1 && !carr[i].whsle_id && !carr[i].is_gift ){ + + //快速查找 + let f_idx=g_arr.findIndex(function (ele) { return ele.goods_id == carr[i].goods_id - }) - if (ind > -1) continue; - g_arr.push(carr[i].goods_id) + }); + if(f_idx>-1) continue; + + let gd_ite={ + goods_id:carr[i].goods_id, + goods_num:1, + is_limit_show:1, + is_state:0 + } + g_arr.push(gd_ite); } } - var by_map = null; - - // //--要获得商品,该用户买了多少件,同步应用-- - // await getApp().request.promiseGet("/api/weshop/ordergoods/listUserBuyGoodsNum", { - // data: { - // store_id: oo.stoid, - // user_id: user_id, - // goods_ids: g_arr.join(','), - // - // }, - // }).then(res => { - // if (ut.ajax_ok2(res)) { - // by_map = {}; - // for (let i in res.data.data) { - // let item = res.data.data[i]; - // by_map[item.goods_id] = item; - // } - // } - // }) - - for (let ir = 0; ir < g_arr.length; ir++) { - let gg_it=g_arr[ir]; - await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { - data: { - store_id: oo.stoid, - user_id: user_id, - goods_id: gg_it, - isnew:1 - }, - }).then(tt => { - if (tt.data.code == 0) { - if(!by_map) by_map={}; - by_map[gg_it] = tt.data.data; + //获取商品参与的促销活,优惠促,搭配促,组合促,阶梯促销 + let cx_rs= await getApp().request.promisePost("/api/weshop/cart/listGoodsPromInfo",{ + is_json:1, + data:{ + user_id:app.globalData.user_id, + store_id:oo.stoid, + goods:g_arr, + } + }); + //-- 判断返回结果有没有正确,有促销活动就要进行赋值 -- + if(cx_rs && cx_rs.data.code==0 && cx_rs.data.data && cx_rs.data.data.goods) { + let g_list=cx_rs.data.data.goods; + for (var ia = 0; ia < carr.length; ia++) { + if (carr[ia].whsle_id) continue; //代发商品不进行赋值 + if (carr[ia].is_gift) continue; //赠品不进行赋值 + //有参与秒,团购之类的活动不进行赋值 + if([1, 2, 4, 6, 8, 9].indexOf(carr[ia].prom_type)> -1 ) continue; + //再g_list中快速查找 + let i_fd=g_list.find(function (ele) { + return ele.goods_id == carr[ia].goods_id + }); + if(i_fd.goodsPromInfoRespDto){ + //-- 多促销活动的优化 -- + i_fd=i_fd.goodsPromInfoRespDto; + //-- 赋值多促销活动的优化-- + carr[ia].more_cx=i_fd.more_cx; + if (i_fd.zh_pro) { + th.data.zuhe_map[i_fd.zh_pro.id] = i_fd.zh_pro; + } + if (i_fd.ladder_pro) { + var ladder_pro = i_fd.ladder_pro; + th.data.ladder_map[ladder_pro.id] = ladder_pro; + var fd_ite = i_fd.more_cx.find(function (e) { + return e.prom_type == 10; + }) + if (fd_ite) { + th.data.ladder_map[ladder_pro.id].ladder_list = fd_ite.ladder_list; } - }) + } + } + + } } + + let cart_up_data=[]; for (var i = 0; i < carr.length; i++) { var item = carr[i]; var good = item; @@ -622,7 +655,7 @@ Page({ promgoodsbuynum = 0, limit = 0; if (by_map && by_map[good.goods_id]) { - goodsbuynum = by_map[good.goods_id].goodsbuynum; + goodsbuynum = by_map[good.goods_id]; //promgoodsbuynum = by_map[good.goods_id].promgoodsbuynum; } @@ -662,19 +695,19 @@ Page({ } else { item.goods_price = good.shop_price; } - //-- 购物车更新 -- var updata1 = { - id: item.id, - prom_type: c_prom_type, - prom_id: c_prom_id, - store_id: os.stoid, - user_id: getApp().globalData.userInfo.user_id + id: item.id, + prom_type: c_prom_type, + prom_id: c_prom_id, + store_id: os.stoid, + user_id: getApp().globalData.userInfo.user_id, + goods_price:item.goods_price }; - getApp().request.put("/api/weshop/cart/update", { - data: updata1, - }) - + // getApp().request.put("/api/weshop/cart/update", { + // data: updata1, + // }) + cart_up_data.push(updata1); } //判断如果是普通商品,后面参加活动了,变成失效商品 @@ -682,24 +715,16 @@ Page({ var prom = null; var now = ut.gettimestamp(); - await getApp().request.promiseGet(`/api/weshop/activitylist/listGoodActInfo2New`, { - data: { - "store_id": oo.stoid, - "goods_id": item.goods_id, - "user_id": user_id, - } - }).then(res => { - if (res.data.code == 0) { - //开始时间已经开始的情况 - for (var i = 0; i < res.data.data.length; i++) { - var a_item = res.data.data[i]; - if (a_item.s_time < now) { - if (!prom) prom = []; - prom.push(a_item); - } + let prom_arr = item.goodsActinfo; + if(prom_arr && prom_arr.length){ + for (var im = 0; im -1 && !item.is_integral_normal && !item.is_pd_normal) { @@ -725,36 +750,19 @@ Page({ } - //优化获取商品的活动购买了几件 if (item.prom_type == 1 || item.prom_type == 2) { - await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyPromNum", { - data: { - store_id: oo.stoid, - user_id: user_id, - goods_id: item.goods_id, - prom_type: item.prom_type, - prom_id: item.prom_id - }, - }).then(res => { - if (res.data.code == 0) { - promgoodsbuynum = res.data.data.userbuynum; - } - }) + if(item.promgoodsbuynum){ + promgoodsbuynum=item.promgoodsbuynum; + } } - //如果秒杀活动都去掉了,或者结束了,那么这个商品也没有必要留着 if (item.prom_type == 1) { - var prom = null; + var prom = item.cartActinfo; var now = ut.gettimestamp(); - await getApp().request.promiseGet("/api/ms/flash_sale/getNew/" + os.stoid + '/' + user_id + "/" + item.prom_id, {}).then(res => { - console.log('活动情况----------------') - console.log(res) - if (res.data.code == 0 && res.data.data) { - prom = res.data.data; - prom.price = prom.user_price; - } - }) + if(prom){ + prom.price = prom.user_price; + } //---如果互动都已经过期,或者还未开始,或者无活动 if (!prom || prom.is_end == 1 || prom.end_time < now || prom.start_time > now) { // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; @@ -807,14 +815,12 @@ Page({ } // 判断团购活动都去掉了,或者结束了,那么这个商品也没有必要留着 else if (item.prom_type == 2) { - var prom = null; + var prom = item.cartActinfo; var now = ut.gettimestamp(); - await getApp().request.promiseGet('/api/weshop/goods/groupBuy/getActInfo/' + oo.stoid + '/' + item.goods_id + '/' + item.prom_id, {}).then(res => { - if (res.data.code == 0) { - prom = res.data.data; - prom.price = prom.user_price; - } - }); + if(prom){ + prom.price = prom.user_price; + } + //---如果互动都已经过期,或者还未开始,或者无活动 if (!prom || prom.is_end == 1 || prom.end_time < now || prom.start_time > now) { // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; @@ -863,8 +869,7 @@ Page({ item.init_goods_price=good.goods_price; //-- 读出每一种商品的所有的活动,方便后面的活动切换使用 -- - if (item.prom_type == 0) - th.buy_pro_group(item, 0); + //if (item.prom_type == 0) th.buy_pro_group(item, 0); var pcid = item.pick_id; var find = 0; @@ -900,8 +905,15 @@ Page({ arr.push(ie); } } - } + //更新一下购物车商品的活动信息 + if(cart_up_data.length>0){ + getApp().request.promisePost('/api/weshop/cart/updateCartPromInfo',{ + is_json:1, + data:cart_up_data + }) + } + } if (th.data.is_open_offline && th.data.is_open_offline > 0 && th.data.sales_rules == 2) { //-- 此时要实时更新线下取价价格 -- for (var i = 0; i < arr.length; i++) { @@ -1224,7 +1236,6 @@ Page({ if (a = isNaN(t.detail.value) || t.detail.value < 1 ? 1 : parseInt(t.detail.value)) { //this.clear_req(); - var s = { goods_num: a, goods_id: e.goods_id, @@ -1237,14 +1248,14 @@ Page({ //-------------加减数量的时候,要把show_can_cx清理掉, // 同时应该记录一下当前是什么活动那个,如果切换后的活动有跟切换前的活动一样是,就要让切换后的活动的值匹配选中------------- - clear_req: function () { var carr = this.data.requestData; for (var i = 0; i < carr.length; i++) { - var txt = 'requestData[' + i + '].show_can_cx' - this.setData({ - [txt]: null - }); + var txt = 'requestData[' + i + '].show_can_cx1' + this.setData({ + [txt]: null + }); + this.data.requestData[i].show_can_cx=null; } }, @@ -1282,7 +1293,7 @@ Page({ var add_num = 1; //调用接口判断是不是促销活动的商品 if ([0, 3, 5, 7, 10].indexOf(a.prom_type) > -1) { - var cx_arr = await getApp().get_has_cx_act(a.goods_id); + var cx_arr = getApp().get_has_cx_act2(a.goodsActinfo); var steep = getApp().get_limit_qty(a, cx_arr.length, 1); if (steep > 1) { add_num = steep; @@ -1321,7 +1332,7 @@ Page({ //this.clear_req(); var add_num = 1; if ([0, 3, 5, 7, 10].indexOf(a.prom_type) > -1) { - var cx_arr = await getApp().get_has_cx_act(a.goods_id); + var cx_arr = getApp().get_has_cx_act2(a.goodsActinfo); var steep = getApp().get_limit_qty(a, cx_arr.length, 1); if (steep > 1) { add_num = steep; @@ -1477,36 +1488,44 @@ Page({ } }, - //---------------全选,全选的时候要判断是否门店的匹配方式一致-------------- checkAll: async function () { + + console.log('1111'); + console.log(this.data.clicking); + + //防止重复点击,弹出加载动画,转圈圈 + if(this.data.clicking) return false; + this.data.clicking=1; + this.set_clicking(); + var e = this, - th = this, - dda = e.data.requestData, - sdda = e.data.service_data, - tfeel = 0, - t_num = 0, - text_arr = ""; + th = this, + dda = e.data.requestData, + sdda = e.data.service_data, + tfeel = 0, + t_num = 0, + text_arr = ""; if(this.data.is_edit){ let val=!e.data.checkAllToggle; if (dda && dda.length > 0) { - for (var i = 0; i < dda.length; i++) { - var item = dda[i].goods; + for (var i = 0; i < dda.length; i++) { + var item = dda[i].goods; - var txt0 = "requestData[" + i + "].selected"; - this.setData({ - [txt0]: val, - }); + var txt0 = "requestData[" + i + "].selected"; + this.setData({ + [txt0]: val, + }); - for (var j = 0; j < item.length; j++) { - let txt = "requestData[" + i + "].goods[" + j + "].selected"; - e.setData({ - [txt]: val, - }); - } + for (var j = 0; j < item.length; j++) { + let txt = "requestData[" + i + "].goods[" + j + "].selected"; + e.setData({ + [txt]: val, + }); } + } } if (sdda && sdda.length > 0) { for (i = 0; i < sdda.length; i++) { @@ -1529,15 +1548,18 @@ Page({ e.setData({ checkAllToggle: val, }) + + th.clear_clicking(); return false; } if (e.data.requestData && e.data.requestData.length > 0 && - e.data.service_data && e.data.service_data.length > 0) { + e.data.service_data && e.data.service_data.length > 0) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); + th.clear_clicking(); return false; } @@ -1550,10 +1572,11 @@ Page({ if (dda && dda.length > 0) { for (var i = 0; i < dda.length; i++) { var item = dda[i].goods; - var txt0 = "requestData[" + i + "].show_can_cx"; + var txt0 = "requestData[" + i + "].show_can_cx1"; e.setData({ [txt0]: {}, }); + th.data.requestData[i].show_can_cx=null; //清空需要的 if (e.data.checkAllToggle) { var txt = "requestData[" + i + "].selected"; @@ -1579,35 +1602,37 @@ Page({ }); if (ob.code == -1) { - wx.showToast({ title: gd_info.goods_name+'购买数量超出商品库存', icon: 'none', }); + th.clear_clicking(); return false; - } else { - if (th.data.sales_rules == 3) { - var goods_id = gd_info.goods_id; - var num = 0; - - for (let ii = 0; ii< th.data.requestData.length; ii++) { - if (i == ii) continue; - var it = th.data.requestData[ii].goods.find((e) => { - return e.goods_id == goods_id; - }) - if (it && it.selected) num += it.goods_num - } + } - if (num > ob.CanOutQty) { - wx.showToast({ - title: gd_info.goods_name+'购买数量超出商品库存', - icon: 'none', - }); - return false; - } + if (th.data.sales_rules == 3) { + var goods_id = gd_info.goods_id; + var num = 0; + + for (let ii = 0; ii< th.data.requestData.length; ii++) { + if (i == ii) continue; + var it = th.data.requestData[ii].goods.find((e) => { + return e.goods_id == goods_id; + }) + if (it && it.selected) num += it.goods_num + } + + if (num > ob.CanOutQty) { + wx.showToast({ + title: gd_info.goods_name+'购买数量超出商品库存', + icon: 'none', + }); + th.clear_clicking(); + return false; } } + } @@ -1615,7 +1640,7 @@ Page({ //-- 判断起购数量 -- if (!e.data.checkAllToggle) { //判断是不是有促销活动 - var act = await getApp().get_has_cx_act(obj.goods_id); + var act = getApp().get_has_cx_act2(obj.goodsActinfo); th.click_set_limit(obj, i, j, act); } @@ -1677,9 +1702,6 @@ Page({ }); } else { - e.setData({ - [txt]: !e.data.checkAllToggle, - }) if (!e.data.checkAllToggle) { //组合购的金额要另外算 @@ -1694,6 +1716,7 @@ Page({ offline_num += item[j].goods_num; } } + e.setData({ [txt]: !e.data.checkAllToggle, }) @@ -1720,79 +1743,79 @@ Page({ title: '提示', content: text_arr + '不能与门店中其他商品一起结算,配送方式不一致' }); + th.clear_clicking(); return false; - } else { + } - for (var i = 0; i < dda.length; i++) { - // if (!e.data.checkAllToggle) { - //多门店优惠促销次数控制 - if (dda[i].pro_off || e.data.checkAllToggle) { - var txt = "requestData[" + i + "].selected"; - e.setData({ - [txt]: 0, - }); - } else { - var txt = "requestData[" + i + "].selected"; - e.setData({ - [txt]: 1, - }); - } - // } + for (var i = 0; i < dda.length; i++) { - //总的价格,把组合商品的价格拿出来 - // var zh_calc_res = zh_calc.calculate_zh(dda, i, this); - // tfeel += zh_calc_res.tfeel; - // offline_price += zh_calc_res.offline_price; - // offline_num += zh_calc_res.offline_num; - // - // //总的价格,把阶梯促销的商品的价格拿出来 - // var ladder_calc_res = ladder_calc.calculate_ladder(dda, i, this); - // tfeel += ladder_calc_res.tfeel; - // offline_price += ladder_calc_res.offline_price; - // offline_num += ladder_calc_res.offline_num; - // - // //当有线下取价的时候 - // if (offline_price) { - // var txt1 = "requestData[" + i + "].offline_price"; - // var txt2 = "requestData[" + i + "].offline_num"; - // th.setData({ - // [txt1]: offline_price.toFixed(2), - // [txt2]: offline_num, - // }); - // } else { - // if (dda[i].offline_price > 0) { - // var txt1 = "requestData[" + i + "].offline_price"; - // var txt2 = "requestData[" + i + "].offline_num"; - // th.setData({ - // [txt1]: 0, - // [txt2]: 0 - // }); - // } - // } - } - //多门店优惠次数控制 - if (pro_off) { + // if (!e.data.checkAllToggle) { + //多门店优惠促销次数控制 + if (dda[i].pro_off || e.data.checkAllToggle) { + var txt = "requestData[" + i + "].selected"; e.setData({ - checkAllToggle: false, + [txt]: 0, }); } else { + var txt = "requestData[" + i + "].selected"; e.setData({ - checkAllToggle: !e.data.checkAllToggle, + [txt]: 1, }); } - e.setData({ - checkAllToggle: !e.data.checkAllToggle, - // total_fee: tfeel.toFixed(2), - // total_num: t_num, + // } - }); + //总的价格,把组合商品的价格拿出来 + // var zh_calc_res = zh_calc.calculate_zh(dda, i, this); + // tfeel += zh_calc_res.tfeel; + // offline_price += zh_calc_res.offline_price; + // offline_num += zh_calc_res.offline_num; + // + // //总的价格,把阶梯促销的商品的价格拿出来 + // var ladder_calc_res = ladder_calc.calculate_ladder(dda, i, this); + // tfeel += ladder_calc_res.tfeel; + // offline_price += ladder_calc_res.offline_price; + // offline_num += ladder_calc_res.offline_num; + // + // //当有线下取价的时候 + // if (offline_price) { + // var txt1 = "requestData[" + i + "].offline_price"; + // var txt2 = "requestData[" + i + "].offline_num"; + // th.setData({ + // [txt1]: offline_price.toFixed(2), + // [txt2]: offline_num, + // }); + // } else { + // if (dda[i].offline_price > 0) { + // var txt1 = "requestData[" + i + "].offline_price"; + // var txt2 = "requestData[" + i + "].offline_num"; + // th.setData({ + // [txt1]: 0, + // [txt2]: 0 + // }); + // } + // } + } - this.doCheckAll(function () { - e.all_check_prom_activity(); - }); + //e.setData({ + //checkAllToggle: !e.data.checkAllToggle, + // total_fee: tfeel.toFixed(2), + // total_num: t_num, + //}); + + this.doCheckAll(async function () { + await e.all_check_prom_activity(); + + //多门店优惠次数控制 + if (pro_off) { + e.setData({ + checkAllToggle: false, + }); + } + th.clear_clicking(); + + }); - } } if (sdda && sdda.length > 0) { @@ -1822,28 +1845,40 @@ Page({ total_fee: tfeel.toFixed(2), total_num: t_num, }); - } + th.clear_clicking(); + + } }, + + //------门店全选按钮,要判断是否门店的匹配方式一致--------- check_th_all_item: async function (ele) { + + //防止重复点击 + if(this.data.clicking) return false; + this.data.clicking=1; + //加载动画 + this.set_clicking(); + var e = this, - th = this, - pitems = ele.currentTarget.dataset.pitems, - item = this.data.requestData[pitems].goods, - sele = this.data.requestData[pitems].selected; + th = this, + pitems = ele.currentTarget.dataset.pitems, + item = this.data.requestData[pitems].goods, + sele = this.data.requestData[pitems].selected; this.data.btn_click = 1; var garr = e.data.service_data; var isok = 1, - fir = 0, - iarr = item; + fir = 0, + iarr = item; //清空-- 多个促销的切换 -- - var txt0 = "requestData[" + pitems + "].show_can_cx"; + var txt0 = "requestData[" + pitems + "].show_can_cx1"; e.setData({ [txt0]: {}, }); + th.data.requestData[pitems].show_can_cx=null; //清空需要的 if (!sele) { @@ -1857,6 +1892,8 @@ Page({ var txt0 = "requestData[" + pitems + "].selected"; this.setData({[txt0]:1}) + + th.clear_clicking(); return false; } @@ -1875,6 +1912,7 @@ Page({ title: '提示', content: '服务卡项目不能和商品一起选择' }); + th.clear_clicking(); return false; } } @@ -1900,6 +1938,7 @@ Page({ title: '提示', content: '同一门店自提和物流的商品不能同时结算' }); + th.clear_clicking(); return false; } @@ -1910,7 +1949,7 @@ Page({ var gd_info = item[i]; if (!sele) { - var act = await getApp().get_has_cx_act(gd_info.goods_id); + var act =getApp().get_has_cx_act2(gd_info.goodsActinfo); th.click_set_limit(gd_info, pitems, i, act) } @@ -1927,29 +1966,32 @@ Page({ icon: 'none', }); + th.clear_clicking(); return false; - } else { - if (th.data.sales_rules == 3) { - var goods_id = gd_info.goods_id; - var num = 0; - - for (let i = 0; i < th.data.requestData.length; i++) { - if (pitems == i) continue; - var it = th.data.requestData[i].goods.find((e) => { - return e.goods_id == goods_id; - }) - if (it && it.selected) num += it.goods_num - } + } - if (num > ob.CanOutQty) { - wx.showToast({ - title: gd_info.goods_name+'购买数量超出商品库存', - icon: 'none', - }); - return false; - } + if (th.data.sales_rules == 3) { + var goods_id = gd_info.goods_id; + var num = 0; + + for (let i = 0; i < th.data.requestData.length; i++) { + if (pitems == i) continue; + var it = th.data.requestData[i].goods.find((e) => { + return e.goods_id == goods_id; + }) + if (it && it.selected) num += it.goods_num + } + + if (num > ob.CanOutQty) { + wx.showToast({ + title: gd_info.goods_name+'购买数量超出商品库存', + icon: 'none', + }); + th.clear_clicking(); + return false; } } + } //判断多店优惠促销次数控制 @@ -2023,12 +2065,17 @@ Page({ if (sele && i == pitems) continue; await e.check_prom_activity(i); } + + th.clear_clicking(); + }); } else { + th.clear_clicking(); wx.showToast({ title: the_res.msg, icon: 'none', }); + } }) @@ -2074,16 +2121,35 @@ Page({ }, - + //清理防止重复点击的状态函数---2024-2-1 + set_clicking(){ + wx.showLoading({ + mark:true + }); + }, + //清理防止重复点击的状态函数---2024-2-1 + clear_clicking(){ + var th=this; + wx.hideLoading({ + complete:function (){ + th.data.clicking=0; + } + }); + }, //---------------单选,也要判断门店的配送方式是否一致-------------- check_th_item: async function (t) { + + //防止重复点击 + if(this.data.clicking) return false; + this.data.clicking=1; + var e = this, - th = this, - item = t.currentTarget.dataset.item, - pitems = t.currentTarget.dataset.pitems; + th = this, + item = t.currentTarget.dataset.item, + pitems = t.currentTarget.dataset.pitems; a = this.data.requestData[pitems].goods[item]; var isok = 1, - fir = 0; + fir = 0; var iarr = e.data.requestData[pitems].goods; this.data.btn_click = 1; var garr = e.data.service_data; @@ -2093,9 +2159,10 @@ Page({ //如果是标记的时候 if(this.data.is_edit){ - var txt = "requestData[" + pitems + "].goods[" + item + "].selected"; - this.setData({[txt]:1}) - return false; + var txt = "requestData[" + pitems + "].goods[" + item + "].selected"; + this.setData({[txt]:1}); + th.clear_clicking(); + return false; } @@ -2113,6 +2180,7 @@ Page({ title: '提示', content: '服务卡项目不能和商品一起选择' }); + th.clear_clicking(); return false; } } @@ -2142,112 +2210,120 @@ Page({ title: '提示', content: '同一门店自提和物流的商品不能同时结算' }); - } else { - var txt = "requestData[" + pitems + "].goods[" + item + "].selected"; - var gd_info = a; + th.clear_clicking(); + return false; + } - var erpwareid = gd_info.erpwareid; - //-- 如果是选中的时候 -- - if (!a.selected) { + var txt = "requestData[" + pitems + "].goods[" + item + "].selected"; + var gd_info = a; - th.data.pitems=pitems; + var erpwareid = gd_info.erpwareid; - //判断是不是有促销活动 - var act = await getApp().get_has_cx_act(gd_info.goods_id); - //-- 专门来设置商品订购数量 -- - th.click_set_limit(gd_info, pitems, item, act) - if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1, 2, 4, 6, 8, 9].indexOf(gd_info.prom_type) == -1) { + //-- 如果是选中的时候 -- + if (!a.selected) { - var ob = {}; - await th.check_down_line_next(gd_info, pitems, item, erpwareid, function (res) { - ob = res; + th.data.pitems=pitems; + + //判断是不是有促销活动 + var act = getApp().get_has_cx_act2(gd_info.goodsActinfo); + //-- 专门来设置商品订购数量 -- + th.click_set_limit(gd_info, pitems, item, act) + if (th.data.sales_rules >= 2 && !gd_info.whsle_id && [1, 2, 4, 6, 8, 9].indexOf(gd_info.prom_type) == -1) { + + var ob = {}; + await th.check_down_line_next(gd_info, pitems, item, erpwareid, function (res) { + ob = res; + }); + if (ob.code == -1) { + wx.showToast({ + title: '购买数量超出商品库存', + icon: 'none', }); - if (ob.code == -1) { + th.clear_clicking(); + return false; + } + if (th.data.sales_rules == 3) { + var goods_id = gd_info.goods_id; + var num = 0; + + for (let i = 0; i < th.data.requestData.length; i++) { + if (pitems == i) continue; + var it = th.data.requestData[i].goods.find((e) => { + return e.goods_id == goods_id; + }) + if (it && it.selected) num += it.goods_num + } + + if (num > ob.CanOutQty) { wx.showToast({ title: '购买数量超出商品库存', icon: 'none', }); - + th.clear_clicking(); return false; - } else { - if (th.data.sales_rules == 3) { - var goods_id = gd_info.goods_id; - var num = 0; - - for (let i = 0; i < th.data.requestData.length; i++) { - if (pitems == i) continue; - var it = th.data.requestData[i].goods.find((e) => { - return e.goods_id == goods_id; - }) - if (it && it.selected) num += it.goods_num - } - - if (num > ob.CanOutQty) { - wx.showToast({ - title: '购买数量超出商品库存', - icon: 'none', - }); - - return false; - } - } } - } + } + } - let pro_off = false - //判断多店优惠促销次数控制 - if (th.data.requestData.length > 1) { - if (a.prom_type == 3 && !a.selected) { - //pro_off = await th.multiple_stores_pro(pitems, item) - } + let pro_off = false + //判断多店优惠促销次数控制 + if (th.data.requestData.length > 1) { + if (a.prom_type == 3 && !a.selected) { + //pro_off = await th.multiple_stores_pro(pitems, item) } + } + + if (pro_off) { + wx.showToast({ + title: '已超出优惠促销次数', + icon: 'none', + }); + th.clear_clicking(); + return false; + } + + var txt0 = "requestData[" + pitems + "].show_can_cx"; + e.setData({ + [txt0]: {}, + }); + th.data.requestData[pitems].show_can_cx=null; - if (pro_off) { + //-- 选择了什么商品,就用什么商品来判断 -- + var sele_arr = {}; + sele_arr[item] = !a.selected; + //回调判断活动有没有冲突 + this.cx_check_ok(pitems, sele_arr, function (the_res) { + if (the_res.code == 0) { + th.setData({ + [txt]: Number(!a.selected), + }); + //要先处理了,再来判断要不要显示凑单 + th.doCheckAll(async function () { + th.data.duo_zp_num_arr={}; + //判断商品是不是优惠活动 + for (var i in e.data.requestData) { + await e.check_prom_activity(i); + } + //清理一下点击防止重复点击 + th.clear_clicking(); + + }); + } else { wx.showToast({ - title: '已超出优惠促销次数', + title: the_res.msg, icon: 'none', }); - return false; } + }) - var txt0 = "requestData[" + pitems + "].show_can_cx"; - e.setData({ - [txt0]: {}, - }); - - //-- 选择了什么商品,就用什么商品来判断 -- - var sele_arr = {}; - sele_arr[item] = !a.selected; - //回调判断活动有没有冲突 - this.cx_check_ok(pitems, sele_arr, function (the_res) { - if (the_res.code == 0) { - th.setData({ - [txt]: Number(!a.selected), - }); - //要先处理了,再来判断要不要显示凑单 - th.doCheckAll(async function () { - th.data.duo_zp_num_arr={}; - //判断商品是不是优惠活动 - for (var i in e.data.requestData) { - await e.check_prom_activity(i); - } + }, - }); - } else { - wx.showToast({ - title: the_res.msg, - icon: 'none', - }); - } - }) - } - }, //------门店全选按钮,要判断是否门店的匹配方式一致--------- check_th_all_item_ser: async function (ele) { @@ -2410,6 +2486,29 @@ Page({ for (var a = 0; a < car.length; a++) { //-- 把活动组装进去 --- var show_can_cx = rd_arr[a]; + //-- 把活动组装进去 --- + let show_can_cx1 = ut.deep_cp(rd_arr[a]); + //前端处理渲染的时,要处理一些不需要的字段属性 + if(show_can_cx1){ + for (const key in show_can_cx1) { + let element = show_can_cx1[key]; + if(element.cur_act ){ + delete element.cur_act; + } + if(element.ch_map){ + delete element.ch_map; + } + if(element.act_arr && element.act_arr.length>0){ + for (var ij = 0; ij < element.act_arr.length; ij++) { + var act_ite = element.act_arr[ij]; + delete act_ite.goods; + delete act_ite.act; + delete act_ite.key; + } + } + } + } + car[a].zh_map = null; car[a].ladder_map = null; @@ -2514,7 +2613,9 @@ Page({ } else if (item[c].prom_type == 10) { ladder_calc.add_ladder_prom(car, a, obj); } else { + console.log("索引:"+c+",数量:"+item[c].goods_num+",单价:"+item[c].goods_price+",合计:"+item[c].goods_num * item[c].goods_price+",商品:"+item[c].goods_name); tfeel += item[c].goods_num * item[c].goods_price; + console.log("累计:"+tfeel); } t_num += item[c].goods_num; } @@ -2546,11 +2647,11 @@ Page({ [txt]: Number(is_s_sele) }); - var txt1 = "requestData[" + a + "].show_can_cx"; - var txt_g = "requestData[" + a + "].goods"; + var txt1 = "requestData[" + a + "].show_can_cx1"; + //-- 赋值不渲染 ,只后台计算 -- + th.data.requestData[a].show_can_cx=show_can_cx; th.setData({ - [txt1]: show_can_cx, - [txt_g]:item + [txt1]: show_can_cx1, }); //-- var et={show_can_cx:show_can_cx}; @@ -2859,7 +2960,7 @@ Page({ //-- 这个函数在计算的时候,要包含限购的那一部分 -- async normal_check(t, item, pitem, store_count, limit, goodsinfo, wareIds) { - var cx_arr = await getApp().get_has_cx_act(goodsinfo.goods_id); + var cx_arr = getApp().get_has_cx_act2(goodsinfo.goodsActinfo); var th = this; // getApp().my_warnning('购买数量超出商品库存', 0, th); @@ -3386,6 +3487,12 @@ Page({ this.getCardList(); }, + + clear_checkouting(){ + wx.hideLoading(); + this.data.checkouting=0; + }, + //--------------去结算------------ async checkout() { if (getApp().is_sp_hao()) { @@ -3397,13 +3504,24 @@ Page({ return false; } - if (!this.data.total_num || this.data.total_num <= 0) return false; + if (!this.data.total_num || this.data.total_num <= 0) { + wx.showToast({ + title: "请选择商品", + icon: 'none', + duration: 2000 + }); + return false; + } if (!this.data.is_load) return false; if (this.data.up_dating) { wx.showLoading({ title: "计算中" }) } + + if(this.data.checkouting) return false; + this.data.checkouting=1; + var garr = this.data.requestData; var check_is_goods_selected = 0; @@ -3498,15 +3616,14 @@ Page({ if(yh_by_map[ky]){ ky_n+=yh_by_map[ky]; } - //-- 判断优惠促销活动的商品的限购,can_yh 表示商品满足优惠促销的条件 -- if(i_arr[j].prom_type==3 && fd1.act.goodslimit>0 && i_arr[j].can_yh ){ - var p_can_by=fd1.act.goodslimit-fd1.act.goodslimited; - if(i_arr[j].goods_num+ky_n>p_can_by){ - getApp().confirmBox(i_arr[j].goods_name + "超出活动限购数量"+fd1.act.goodslimit+"件"); - wx.hideLoading(); - return false; - } + var p_can_by=fd1.act.goodslimit-fd1.act.goodslimited; + if(i_arr[j].goods_num+ky_n>p_can_by){ + getApp().confirmBox(i_arr[j].goods_name + "超出活动限购数量"+fd1.act.goodslimit+"件"); + wx.hideLoading(); + return false; + } } //-- 把购物数量记录到map表中 -- if(!yh_by_map[ky]) yh_by_map[ky]=0; @@ -3516,10 +3633,8 @@ Page({ } - - - if (i_arr[j].prom_type == 7 && i_arr[j].act && (i_arr[j].act.buy_limit>0 || i_arr[j].act.zh_num>0) ) { + let userbuynum = await this.getUserBuyPromNum(i_arr[j].prom_id); if(!zh_buyed_m[i_arr[j].prom_id]) zh_buyed_m[i_arr[j].prom_id]=userbuynum; @@ -3537,10 +3652,10 @@ Page({ checkArr7.push(i_arr[j]) }else{ if (zh_all_ck[i_arr[j].prom_id]) { - //相同门店只记录一单 + //相同门店只记录一单 if(zh_all_ck[i_arr[j].prom_id].indexOf(i)==-1) zh_all_ck[i_arr[j].prom_id].push(i); } else { - zh_all_ck[i_arr[j].prom_id] = [i]; + zh_all_ck[i_arr[j].prom_id] = [i]; } } @@ -3548,7 +3663,7 @@ Page({ //-- 优惠活动次数限制,相同门店的相同prom_id只能算一次 -- if (i_arr[j].prom_type == 3) { if (checkObj3[i_arr[j].prom_id]) { - if(checkObj3[i_arr[j].prom_id].indexOf(i)==-1) checkObj3[i_arr[j].prom_id].push(i); + if(checkObj3[i_arr[j].prom_id].indexOf(i)==-1) checkObj3[i_arr[j].prom_id].push(i); } else { checkObj3[i_arr[j].prom_id] = [i]; } @@ -3556,11 +3671,11 @@ Page({ //如果是普通购买的时候。 if(i_arr[j].is_integral_normal || i_arr[j].is_pd_normal ){ - //-- 四大促销 -- - if([3,5,7,10].indexOf(i_arr[j].prom_tyoe)==-1){ - i_arr[j].prom_id=0; - i_arr[j].prom_type=0; - } + //-- 四大促销 -- + if([3,5,7,10].indexOf(i_arr[j].prom_tyoe)==-1){ + i_arr[j].prom_id=0; + i_arr[j].prom_type=0; + } } //map 的key是不会重复,会覆盖,, @@ -3589,25 +3704,20 @@ Page({ //glist += i_arr[j].goods_id + ","; if(!i_arr[j].is_gift){ - var et= {"prom_type":i_arr[j].prom_type,"prom_id":i_arr[j].prom_id,"goods_id":i_arr[j].goods_id}; - glist.push(et); + var et= {"prom_type":i_arr[j].prom_type,"prom_id":i_arr[j].prom_id,"goods_id":i_arr[j].goods_id}; + glist.push(et); } ab = 1; //-- 获取促销活动是不是有参与 -- - var act = await getApp().get_has_cx_act(i_arr[j].goods_id); + var act = getApp().get_has_cx_act2(i_arr[j].goodsActinfo); //-- 判断商品的起订数量 -- var mo_num = getApp().get_limit_qty(i_arr[j], act.length); var steep = getApp().get_limit_qty(i_arr[j], act.length, 1); var py_type = parseInt(i_arr[j].prom_type + ''); - //商品只查一次。看一下有没有 - var gd = null; - //获取商品信息,包含线下商品ID,指定门店销售的信息 - await getApp().request.promiseGet("/api/weshop/goods/get/" + oo.stoid + "/" + i_arr[j].goods_id, {}).then(res => { - if (res.data.code == 0) gd = res.data.data; - }) - + //-- 商品只查一次。看一下有没有,门店之前第一次就赋值了 -- + var gd = i_arr[j]; //判断秒杀的指定门店和团购的指定门店 if([1,2].indexOf(py_type)>-1 && i_arr[j].prom && i_arr[j].prom.pick_up_lists){ var idx0=i_arr[j].prom.pick_up_lists.findIndex(function (e){ @@ -3620,7 +3730,7 @@ Page({ if(py_type==2) act_type='团购'; getApp().confirmBox(i_arr[j].goods_name + act_type+"活动的门店不可售"); - wx.hideLoading(); + th.clear_checkouting(); return false; } } @@ -3628,19 +3738,19 @@ Page({ if ([0, 3, 5, 7, 10].indexOf(py_type) > -1) { //如果是指定门店,就要判断 if(gd.pick_group_ids){ - var idx0=gd.pick_up_lists.findIndex(function (e){ - return e.pickup_id==i_arr[j].pick_id; - }) - if(idx0<0){ - getApp().confirmBox(i_arr[j].goods_name + "的门店不可售"); - wx.hideLoading(); - return false; - } + var idx0=gd.pick_up_lists.findIndex(function (e){ + return e.pickup_id==i_arr[j].pick_id; + }) + if(idx0<0){ + getApp().confirmBox(i_arr[j].goods_name + "的门店不可售"); + th.clear_checkouting(); + return false; + } } if (mo_num > i_arr[j].goods_num) { getApp().confirmBox(i_arr[j].goods_name + "的未达到起订数量"); - wx.hideLoading(); + th.clear_checkouting(); return false; } if (steep > 1 && (i_arr[j].goods_num - mo_num) % steep != 0) { @@ -3655,7 +3765,7 @@ Page({ th.postCardList(e, j, i); - wx.hideLoading(); + th.clear_checkouting(); return false; } @@ -3672,7 +3782,7 @@ Page({ }); if (ob.code == -1) { t.my_warnning(gd.goods_name + "门店库存不足", 0, th); - wx.hideLoading(); + th.clear_checkouting(); return false; } @@ -3685,7 +3795,7 @@ Page({ if (res.data.code == 0) { if (!res.data.data.promGoodsLists) { t.my_warnning(i_arr[j].goods_name + "优惠活动已经过期", 0, th); - wx.hideLoading(); + th.clear_checkouting(); is_ok = 0; } } @@ -3698,20 +3808,21 @@ Page({ } else { if (i_arr[j].is_gift == 1) continue; - rq.put("/api/weshop/cart/update", { - data: { - id: i_arr[j].id, - selected: 0, - store_id: oo.stoid - }, - success: function (ee) { - console.log(ee); - } - }); + // rq.put("/api/weshop/cart/update", { + // data: { + // id: i_arr[j].id, + // selected: 0, + // store_id: oo.stoid + // }, + // success: function (ee) { + // console.log(ee); + // } + // }); } } } + console.log(checkObj3); let checkObj3_off = false @@ -3761,7 +3872,7 @@ Page({ if (checkObj3_off) { t.my_warnning("已超出优惠促销次数", 0, th); - wx.hideLoading(); + th.clear_checkouting(); return false } @@ -3770,23 +3881,23 @@ Page({ let zh_ck_arr = Object.keys(zh_limit_m); if(zh_ck_arr && zh_ck_arr.length ){ for (let xg = 0; xg < zh_ck_arr.length; xg++) { - var ky=zh_ck_arr[xg]; - var zh_buyed=zh_buyed_m[ky]?zh_buyed_m[ky]:0; - var zh_limit=zh_limit_m[ky]?zh_limit_m[ky]:0; - var zh_all=zh_all_ck[ky]?zh_all_ck[ky].length:0; - if(zh_limit<=0) continue; - - if(zh_all+zh_buyed>zh_limit){ - zh_off=true; - break; - } + var ky=zh_ck_arr[xg]; + var zh_buyed=zh_buyed_m[ky]?zh_buyed_m[ky]:0; + var zh_limit=zh_limit_m[ky]?zh_limit_m[ky]:0; + var zh_all=zh_all_ck[ky]?zh_all_ck[ky].length:0; + if(zh_limit<=0) continue; + + if(zh_all+zh_buyed>zh_limit){ + zh_off=true; + break; + } } } if (zh_off) { - t.my_warnning("已超出组合购优惠次数", 0, th); - wx.hideLoading(); - return false + t.my_warnning("已超出组合购优惠次数", 0, th); + th.clear_checkouting(); + return false } @@ -3839,7 +3950,7 @@ Page({ }) if (ab == 0) { t.my_warnning("未选择商品", 0, th); - wx.hideLoading(); + th.clear_checkouting(); return false; } @@ -3848,7 +3959,7 @@ Page({ } else if (res.cancel) { - wx.hideLoading(); + th.clear_checkouting(); console.log('用户点击取消') } } @@ -3871,7 +3982,7 @@ Page({ }) if (ab == 0) { t.my_warnning("未选择商品", 0, th); - wx.hideLoading(); + th.clear_checkouting(); return false; } @@ -3903,7 +4014,7 @@ Page({ }) if(idx0<0){ getApp().confirmBox(i_arr[j].service_name + "秒杀活动的门店不可售"); - wx.hideLoading(); + th.clear_checkouting(); return false; } } @@ -3923,8 +4034,6 @@ Page({ } }) - - wx.hideLoading(); getApp().goto("/packageA/pages/cart2_ser/cart2_ser?is_cart=1"); } }, @@ -3933,6 +4042,7 @@ Page({ cart_buy_next(glist,map,g_arr,checkArr7){ var th=this; var map_limit = new Map(); //使用map值键进行存储限购 + var up_cart_data=[]; //--取一下商品的限购 以及活动的限购,redis数量-- getApp().request.promisePost("/api/weshop/goods/listGoodsListNumNew", { is_json:1, @@ -3941,182 +4051,166 @@ Page({ store_id: oo.stoid } }).then(async ee=>{ - if (ee.data.code == 0) { - var ddata = ee.data.data, - isok = 1, - gname = "", - err = ""; - //--组装-- - for (var ij = 0; ij < ddata.length; ij++) { - var val = ddata[ij]; - - var ky=val.goods_id + "-"+val.prom_type + "-"+val.prom_id; - var obj = map_limit.get(ky); - if (obj) continue; - - var promgoodsbuynum = 0; - var goodsbuynum = 0; - - //--要获得商品,该用户买了多少件,同步应用-- - await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { - data: { - store_id: oo.stoid, - user_id:getApp().globalData.user_id, - goods_id: val.goods_id, - prom_type: val.prom_type, - prom_id: val.prom_id, - isnew:1 - }, - }).then(res => { - var buy_num_data = res.data.data; - if (buy_num_data.promgoodsbuynum) promgoodsbuynum = buy_num_data.promgoodsbuynum; - goodsbuynum = buy_num_data.goodsbuynum; - }) - var ie = { - promgoodsbuynum: promgoodsbuynum, - goodsbuynum: goodsbuynum - }; - map_limit.set(ky, ie); + if (ee.data.code == 0 && ee.data.data && ee.data.data.length) { + var ddata = ee.data.data, + isok = 1, + gname = "", + err = ""; + //--组装-- + for (var ij = 0; ij < ddata.length; ij++) { + var val = ddata[ij]; + + var ky=val.goods_id + "-"+val.prom_type + "-"+val.prom_id; + var obj = map_limit.get(ky); + if (obj) continue; + + var promgoodsbuynum =val.promgoodsbuynum || 0; + var goodsbuynum =val.goodsbuynum || 0; + + var ie = { + promgoodsbuynum: promgoodsbuynum, + goodsbuynum: goodsbuynum + }; + map_limit.set(ky, ie); + } + + //try { + for (var ind in ddata) { + var val = ddata[ind]; + var num = map.get(val.goods_id + ""); + + var ky=val.goods_id + "-"+val.prom_type + "-"+val.prom_id; + var buyed = map_limit.get(ky); + + if (num <= 0) { + isok = 0; + gname = val.goods_name; + err= "购买数量不能为0"; + return false; } - //try { - for (var ind in ddata) { - var val = ddata[ind]; - var num = map.get(val.goods_id + ""); + if (val.prom_type == 1 || val.prom_type == 2) { - var ky=val.goods_id + "-"+val.prom_type + "-"+val.prom_id; - var buyed = map_limit.get(ky); + var s_num=num; + if(th.data.sales_rules> 1) s_num=buyed; + if (s_num > val.store_count) { + isok = 0; + gname = val.goods_name; + err="超出库存"; + return false; + } - if (num <= 0) { - isok = 0; - gname = val.goods_name; - throw "购买数量不能为0"; - return false; - } + if (buyed > val.redisnum && val.redisnum) { + isok = 0; + gname = val.goods_name; + err="超出活动库存"; + break; + } + if (buyed > val.goods_num - val.buy_num && val.goods_num) { + isok = 0; + gname = val.goods_name; + err="超出活动库存"; + break; + } + } - if (val.prom_type == 1 || val.prom_type == 2) { + if (th.data.sales_rules == 1) { + if (num > val.store_count) { + isok = 0; + gname = val.goods_name; + err="超出库存"; + break; + } + } - var s_num=num; - if(th.data.sales_rules> 1) s_num=buyed; - if (s_num > val.store_count) { - isok = 0; - gname = val.goods_name; - throw "超出库存"; - return false; - } + if (num + buyed.goodsbuynum > val.viplimited && val.viplimited > 0) { + isok = 0; + gname = val.goods_name; + err="超出商品限购"; + break; + } - if (buyed > val.redisnum && val.redisnum) { - isok = 0; - gname = val.goods_name; - err="超出活动库存"; - break; - } - if (buyed > val.goods_num - val.buy_num && val.goods_num) { - isok = 0; - gname = val.goods_name; - err="超出活动库存"; - break; - } + if (num + buyed.promgoodsbuynum > val.buy_limit && val.buy_limit > 0) { + isok = 0; + gname = val.goods_name; + err="超出活动限购"; + break; + } - } + var card_field = th.data.card_field; + for (var i = 0; i < g_arr.length; i++) { + if (g_arr[i].goods_id == val.goods_id) { - if (th.data.sales_rules == 1) { - if (num > val.store_count) { + //如果会员是等级会员,商品有等级价,且不是活动商品 + if (card_field && val[card_field] > 0 && + ((val.prom_type == 0 && g_arr[i].prom_type == 0) || g_arr[i].prom_type == 5 || g_arr[i].prom_type == 7 || g_arr[i].prom_type == 10)) { + if (g_arr[i].goods_price != val[card_field]) { isok = 0; gname = val.goods_name; - err="超出库存"; + err="商品价格已经变化"; + break; + } + } else { + if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price && val.prom_price > 0) { + isok = 0; + gname = val.goods_name; + err="商品价格已经变化"; break; } } + //-- 数据的更新 -- + var data = { + id: g_arr[i].id, + selected: 1, + store_id: oo.stoid, + prom_type: g_arr[i].prom_type, + prom_id: g_arr[i].prom_id, + }; + // let gitem = checkArr7.find(item => item.goods_id == g_arr[i].goods_id) + // if (gitem) { + // data.prom_type = 0 + // data.prom_id = 0 + // } - if (num + buyed.goodsbuynum > val.viplimited && val.viplimited > 0) { - isok = 0; - gname = val.goods_name; - err="超出商品限购"; - break; - } - - if (num + buyed.promgoodsbuynum > val.buy_limit && val.buy_limit > 0) { - isok = 0; - gname = val.goods_name; - err="超出活动限购"; - break; - } - - var card_field = th.data.card_field; - for (var i = 0; i < g_arr.length; i++) { - if (g_arr[i].goods_id == val.goods_id) { - - //如果会员是等级会员,商品有等级价,且不是活动商品 - if (card_field && val[card_field] > 0 && - ((val.prom_type == 0 && g_arr[i].prom_type == 0) || g_arr[i].prom_type == 5 || g_arr[i].prom_type == 7 || g_arr[i].prom_type == 10)) { - if (g_arr[i].goods_price != val[card_field]) { - isok = 0; - gname = val.goods_name; - err="商品价格已经变化"; - break; - } - } else { - if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price && val.prom_price > 0) { - isok = 0; - gname = val.goods_name; - err="商品价格已经变化"; - break; - } - } - - //-- 数据的更新 -- - var data = { - id: g_arr[i].id, - selected: 1, - store_id: oo.stoid, - prom_type: g_arr[i].prom_type, - prom_id: g_arr[i].prom_id, - }; - - // let gitem = checkArr7.find(item => item.goods_id == g_arr[i].goods_id) - // if (gitem) { - // data.prom_type = 0 - // data.prom_id = 0 - // } - - //-- 如果有线下取价的时候 -- - if (g_arr[i].is_offline) { - data.pricing_type = g_arr[i].pricing_type; - data.offline_price = g_arr[i].offline_price; - } - rq.put("/api/weshop/cart/update", { - data: data, - success: function (ee) { - console.log(ee); - } - }); - } + //-- 如果有线下取价的时候 -- + if (g_arr[i].is_offline) { + data.pricing_type = g_arr[i].pricing_type; + data.offline_price = g_arr[i].offline_price; } - - if(!isok) break; + //把更新数组存起来 + up_cart_data.push(data); } - // } catch (e) { - // err = e; - // } - if (isok == 0) { - t.confirmBox(gname + ":" + err); - wx.hideLoading(); - return false; } + if(!isok) break; - wx.hideLoading(); - wx.navigateTo({ - url: "/packageE/pages/cart/cart2/cart2" - }); } + // } catch (e) { + // err = e; + // } + if (isok == 0) { + t.confirmBox(gname + ":" + err); + th.clear_checkouting(); + return false; + } + + getApp().request.promisePost("/api/weshop/cart/updateCartPromInfo", { + is_json: 1, + data: up_cart_data, + }); + + wx.navigateTo({ + url: "/packageE/pages/cart/cart2/cart2" + }); + } }) }, + + //结算到最后一个商品 set_last: function (ab, isok, gname) { if (isok == 0) { @@ -4312,10 +4406,15 @@ Page({ //-- 所有的购物车的数据,要用拷贝的赖进行计算 -- var alllist = JSON.parse(JSON.stringify(this.data.requestData)); - var list2 = alllist[cindex]; + //var list2 = alllist[cindex]; var no_gift_arr = []; - + //用来存销赠品的--2024-2-1 + let cart_zp=this.data.cart_zp; + //要清空一下门店下的赠品 + if(cart_zp[list.pid]){ + cart_zp[list.pid]={}; + } //主要判断有没有促销活动 var is_sele_prom = 0; var is_gift_del = 0; @@ -4343,17 +4442,24 @@ Page({ map.set(item.prom_id + "", ob); } } - if (item.is_gift == 1) { - var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; - //getApp().request.delete(url, {}); - await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 - list2.goods.splice(i, 1); - list.goods.splice(i--, 1); - is_gift_del = 1; - } + //-- list中不再添加和删除赠品,优化list不再添加赠品,2024-02-01 -- + // if (item.is_gift == 1) { + // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; + // //getApp().request.delete(url, {}); + // await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 + // list2.goods.splice(i, 1); + // list.goods.splice(i--, 1); + // is_gift_del = 1; + // } } //--如果没有选中的促销活动的,直接退出 -- if (!is_sele_prom) { + + //--- 设置单赠品的显示---2024-2-1 + this.setData({ + cart_zp + }) + //如果有赠品,要重新更新购物车的前台渲染-- if (is_gift_del) { var rq_text = "requestData[" + cindex + "]"; @@ -4374,6 +4480,10 @@ Page({ return false; } + + + //用来判断有没有list大小发生变化 + let is_change_list=0; //-- 循环判断活动 -- for (let p_item of map.entries()) { var prom = null; @@ -4398,12 +4508,15 @@ Page({ //如果活动已经结束 if (!prom || prom.is_end || prom.end_time < ut.gettimestamp()) { for (var ii in list.goods) { - var item = list.goods[ii]; - list.goods.splice(ii, 1); + if (item.prom_id == p_item[0] && item.prom_type == 3) { // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; // getApp().request.delete(url, {}); th.disInvalid(item); + + var item = list.goods[ii]; + list.goods.splice(ii, 1); + is_change_list=1; } } continue; @@ -4479,7 +4592,7 @@ Page({ if (discount) { if (!discount.zp_num || parseInt(discount.zp_num) == 0) discount.zp_num = 1; - //判断一下赠品的模式 + //判断一下赠品的模式,如果是多赠品的时候 if (parseInt(discount.zp_mode) == 1) { var can_zp_num = 0; @@ -4514,7 +4627,7 @@ Page({ } else { //---如果有打折的信息,赠送的信息,赠送的时候要判断是不是限购数量--- if (discount && discount['goods_id'] && (!discount.limit_num || discount.limit_num >= discount.bs * discount.zp_num) && - discount.gift_storecount >= discount.bs * discount.zp_num) { + discount.gift_storecount >= discount.bs * discount.zp_num) { //如果这礼品超了情况下 if (no_gift_arr.indexOf(discount.gift_id) != -1) continue; var o = discount.goodsinfo; @@ -4541,7 +4654,7 @@ Page({ original_img: th.data.imgUrl + o.original_img }; - list2.goods.push(newd); + //list2.goods.push(newd); var all_num = 0; var all_limit_num = 0; @@ -4568,7 +4681,7 @@ Page({ } var url = "/api/weshop/cart/delGift?store_id=" + newd.store_id + "&user_id=" + - newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id + newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id await getApp().request.promiseDelete(url, {}) var add_data = null; @@ -4581,18 +4694,30 @@ Page({ }) if (add_data) { newd.id = add_data.id; - list.goods.push(newd); + //list.goods.push(newd); + if(!cart_zp[list.pid]) cart_zp[list.pid]={}; + if(!cart_zp[list.pid].goods) cart_zp[list.pid].goods=[]; + cart_zp[list.pid].goods.push(newd); } } } } } - //--更新购物车的前台渲染-- - var rq_text = "requestData[" + cindex + "]"; + + //--- 设置单赠品的显示---2024-2-1 this.setData({ - [rq_text]: list - }); + cart_zp + }) + + //list大小有变换,才会渲染list + if(is_change_list) { + //--更新购物车的前台渲染-- + var rq_text = "requestData[" + cindex + "]"; + this.setData({ + [rq_text]: list + }); + } var diff_text = "requestData[" + cindex + "].make_up_arr"; //-- 如果有凑单的话 -- @@ -4620,6 +4745,8 @@ Page({ }, + + //优惠促销用户参与次数 async getUserBuyPromNum_pre(prom_id) { var userInfo = getApp().globalData.userInfo; @@ -4634,6 +4761,7 @@ Page({ return user_pre_buynum }, + async all_check_prom_activity() { this.data.duo_zp_num_arr = {}; for (var i in this.data.requestData) { @@ -4647,9 +4775,14 @@ Page({ //-- 所有的购物车的数据,要用拷贝的赖进行计算 -- var alllist = JSON.parse(JSON.stringify(this.data.requestData)); - var list2 = alllist[cindex]; + //var list2 = alllist[cindex]; + var no_gift_arr = []; + //用来存销赠品的--2024-2-1 + let cart_zp=this.data.cart_zp; + //要清空一下赠品数组 + cart_zp={}; //主要判断有没有促销活动 var is_sele_prom = 0; @@ -4677,25 +4810,30 @@ Page({ map.set(item.prom_id + "", ob); } } - if (item.is_gift == 1) { - var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; - //getApp().request.delete(url, {}); - await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 - list2.goods.splice(i, 1); - list.goods.splice(i--, 1); - is_gift_del = 1; - } + + //-- list中不再添加和删除赠品,优化list不再添加赠品,2024-02-01 -- + // if (item.is_gift == 1) { + // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; + // //getApp().request.delete(url, {}); + // await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 + // list2.goods.splice(i, 1); + // list.goods.splice(i--, 1); + // is_gift_del = 1; + // } } //--如果没有选中的促销活动的,直接退出 -- if (!is_sele_prom) { - //如果有赠品,要重新更新购物车的前台渲染-- - if (is_gift_del) { - var rq_text = "requestData[" + cindex + "]"; - this.setData({ - [rq_text]: list - }); - } - + //如果有赠品,要重新更新购物车的前台渲,list中不再显示-- + // if (is_gift_del) { + // var rq_text = "requestData[" + cindex + "]"; + // this.setData({ + // [rq_text]: list + // }); + // } + //--- 设置单赠品的显示---2024-2-1 + this.setData({ + cart_zp + }) var rq_text2 = "requestData[" + cindex + "].make_up_arr"; this.setData({ [rq_text2]: null, @@ -4707,6 +4845,9 @@ Page({ }) continue; } + + //用来判断有没有list大小发生变化 + let is_change_list=0; //-- 循环判断活动 -- for (let p_item of map.entries()) { var prom = null; @@ -4728,13 +4869,17 @@ Page({ } //如果活动已经结束 if (!prom || prom.is_end || prom.end_time < ut.gettimestamp()) { + for (var ii in list.goods) { - var item = list.goods[ii]; - list.goods.splice(ii, 1); + if (item.prom_id == p_item[0] && item.prom_type == 3) { // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; // getApp().request.delete(url, {}); th.disInvalid(item); + + var item = list.goods[ii]; + list.goods.splice(ii, 1); + is_change_list=1; } } continue; @@ -4792,8 +4937,6 @@ Page({ } } - - //-- 只有在单赠品的时候,才要进行计算 -- await getApp().request.promiseGet("/api/weshop/goods/getDiscount", { data: { @@ -4810,7 +4953,7 @@ Page({ if (discount) { if (!discount.zp_num || parseInt(discount.zp_num) == 0) discount.zp_num = 1; - //判断一下赠品的模式 + //-- 判断一下赠品的模式,如果是多赠品的模式 -- if (parseInt(discount.zp_mode) == 1) { var can_zp_num = 0; @@ -4843,7 +4986,7 @@ Page({ } else { //---如果有打折的信息,赠送的信息,赠送的时候要判断是不是限购数量,因为增加了限购数量不限的情况--- if (discount && discount['goods_id'] && (!discount.limit_num || discount.limit_num >= discount.bs * discount.zp_num) && - discount.gift_storecount >= discount.bs * discount.zp_num) { + discount.gift_storecount >= discount.bs * discount.zp_num) { //如果这礼品超了情况下 if (no_gift_arr.indexOf(discount.gift_id) != -1) continue; var o = discount.goodsinfo; @@ -4870,7 +5013,7 @@ Page({ original_img: th.data.imgUrl + o.original_img }; - list2.goods.push(newd); + //list2.goods.push(newd); var all_num = 0; var all_limit_num = 0; @@ -4888,7 +5031,6 @@ Page({ } } - //-- 赠品的数量超出库存数量和会员的限制,这里是保证所有的赠品部会超出 -- if (discount.gift_storecount < all_num + newd.goods_num || (discount.limit_num && discount.limit_num < all_limit_num + newd.goods_num)) { no_gift_arr.push(discount.gift_id); @@ -4898,7 +5040,7 @@ Page({ var url = "/api/weshop/cart/delGift?store_id=" + newd.store_id + "&user_id=" + - newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id + newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id await getApp().request.promiseDelete(url, {}) var add_data = null; @@ -4911,18 +5053,29 @@ Page({ }) if (add_data) { newd.id = add_data.id; - list.goods.push(newd); + //list.goods.push(newd); + if(!cart_zp[list.pid]) cart_zp[list.pid]={}; + if(!cart_zp[list.pid].goods) cart_zp[list.pid].goods=[]; + cart_zp[list.pid].goods.push(newd); } } } } - } - //--更新购物车的前台渲染-- - var rq_text = "requestData[" + cindex + "]"; + + //--- 设置单赠品的显示---2024-2-1 this.setData({ - [rq_text]: list - }); + cart_zp + }) + + //list大小有变换,才会渲染list + if(is_change_list) { + //--更新购物车的前台渲染-- + var rq_text = "requestData[" + cindex + "]"; + this.setData({ + [rq_text]: list + }); + } var diff_text = "requestData[" + cindex + "].make_up_arr"; //-- 如果有凑单的话 -- @@ -4952,6 +5105,8 @@ Page({ } }, + + //去凑单 go_cou_dang: function (e) { var prom_id = e.currentTarget.dataset.prom_id; diff --git a/pages/cart/cart/cart.wxml b/pages/cart/cart/cart.wxml index d043fd7..7161f9a 100644 --- a/pages/cart/cart/cart.wxml +++ b/pages/cart/cart/cart.wxml @@ -60,7 +60,7 @@ - + @@ -134,7 +134,7 @@ - + 可参促销 - + 优惠促销 搭配促销 组合购 @@ -159,11 +159,35 @@ + + + + + + + + 赠品 + + + + {{items.goods_name}} + + + + {{items.goods_color}}{{items.goods_color?"/":''}}{{items.goods_spec}} + 规格1 + + {{items.goods_num}}件 + + + + + - - + +