Commit b9aff81ccd938cdf46b453042acfc9eebf8dd66e

Authored by yvan.ni
1 parent dbe8c91e

多促销的优化

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