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 | ... | ... |