Commit b9aff81ccd938cdf46b453042acfc9eebf8dd66e
1 parent
dbe8c91e
多促销的优化
Showing
4 changed files
with
884 additions
and
196 deletions
packageE/pages/cart/cart2/cart2.js
| ... | ... | @@ -7122,7 +7122,6 @@ Page({ |
| 7122 | 7122 | |
| 7123 | 7123 | //-- 判读一下促销分组的问题 -- |
| 7124 | 7124 | async cart_cx_group(goods,car_item,func){ |
| 7125 | - | |
| 7126 | 7125 | //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 |
| 7127 | 7126 | if(this.data.change_act){ |
| 7128 | 7127 | var show_can_cx=car_item.show_can_cx; |
| ... | ... | @@ -7165,6 +7164,30 @@ Page({ |
| 7165 | 7164 | |
| 7166 | 7165 | k_item.sele_prom_type=ck_prom_type.prom_type; |
| 7167 | 7166 | |
| 7167 | + //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | |
| 7168 | + if(is_need_ck_num){ | |
| 7169 | + var t_pid=ck_prom_type.prom_id; | |
| 7170 | + switch (ck_prom_type.prom_type){ | |
| 7171 | + case 3: | |
| 7172 | + if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | |
| 7173 | + th.data.in_yhact_new[t_pid]++; | |
| 7174 | + break; | |
| 7175 | + case 7: | |
| 7176 | + if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | |
| 7177 | + th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | |
| 7178 | + //-- 数组的优化 -- | |
| 7179 | + var nei_gd_map=ck_prom_type.in_zhact_gdmap; | |
| 7180 | + if(nei_gd_map){ | |
| 7181 | + for (var vg in nei_gd_map) { | |
| 7182 | + if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | |
| 7183 | + th.datain_zhact_gdmap_new[vg] += nei_gd_map[vg]; | |
| 7184 | + } | |
| 7185 | + } | |
| 7186 | + break; | |
| 7187 | + } | |
| 7188 | + } | |
| 7189 | + | |
| 7190 | + | |
| 7168 | 7191 | //-- 此时要把购物车中的商品确定活动 -- |
| 7169 | 7192 | for (var b=0; b<ck_prom_type.goods.length;b++){ |
| 7170 | 7193 | //-- 开始查找 -- |
| ... | ... | @@ -7205,7 +7228,7 @@ Page({ |
| 7205 | 7228 | }else{ |
| 7206 | 7229 | var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; |
| 7207 | 7230 | if(n_item.prom_type==7){ |
| 7208 | - p_item.zh_act=n_item.zh_pro; | |
| 7231 | + p_item.zh_pro=n_item.zh_pro; | |
| 7209 | 7232 | } |
| 7210 | 7233 | p_item.goods.push(c_item); |
| 7211 | 7234 | cx_act_map.push(p_item); |
| ... | ... | @@ -7224,6 +7247,9 @@ Page({ |
| 7224 | 7247 | } |
| 7225 | 7248 | cx_act_map.sort(compare); |
| 7226 | 7249 | } |
| 7250 | + | |
| 7251 | + //-- 在确认订单的页面强行要用数量的控制 | |
| 7252 | + var is_need_ck_num=1; | |
| 7227 | 7253 | //-- 能够进行最后计算的活动(包含切换) -- |
| 7228 | 7254 | var can_calc_cx=[]; |
| 7229 | 7255 | //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- |
| ... | ... | @@ -7238,6 +7264,35 @@ Page({ |
| 7238 | 7264 | } |
| 7239 | 7265 | switch(item_act_map.prom_type){ |
| 7240 | 7266 | case 3: |
| 7267 | + | |
| 7268 | + //活动ID | |
| 7269 | + var aid=item_act_map.prom_id; | |
| 7270 | + var need_num=0; | |
| 7271 | + //-- 这个时候要判断是不是要判断优惠促销多门店的时候的限购 -- | |
| 7272 | + if(is_need_ck_num){ | |
| 7273 | + need_num=th.data.in_yhact_new[aid]?th.data.in_yhact_new[aid]:0; | |
| 7274 | + } | |
| 7275 | + //-- 判断优惠促销要不要限购 -- | |
| 7276 | + var fd=null; | |
| 7277 | + var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | |
| 7278 | + if(fd_res && fd_res.data.code==0 ){ | |
| 7279 | + fd=fd_res.data.data; | |
| 7280 | + } | |
| 7281 | + //如果有限购的时候,也要计算一下 | |
| 7282 | + if (fd && fd['limit_num'] > 0){ | |
| 7283 | + //-- 获取已经购买了多少件 -- | |
| 7284 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | |
| 7285 | + +getApp().globalData.user_id+"&prom_type=3&prom_id="+zh_pro0.id; | |
| 7286 | + await getApp().request.promiseGet(url, {}).then(rh => { | |
| 7287 | + if(rh.data.code==0){ | |
| 7288 | + item_act_map.buyed=rh.data.data.userbuynum; | |
| 7289 | + } | |
| 7290 | + }) | |
| 7291 | + if(item_act_map.buyed+need_num>=fd['limit_num']){ | |
| 7292 | + continue; //-- 进行下一个循环 -- | |
| 7293 | + } | |
| 7294 | + } | |
| 7295 | + | |
| 7241 | 7296 | var fir_act=item_act_map.act.fir_act; |
| 7242 | 7297 | var t_goods=item_act_map.goods; |
| 7243 | 7298 | var all_num=0; |
| ... | ... | @@ -7295,16 +7350,19 @@ Page({ |
| 7295 | 7350 | if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; |
| 7296 | 7351 | car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; |
| 7297 | 7352 | |
| 7298 | - var zh_pro0 = null; | |
| 7353 | + var zh_pro0 = th.data.zhhe_act_map[item_act_map.prom_id]; | |
| 7299 | 7354 | //-- 获取活动信息 -- |
| 7300 | - var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item_act_map.prom_id + "/" + getApp().globalData.user_id; | |
| 7355 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | |
| 7356 | + +getApp().globalData.user_id+"&prom_type=7&prom_id="+zh_pro0.id; | |
| 7301 | 7357 | await getApp().request.promiseGet(url, {}).then(rh => { |
| 7302 | - zh_pro0 = rh.data.data; | |
| 7358 | + if(rh.data.code==0){ | |
| 7359 | + item_act_map.buyed=rh.data.data.userbuynum; | |
| 7360 | + } | |
| 7303 | 7361 | }) |
| 7304 | - if(!zh_pro0) break; | |
| 7362 | + | |
| 7305 | 7363 | //当满足组合的要求:总数要满足,起购数要满足 |
| 7306 | - if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th)){ | |
| 7307 | - can_calc_cx.push(item_act_map) | |
| 7364 | + if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th,item_act_map,is_need_ck_num)){ | |
| 7365 | + can_calc_cx.push(item_act_map) | |
| 7308 | 7366 | } |
| 7309 | 7367 | break; |
| 7310 | 7368 | default: |
| ... | ... | @@ -7385,6 +7443,30 @@ Page({ |
| 7385 | 7443 | |
| 7386 | 7444 | k_item.sele_prom_type=ck_prom_type.prom_type; |
| 7387 | 7445 | |
| 7446 | + //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | |
| 7447 | + if(is_need_ck_num){ | |
| 7448 | + var t_pid=ck_prom_type.prom_id; | |
| 7449 | + switch (ck_prom_type.prom_type){ | |
| 7450 | + case 3: | |
| 7451 | + if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | |
| 7452 | + th.data.in_yhact_new[t_pid]++; | |
| 7453 | + break; | |
| 7454 | + case 7: | |
| 7455 | + if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | |
| 7456 | + th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | |
| 7457 | + //-- 数组的优化 -- | |
| 7458 | + var nei_gd_map=ck_prom_type.in_zhact_gdmap; | |
| 7459 | + if(nei_gd_map){ | |
| 7460 | + for (var vg in nei_gd_map) { | |
| 7461 | + if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | |
| 7462 | + th.data.in_zhact_gdmap_new[vg] += nei_gd_map[vg]; | |
| 7463 | + } | |
| 7464 | + } | |
| 7465 | + break; | |
| 7466 | + } | |
| 7467 | + } | |
| 7468 | + | |
| 7469 | + | |
| 7388 | 7470 | //-- 此时要把购物车中的商品确定活动 -- |
| 7389 | 7471 | for (var b=0; b<ck_prom_type.goods.length;b++){ |
| 7390 | 7472 | //-- 开始查找 -- |
| ... | ... | @@ -7463,6 +7545,7 @@ Page({ |
| 7463 | 7545 | |
| 7464 | 7546 | //--- 选择回来时候的选择 --- |
| 7465 | 7547 | sure_cx_group:function(e){ |
| 7548 | + var th=this; | |
| 7466 | 7549 | var sele_idx=e.detail.sele_idx; |
| 7467 | 7550 | var idx=this.data.sele_cx_group_cidx; |
| 7468 | 7551 | var gd_key= this.data.cx_group_gd_key; |
| ... | ... | @@ -7470,7 +7553,9 @@ Page({ |
| 7470 | 7553 | var cx_prom_group=this.data.cartlist[idx].show_can_cx[gd_key].act_arr; |
| 7471 | 7554 | var pk=this.data.cartlist[idx].pickup_id; |
| 7472 | 7555 | |
| 7556 | + var fir_sele=0; | |
| 7473 | 7557 | for(var dx=0;dx<cx_prom_group.length;dx++){ |
| 7558 | + if(cx_prom_group[dx].sele) fir_sele=dx; | |
| 7474 | 7559 | if(dx!=sele_idx) cx_prom_group[dx].sele=0; |
| 7475 | 7560 | else cx_prom_group[dx].sele=1; |
| 7476 | 7561 | } |
| ... | ... | @@ -7480,29 +7565,154 @@ Page({ |
| 7480 | 7565 | return el.sele; |
| 7481 | 7566 | }) |
| 7482 | 7567 | |
| 7483 | - this.data.cartlist[idx].show_can_cx[gd_key].sele_prom_type=ck_prom_type.prom_type; | |
| 7484 | - var goods= this.data.cartlist_y | |
| 7485 | - //-- 此时要把购物车中的商品确定活动 -- | |
| 7486 | - for (var b=0; b<ck_prom_type.goods.length;b++){ | |
| 7487 | - //-- 开始查找 -- | |
| 7488 | - var fg=goods.findIndex(function (g_item){ | |
| 7489 | - return g_item.goods_id==ck_prom_type.goods[b].goods_id | |
| 7490 | - && [0,3,5,7,10].indexOf(g_item.prom_type)>-1 | |
| 7491 | - && g_item.pick_id==pk | |
| 7492 | - }) | |
| 7493 | - if(fg>-1){ | |
| 7494 | - goods[fg].prom_type=ck_prom_type.prom_type; | |
| 7495 | - goods[fg].prom_id=ck_prom_type.prom_id; | |
| 7568 | + | |
| 7569 | + this.cx_check_ok2(function (ck_res){ | |
| 7570 | + | |
| 7571 | + if(ck_res.code==0){ | |
| 7572 | + th.data.cartlist[idx].show_can_cx[gd_key].sele_prom_type=ck_prom_type.prom_type; | |
| 7573 | + var goods= th.data.cartlist_y | |
| 7574 | + //-- 此时要把购物车中的商品确定活动 -- | |
| 7575 | + for (var b=0; b<ck_prom_type.goods.length;b++){ | |
| 7576 | + //-- 开始查找 -- | |
| 7577 | + var fg=goods.findIndex(function (g_item){ | |
| 7578 | + return g_item.goods_id==ck_prom_type.goods[b].goods_id | |
| 7579 | + && [0,3,5,7,10].indexOf(g_item.prom_type)>-1 | |
| 7580 | + && g_item.pick_id==pk | |
| 7581 | + }) | |
| 7582 | + if(fg>-1){ | |
| 7583 | + goods[fg].prom_type=ck_prom_type.prom_type; | |
| 7584 | + goods[fg].prom_id=ck_prom_type.prom_id; | |
| 7585 | + } | |
| 7586 | + } | |
| 7587 | + | |
| 7588 | + wx.showLoading({ | |
| 7589 | + title: "处理中.", | |
| 7590 | + mask: true | |
| 7591 | + }) | |
| 7592 | + //-- 重新计算一下价格 -- | |
| 7593 | + th.get_cart_next(null,1); | |
| 7594 | + }else{ | |
| 7595 | + wx.showToast({ | |
| 7596 | + title: ck_res.msg, | |
| 7597 | + icon: 'none', | |
| 7598 | + duration:2500 | |
| 7599 | + }); | |
| 7600 | + | |
| 7601 | + for(var dx=0;dx<cx_prom_group.length;dx++){ | |
| 7602 | + if(dx!=fir_sele) cx_prom_group[dx].sele=0; | |
| 7603 | + else cx_prom_group[dx].sele=1; | |
| 7604 | + } | |
| 7496 | 7605 | } |
| 7606 | + }) | |
| 7607 | + | |
| 7608 | + }, | |
| 7609 | + | |
| 7610 | + | |
| 7611 | + //--- 在点击商品和或者门店的时候调用,这个可以在活动切换的时候调用,也可以被单个选择调用--- | |
| 7612 | + async cx_check_ok2(func,car) { | |
| 7613 | + //如果购物车没有带入,要进行赋值 | |
| 7614 | + if(!car) { | |
| 7615 | + car = JSON.parse(JSON.stringify(this.data.cartlist)); | |
| 7497 | 7616 | } |
| 7498 | 7617 | |
| 7499 | - wx.showLoading({ | |
| 7500 | - title: "处理中.", | |
| 7501 | - mask: true | |
| 7502 | - }) | |
| 7503 | - //-- 重新计算一下价格 -- | |
| 7504 | - this.get_cart_next(null,1); | |
| 7618 | + var nei_in_zhact_gdmap = {}; | |
| 7619 | + var nei_in_zhact = {}; | |
| 7620 | + var nei_in_yhact = {}; | |
| 7621 | + for (var i = 0; i < car.length; i++) { | |
| 7622 | + var show_can_cx = car[i].show_can_cx; | |
| 7623 | + for (var j in show_can_cx) { | |
| 7624 | + var sele_act = show_can_cx[j].act_arr.find(function (m) { | |
| 7625 | + return m.sele == 1; | |
| 7626 | + }) | |
| 7627 | + | |
| 7628 | + if (!sele_act) continue; | |
| 7629 | + var pid = sele_act['prom_id']; | |
| 7630 | + if (sele_act['prom_type'] == 3) { | |
| 7631 | + if(!nei_in_yhact[pid]) nei_in_yhact[pid] = 0; | |
| 7632 | + nei_in_yhact[pid]++; | |
| 7633 | + } | |
| 7634 | + if (sele_act['prom_type'] == 7) { | |
| 7635 | + if(!nei_in_zhact[pid]) nei_in_zhact[pid] = 0; | |
| 7636 | + nei_in_zhact[pid] += sele_act['act_num']; | |
| 7637 | + } | |
| 7638 | + var in_zhact_gdmap1 = sele_act['in_zhact_gdmap']; | |
| 7639 | + for (var vg in in_zhact_gdmap1) { | |
| 7640 | + if (!nei_in_zhact_gdmap[vg]) nei_in_zhact_gdmap[vg] = 0; | |
| 7641 | + nei_in_zhact_gdmap[vg] += in_zhact_gdmap1[vg]; | |
| 7642 | + } | |
| 7643 | + } | |
| 7644 | + } | |
| 7645 | + | |
| 7646 | + //-- 判断优惠促销是不是超出限购 -- | |
| 7647 | + if (nei_in_yhact && Object.keys(nei_in_yhact).length) { | |
| 7648 | + for (var ky0 in nei_in_yhact) { | |
| 7649 | + var num = nei_in_yhact[ky0]; | |
| 7650 | + | |
| 7651 | + var fd=null; | |
| 7652 | + var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | |
| 7653 | + if(fd_res && fd_res.data.code==0 ){ | |
| 7654 | + fd=fd_res.data.data; | |
| 7655 | + } | |
| 7656 | + if (fd && fd['limit_num'] > 0 && num > fd['limit_num']) { | |
| 7657 | + func({'code': -1, 'msg': '超出优惠促销活动的限购'}); | |
| 7658 | + return false; | |
| 7659 | + } | |
| 7660 | + } | |
| 7661 | + } | |
| 7662 | + | |
| 7663 | + //-- 判断组合促销是不是超出活动总数量 -- | |
| 7664 | + if (nei_in_zhact && Object.keys(nei_in_zhact).length) { | |
| 7665 | + for (var ky in nei_in_zhact) { | |
| 7666 | + | |
| 7667 | + var num0 = nei_in_zhact[ky]; | |
| 7668 | + var zh = this.data.zhhe_act_map[ky]; | |
| 7669 | + var buyed=0; | |
| 7670 | + | |
| 7671 | + //获取已经购买了多少件 | |
| 7672 | + var z_url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"user_id="+getApp().globalData.user_id+"prom_type=7&prom_id="+ky; | |
| 7673 | + var zbuy=await getApp().request.promiseGet(z_url,{}); | |
| 7674 | + if(zbuy && zbuy.data.code==0){ | |
| 7675 | + buyed=zbuy.data.data.userbuynum; | |
| 7676 | + } | |
| 7677 | + if (zh['zh_num'] > 0 && zh['zh_buy_num'] + num0 > zh['zh_num']) { | |
| 7678 | + func({'code': -1, 'msg': '超出组合购活动总数量'}); | |
| 7679 | + return false; | |
| 7680 | + } | |
| 7681 | + } | |
| 7682 | + } | |
| 7505 | 7683 | |
| 7684 | + //-- 判断组合促销是不是超出活动总数量 -- | |
| 7685 | + if (nei_in_zhact_gdmap && Object.keys(nei_in_zhact_gdmap).length) { | |
| 7686 | + for (var key in nei_in_zhact_gdmap) { | |
| 7687 | + | |
| 7688 | + var num1 = nei_in_zhact_gdmap[key]; | |
| 7689 | + var key_a = key.split('.'); | |
| 7690 | + var gid = key_a[0]; | |
| 7691 | + var pid = key_a[1]; | |
| 7692 | + | |
| 7693 | + //-- 商品的限购 -- | |
| 7694 | + var promgoodsbuynum = 0; | |
| 7695 | + var rq = { | |
| 7696 | + 'store_id': os.stoid, 'user_id': getApp().globalData.user_id, 'goods_id': gid, | |
| 7697 | + 'prom_type': 7, 'prom_id': pid | |
| 7698 | + }; | |
| 7699 | + | |
| 7700 | + var res = await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", {data: rq}); | |
| 7701 | + if (res && res.data.code == 0) { | |
| 7702 | + promgoodsbuynum = res.data.data.promgoodsbuynum; | |
| 7703 | + } | |
| 7704 | + | |
| 7705 | + var gdlist_arr = this.data.zuhe_map_good[pid]; | |
| 7706 | + var gdlist = gdlist_arr.find(function (e) { | |
| 7707 | + return e.goods_id == gid; | |
| 7708 | + }) | |
| 7709 | + if (gdlist['buyqty'] > 0 && num1 + promgoodsbuynum > gdlist['buyqty']) { | |
| 7710 | + func({'code': -1, 'msg': '超出组合购商品的限购'}); | |
| 7711 | + return false; | |
| 7712 | + } | |
| 7713 | + } | |
| 7714 | + } | |
| 7715 | + func({'code': 0, 'msg': '成功'}) | |
| 7506 | 7716 | } |
| 7507 | 7717 | |
| 7508 | 7718 | ... | ... |
packageE/pages/cart/cart2/zh_calculate.js
| ... | ... | @@ -155,7 +155,7 @@ module.exports = { |
| 155 | 155 | var delete_num=0; |
| 156 | 156 | |
| 157 | 157 | //看一下是几倍 |
| 158 | - let be1 = parseInt(no_in_arr.length / act.zhbuyqty); | |
| 158 | + let be = parseInt(no_in_arr.length / act.zhbuyqty); | |
| 159 | 159 | //如果有总数控制的时候 |
| 160 | 160 | if(act.zh_num){ |
| 161 | 161 | var be1=act.zh_num-act.zh_buy_num-1; |
| ... | ... | @@ -188,7 +188,7 @@ module.exports = { |
| 188 | 188 | let new_arr = zhqty_bz_arr.filter(ii => { |
| 189 | 189 | return ii['be'] == min_bz_num; |
| 190 | 190 | }) |
| 191 | - var be = new_arr[0].be; | |
| 191 | + be = new_arr[0].be; | |
| 192 | 192 | |
| 193 | 193 | for (let i = 0; i < zhqty_bz.length; i++) { |
| 194 | 194 | let item1 = zhqty_bz[i]; |
| ... | ... | @@ -506,8 +506,9 @@ module.exports = { |
| 506 | 506 | return zhqty_bz_flag; |
| 507 | 507 | }, |
| 508 | 508 | |
| 509 | - //-- 判断组合购有没有满足 --- | |
| 510 | - ch_zh_ok(act,gdlist,c_goods,th){ | |
| 509 | + //-- 判断组合购有没有满足,只有在检查的时候,要用新的 --- | |
| 510 | + ch_zh_ok(act,gdlist,c_goods,th,item_act_map,is_need_ck_num){ | |
| 511 | + | |
| 511 | 512 | //-- 寻找一下 -- |
| 512 | 513 | function get_num(ite) { |
| 513 | 514 | for (let v1 in c_goods) { |
| ... | ... | @@ -529,19 +530,39 @@ module.exports = { |
| 529 | 530 | let no_in_arr = []; //剩余的未加入组合购 |
| 530 | 531 | let out_arr = []; //超出活动限购的商品放入 |
| 531 | 532 | |
| 532 | - //-- 判断组合购的数量是不是到了 -- | |
| 533 | + //-- 判断组合购的总数量是不是到了 -- | |
| 533 | 534 | if(act.zh_num>0){ |
| 534 | - if(th.data.in_zhact_new[aid] && th.data.in_zhact_new[aid]+act.zh_buy_num>=act.zh_num ){ | |
| 535 | - return false; | |
| 536 | - }else{ | |
| 537 | - min_can_buy= act.zh_num-act.zh_buy_num-th.data.in_zhact_new[aid]; | |
| 538 | - } | |
| 535 | + //如果是在全选的情况下,那么就需要in_zhact_new来控制数量 | |
| 536 | + var need_ck=0; | |
| 537 | + if(is_need_ck_num){ | |
| 538 | + need_ck=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | |
| 539 | + } | |
| 540 | + if(need_ck+act.zh_buy_num>=act.zh_num ){ | |
| 541 | + return false; | |
| 542 | + }else{ | |
| 543 | + min_can_buy= act.zh_num-act.zh_buy_num-need_ck; | |
| 544 | + } | |
| 539 | 545 | } |
| 540 | - if(act.buy_limit>0){ | |
| 541 | 546 | |
| 547 | + //-- 判断组合购的限购是不是到了 -- | |
| 548 | + if(act.buy_limit>0){ | |
| 549 | + var need_ck0=0; | |
| 550 | + if(is_need_ck_num){ | |
| 551 | + need_ck0=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | |
| 552 | + } | |
| 553 | + var min_can_buy0=0; | |
| 554 | + if(need_ck+item_act_map.buyed>=act.buy_limit ){ | |
| 555 | + return false; | |
| 556 | + }else{ | |
| 557 | + min_can_buy0=act.buy_limit-item_act_map.buyed-need_ck; | |
| 558 | + } | |
| 559 | + if(min_can_buy>0){ | |
| 560 | + if(min_can_buy0<min_can_buy) min_can_buy=min_can_buy0; | |
| 561 | + }else{ | |
| 562 | + min_can_buy=min_can_buy0; | |
| 563 | + } | |
| 542 | 564 | } |
| 543 | 565 | |
| 544 | - | |
| 545 | 566 | for (var i in goods) { |
| 546 | 567 | var item = goods[i]; |
| 547 | 568 | var cart_num = get_num(item).goods_num; |
| ... | ... | @@ -558,7 +579,7 @@ module.exports = { |
| 558 | 579 | if (item.buyqty > 0) { |
| 559 | 580 | var cbuy = item.buyqty - zh_b_num; |
| 560 | 581 | var key = item.goods_id + "." + act.id; |
| 561 | - if (th.data.in_zhact_gdmap[key]) { | |
| 582 | + if (is_need_ck_num && th.data.in_zhact_gdmap_new[key]) { | |
| 562 | 583 | var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap_new[key]; |
| 563 | 584 | } |
| 564 | 585 | //当可买的数量为0 |
| ... | ... | @@ -614,6 +635,8 @@ module.exports = { |
| 614 | 635 | |
| 615 | 636 | //当满足组合的要求:总数要满足,起购数要满足 |
| 616 | 637 | if (all_num >= act.zhbuyqty && !need_to_buy) { |
| 638 | + //默认数量是1 | |
| 639 | + var act_num=1; | |
| 617 | 640 | function sortData(a, b) { |
| 618 | 641 | return a.price - b.price |
| 619 | 642 | } |
| ... | ... | @@ -626,15 +649,15 @@ module.exports = { |
| 626 | 649 | |
| 627 | 650 | //看一下剩下的数量有没有满足组合购的要求,以及要不要倍增 |
| 628 | 651 | if (act.is_bz && no_in_arr.length >= act.zhbuyqty) { |
| 629 | - var act_num=1; | |
| 652 | + | |
| 630 | 653 | var bz_num_ok = 0; //超量倍增是否满足 |
| 631 | 654 | var zhqty_len = 0; //几个超量倍增 |
| 632 | 655 | var delete_num = 0; |
| 633 | 656 | //看一下是几倍 |
| 634 | 657 | let be = parseInt(no_in_arr.length / act.zhbuyqty); |
| 635 | 658 | //如果有总数控制的时候 |
| 636 | - if (act.zh_num) { | |
| 637 | - var be1 = act.zh_num - act.zh_buy_num - 1; | |
| 659 | + if (min_can_buy>0) { | |
| 660 | + var be1 = min_can_buy - 1; | |
| 638 | 661 | if (be1 < be) be = be1; |
| 639 | 662 | } |
| 640 | 663 | if(be) { |
| ... | ... | @@ -663,9 +686,13 @@ module.exports = { |
| 663 | 686 | let new_arr = zhqty_bz_arr.filter(ii => { |
| 664 | 687 | return ii['be'] == min_bz_num; |
| 665 | 688 | }) |
| 666 | - | |
| 667 | 689 | //-- 要看一下倍数还有没有 --- |
| 668 | 690 | be = new_arr[0].be; |
| 691 | + //如果有总数控制的时候 | |
| 692 | + if (min_can_buy>0) { | |
| 693 | + var be1 = min_can_buy - 1; | |
| 694 | + if (be1 < be) be = be1; | |
| 695 | + } | |
| 669 | 696 | if(be){ |
| 670 | 697 | for (let i = 0; i < zhqty_bz.length; i++) { |
| 671 | 698 | let item1 = zhqty_bz[i]; |
| ... | ... | @@ -692,6 +719,8 @@ module.exports = { |
| 692 | 719 | } |
| 693 | 720 | } |
| 694 | 721 | |
| 722 | + //-- 参与活动的金额要返回回去 -- | |
| 723 | + item_act_map.act_num=act_num; | |
| 695 | 724 | let goods_map = {}; |
| 696 | 725 | //算一下剩余的商品 |
| 697 | 726 | if (no_in_arr.length) { |
| ... | ... | @@ -718,25 +747,29 @@ module.exports = { |
| 718 | 747 | } |
| 719 | 748 | } |
| 720 | 749 | |
| 721 | - | |
| 750 | + //-- 组合购的商品限购的数组控制 -- | |
| 751 | + var in_zhact_gdmap={}; | |
| 722 | 752 | //商品的列表 |
| 723 | 753 | for (var u in goods) { |
| 724 | 754 | var ite = goods[u]; |
| 725 | 755 | var cart_num = get_num(ite).goods_num; |
| 726 | 756 | |
| 727 | - if (ite.buyqty > 0 && ite.cart_num > 0) { | |
| 757 | + if (ite.buyqty > 0 && cart_num > 0) { | |
| 728 | 758 | var key = ite.goods_id + "." + act.id; |
| 729 | - | |
| 730 | - if(goods_map[ite.goods_id]){} | |
| 731 | - | |
| 732 | - | |
| 733 | - if (th.data.in_zhact_gdmap_new[key]) { | |
| 734 | - th.data.in_zhact_gdmap_new[key] += ite.num; | |
| 735 | - } else { | |
| 736 | - th.data.in_zhact_gdmap_new[key] = ite.num; | |
| 759 | + if(goods_map[ite.goods_id]){ | |
| 760 | + cart_num-=goods_map[ite.goods_id]; | |
| 737 | 761 | } |
| 762 | + if(cart_num>0){ | |
| 763 | + if (in_zhact_gdmap[key]) { | |
| 764 | + in_zhact_gdmap[key] += ite.num; | |
| 765 | + } else { | |
| 766 | + in_zhact_gdmap[key] = ite.num; | |
| 767 | + } | |
| 768 | + } | |
| 769 | + | |
| 738 | 770 | } |
| 739 | 771 | } |
| 772 | + item_act_map.in_zhact_gdmap=in_zhact_gdmap; | |
| 740 | 773 | return true; |
| 741 | 774 | } |
| 742 | 775 | return false; | ... | ... |
pages/cart/cart/cart.js
| ... | ... | @@ -49,9 +49,11 @@ Page({ |
| 49 | 49 | ladder_map: {}, //阶梯促销需要的map |
| 50 | 50 | |
| 51 | 51 | promgoods_map: {}, |
| 52 | - promgoods_list: {} | |
| 53 | - | |
| 52 | + promgoods_list: {}, | |
| 54 | 53 | |
| 54 | + in_zhact_gdmap_new: {}, //不同门店参与同一活动的限购,这些都是map表,是多促销互动专用,不能和in_zhact_gdmap重叠 | |
| 55 | + in_zhact_new:{}, //组合购活动在列表中的显示 是多促销互动专用,不能和in_zhact重叠 | |
| 56 | + in_yhact_new:{}, //组合购活动在列表中的显示 是多促销互动专用,不能和in_yhact重叠 | |
| 55 | 57 | |
| 56 | 58 | }, |
| 57 | 59 | |
| ... | ... | @@ -109,7 +111,6 @@ Page({ |
| 109 | 111 | wx.setNavigationBarTitle({ |
| 110 | 112 | title: "购物车", |
| 111 | 113 | }) |
| 112 | - | |
| 113 | 114 | //判断是否有登录 |
| 114 | 115 | t.auth.hadAuth() && t.getUserInfo(function () { |
| 115 | 116 | //a.getCardList(); |
| ... | ... | @@ -499,12 +500,10 @@ Page({ |
| 499 | 500 | //按门店分类的数组 |
| 500 | 501 | var arr = new Array(), carr = su.data.data.pageData; |
| 501 | 502 | var all_num = 0; |
| 502 | - | |
| 503 | - | |
| 503 | + | |
| 504 | 504 | if (carr && carr.length > 0) { |
| 505 | 505 | var g_arr = []; |
| 506 | 506 | for (var i = 0; i < carr.length; i++) { |
| 507 | - | |
| 508 | 507 | //-- 清理购物车的选中状态 -- |
| 509 | 508 | var url = '/api/weshop/cart/update'; |
| 510 | 509 | getApp().request.put(url, { |
| ... | ... | @@ -1100,7 +1099,6 @@ Page({ |
| 1100 | 1099 | } |
| 1101 | 1100 | }, |
| 1102 | 1101 | |
| 1103 | - | |
| 1104 | 1102 | //删除商品 |
| 1105 | 1103 | delete_th_item: function (t) { |
| 1106 | 1104 | var e = this; |
| ... | ... | @@ -1148,7 +1146,7 @@ Page({ |
| 1148 | 1146 | } |
| 1149 | 1147 | }, |
| 1150 | 1148 | |
| 1151 | - //-------------加数量--------------------- | |
| 1149 | + //-------------加数量------------- | |
| 1152 | 1150 | addNum: function (t) { |
| 1153 | 1151 | if (!this.data.is_load) return false; |
| 1154 | 1152 | if (this.data.up_dating == 1) return false; |
| ... | ... | @@ -1206,8 +1204,6 @@ Page({ |
| 1206 | 1204 | return false; |
| 1207 | 1205 | } |
| 1208 | 1206 | |
| 1209 | - | |
| 1210 | - | |
| 1211 | 1207 | if (1 != a.goods_num) { |
| 1212 | 1208 | var e = { |
| 1213 | 1209 | goods_num: a.goods_num - 1, |
| ... | ... | @@ -1342,16 +1338,19 @@ Page({ |
| 1342 | 1338 | |
| 1343 | 1339 | this.data.btn_click = 1; |
| 1344 | 1340 | |
| 1345 | - | |
| 1346 | - | |
| 1347 | 1341 | var offline_price = 0; |
| 1348 | 1342 | var offline_num = 0; |
| 1349 | - th.data.in_zhact_gdmap = {}; | |
| 1350 | 1343 | |
| 1344 | + th.data.in_zhact_gdmap = {}; | |
| 1351 | 1345 | |
| 1352 | 1346 | if (dda && dda.length > 0) { |
| 1353 | 1347 | for (var i = 0; i < dda.length; i++) { |
| 1354 | 1348 | var item = dda[i].goods; |
| 1349 | + var txt0 = "requestData[" + i + "].show_can_cx"; | |
| 1350 | + e.setData({ | |
| 1351 | + [txt0]: {}, | |
| 1352 | + }); | |
| 1353 | + | |
| 1355 | 1354 | |
| 1356 | 1355 | if (e.data.checkAllToggle) { |
| 1357 | 1356 | var txt = "requestData[" + i + "].selected"; |
| ... | ... | @@ -1362,14 +1361,13 @@ Page({ |
| 1362 | 1361 | var fir = 0; |
| 1363 | 1362 | for (var j = 0; j < item.length; j++) { |
| 1364 | 1363 | if (item[j].is_gift) continue; |
| 1365 | - | |
| 1366 | 1364 | var obj = JSON.parse(JSON.stringify(item[j])); |
| 1367 | - //计算之前先移除组合购的计算 | |
| 1368 | - if (obj.prom_type == 7) | |
| 1369 | - zh_calc.remove_zhprom(dda, i, obj); | |
| 1370 | - //计算之前先移除阶梯购的计算 | |
| 1371 | - if (obj.prom_type == 10) | |
| 1372 | - ladder_calc.remove_ladder_prom(dda, i, obj); | |
| 1365 | + // //计算之前先移除组合购的计算 | |
| 1366 | + // if (obj.prom_type == 7) | |
| 1367 | + // zh_calc.remove_zhprom(dda, i, obj); | |
| 1368 | + // //计算之前先移除阶梯购的计算 | |
| 1369 | + // if (obj.prom_type == 10) | |
| 1370 | + // ladder_calc.remove_ladder_prom(dda, i, obj); | |
| 1373 | 1371 | |
| 1374 | 1372 | |
| 1375 | 1373 | if (fir == 0) { |
| ... | ... | @@ -1385,28 +1383,26 @@ Page({ |
| 1385 | 1383 | |
| 1386 | 1384 | if (e.data.checkAllToggle) obj.goods_num = 0; |
| 1387 | 1385 | |
| 1388 | - //加入组合购计算 | |
| 1389 | - if (obj.prom_type == 7) zh_calc.add_zhprom(dda, i, obj); | |
| 1390 | - //加入阶梯促销计算 | |
| 1391 | - if (obj.prom_type == 10) ladder_calc.add_ladder_prom(dda, i, obj); | |
| 1386 | + // //加入组合购计算 | |
| 1387 | + // if (obj.prom_type == 7) zh_calc.add_zhprom(dda, i, obj); | |
| 1388 | + // //加入阶梯促销计算 | |
| 1389 | + // if (obj.prom_type == 10) ladder_calc.add_ladder_prom(dda, i, obj); | |
| 1392 | 1390 | |
| 1393 | 1391 | e.setData({ |
| 1394 | - | |
| 1395 | 1392 | [txt]: !e.data.checkAllToggle, |
| 1396 | 1393 | }) |
| 1397 | - | |
| 1398 | - if (!e.data.checkAllToggle) { | |
| 1399 | - //组合购的金额要另外算 | |
| 1400 | - if (item[j].prom_type != 7 && item[j].prom_type != 10) | |
| 1401 | - tfeel += item[j].goods_num * item[j].goods_price; | |
| 1402 | - t_num += item[j].goods_num; | |
| 1403 | - } | |
| 1404 | - | |
| 1405 | - //-- 如果这个商品是线下取价的时候 -- | |
| 1406 | - if (item[j].is_offline && item[j].prom_type != 7) { | |
| 1407 | - offline_price += (item[j].goods_price - item[j].offline_price) * item[j].goods_num; | |
| 1408 | - offline_num += item[j].goods_num; | |
| 1409 | - } | |
| 1394 | + // if (!e.data.checkAllToggle) { | |
| 1395 | + // //组合购的金额要另外算 | |
| 1396 | + // if (item[j].prom_type != 7 && item[j].prom_type != 10) | |
| 1397 | + // tfeel += item[j].goods_num * item[j].goods_price; | |
| 1398 | + // t_num += item[j].goods_num; | |
| 1399 | + // } | |
| 1400 | + // | |
| 1401 | + // //-- 如果这个商品是线下取价的时候 -- | |
| 1402 | + // if (item[j].is_offline && item[j].prom_type != 7) { | |
| 1403 | + // offline_price += (item[j].goods_price - item[j].offline_price) * item[j].goods_num; | |
| 1404 | + // offline_num += item[j].goods_num; | |
| 1405 | + // } | |
| 1410 | 1406 | |
| 1411 | 1407 | } |
| 1412 | 1408 | } |
| ... | ... | @@ -1430,44 +1426,46 @@ Page({ |
| 1430 | 1426 | } |
| 1431 | 1427 | |
| 1432 | 1428 | //总的价格,把组合商品的价格拿出来 |
| 1433 | - var zh_calc_res = zh_calc.calculate_zh(dda, i, this); | |
| 1434 | - tfeel += zh_calc_res.tfeel; | |
| 1435 | - offline_price += zh_calc_res.offline_price; | |
| 1436 | - offline_num += zh_calc_res.offline_num; | |
| 1437 | - | |
| 1438 | - //总的价格,把阶梯促销的商品的价格拿出来 | |
| 1439 | - var ladder_calc_res = ladder_calc.calculate_ladder(dda, i, this); | |
| 1440 | - tfeel += ladder_calc_res.tfeel; | |
| 1441 | - offline_price += ladder_calc_res.offline_price; | |
| 1442 | - offline_num += ladder_calc_res.offline_num; | |
| 1443 | - | |
| 1444 | - //当有线下取价的时候 | |
| 1445 | - if (offline_price) { | |
| 1446 | - var txt1 = "requestData[" + i + "].offline_price"; | |
| 1447 | - var txt2 = "requestData[" + i + "].offline_num"; | |
| 1448 | - th.setData({ | |
| 1449 | - [txt1]: offline_price.toFixed(2), | |
| 1450 | - [txt2]: offline_num, | |
| 1451 | - }); | |
| 1452 | - } else { | |
| 1453 | - if (dda[i].offline_price > 0) { | |
| 1454 | - var txt1 = "requestData[" + i + "].offline_price"; | |
| 1455 | - var txt2 = "requestData[" + i + "].offline_num"; | |
| 1456 | - th.setData({ | |
| 1457 | - [txt1]: 0, | |
| 1458 | - [txt2]: 0 | |
| 1459 | - }); | |
| 1460 | - } | |
| 1461 | - } | |
| 1429 | + // var zh_calc_res = zh_calc.calculate_zh(dda, i, this); | |
| 1430 | + // tfeel += zh_calc_res.tfeel; | |
| 1431 | + // offline_price += zh_calc_res.offline_price; | |
| 1432 | + // offline_num += zh_calc_res.offline_num; | |
| 1433 | + // | |
| 1434 | + // //总的价格,把阶梯促销的商品的价格拿出来 | |
| 1435 | + // var ladder_calc_res = ladder_calc.calculate_ladder(dda, i, this); | |
| 1436 | + // tfeel += ladder_calc_res.tfeel; | |
| 1437 | + // offline_price += ladder_calc_res.offline_price; | |
| 1438 | + // offline_num += ladder_calc_res.offline_num; | |
| 1439 | + // | |
| 1440 | + // //当有线下取价的时候 | |
| 1441 | + // if (offline_price) { | |
| 1442 | + // var txt1 = "requestData[" + i + "].offline_price"; | |
| 1443 | + // var txt2 = "requestData[" + i + "].offline_num"; | |
| 1444 | + // th.setData({ | |
| 1445 | + // [txt1]: offline_price.toFixed(2), | |
| 1446 | + // [txt2]: offline_num, | |
| 1447 | + // }); | |
| 1448 | + // } else { | |
| 1449 | + // if (dda[i].offline_price > 0) { | |
| 1450 | + // var txt1 = "requestData[" + i + "].offline_price"; | |
| 1451 | + // var txt2 = "requestData[" + i + "].offline_num"; | |
| 1452 | + // th.setData({ | |
| 1453 | + // [txt1]: 0, | |
| 1454 | + // [txt2]: 0 | |
| 1455 | + // }); | |
| 1456 | + // } | |
| 1457 | + // } | |
| 1462 | 1458 | } |
| 1463 | 1459 | |
| 1464 | 1460 | e.setData({ |
| 1465 | 1461 | checkAllToggle: !e.data.checkAllToggle, |
| 1466 | - total_fee: tfeel.toFixed(2), | |
| 1467 | - total_num: t_num, | |
| 1462 | + // total_fee: tfeel.toFixed(2), | |
| 1463 | + // total_num: t_num, | |
| 1468 | 1464 | }); |
| 1469 | 1465 | |
| 1470 | - e.all_check_prom_activity(); | |
| 1466 | + this.doCheckAll(function (){ | |
| 1467 | + e.all_check_prom_activity(); | |
| 1468 | + }); | |
| 1471 | 1469 | |
| 1472 | 1470 | } |
| 1473 | 1471 | } |
| ... | ... | @@ -1595,34 +1593,60 @@ Page({ |
| 1595 | 1593 | title: '购买数量超出商品库存', |
| 1596 | 1594 | icon: 'none', |
| 1597 | 1595 | }); |
| 1598 | - | |
| 1599 | 1596 | return false; |
| 1600 | 1597 | } |
| 1601 | 1598 | } |
| 1602 | 1599 | } |
| 1603 | - | |
| 1604 | 1600 | } |
| 1605 | 1601 | |
| 1606 | - | |
| 1607 | - | |
| 1608 | - e.setData({ | |
| 1609 | - [txt]: Number(!sele), | |
| 1610 | - }); | |
| 1611 | 1602 | } |
| 1612 | - var txt = "requestData[" + pitems + "].selected"; | |
| 1613 | - e.setData({ | |
| 1614 | - [txt]: Number(!sele), | |
| 1615 | - }); | |
| 1616 | 1603 | |
| 1617 | - e.data.duo_zp_num_arr = {}; | |
| 1618 | - if (sele) { | |
| 1619 | - await e.check_prom_activity(pitems); | |
| 1620 | - } | |
| 1621 | - for (var i in e.data.requestData) { | |
| 1622 | - if (sele && i == pitems) continue; | |
| 1623 | - await e.check_prom_activity(i); | |
| 1604 | + //-- 选择了什么商品,就用什么商品来判断 -- | |
| 1605 | + var sele_arr={}; | |
| 1606 | + for (var i = 0; i < item.length; i++) { | |
| 1607 | + sele_arr[i] = !sele; | |
| 1624 | 1608 | } |
| 1625 | - this.doCheckAll(); | |
| 1609 | + | |
| 1610 | + //-- 回调判断活动有没有冲突 -- | |
| 1611 | + this.cx_check_ok(pitems,sele_arr,function (the_res) { | |
| 1612 | + if(the_res.code==0) { | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + //-- 门店是所有的商品都要选择 -- | |
| 1616 | + for (var i = 0; i < item.length; i++) { | |
| 1617 | + var txt0 = "requestData[" + pitems + "].goods[" + i + "].selected"; | |
| 1618 | + e.setData({ | |
| 1619 | + [txt0]: Number(!sele), | |
| 1620 | + }); | |
| 1621 | + } | |
| 1622 | + | |
| 1623 | + //-- 门店按钮的选择 -- | |
| 1624 | + var txt = "requestData[" + pitems + "].selected"; | |
| 1625 | + e.setData({ | |
| 1626 | + [txt]: Number(!sele), | |
| 1627 | + }); | |
| 1628 | + | |
| 1629 | + th.doCheckAll(async function () { | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + e.data.duo_zp_num_arr = {}; | |
| 1634 | + if (sele) { | |
| 1635 | + await e.check_prom_activity(pitems); | |
| 1636 | + } | |
| 1637 | + for (var i in e.data.requestData) { | |
| 1638 | + if (sele && i == pitems) continue; | |
| 1639 | + await e.check_prom_activity(i); | |
| 1640 | + } | |
| 1641 | + }); | |
| 1642 | + }else{ | |
| 1643 | + wx.showToast({ | |
| 1644 | + title: the_res.msg, | |
| 1645 | + icon: 'none', | |
| 1646 | + }); | |
| 1647 | + } | |
| 1648 | + }) | |
| 1649 | + | |
| 1626 | 1650 | }, |
| 1627 | 1651 | //---------------单选,也要判断门店的配送方式是否一致-------------- |
| 1628 | 1652 | check_th_item: async function (t) { |
| ... | ... | @@ -1721,26 +1745,45 @@ Page({ |
| 1721 | 1745 | } |
| 1722 | 1746 | } |
| 1723 | 1747 | } |
| 1724 | - | |
| 1725 | - } | |
| 1726 | - | |
| 1727 | - if (a.prom_type == 3) { | |
| 1728 | - e.data.duo_zp_num_arr = {}; | |
| 1729 | - if (!a.selected) { | |
| 1730 | - await e.check_prom_activity(pitems); | |
| 1731 | - } | |
| 1732 | - //判断商品是不是优惠活动 | |
| 1733 | - for (var i in e.data.requestData) { | |
| 1734 | - if (!a.selected && i == pitems) continue; | |
| 1735 | - await e.check_prom_activity(i); | |
| 1736 | - } | |
| 1737 | 1748 | } |
| 1738 | 1749 | |
| 1750 | + var txt0 = "requestData[" + pitems + "].show_can_cx"; | |
| 1739 | 1751 | e.setData({ |
| 1740 | - [txt]: Number(!a.selected), | |
| 1752 | + [txt0]: {}, | |
| 1741 | 1753 | }); |
| 1742 | 1754 | |
| 1743 | - this.doCheckAll(); | |
| 1755 | + //-- 选择了什么商品,就用什么商品来判断 -- | |
| 1756 | + var sele_arr={}; | |
| 1757 | + sele_arr[item]=!a.selected; | |
| 1758 | + //回调判断活动有没有冲突 | |
| 1759 | + this.cx_check_ok(pitems,sele_arr,function (the_res){ | |
| 1760 | + if(the_res.code==0){ | |
| 1761 | + th.setData({ | |
| 1762 | + [txt]: Number(!a.selected), | |
| 1763 | + }); | |
| 1764 | + //要先处理了,再来判断要不要显示凑单 | |
| 1765 | + th.doCheckAll(async function (){ | |
| 1766 | + if (a.prom_type == 3) { | |
| 1767 | + e.data.duo_zp_num_arr = {}; | |
| 1768 | + if (!a.selected) { | |
| 1769 | + await e.check_prom_activity(pitems); | |
| 1770 | + } | |
| 1771 | + //判断商品是不是优惠活动 | |
| 1772 | + for (var i in e.data.requestData) { | |
| 1773 | + if (!a.selected && i == pitems) continue; | |
| 1774 | + await e.check_prom_activity(i); | |
| 1775 | + } | |
| 1776 | + } | |
| 1777 | + | |
| 1778 | + }); | |
| 1779 | + }else{ | |
| 1780 | + wx.showToast({ | |
| 1781 | + title: the_res.msg, | |
| 1782 | + icon: 'none', | |
| 1783 | + }); | |
| 1784 | + } | |
| 1785 | + }) | |
| 1786 | + | |
| 1744 | 1787 | } |
| 1745 | 1788 | }, |
| 1746 | 1789 | |
| ... | ... | @@ -1831,7 +1874,7 @@ Page({ |
| 1831 | 1874 | }, |
| 1832 | 1875 | |
| 1833 | 1876 | //----------检查是否全选--------- |
| 1834 | - doCheckAll:async function () { | |
| 1877 | + doCheckAll:async function (func) { | |
| 1835 | 1878 | var th = this, |
| 1836 | 1879 | tfeel = 0, |
| 1837 | 1880 | t_num = 0, |
| ... | ... | @@ -1841,6 +1884,11 @@ Page({ |
| 1841 | 1884 | all_num = 0; |
| 1842 | 1885 | |
| 1843 | 1886 | |
| 1887 | + //-- 如果是全部的时候,就要把它清理掉 -- | |
| 1888 | + this.data.in_zhact_gdmap_new={}; | |
| 1889 | + this.data.in_zhact_new={}; | |
| 1890 | + this.data.in_yhact_new={}; | |
| 1891 | + | |
| 1844 | 1892 | //-- 购物车 -- |
| 1845 | 1893 | if (car && car.length > 0) { |
| 1846 | 1894 | th.data.in_zhact_gdmap = {}; |
| ... | ... | @@ -1848,7 +1896,7 @@ Page({ |
| 1848 | 1896 | |
| 1849 | 1897 | var item = car[a].goods, is_s_sele = 1; |
| 1850 | 1898 | //-- 先批量判断一下活动的类型,同时要同步跟新 -- |
| 1851 | - await th.cart_cx_group(item,car[a],(show_can_cx)=>{ | |
| 1899 | + await th.cart_cx_group(item,car[a],1,(show_can_cx)=>{ | |
| 1852 | 1900 | var offline_price = 0; |
| 1853 | 1901 | var offline_num = 0; |
| 1854 | 1902 | for (var c = 0; c < item.length; c++) { |
| ... | ... | @@ -1949,11 +1997,10 @@ Page({ |
| 1949 | 1997 | } |
| 1950 | 1998 | } |
| 1951 | 1999 | }); |
| 1952 | - | |
| 1953 | - | |
| 1954 | 2000 | } |
| 1955 | 2001 | //-- 切换活动的按钮要把他返回 -- |
| 1956 | 2002 | this.data.change_act=0; |
| 2003 | + if(func) func(); | |
| 1957 | 2004 | } |
| 1958 | 2005 | |
| 1959 | 2006 | //-- 服务卡 -- |
| ... | ... | @@ -1975,14 +2022,10 @@ Page({ |
| 1975 | 2022 | } |
| 1976 | 2023 | |
| 1977 | 2024 | } |
| 1978 | - | |
| 1979 | 2025 | var txt = "service_data[" + a + "].selected"; |
| 1980 | 2026 | th.setData({ |
| 1981 | 2027 | [txt]: Number(is_s_sele) |
| 1982 | 2028 | }); |
| 1983 | - | |
| 1984 | - | |
| 1985 | - | |
| 1986 | 2029 | } |
| 1987 | 2030 | } |
| 1988 | 2031 | |
| ... | ... | @@ -2016,7 +2059,9 @@ Page({ |
| 2016 | 2059 | e.setData({ |
| 2017 | 2060 | [txt]: store_count |
| 2018 | 2061 | }); |
| 2062 | + | |
| 2019 | 2063 | e.doCheckAll(); |
| 2064 | + | |
| 2020 | 2065 | t.goods_num = store_count; |
| 2021 | 2066 | } |
| 2022 | 2067 | e.update_cart(t, pitem, item); |
| ... | ... | @@ -2547,8 +2592,6 @@ Page({ |
| 2547 | 2592 | }; |
| 2548 | 2593 | }, |
| 2549 | 2594 | |
| 2550 | - | |
| 2551 | - | |
| 2552 | 2595 | //---检验线下库存的数量--- |
| 2553 | 2596 | async check_down_line(t, pitem, item, erpwareid) { |
| 2554 | 2597 | var ob = {}, |
| ... | ... | @@ -4162,10 +4205,9 @@ Page({ |
| 4162 | 4205 | }, |
| 4163 | 4206 | |
| 4164 | 4207 | //-- 判读一下促销分组的问题 -- |
| 4165 | - async cart_cx_group(goods,car_item,func){ | |
| 4166 | - | |
| 4208 | + async cart_cx_group(goods,car_item,is_need_ck_num,func){ | |
| 4167 | 4209 | //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 |
| 4168 | - if(this.data.change_act){ | |
| 4210 | + if(this.data.change_act || (car_item.show_can_cx && Object.keys(car_item.show_can_cx).length>0)){ | |
| 4169 | 4211 | var show_can_cx=car_item.show_can_cx; |
| 4170 | 4212 | for(var k in show_can_cx){ |
| 4171 | 4213 | var k_item=show_can_cx[k]; |
| ... | ... | @@ -4244,7 +4286,7 @@ Page({ |
| 4244 | 4286 | }else{ |
| 4245 | 4287 | var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; |
| 4246 | 4288 | if(n_item.prom_type==7){ |
| 4247 | - p_item.zh_act=n_item.zh_pro; | |
| 4289 | + p_item.zh_pro=n_item.zh_pro; | |
| 4248 | 4290 | } |
| 4249 | 4291 | p_item.goods.push(c_item); |
| 4250 | 4292 | cx_act_map.push(p_item); |
| ... | ... | @@ -4277,6 +4319,34 @@ Page({ |
| 4277 | 4319 | } |
| 4278 | 4320 | switch(item_act_map.prom_type){ |
| 4279 | 4321 | case 3: |
| 4322 | + //活动ID | |
| 4323 | + var aid=item_act_map.prom_id; | |
| 4324 | + var need_num=0; | |
| 4325 | + //-- 这个时候要判断是不是要判断优惠促销多门店的时候的限购 -- | |
| 4326 | + if(is_need_ck_num){ | |
| 4327 | + need_num=th.data.in_yhact_new[aid]?th.data.in_yhact_new[aid]:0; | |
| 4328 | + } | |
| 4329 | + //-- 判断优惠促销要不要限购 -- | |
| 4330 | + var fd=null; | |
| 4331 | + var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | |
| 4332 | + if(fd_res && fd_res.data.code==0 ){ | |
| 4333 | + fd=fd_res.data.data; | |
| 4334 | + } | |
| 4335 | + //如果有限购的时候,也要计算一下 | |
| 4336 | + if (fd && fd['limit_num'] > 0){ | |
| 4337 | + //-- 获取已经购买了多少件 -- | |
| 4338 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | |
| 4339 | + +getApp().globalData.user_id+"&prom_type=3&prom_id="+zh_pro0.id; | |
| 4340 | + await getApp().request.promiseGet(url, {}).then(rh => { | |
| 4341 | + if(rh.data.code==0){ | |
| 4342 | + item_act_map.buyed=rh.data.data.userbuynum; | |
| 4343 | + } | |
| 4344 | + }) | |
| 4345 | + if(item_act_map.buyed+need_num>=fd['limit_num']){ | |
| 4346 | + continue; //-- 进行下一个循环 -- | |
| 4347 | + } | |
| 4348 | + } | |
| 4349 | + | |
| 4280 | 4350 | var fir_act=item_act_map.act.fir_act; |
| 4281 | 4351 | var t_goods=item_act_map.goods; |
| 4282 | 4352 | var all_num=0; |
| ... | ... | @@ -4285,7 +4355,6 @@ Page({ |
| 4285 | 4355 | all_num+=t_goods[f].goods_num; |
| 4286 | 4356 | all_pri+=t_goods[f].goods_num*t_goods[f].goods_price; |
| 4287 | 4357 | } |
| 4288 | - | |
| 4289 | 4358 | var yh_ok=1; |
| 4290 | 4359 | switch (fir_act.prom_type){ |
| 4291 | 4360 | case 0: |
| ... | ... | @@ -4299,7 +4368,6 @@ Page({ |
| 4299 | 4368 | } |
| 4300 | 4369 | break; |
| 4301 | 4370 | } |
| 4302 | - | |
| 4303 | 4371 | //-- 如果有满足优惠条件的时候 -- |
| 4304 | 4372 | if(yh_ok){ |
| 4305 | 4373 | can_calc_cx.push(item_act_map) |
| ... | ... | @@ -4310,7 +4378,6 @@ Page({ |
| 4310 | 4378 | //-- 活动列表 -- |
| 4311 | 4379 | var zhact_gdlist=item_act_map.act.gdlist; |
| 4312 | 4380 | var zh_goods=item_act_map.goods; |
| 4313 | - | |
| 4314 | 4381 | //--- 要循环计算一下商品的已购数量 --- |
| 4315 | 4382 | for(var h=0;h<zh_goods.length;h++){ |
| 4316 | 4383 | //-- 商品的限购 -- |
| ... | ... | @@ -4329,20 +4396,23 @@ Page({ |
| 4329 | 4396 | } |
| 4330 | 4397 | zh_goods[h].zh_b_num=promgoodsbuynum; |
| 4331 | 4398 | } |
| 4332 | - //-- 放到map中 -- | |
| 4399 | + //-- 放到参与组合优惠促销的map中 -- | |
| 4333 | 4400 | th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist; |
| 4334 | 4401 | if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; |
| 4335 | 4402 | car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; |
| 4336 | 4403 | |
| 4337 | - var zh_pro0 = null; | |
| 4404 | + var zh_pro0 = th.data.zuhe_map[item_act_map.prom_id]; | |
| 4405 | + | |
| 4338 | 4406 | //-- 获取活动信息 -- |
| 4339 | - var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item_act_map.prom_id + "/" + getApp().globalData.user_id; | |
| 4407 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | |
| 4408 | + +getApp().globalData.user_id+"&prom_type=7&prom_id="+zh_pro0.id; | |
| 4340 | 4409 | await getApp().request.promiseGet(url, {}).then(rh => { |
| 4341 | - zh_pro0 = rh.data.data; | |
| 4410 | + if(rh.data.code==0){ | |
| 4411 | + item_act_map.buyed=rh.data.data.userbuynum; | |
| 4412 | + } | |
| 4342 | 4413 | }) |
| 4343 | - if(!zh_pro0) break; | |
| 4344 | 4414 | //当满足组合的要求:总数要满足,起购数要满足 |
| 4345 | - if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th)){ | |
| 4415 | + if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th,item_act_map,is_need_ck_num)){ | |
| 4346 | 4416 | can_calc_cx.push(item_act_map) |
| 4347 | 4417 | } |
| 4348 | 4418 | break; |
| ... | ... | @@ -4355,8 +4425,8 @@ Page({ |
| 4355 | 4425 | //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- |
| 4356 | 4426 | //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- |
| 4357 | 4427 | //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- |
| 4428 | + //-- can_calc_cx的元素(item_act_map)最后是放到act_arr里面去了 -- | |
| 4358 | 4429 | var show_can_cx={}; |
| 4359 | - | |
| 4360 | 4430 | if(can_calc_cx.length){ |
| 4361 | 4431 | for(var p=0;p<can_calc_cx.length;p++){ |
| 4362 | 4432 | var ch_map=[]; |
| ... | ... | @@ -4415,7 +4485,33 @@ Page({ |
| 4415 | 4485 | |
| 4416 | 4486 | } |
| 4417 | 4487 | //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- |
| 4418 | - if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | |
| 4488 | + if(!ck_prom_type){ | |
| 4489 | + ck_prom_type=k_item.act_arr[0]; | |
| 4490 | + k_item.act_arr[0].sele=1; | |
| 4491 | + } | |
| 4492 | + | |
| 4493 | + //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | |
| 4494 | + if(is_need_ck_num){ | |
| 4495 | + var t_pid=ck_prom_type.prom_id; | |
| 4496 | + switch (ck_prom_type.prom_type){ | |
| 4497 | + case 3: | |
| 4498 | + if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | |
| 4499 | + th.data.in_yhact_new[t_pid]++; | |
| 4500 | + break; | |
| 4501 | + case 7: | |
| 4502 | + if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | |
| 4503 | + th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | |
| 4504 | + //-- 数组的优化 -- | |
| 4505 | + var nei_gd_map=ck_prom_type.in_zhact_gdmap; | |
| 4506 | + if(nei_gd_map){ | |
| 4507 | + for (var vg in nei_gd_map) { | |
| 4508 | + if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | |
| 4509 | + th.data.in_zhact_gdmap_new[vg] += nei_gd_map[vg]; | |
| 4510 | + } | |
| 4511 | + } | |
| 4512 | + break; | |
| 4513 | + } | |
| 4514 | + } | |
| 4419 | 4515 | //-- 此时要把购物车中的商品确定活动 -- |
| 4420 | 4516 | for (var b=0; b<ck_prom_type.goods.length;b++){ |
| 4421 | 4517 | //-- 开始查找 -- |
| ... | ... | @@ -4428,11 +4524,11 @@ Page({ |
| 4428 | 4524 | } |
| 4429 | 4525 | } |
| 4430 | 4526 | } |
| 4431 | - | |
| 4432 | 4527 | //-- 显示到前端,并切换 -- |
| 4433 | 4528 | //th.setData({show_can_cx}) |
| 4434 | 4529 | //--- 调用回调函数 --- |
| 4435 | 4530 | func(show_can_cx); |
| 4531 | + | |
| 4436 | 4532 | }, |
| 4437 | 4533 | //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- |
| 4438 | 4534 | check_ok_cx_pro(item_act_map,can_calc_cx){ |
| ... | ... | @@ -4496,20 +4592,183 @@ Page({ |
| 4496 | 4592 | |
| 4497 | 4593 | //--- 选择回来时候的选择 --- |
| 4498 | 4594 | sure_cx_group:function(e){ |
| 4595 | + var th=this; | |
| 4499 | 4596 | var sele_idx=e.detail.sele_idx; |
| 4500 | 4597 | var idx=this.data.sele_cx_group_cidx; |
| 4501 | 4598 | var gd_key= this.data.cx_group_gd_key; |
| 4502 | 4599 | //-- 获取到-- |
| 4503 | 4600 | var cx_prom_group=this.data.requestData[idx].show_can_cx[gd_key].act_arr; |
| 4504 | 4601 | |
| 4602 | + var fir_sele=0; | |
| 4603 | + | |
| 4505 | 4604 | for(var dx=0;dx<cx_prom_group.length;dx++){ |
| 4605 | + if(cx_prom_group[dx].sele) fir_sele=dx; | |
| 4506 | 4606 | if(dx!=sele_idx) cx_prom_group[dx].sele=0; |
| 4507 | 4607 | else cx_prom_group[dx].sele=1; |
| 4508 | 4608 | } |
| 4509 | 4609 | |
| 4510 | - this.data.change_act=1; | |
| 4511 | - this.doCheckAll(); | |
| 4610 | + this.cx_check_ok2(function (the_rs){ | |
| 4611 | + if(the_rs.code==0){ | |
| 4612 | + th.data.change_act=1; | |
| 4613 | + th.doCheckAll(); | |
| 4614 | + }else{ | |
| 4615 | + wx.showToast({ | |
| 4616 | + title: the_rs.msg, | |
| 4617 | + icon: 'none', | |
| 4618 | + duration:2500 | |
| 4619 | + }); | |
| 4620 | + | |
| 4621 | + for(var dx=0;dx<cx_prom_group.length;dx++){ | |
| 4622 | + if(dx!=fir_sele) cx_prom_group[dx].sele=0; | |
| 4623 | + else cx_prom_group[dx].sele=1; | |
| 4624 | + } | |
| 4625 | + | |
| 4626 | + } | |
| 4627 | + }) | |
| 4512 | 4628 | |
| 4629 | + }, | |
| 4630 | + | |
| 4631 | + //--- 在点击商品和或者门店的时候调用,c_idx是购物车下标序号--- | |
| 4632 | + async cx_check_ok(c_idx,sele_arr,func){ | |
| 4633 | + | |
| 4634 | + var th=this; | |
| 4635 | + var car =JSON.parse(JSON.stringify(this.data.requestData)); | |
| 4636 | + var item = car[c_idx].goods, is_s_sele = 1; | |
| 4637 | + | |
| 4638 | + var is_has_other=0; | |
| 4639 | + for(var ii=0;ii<car.length;ii++){ | |
| 4640 | + if(c_idx==ii) continue; | |
| 4641 | + if(car[ii].show_can_cx && Object.keys(car[ii].show_can_cx).length){ | |
| 4642 | + is_has_other=1; break; | |
| 4643 | + } | |
| 4644 | + } | |
| 4645 | + | |
| 4646 | + //其他门店并没有选择 | |
| 4647 | + if(!is_has_other){ | |
| 4648 | + func({'code': 0, 'msg': '成功'}); | |
| 4649 | + return false; | |
| 4650 | + } | |
| 4651 | + //-- 让选择进入对应 -- | |
| 4652 | + for(var i=0;i<item.length;i++){ | |
| 4653 | + if(sele_arr.hasOwnProperty(i)){ | |
| 4654 | + item[i].selected=sele_arr[i]; | |
| 4655 | + } | |
| 4656 | + } | |
| 4657 | + //-- 先批量判断一下活动的类型,同时要同步跟新 -- | |
| 4658 | + this.cart_cx_group(item,car[c_idx],0,(show_can_cx)=>{ | |
| 4659 | + car[c_idx].show_can_cx=show_can_cx; | |
| 4660 | + th.cx_check_ok2(func,car); | |
| 4661 | + }); | |
| 4662 | + | |
| 4663 | + | |
| 4664 | + }, | |
| 4665 | + | |
| 4666 | + //--- 在点击商品和或者门店的时候调用,这个可以在活动切换的时候调用,也可以被单个选择调用--- | |
| 4667 | + async cx_check_ok2(func,car) { | |
| 4668 | + | |
| 4669 | + //如果购物车没有带入,要进行赋值 | |
| 4670 | + if(!car) { | |
| 4671 | + car = JSON.parse(JSON.stringify(this.data.requestData)); | |
| 4672 | + } | |
| 4673 | + | |
| 4674 | + var nei_in_zhact_gdmap = {}; | |
| 4675 | + var nei_in_zhact = {}; | |
| 4676 | + var nei_in_yhact = {}; | |
| 4677 | + for (var i = 0; i < car.length; i++) { | |
| 4678 | + var show_can_cx = car[i].show_can_cx; | |
| 4679 | + for (var j in show_can_cx) { | |
| 4680 | + var sele_act = show_can_cx[j].act_arr.find(function (m) { | |
| 4681 | + return m.sele == 1; | |
| 4682 | + }) | |
| 4683 | + | |
| 4684 | + if (!sele_act) continue; | |
| 4685 | + var pid = sele_act['prom_id']; | |
| 4686 | + if (sele_act['prom_type'] == 3) { | |
| 4687 | + if(!nei_in_yhact[pid]) nei_in_yhact[pid] = 0; | |
| 4688 | + nei_in_yhact[pid]++; | |
| 4689 | + } | |
| 4690 | + if (sele_act['prom_type'] == 7) { | |
| 4691 | + if(!nei_in_zhact[pid]) nei_in_zhact[pid] = 0; | |
| 4692 | + nei_in_zhact[pid] += sele_act['act_num']; | |
| 4693 | + } | |
| 4694 | + var in_zhact_gdmap1 = sele_act['in_zhact_gdmap']; | |
| 4695 | + for (var vg in in_zhact_gdmap1) { | |
| 4696 | + if (!nei_in_zhact_gdmap[vg]) nei_in_zhact_gdmap[vg] = 0; | |
| 4697 | + nei_in_zhact_gdmap[vg] += in_zhact_gdmap1[vg]; | |
| 4698 | + } | |
| 4699 | + } | |
| 4700 | + } | |
| 4701 | + | |
| 4702 | + //-- 判断优惠促销是不是超出限购 -- | |
| 4703 | + if (nei_in_yhact && Object.keys(nei_in_yhact).length) { | |
| 4704 | + for (var ky0 in nei_in_yhact) { | |
| 4705 | + var num = nei_in_yhact[ky0]; | |
| 4706 | + | |
| 4707 | + var fd=null; | |
| 4708 | + var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | |
| 4709 | + if(fd_res && fd_res.data.code==0 ){ | |
| 4710 | + fd=fd_res.data.data; | |
| 4711 | + } | |
| 4712 | + if (fd && fd['limit_num'] > 0 && num > fd['limit_num']) { | |
| 4713 | + func({'code': -1, 'msg': '超出优惠促销活动的限购'}); | |
| 4714 | + return false; | |
| 4715 | + } | |
| 4716 | + } | |
| 4717 | + } | |
| 4718 | + | |
| 4719 | + //-- 判断组合促销是不是超出活动总数量 -- | |
| 4720 | + if (nei_in_zhact && Object.keys(nei_in_zhact).length) { | |
| 4721 | + for (var ky in nei_in_zhact) { | |
| 4722 | + | |
| 4723 | + var num0 = nei_in_zhact[ky]; | |
| 4724 | + var zh = this.data.zuhe_map[ky]; | |
| 4725 | + var buyed=0; | |
| 4726 | + | |
| 4727 | + //获取已经购买了多少件 | |
| 4728 | + var z_url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"user_id="+getApp().globalData.user_id+"prom_type=7&prom_id="+ky; | |
| 4729 | + var zbuy=await getApp().request.promiseGet(z_url,{}); | |
| 4730 | + if(zbuy && zbuy.data.code==0){ | |
| 4731 | + buyed=zbuy.data.data.userbuynum; | |
| 4732 | + } | |
| 4733 | + if (zh['zh_num'] > 0 && zh['zh_buy_num'] + num0 > zh['zh_num']) { | |
| 4734 | + func({'code': -1, 'msg': '超出组合购活动总数量'}); | |
| 4735 | + return false; | |
| 4736 | + } | |
| 4737 | + } | |
| 4738 | + } | |
| 4739 | + | |
| 4740 | + //-- 判断组合促销是不是超出活动总数量 -- | |
| 4741 | + if (nei_in_zhact_gdmap && Object.keys(nei_in_zhact_gdmap).length) { | |
| 4742 | + for (var key in nei_in_zhact_gdmap) { | |
| 4743 | + | |
| 4744 | + var num1 = nei_in_zhact_gdmap[key]; | |
| 4745 | + var key_a = key.split('.'); | |
| 4746 | + var gid = key_a[0]; | |
| 4747 | + var pid = key_a[1]; | |
| 4748 | + | |
| 4749 | + //-- 商品的限购 -- | |
| 4750 | + var promgoodsbuynum = 0; | |
| 4751 | + var rq = { | |
| 4752 | + 'store_id': os.stoid, 'user_id': getApp().globalData.user_id, 'goods_id': gid, | |
| 4753 | + 'prom_type': 7, 'prom_id': pid | |
| 4754 | + }; | |
| 4755 | + | |
| 4756 | + var res = await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", {data: rq}); | |
| 4757 | + if (res && res.data.code == 0) { | |
| 4758 | + promgoodsbuynum = res.data.data.promgoodsbuynum; | |
| 4759 | + } | |
| 4760 | + | |
| 4761 | + var gdlist_arr = this.data.zuhe_map_good[pid]; | |
| 4762 | + var gdlist = gdlist_arr.find(function (e) { | |
| 4763 | + return e.goods_id == gid; | |
| 4764 | + }) | |
| 4765 | + if (gdlist['buyqty'] > 0 && num1 + promgoodsbuynum > gdlist['buyqty']) { | |
| 4766 | + func({'code': -1, 'msg': '超出组合购商品的限购'}); | |
| 4767 | + return false; | |
| 4768 | + } | |
| 4769 | + } | |
| 4770 | + } | |
| 4771 | + func({'code': 0, 'msg': '成功'}) | |
| 4513 | 4772 | } |
| 4514 | 4773 | |
| 4515 | 4774 | ... | ... |
pages/cart/cart/zh_calculate.js
| ... | ... | @@ -522,7 +522,8 @@ module.exports = { |
| 522 | 522 | }, |
| 523 | 523 | |
| 524 | 524 | //-- 判断组合购有没有满足,只有在检查的时候,要用新的 --- |
| 525 | - ch_zh_ok(act,gdlist,c_goods,th){ | |
| 525 | + ch_zh_ok(act,gdlist,c_goods,th,item_act_map,is_need_ck_num){ | |
| 526 | + | |
| 526 | 527 | //-- 寻找一下 -- |
| 527 | 528 | function get_num(ite) { |
| 528 | 529 | for (let v1 in c_goods) { |
| ... | ... | @@ -536,6 +537,47 @@ module.exports = { |
| 536 | 537 | var goods =gdlist; |
| 537 | 538 | var all_num=0; |
| 538 | 539 | var need_to_buy=0; |
| 540 | + var all_zhqty=0; | |
| 541 | + //-- 是综合考虑到组合购的总数量和限购数量 -- | |
| 542 | + var min_can_buy=-1; | |
| 543 | + var aid=act.id; | |
| 544 | + | |
| 545 | + let no_in_arr = []; //剩余的未加入组合购 | |
| 546 | + let out_arr = []; //超出活动限购的商品放入 | |
| 547 | + | |
| 548 | + //-- 判断组合购的总数量是不是到了 -- | |
| 549 | + if(act.zh_num>0){ | |
| 550 | + //如果是在全选的情况下,那么就需要in_zhact_new来控制数量 | |
| 551 | + var need_ck=0; | |
| 552 | + if(is_need_ck_num){ | |
| 553 | + need_ck=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | |
| 554 | + } | |
| 555 | + if(need_ck+act.zh_buy_num>=act.zh_num ){ | |
| 556 | + return false; | |
| 557 | + }else{ | |
| 558 | + min_can_buy= act.zh_num-act.zh_buy_num-need_ck; | |
| 559 | + } | |
| 560 | + } | |
| 561 | + | |
| 562 | + //-- 判断组合购的限购是不是到了 -- | |
| 563 | + if(act.buy_limit>0){ | |
| 564 | + var need_ck0=0; | |
| 565 | + if(is_need_ck_num){ | |
| 566 | + need_ck0=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | |
| 567 | + } | |
| 568 | + var min_can_buy0=0; | |
| 569 | + if(need_ck+item_act_map.buyed>=act.buy_limit ){ | |
| 570 | + return false; | |
| 571 | + }else{ | |
| 572 | + min_can_buy0=act.buy_limit-item_act_map.buyed-need_ck; | |
| 573 | + } | |
| 574 | + if(min_can_buy>0){ | |
| 575 | + if(min_can_buy0<min_can_buy) min_can_buy=min_can_buy0; | |
| 576 | + }else{ | |
| 577 | + min_can_buy=min_can_buy0; | |
| 578 | + } | |
| 579 | + } | |
| 580 | + | |
| 539 | 581 | for (var i in goods) { |
| 540 | 582 | var item = goods[i]; |
| 541 | 583 | var cart_num = get_num(item).goods_num; |
| ... | ... | @@ -552,16 +594,24 @@ module.exports = { |
| 552 | 594 | if (item.buyqty > 0) { |
| 553 | 595 | var cbuy = item.buyqty - zh_b_num; |
| 554 | 596 | var key = item.goods_id + "." + act.id; |
| 555 | - if (th.data.in_zhact_gdmap[key]) { | |
| 556 | - var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap[key]; | |
| 597 | + if (is_need_ck_num && th.data.in_zhact_gdmap_new[key]) { | |
| 598 | + var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap_new[key]; | |
| 557 | 599 | } |
| 558 | 600 | //当可买的数量为0 |
| 559 | 601 | if (cbuy <= 0) { |
| 560 | 602 | item.num = 0; |
| 603 | + out_arr.push({ | |
| 604 | + goods_id: item.goods_id, | |
| 605 | + num: cart_num | |
| 606 | + }) | |
| 561 | 607 | } else { |
| 562 | 608 | if (cbuy >= cart_num) item.num = cart_num; |
| 563 | 609 | else { |
| 564 | 610 | item.num = cbuy; |
| 611 | + out_arr.push({ | |
| 612 | + goods_id: item.goods_id, | |
| 613 | + num: cart_num - cbuy | |
| 614 | + }) | |
| 565 | 615 | } |
| 566 | 616 | } |
| 567 | 617 | } else { |
| ... | ... | @@ -572,9 +622,24 @@ module.exports = { |
| 572 | 622 | all_num += item.num; |
| 573 | 623 | //当有起购数的控制的时候 |
| 574 | 624 | if (item.zhqty) { |
| 625 | + all_zhqty += item.zhqty; | |
| 575 | 626 | if (item.num < item.zhqty) { |
| 576 | 627 | need_to_buy += item.zhqty - item.num; |
| 577 | 628 | } |
| 629 | + if (item.num > item.zhqty) { | |
| 630 | + for (let i = 0; i < item.num - item.zhqty; i++) { | |
| 631 | + no_in_arr.push({ | |
| 632 | + goods_id: item.goods_id, | |
| 633 | + }) | |
| 634 | + } | |
| 635 | + } | |
| 636 | + } | |
| 637 | + else { | |
| 638 | + for (let j = 0; j < item.num; j++) { | |
| 639 | + no_in_arr.push({ | |
| 640 | + goods_id: item.goods_id, | |
| 641 | + }) | |
| 642 | + } | |
| 578 | 643 | } |
| 579 | 644 | } else { |
| 580 | 645 | if (item.zhqty) { |
| ... | ... | @@ -585,19 +650,141 @@ module.exports = { |
| 585 | 650 | |
| 586 | 651 | //当满足组合的要求:总数要满足,起购数要满足 |
| 587 | 652 | if (all_num >= act.zhbuyqty && !need_to_buy) { |
| 653 | + //默认数量是1 | |
| 654 | + var act_num=1; | |
| 655 | + function sortData(a, b) { | |
| 656 | + return a.price - b.price | |
| 657 | + } | |
| 658 | + if (no_in_arr.length > 0) no_in_arr.sort(sortData); | |
| 659 | + if (act.zhbuyqty > all_zhqty) { | |
| 660 | + for (let n = 0; n < act.zhbuyqty - all_zhqty; n++) { | |
| 661 | + no_in_arr.pop(); | |
| 662 | + } | |
| 663 | + } | |
| 664 | + | |
| 665 | + //看一下剩下的数量有没有满足组合购的要求,以及要不要倍增 | |
| 666 | + if (act.is_bz && no_in_arr.length >= act.zhbuyqty) { | |
| 667 | + | |
| 668 | + var bz_num_ok = 0; //超量倍增是否满足 | |
| 669 | + var zhqty_len = 0; //几个超量倍增 | |
| 670 | + var delete_num = 0; | |
| 671 | + //看一下是几倍 | |
| 672 | + let be = parseInt(no_in_arr.length / act.zhbuyqty); | |
| 673 | + //如果有总数控制的时候 | |
| 674 | + if (min_can_buy>0) { | |
| 675 | + var be1 = min_can_buy - 1; | |
| 676 | + if (be1 < be) be = be1; | |
| 677 | + } | |
| 678 | + if(be) { | |
| 679 | + if (act.is_bzyh && zhqty_bz.length > 0) { | |
| 680 | + | |
| 681 | + let zhqty_bz_arr = []; | |
| 682 | + let zhqty_bz_flag = this.zhqty_bz_fun(zhqty_bz, be, zhqty_bz_arr); | |
| 683 | + if (zhqty_bz_flag) { | |
| 684 | + for (let i = 0; i < zhqty_bz.length; i++) { | |
| 685 | + var vv = zhqty_bz[i]; | |
| 686 | + for (let j = 0; j < be * vv['zhqty']; j++) { | |
| 687 | + let index = no_in_arr.findIndex(i => { | |
| 688 | + return vv.goods_id === i.goods_id | |
| 689 | + }) | |
| 690 | + if (index > -1) { | |
| 691 | + delete_num++ | |
| 692 | + no_in_arr.splice(index, 1) | |
| 693 | + } | |
| 694 | + } | |
| 695 | + } | |
| 696 | + } else { | |
| 697 | + zhqty_len = 1; | |
| 698 | + let min_bz_num = Math.min.apply(Math, zhqty_bz_arr.map(function (o) { | |
| 699 | + return o['be']; | |
| 700 | + })); | |
| 701 | + let new_arr = zhqty_bz_arr.filter(ii => { | |
| 702 | + return ii['be'] == min_bz_num; | |
| 703 | + }) | |
| 704 | + //-- 要看一下倍数还有没有 --- | |
| 705 | + be = new_arr[0].be; | |
| 706 | + //如果有总数控制的时候 | |
| 707 | + if (min_can_buy>0) { | |
| 708 | + var be1 = min_can_buy - 1; | |
| 709 | + if (be1 < be) be = be1; | |
| 710 | + } | |
| 711 | + if(be){ | |
| 712 | + for (let i = 0; i < zhqty_bz.length; i++) { | |
| 713 | + let item1 = zhqty_bz[i]; | |
| 714 | + for (let j = 0; j < be * item1['zhqty']; j++) { | |
| 715 | + let index = no_in_arr.findIndex(i => { | |
| 716 | + return item1.goods_id === i.goods_id | |
| 717 | + }) | |
| 718 | + if (index > -1) { | |
| 719 | + no_in_arr.splice(index, 1) | |
| 720 | + } | |
| 721 | + } | |
| 722 | + } | |
| 723 | + act_num+=be; | |
| 724 | + } | |
| 725 | + } | |
| 726 | + } | |
| 727 | + if (!zhqty_len) { | |
| 728 | + let pop_num = be * act.zhbuyqty - delete_num; | |
| 729 | + for (var m = 0; m < pop_num; m++) { | |
| 730 | + no_in_arr.pop(); | |
| 731 | + } | |
| 732 | + act_num+=be; | |
| 733 | + } | |
| 734 | + } | |
| 735 | + } | |
| 736 | + | |
| 737 | + //-- 参与活动的金额要返回回去 -- | |
| 738 | + item_act_map.act_num=act_num; | |
| 739 | + let goods_map = {}; | |
| 740 | + //算一下剩余的商品 | |
| 741 | + if (no_in_arr.length) { | |
| 742 | + for (let ii in no_in_arr) { | |
| 743 | + let item = no_in_arr[ii]; | |
| 744 | + if (goods_map[item.goods_id]) { | |
| 745 | + var num = goods_map[item.goods_id]; | |
| 746 | + goods_map[item.goods_id] = ++num; | |
| 747 | + } else { | |
| 748 | + goods_map[item.goods_id] = 1; | |
| 749 | + } | |
| 750 | + } | |
| 751 | + } | |
| 752 | + //超量的部分也要计算一下 | |
| 753 | + if (out_arr.length) { | |
| 754 | + for (var m in out_arr) { | |
| 755 | + if (goods_map[item.goods_id]) { | |
| 756 | + var num = goods_map[item.goods_id]; | |
| 757 | + num += item.num | |
| 758 | + goods_map[item.goods_id] = num; | |
| 759 | + } else { | |
| 760 | + goods_map[item.goods_id] = item.num; | |
| 761 | + } | |
| 762 | + } | |
| 763 | + } | |
| 764 | + | |
| 765 | + //-- 组合购的商品限购的数组控制 -- | |
| 766 | + var in_zhact_gdmap={}; | |
| 588 | 767 | //商品的列表 |
| 589 | 768 | for (var u in goods) { |
| 590 | 769 | var ite = goods[u]; |
| 591 | - if (ite.buyqty > 0 && ite.num > 0) { | |
| 592 | - console.log(222, th.data.in_zhact_gdmap_gp); | |
| 770 | + var cart_num = get_num(ite).goods_num; | |
| 771 | + | |
| 772 | + if (ite.buyqty > 0 && cart_num > 0) { | |
| 593 | 773 | var key = ite.goods_id + "." + act.id; |
| 594 | - if (th.data.in_zhact_gdmap[key]) { | |
| 595 | - th.data.in_zhact_gdmap[key] += ite.num; | |
| 596 | - } else { | |
| 597 | - th.data.in_zhact_gdmap[key] = ite.num; | |
| 774 | + if(goods_map[ite.goods_id]){ | |
| 775 | + cart_num-=goods_map[ite.goods_id]; | |
| 776 | + } | |
| 777 | + if(cart_num>0){ | |
| 778 | + if (in_zhact_gdmap[key]) { | |
| 779 | + in_zhact_gdmap[key] += ite.num; | |
| 780 | + } else { | |
| 781 | + in_zhact_gdmap[key] = ite.num; | |
| 782 | + } | |
| 598 | 783 | } |
| 784 | + | |
| 599 | 785 | } |
| 600 | 786 | } |
| 787 | + item_act_map.in_zhact_gdmap=in_zhact_gdmap; | |
| 601 | 788 | return true; |
| 602 | 789 | } |
| 603 | 790 | return false; |
| ... | ... | @@ -605,5 +792,4 @@ module.exports = { |
| 605 | 792 | |
| 606 | 793 | |
| 607 | 794 | |
| 608 | - | |
| 609 | 795 | } |
| 610 | 796 | \ No newline at end of file | ... | ... |