Commit e2015e88c3fb95c9d11dbb0e15ad21b7c843f413
1 parent
fc8fd8a5
优惠促销多活动的后台优化
Showing
8 changed files
with
621 additions
and
55 deletions
packageE/pages/cart/cart2/cart2.js
| ... | ... | @@ -678,10 +678,9 @@ Page({ |
| 678 | 678 | }, |
| 679 | 679 | |
| 680 | 680 | |
| 681 | - //获取促销活动的组合 | |
| 682 | - cx_prom_group(prom_list){ | |
| 681 | + //-- 获取促销活动的组合 -- | |
| 682 | + cx_prom_group(prom_list,item1){ | |
| 683 | 683 | var th=this; |
| 684 | - | |
| 685 | 684 | //需要读者系统顺序 |
| 686 | 685 | var json_d =this.data.json_d; |
| 687 | 686 | var auto_promote_sale=json_d.auto_promote_sale; |
| ... | ... | @@ -691,10 +690,13 @@ Page({ |
| 691 | 690 | sort_type='prom_type'; |
| 692 | 691 | }else{ |
| 693 | 692 | var auto_promote_sale=auto_promote_sale.split(','); |
| 694 | - //-- 循环处理 -- | |
| 693 | + //--- 循环处理 --- | |
| 695 | 694 | prom_list.map(function (e){ |
| 696 | 695 | var fd=auto_promote_sale.indexOf(e.prom_type+''); |
| 697 | 696 | e.sort=fd; |
| 697 | + if(e.prom_type==item1.prom_type){ | |
| 698 | + e.sele=1; | |
| 699 | + } | |
| 698 | 700 | }) |
| 699 | 701 | sort_type='sort'; |
| 700 | 702 | } |
| ... | ... | @@ -703,7 +705,6 @@ Page({ |
| 703 | 705 | function comp(a, b) { |
| 704 | 706 | return a[sort_type]-b[sort_type]; //升序 |
| 705 | 707 | } |
| 706 | - | |
| 707 | 708 | //使用sort排序 |
| 708 | 709 | prom_list.sort(comp); |
| 709 | 710 | }, |
| ... | ... | @@ -750,25 +751,10 @@ Page({ |
| 750 | 751 | //-- 判断组合购是总数量是不是存在 -- |
| 751 | 752 | var no_zh_num={}; |
| 752 | 753 | |
| 753 | - //-------- 如果是立即购买过来的时候 或者购买的商品只有一种的时候 --- | |
| 754 | - if(carr.length==1){ | |
| 755 | - var item1=carr[0]; | |
| 756 | - await th.buy_pro_group(item1,1); | |
| 757 | - | |
| 758 | - if(item1.more_cx){ | |
| 759 | - //-- 对活动进行排序 -- | |
| 760 | - th.cx_prom_group(item1.more_cx); | |
| 761 | - } | |
| 762 | - | |
| 763 | - if(item1.prom_type==0){ | |
| 764 | - item1.prom_type=item1.more_cx[0].prom_type; | |
| 765 | - item1.prom_type=item1.more_cx[0].prom_id; | |
| 766 | - } | |
| 767 | - } | |
| 768 | - | |
| 769 | - | |
| 770 | 754 | for (var i = 0; i < carr.length; i++) { |
| 771 | 755 | var item1 = carr[i]; |
| 756 | + //-- 获取一下商品的所有活动 -- | |
| 757 | + await th.buy_pro_group(item1); | |
| 772 | 758 | //把已经购买了多少见的内容填入 |
| 773 | 759 | var goodsbuynum = 0, promgoodsbuynum = 0; |
| 774 | 760 | //--要获得商品,该用户买了多少件,同步应用-- |
| ... | ... | @@ -1153,6 +1139,13 @@ Page({ |
| 1153 | 1139 | //-- 循环计算一下线下取价 -- |
| 1154 | 1140 | for (var k = 0; k < arr.length; k++) { |
| 1155 | 1141 | var c_item = arr[k]; |
| 1142 | + | |
| 1143 | + //-- 要进行归类一下活动 -- | |
| 1144 | + await th.cart_cx_group(arr[k].goods,c_item,(show_can_cx)=>{ | |
| 1145 | + arr[k].show_can_cx=show_can_cx; | |
| 1146 | + }) | |
| 1147 | + | |
| 1148 | + | |
| 1156 | 1149 | var item = arr[k].goods; |
| 1157 | 1150 | var offline_price = 0; |
| 1158 | 1151 | var offline_num = 0; |
| ... | ... | @@ -1201,8 +1194,7 @@ Page({ |
| 1201 | 1194 | await getApp().request.promisePost("/api/weshop/order/getrebateSum", { |
| 1202 | 1195 | is_json: 1, data: req_d |
| 1203 | 1196 | }).then(rs => { |
| 1204 | - | |
| 1205 | - if (rs.data.code == 0) back_data = rs.data.data; | |
| 1197 | + if (rs.data.code == 0) back_data = rs.data.data; | |
| 1206 | 1198 | }); |
| 1207 | 1199 | |
| 1208 | 1200 | if (back_data && parseFloat(back_data)) { |
| ... | ... | @@ -1876,7 +1868,7 @@ Page({ |
| 1876 | 1868 | if (is_zh_ok) { |
| 1877 | 1869 | |
| 1878 | 1870 | //-- 组合的数组填充一下 -- |
| 1879 | - th.data.zuhe_map[zh_pro0.id] = zh_pro0; | |
| 1871 | + th.data.zhhe_act_map[zh_pro0.id] = zh_pro0; | |
| 1880 | 1872 | |
| 1881 | 1873 | var url1 = "/api/weshop/prom/zhbuyGoods/page"; |
| 1882 | 1874 | var req_data = { |
| ... | ... | @@ -2071,13 +2063,13 @@ Page({ |
| 2071 | 2063 | if (is_state == 1) { |
| 2072 | 2064 | //-- 按件进行计算 -- |
| 2073 | 2065 | if (fir_act.prom_type == 1) { |
| 2074 | - if (fir_act.condition > item1.goods_num) { | |
| 2066 | + if (fir_act.condition <= item1.goods_num) { | |
| 2075 | 2067 | item1.more_cx.push(push_item); |
| 2076 | 2068 | } |
| 2077 | 2069 | }else{ |
| 2078 | 2070 | //-- 按数量进行计算 -- |
| 2079 | 2071 | var all_price = item1.goods_price * item1.goods_num; |
| 2080 | - if (parseFloat(fir_act.condition) > parseFloat(parseFloat(all_price).toFixed(2))) { | |
| 2072 | + if (parseFloat(fir_act.condition) <= parseFloat(parseFloat(all_price).toFixed(2))) { | |
| 2081 | 2073 | item1.more_cx.push(push_item); |
| 2082 | 2074 | } |
| 2083 | 2075 | } |
| ... | ... | @@ -7349,6 +7341,355 @@ Page({ |
| 7349 | 7341 | } |
| 7350 | 7342 | } |
| 7351 | 7343 | return false; |
| 7344 | + }, | |
| 7345 | + | |
| 7346 | + | |
| 7347 | + //-- 判读一下促销分组的问题 -- | |
| 7348 | + async cart_cx_group(goods,car_item,func){ | |
| 7349 | + | |
| 7350 | + //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 | |
| 7351 | + if(this.data.change_act){ | |
| 7352 | + var show_can_cx=car_item.show_can_cx; | |
| 7353 | + for(var k in show_can_cx){ | |
| 7354 | + var k_item=show_can_cx[k]; | |
| 7355 | + var ck_prom_type=null; | |
| 7356 | + //-- 如果是多活动,先把活动按照后台的顺序排序一下, | |
| 7357 | + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | |
| 7358 | + if(k_item.act_arr.length>1){ | |
| 7359 | + var json_d =this.data.json_d; | |
| 7360 | + var auto_promote_sale=json_d.auto_promote_sale; | |
| 7361 | + var sort_type=''; | |
| 7362 | + | |
| 7363 | + if(!auto_promote_sale){ | |
| 7364 | + sort_type='prom_type'; | |
| 7365 | + }else{ | |
| 7366 | + var auto_promote_sale=auto_promote_sale.split(','); | |
| 7367 | + //-- 循环处理 -- | |
| 7368 | + k_item.act_arr.map(function (e){ | |
| 7369 | + var fd=auto_promote_sale.indexOf(e.prom_type+''); | |
| 7370 | + e.sort=fd; | |
| 7371 | + }) | |
| 7372 | + sort_type='sort'; | |
| 7373 | + } | |
| 7374 | + //-- 排序一下,进行升序 -- | |
| 7375 | + function comp(a, b) { | |
| 7376 | + return a[sort_type]-b[sort_type]; //升序 | |
| 7377 | + } | |
| 7378 | + //活动要排序一下 | |
| 7379 | + k_item.act_arr.sort(comp); | |
| 7380 | + | |
| 7381 | + //确定一下活动,先看一下有没有选择的活动 | |
| 7382 | + ck_prom_type=k_item.act_arr.find(function (el){ | |
| 7383 | + return el.sele; | |
| 7384 | + }) | |
| 7385 | + | |
| 7386 | + } | |
| 7387 | + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | |
| 7388 | + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | |
| 7389 | + | |
| 7390 | + //-- 此时要把购物车中的商品确定活动 -- | |
| 7391 | + for (var b=0; b<ck_prom_type.goods.length;b++){ | |
| 7392 | + //-- 开始查找 -- | |
| 7393 | + var fg=goods.findIndex(function (g_item){ | |
| 7394 | + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | |
| 7395 | + }) | |
| 7396 | + if(fg>-1){ | |
| 7397 | + goods[fg].prom_type=ck_prom_type.prom_type; | |
| 7398 | + goods[fg].prom_id=ck_prom_type.prom_id; | |
| 7399 | + } | |
| 7400 | + } | |
| 7401 | + | |
| 7402 | + } | |
| 7403 | + func(show_can_cx); | |
| 7404 | + return false; | |
| 7405 | + } | |
| 7406 | + | |
| 7407 | + var th=this; | |
| 7408 | + //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 --- | |
| 7409 | + var cx_act_map=[]; | |
| 7410 | + for(var i=0; i<goods.length;i++){ | |
| 7411 | + var c_item=goods[i]; | |
| 7412 | + //没有选中 | |
| 7413 | + if(!c_item.selected) continue; | |
| 7414 | + //如果是秒杀之类是商品 | |
| 7415 | + if([1,2,4,6,8,9].indexOf(c_item.prom_type)>-1) continue; | |
| 7416 | + | |
| 7417 | + //-- 把活动进行规整 -- | |
| 7418 | + var more_cx=c_item.more_cx; | |
| 7419 | + for (var j=0;j<more_cx.length;j++){ | |
| 7420 | + var n_item=more_cx[j]; | |
| 7421 | + var key=n_item.prom_type+'-'+n_item.prom_id; | |
| 7422 | + var fd=cx_act_map.find(function (e){ | |
| 7423 | + return e.key==key; | |
| 7424 | + }) | |
| 7425 | + if(fd){ | |
| 7426 | + fd.goods.push(c_item); | |
| 7427 | + }else{ | |
| 7428 | + var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; | |
| 7429 | + p_item.goods.push(c_item); | |
| 7430 | + cx_act_map.push(p_item); | |
| 7431 | + } | |
| 7432 | + } | |
| 7433 | + goods[i].prom_type=0; | |
| 7434 | + goods[i].prom_id=0; | |
| 7435 | + } | |
| 7436 | + //-- 如果活动数量大于1个,那么活动就要排序一下,有商品种类数最多排再前面,降序进行排列 -- | |
| 7437 | + if(cx_act_map.length>1){ | |
| 7438 | + //门店分类要排序下 | |
| 7439 | + function compare(a, b) { | |
| 7440 | + var value1 = a.goods.length; | |
| 7441 | + var value2 = b.goods.length; | |
| 7442 | + return value2 - value1; | |
| 7443 | + } | |
| 7444 | + cx_act_map.sort(compare); | |
| 7445 | + } | |
| 7446 | + //-- 能够进行最后计算的活动(包含切换) -- | |
| 7447 | + var can_calc_cx=[]; | |
| 7448 | + //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- | |
| 7449 | + for(var ii=0;ii<cx_act_map.length;ii++){ | |
| 7450 | + | |
| 7451 | + var item_act_map=cx_act_map[ii]; | |
| 7452 | + //如果活动有交集的时候,商品数量一样多(不是完全相同时,就是参与的商品有交集),就按照后台确定的活动顺序 | |
| 7453 | + //如果活动商品数量少的和 活动数量多的 有交集,那么数量少的不显示,也不计算 | |
| 7454 | + //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序 | |
| 7455 | + if(!th.check_ok_cx_pro(item_act_map,can_calc_cx)){ | |
| 7456 | + continue; | |
| 7457 | + } | |
| 7458 | + switch(item_act_map.prom_type){ | |
| 7459 | + case 3: | |
| 7460 | + var fir_act=item_act_map.act.fir_act; | |
| 7461 | + var t_goods=item_act_map.goods; | |
| 7462 | + var all_num=0; | |
| 7463 | + var all_pri=0; | |
| 7464 | + for(var f=0;f<t_goods.length;f++){ | |
| 7465 | + all_num+=t_goods[f].goods_num; | |
| 7466 | + all_pri+=t_goods[f].goods_num*t_goods[f].goods_price; | |
| 7467 | + } | |
| 7468 | + | |
| 7469 | + var yh_ok=1; | |
| 7470 | + switch (fir_act.prom_type){ | |
| 7471 | + case 0: | |
| 7472 | + if(all_pri<fir_act.condition) { | |
| 7473 | + yh_ok=0; | |
| 7474 | + } | |
| 7475 | + break; | |
| 7476 | + case 1: | |
| 7477 | + if(all_num<fir_act.condition) { | |
| 7478 | + yh_ok=0; | |
| 7479 | + } | |
| 7480 | + break; | |
| 7481 | + } | |
| 7482 | + | |
| 7483 | + //-- 如果有满足优惠条件的时候 -- | |
| 7484 | + if(yh_ok){ | |
| 7485 | + can_calc_cx.push(item_act_map) | |
| 7486 | + } | |
| 7487 | + break | |
| 7488 | + | |
| 7489 | + case 7: | |
| 7490 | + //-- 活动列表 -- | |
| 7491 | + var zhact_gdlist=item_act_map.act.gdlist; | |
| 7492 | + var zh_goods=item_act_map.goods; | |
| 7493 | + | |
| 7494 | + //--- 要循环计算一下商品的已购数量 --- | |
| 7495 | + for(var h=0;h<zh_goods.length;h++){ | |
| 7496 | + //-- 商品的限购 -- | |
| 7497 | + var promgoodsbuynum = 0; | |
| 7498 | + var res=await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { | |
| 7499 | + data: { | |
| 7500 | + store_id: os.stoid, | |
| 7501 | + user_id: getApp().globalData.user_id, | |
| 7502 | + goods_id: zh_goods[h].goods_id, | |
| 7503 | + prom_type: 7, | |
| 7504 | + prom_id: item_act_map.prom_id | |
| 7505 | + }, | |
| 7506 | + }) | |
| 7507 | + if(res.data.code==0 && res.data.data && res.data.data.promgoodsbuynum){ | |
| 7508 | + promgoodsbuynum = res.data.data.promgoodsbuynum; | |
| 7509 | + } | |
| 7510 | + zh_goods[h].zh_b_num=promgoodsbuynum; | |
| 7511 | + } | |
| 7512 | + //-- 放到map中 -- | |
| 7513 | + th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist; | |
| 7514 | + if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; | |
| 7515 | + car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; | |
| 7516 | + | |
| 7517 | + var zh_pro0 = null; | |
| 7518 | + //-- 获取活动信息 -- | |
| 7519 | + var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item_act_map.prom_id + "/" + getApp().globalData.user_id; | |
| 7520 | + await getApp().request.promiseGet(url, {}).then(rh => { | |
| 7521 | + zh_pro0 = rh.data.data; | |
| 7522 | + }) | |
| 7523 | + if(!zh_pro0) break; | |
| 7524 | + //当满足组合的要求:总数要满足,起购数要满足 | |
| 7525 | + if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th)){ | |
| 7526 | + can_calc_cx.push(item_act_map) | |
| 7527 | + } | |
| 7528 | + break; | |
| 7529 | + default: | |
| 7530 | + can_calc_cx.push(item_act_map); | |
| 7531 | + } | |
| 7532 | + | |
| 7533 | + } | |
| 7534 | + | |
| 7535 | + //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- | |
| 7536 | + //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- | |
| 7537 | + //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- | |
| 7538 | + var show_can_cx={}; | |
| 7539 | + | |
| 7540 | + if(can_calc_cx.length){ | |
| 7541 | + for(var p=0;p<can_calc_cx.length;p++){ | |
| 7542 | + var ch_map=[]; | |
| 7543 | + can_calc_cx[p].goods.map(function (gd){ | |
| 7544 | + ch_map.push(gd.goods_id); | |
| 7545 | + }) | |
| 7546 | + ch_map.sort(); | |
| 7547 | + //-- 先找一下,有没有参与的商品一模一样的 -- | |
| 7548 | + var fd=show_can_cx[ch_map.join()]; | |
| 7549 | + if(fd){ | |
| 7550 | + //-- 把数组添加进去 --ch_map | |
| 7551 | + fd.act_arr.push(can_calc_cx[p]) | |
| 7552 | + }else{ | |
| 7553 | + var e={ch_map:ch_map,act_arr:[]}; | |
| 7554 | + if(ch_map.length>1){ | |
| 7555 | + e.is_duo_gd=1; | |
| 7556 | + } | |
| 7557 | + e.act_arr.push(can_calc_cx[p]); | |
| 7558 | + show_can_cx[ch_map.join()]=e; | |
| 7559 | + } | |
| 7560 | + } | |
| 7561 | + } | |
| 7562 | + | |
| 7563 | + for(var k in show_can_cx){ | |
| 7564 | + var k_item=show_can_cx[k]; | |
| 7565 | + var ck_prom_type=null; | |
| 7566 | + //-- 如果是多活动,先把活动按照后台的顺序排序一下, | |
| 7567 | + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | |
| 7568 | + if(k_item.act_arr.length>1){ | |
| 7569 | + var json_d =this.data.json_d; | |
| 7570 | + var auto_promote_sale=json_d.auto_promote_sale; | |
| 7571 | + var sort_type=''; | |
| 7572 | + | |
| 7573 | + if(!auto_promote_sale){ | |
| 7574 | + sort_type='prom_type'; | |
| 7575 | + }else{ | |
| 7576 | + var auto_promote_sale=auto_promote_sale.split(','); | |
| 7577 | + //-- 循环处理 -- | |
| 7578 | + k_item.act_arr.map(function (e){ | |
| 7579 | + var fd=auto_promote_sale.indexOf(e.prom_type+''); | |
| 7580 | + e.sort=fd; | |
| 7581 | + }) | |
| 7582 | + sort_type='sort'; | |
| 7583 | + } | |
| 7584 | + //-- 排序一下,进行升序 -- | |
| 7585 | + function comp(a, b) { | |
| 7586 | + return a[sort_type]-b[sort_type]; //升序 | |
| 7587 | + } | |
| 7588 | + //活动要排序一下 | |
| 7589 | + k_item.act_arr.sort(comp); | |
| 7590 | + | |
| 7591 | + //确定一下活动,先看一下有没有选择的活动 | |
| 7592 | + ck_prom_type=k_item.act_arr.find(function (el){ | |
| 7593 | + return el.sele; | |
| 7594 | + }) | |
| 7595 | + | |
| 7596 | + } | |
| 7597 | + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | |
| 7598 | + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | |
| 7599 | + //-- 此时要把购物车中的商品确定活动 -- | |
| 7600 | + for (var b=0; b<ck_prom_type.goods.length;b++){ | |
| 7601 | + //-- 开始查找 -- | |
| 7602 | + var fg=goods.findIndex(function (g_item){ | |
| 7603 | + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | |
| 7604 | + }) | |
| 7605 | + if(fg>-1){ | |
| 7606 | + goods[fg].prom_type=ck_prom_type.prom_type; | |
| 7607 | + goods[fg].prom_id=ck_prom_type.prom_id; | |
| 7608 | + } | |
| 7609 | + } | |
| 7610 | + } | |
| 7611 | + | |
| 7612 | + //-- 显示到前端,并切换 -- | |
| 7613 | + //th.setData({show_can_cx}) | |
| 7614 | + //--- 调用回调函数 --- | |
| 7615 | + func(show_can_cx); | |
| 7616 | + }, | |
| 7617 | + //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- | |
| 7618 | + check_ok_cx_pro(item_act_map,can_calc_cx){ | |
| 7619 | + //-- 加入第一个,返回真 -- | |
| 7620 | + if(!can_calc_cx.length) return true; | |
| 7621 | + var th_goods=item_act_map.goods; | |
| 7622 | + for(var i=0;i<can_calc_cx.length;i++){ | |
| 7623 | + var can_goods=can_calc_cx[i].goods; | |
| 7624 | + //计算一下有交集的数量,没有交集,OK | |
| 7625 | + var num=this.hasJiao(can_goods,th_goods); | |
| 7626 | + if(!num) continue; | |
| 7627 | + //计算一下俩个shu | |
| 7628 | + if(can_goods.length==th_goods.length && can_goods.length==num){ | |
| 7629 | + return true; | |
| 7630 | + } | |
| 7631 | + if(can_goods.length>th_goods.length){ | |
| 7632 | + return false; | |
| 7633 | + } | |
| 7634 | + } | |
| 7635 | + return true; | |
| 7636 | + }, | |
| 7637 | + //-- 判断是不是有交集,返回交集的数量 -- | |
| 7638 | + hasJiao(arr1, arr2){ | |
| 7639 | + var num=0; | |
| 7640 | + arr1.map(function (e){ | |
| 7641 | + var idx=arr2.findIndex(function (g){ | |
| 7642 | + return g.goods_id==e.goods_id; | |
| 7643 | + }) | |
| 7644 | + if(idx>-1) num++; | |
| 7645 | + }) | |
| 7646 | + return num; | |
| 7647 | + }, | |
| 7648 | + | |
| 7649 | + //-- 开始显示活动的弹出 -- | |
| 7650 | + switch_cx_group:function (e){ | |
| 7651 | + var idx=e.currentTarget.dataset.index; | |
| 7652 | + var gd_key=e.currentTarget.dataset.gd_key; | |
| 7653 | + this.data.sele_cx_group_cidx=idx; | |
| 7654 | + this.data.cx_group_gd_key=gd_key; | |
| 7655 | + //-- 获取到-- | |
| 7656 | + var cx_prom_group=this.data.requestData[idx].show_can_cx[gd_key].act_arr; | |
| 7657 | + | |
| 7658 | + var cx_arr=[]; | |
| 7659 | + var find_sele=0; | |
| 7660 | + for (var h=0;h<cx_prom_group.length;h++){ | |
| 7661 | + //-- 看有没有选中的活动 -- | |
| 7662 | + if(cx_prom_group[h].sele){ | |
| 7663 | + find_sele=1; | |
| 7664 | + } | |
| 7665 | + cx_arr.push(cx_prom_group[h].act); | |
| 7666 | + } | |
| 7667 | + //-- 如果没有,就默认第一个为选中 -- | |
| 7668 | + //-- if(!find_sele) cx_arr[0].sele=1; -- | |
| 7669 | + var cp_arr=JSON.parse(JSON.stringify(cx_arr)); | |
| 7670 | + var pro_pop = this.selectComponent("#pro_pop"); //组件的id | |
| 7671 | + pro_pop.set_init(1,cx_arr,1); | |
| 7672 | + }, | |
| 7673 | + | |
| 7674 | + //--- 选择回来时候的选择 --- | |
| 7675 | + sure_cx_group:function(e){ | |
| 7676 | + var sele_idx=e.detail.sele_idx; | |
| 7677 | + var idx=this.data.sele_cx_group_cidx; | |
| 7678 | + var gd_key= this.data.cx_group_gd_key; | |
| 7679 | + //-- 获取到-- | |
| 7680 | + var cx_prom_group=this.data.requestData[idx].show_can_cx[gd_key].act_arr; | |
| 7681 | + | |
| 7682 | + for(var dx=0;dx<cx_prom_group.length;dx++){ | |
| 7683 | + if(dx!=sele_idx) cx_prom_group[dx].sele=0; | |
| 7684 | + else cx_prom_group[dx].sele=1; | |
| 7685 | + } | |
| 7686 | + | |
| 7687 | + //选择后就要把活动确定下来 | |
| 7688 | + | |
| 7689 | + //重新计算价格 | |
| 7690 | + this.calculatePrice(); | |
| 7691 | + | |
| 7352 | 7692 | } |
| 7353 | 7693 | |
| 7694 | + | |
| 7354 | 7695 | }); | ... | ... |
packageE/pages/cart/cart2/cart2.wxml
| 1 | 1 | <!-- 促销弹出框 --> |
| 2 | -<pro_pop id="pro_pop"></pro_pop> | |
| 2 | +<pro_pop id="pro_pop" bind:sure_cx_group="sure_cx_group"></pro_pop> | |
| 3 | 3 | |
| 4 | 4 | <wxs module="filter" src="c_filter.wxs"></wxs> |
| 5 | 5 | <wxs src="filter.wxs" module="util"></wxs> |
| ... | ... | @@ -85,32 +85,85 @@ |
| 85 | 85 | <!-- <view>门店:{{item.pname}}</view> --> |
| 86 | 86 | <view>{{item.pname}}</view> |
| 87 | 87 | </view> |
| 88 | - <view class="order-detail" wx:for="{{item.goods}}" wx:for-index="idx" wx:for-item="items"> | |
| 89 | - <!----商品图片-----> | |
| 90 | - <view class="goods-img" style="position: relative; overflow: hidden" bindtap="go_url" data-url="/pages/goods/goodsInfo/goodsInfo?goods_id={{items.goods_id}}&prom_type={{items.prom_type}}&prom_id={{items.prom_id}}"> | |
| 91 | - <image wx:if="{{items.is_gift}}" src="{{imgUrl}}/miniapp/images/giveaway.png" class="gift_image"></image> | |
| 92 | - <text class="zuhe" wx:if="{{items.prom_type==7}}">组合购</text> | |
| 93 | - <image class="wh100 bdr14" src="{{items.original_img}}" binderror='cart_set_err' data-err='cartlist[{{pidx}}].goods[{{idx}}].original_img'></image> | |
| 94 | - </view> | |
| 95 | - <!----商品名称规格----> | |
| 96 | - <navigator class="order-cont" url="/pages/goods/goodsInfo/goodsInfo?goods_id={{items.goods_id}}&prom_type={{items.prom_type}}&prom_id={{items.prom_id}}"> | |
| 97 | - <view class="goods-name ellipsis-2">{{items.goods_name}}</view> | |
| 98 | - <!-- 商品属性 --> | |
| 99 | - <view class="flex-vertical fs28 color-gray n_guige"> | |
| 100 | - <view class="goods-color"> | |
| 101 | - <block><text>{{filters.show_gui_ge(items.goods_spec,items.goods_color)}}</text></block> | |
| 88 | + | |
| 89 | + <!-- for循环使用 --> | |
| 90 | + <block wx:for="{{item.goods}}" wx:for-index="idx" wx:for-item="items"> | |
| 91 | + <view class="order-detail" > | |
| 92 | + <!----商品图片-----> | |
| 93 | + <view class="goods-img" style="position: relative; overflow: hidden" bindtap="go_url" data-url="/pages/goods/goodsInfo/goodsInfo?goods_id={{items.goods_id}}&prom_type={{items.prom_type}}&prom_id={{items.prom_id}}"> | |
| 94 | + <image wx:if="{{items.is_gift}}" src="{{imgUrl}}/miniapp/images/giveaway.png" class="gift_image"></image> | |
| 95 | + <text class="zuhe" wx:if="{{items.prom_type==7}}">组合购</text> | |
| 96 | + <image class="wh100 bdr14" src="{{items.original_img}}" binderror='cart_set_err' data-err='cartlist[{{pidx}}].goods[{{idx}}].original_img'></image> | |
| 102 | 97 | </view> |
| 98 | + <!----商品名称规格----> | |
| 99 | + <navigator class="order-cont" url="/pages/goods/goodsInfo/goodsInfo?goods_id={{items.goods_id}}&prom_type={{items.prom_type}}&prom_id={{items.prom_id}}"> | |
| 100 | + <view class="goods-name ellipsis-2">{{items.goods_name}}</view> | |
| 101 | + <!-- 商品属性 --> | |
| 102 | + <view class="flex-vertical fs28 color-gray n_guige"> | |
| 103 | + <view class="goods-color"> | |
| 104 | + <block><text>{{filters.show_gui_ge(items.goods_spec,items.goods_color)}}</text></block> | |
| 105 | + </view> | |
| 106 | + </view> | |
| 107 | + | |
| 108 | + <!-----商品名称规格------> | |
| 109 | + <view class="order-num flex-space-between"> | |
| 110 | + <view wx:if="{{items.prom_type==10}}" class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text><text>({{items.discount}}折)</text></view> | |
| 111 | + <view wx:else class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view> | |
| 112 | + <view style="color: red;" wx:if="{{items.use_commission && items.use_commission*1>0}}">佣金:{{filters.toFix(items.use_commission/items.goods_num,2)}}*{{items.goods_num}}</view> | |
| 113 | + <view class="goods-num">x{{items.goods_num}}</view> | |
| 114 | + </view> | |
| 115 | + </navigator> | |
| 103 | 116 | </view> |
| 117 | + <!-- 验证活动是不是多个,要不要显示切换 --> | |
| 118 | + <!-- 新增促销多活动的排版 --> | |
| 119 | + <view class="bdb16" | |
| 120 | + wx:if="{{util.is_more_act(items,item.show_can_cx) && item.show_can_cx[items.goods_id] && item.show_can_cx[items.goods_id].act_arr.length>1}}"> | |
| 121 | + <view bindtap="switch_cx_group" | |
| 122 | + data-index="{{pidx}}" | |
| 123 | + data-gd_key="{{items.goods_id}}" | |
| 124 | + class="cx-frame flex" style="position: relative"> | |
| 125 | + <view class="cx-sizs fs30">促销</view> | |
| 126 | + <view class="flex ai_c f1 pdh20"> | |
| 127 | + <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[items.goods_id].act_arr}}" > | |
| 128 | + <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> | |
| 129 | + <view wx:if="{{item.prom_type==5}}" class="xc-coupon t-c four-level-word">搭配促销</view> | |
| 130 | + <view wx:if="{{item.prom_type==7}}" class="xc-coupon t-c four-level-word">组合购</view> | |
| 131 | + <view wx:if="{{item.prom_type==10}}" class="xc-coupon t-c four-level-word">阶梯促销</view> | |
| 132 | + </view> | |
| 133 | + </view> | |
| 134 | + <view class="cx-obtain-coupon wsize"> | |
| 135 | + <text class="bg_jj"></text> | |
| 136 | + </view> | |
| 137 | + </view> | |
| 138 | + </view> | |
| 139 | + </block> | |
| 104 | 140 | |
| 105 | - <!-----商品名称规格------> | |
| 106 | - <view class="order-num flex-space-between"> | |
| 107 | - <view wx:if="{{items.prom_type==10}}" class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text><text>({{items.discount}}折)</text></view> | |
| 108 | - <view wx:else class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view> | |
| 109 | - <view style="color: red;" wx:if="{{items.use_commission && items.use_commission*1>0}}">佣金:{{filters.toFix(items.use_commission/items.goods_num,2)}}*{{items.goods_num}}</view> | |
| 110 | - <view class="goods-num">x{{items.goods_num}}</view> | |
| 141 | + <!--此时是多个商品参与活动的切换 验证活动是不是多个,要不要显示切换 --> | |
| 142 | + <!-- 新增促销多活动的排版 --> | |
| 143 | + <block wx:if="{{item.show_can_cx}}"> | |
| 144 | + <block wx:for="{{item.show_can_cx}}" wx:for-item="pitem"> | |
| 145 | + <view class="bdb16" wx:if="{{pitem.is_duo_gd && pitem.act_arr.length>1}}" > | |
| 146 | + <view bindtap="switch_cx_group" | |
| 147 | + data-index="{{pidx}}" | |
| 148 | + data-gd_key="{{index}}" | |
| 149 | + class="cx-frame flex" style="position: relative"> | |
| 150 | + <view class="cx-sizs fs30">促销</view> | |
| 151 | + <view class="flex ai_c f1 pdh20"> | |
| 152 | + <view class="xc-coupon-fram" wx:for="{{pitem.act_arr}}" > | |
| 153 | + <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> | |
| 154 | + <view wx:if="{{item.prom_type==5}}" class="xc-coupon t-c four-level-word">搭配促销</view> | |
| 155 | + <view wx:if="{{item.prom_type==7}}" class="xc-coupon t-c four-level-word">组合购</view> | |
| 156 | + <view wx:if="{{item.prom_type==10}}" class="xc-coupon t-c four-level-word">阶梯促销</view> | |
| 157 | + </view> | |
| 158 | + </view> | |
| 159 | + <view class="cx-obtain-coupon wsize"> | |
| 160 | + <text class="bg_jj"></text> | |
| 161 | + </view> | |
| 162 | + </view> | |
| 111 | 163 | </view> |
| 112 | - </navigator> | |
| 113 | - </view> | |
| 164 | + </block> | |
| 165 | + </block> | |
| 166 | + | |
| 114 | 167 | |
| 115 | 168 | <!-- 使用搭配 --> |
| 116 | 169 | <cart_collect_temp id="col{{pidx}}" | ... | ... |
packageE/pages/cart/cart2/cart2.wxss
| ... | ... | @@ -1143,3 +1143,81 @@ margin-left: 20rpx; |
| 1143 | 1143 | font-size: 28rpx; |
| 1144 | 1144 | } |
| 1145 | 1145 | |
| 1146 | + | |
| 1147 | +.cx-frame { | |
| 1148 | + /* border-top:3rpx solid #eee; */ | |
| 1149 | + /* width:99%; | |
| 1150 | + height: 95rpx; | |
| 1151 | + line-height: 95rpx; | |
| 1152 | + padding-left:24rpx; */ | |
| 1153 | + padding: 20rpx; | |
| 1154 | + background-color: #fff; | |
| 1155 | +} | |
| 1156 | + | |
| 1157 | +.cx-frame .cx-sizs { | |
| 1158 | + /* width: 68rpx; */ | |
| 1159 | + /* height: 100%; */ | |
| 1160 | + /* line-height: 100rpx; */ | |
| 1161 | + /* overflow: hidden; */ | |
| 1162 | + /* margin-left: 10rpx; */ | |
| 1163 | +} | |
| 1164 | + | |
| 1165 | +.xc-coupon-fram { | |
| 1166 | + position: relative; | |
| 1167 | + margin-right: 16rpx; | |
| 1168 | + /* width:200rpx; */ | |
| 1169 | + /* padding-top:30rpx; */ | |
| 1170 | + | |
| 1171 | +} | |
| 1172 | + | |
| 1173 | +.xc-coupon-fram .xc-coupon { | |
| 1174 | + /* width:175rpx ; | |
| 1175 | + height: 40rpx; | |
| 1176 | + line-height: 40rpx; */ | |
| 1177 | + background-color: #d60021; | |
| 1178 | + /* margin:0 auto; */ | |
| 1179 | + color: #fff; | |
| 1180 | + padding: 6rpx 20rpx; | |
| 1181 | + | |
| 1182 | +} | |
| 1183 | + | |
| 1184 | +.xc-coupon-fram .xc-circular { | |
| 1185 | + width: 16rpx; | |
| 1186 | + height: 16rpx; | |
| 1187 | + background-color: white; | |
| 1188 | + position: absolute; | |
| 1189 | + top: 50%; | |
| 1190 | + /* left: -10rpx; */ | |
| 1191 | + transform: translateY(-50%); | |
| 1192 | +} | |
| 1193 | + | |
| 1194 | +.cx-obtain-coupon { | |
| 1195 | + /* width: 65rpx; | |
| 1196 | + height: 100%; | |
| 1197 | + padding-left:15rpx; */ | |
| 1198 | + color: #d70025; | |
| 1199 | + display: flex; | |
| 1200 | + align-items: center; | |
| 1201 | + /* position: absolute; | |
| 1202 | + right: 5rpx; */ | |
| 1203 | +} | |
| 1204 | + | |
| 1205 | +.bg_jj { | |
| 1206 | + width: 14rpx; | |
| 1207 | + height: 14rpx; | |
| 1208 | + border-top: 2rpx solid #d70026; | |
| 1209 | + border-right: 2rpx solid #d70026; | |
| 1210 | + transform: rotateZ(45deg); | |
| 1211 | + display: inline-block; | |
| 1212 | + margin-bottom: 3rpx; | |
| 1213 | +} | |
| 1214 | + | |
| 1215 | +.bg_jj.down { | |
| 1216 | + transform: rotateZ(135deg); | |
| 1217 | +} | |
| 1218 | + | |
| 1219 | +.bg_jj.up { | |
| 1220 | + transform: rotateZ(-45deg); | |
| 1221 | + margin-top: 6rpx; | |
| 1222 | +} | |
| 1223 | + | ... | ... |
packageE/pages/cart/cart2/filter.wxs
| ... | ... | @@ -6,6 +6,15 @@ var format = function (text) { |
| 6 | 6 | return text.replace(reg, '\n') |
| 7 | 7 | } |
| 8 | 8 | |
| 9 | + | |
| 10 | +//判断商品是不是有活动切换 | |
| 11 | +function is_more_act(items,show_can_cx){ | |
| 12 | + if([1,2,4,6,8,9].indexOf(items.prom_type)>-1) return false; | |
| 13 | + if(!show_can_cx) return false; | |
| 14 | + return true; | |
| 15 | +} | |
| 16 | + | |
| 9 | 17 | module.exports = { |
| 10 | - format: format | |
| 18 | + format: format, | |
| 19 | + is_more_act:is_more_act | |
| 11 | 20 | } | ... | ... |
packageE/pages/cart/cart2/zh_calculate.js
| ... | ... | @@ -539,6 +539,88 @@ module.exports = { |
| 539 | 539 | } |
| 540 | 540 | } |
| 541 | 541 | return zhqty_bz_flag; |
| 542 | + }, | |
| 543 | + | |
| 544 | + //-- 判断组合购有没有满足 --- | |
| 545 | + ch_zh_ok(act,gdlist,c_goods,th){ | |
| 546 | + //-- 寻找一下 -- | |
| 547 | + function get_num(ite) { | |
| 548 | + for (let v1 in c_goods) { | |
| 549 | + var vh = c_goods[v1]; | |
| 550 | + if (vh.goods_id == ite.goods_id) { | |
| 551 | + return vh; | |
| 552 | + } | |
| 553 | + } | |
| 554 | + return 0; | |
| 555 | + } | |
| 556 | + var goods =gdlist; | |
| 557 | + var all_num=0; | |
| 558 | + var need_to_buy=0; | |
| 559 | + for (var i in goods) { | |
| 560 | + var item = goods[i]; | |
| 561 | + var cart_num = get_num(item).goods_num; | |
| 562 | + var zh_b_num = get_num(item).zh_b_num; | |
| 563 | + if (!cart_num) { | |
| 564 | + if (item.zhqty) { | |
| 565 | + need_to_buy += item.zhqty; | |
| 566 | + } | |
| 567 | + continue; | |
| 568 | + } | |
| 569 | + | |
| 570 | + item.cart_num = cart_num; | |
| 571 | + //-- 当商品有购买的时候,以及有限购的时候 -- | |
| 572 | + if (item.buyqty > 0) { | |
| 573 | + var cbuy = item.buyqty - zh_b_num; | |
| 574 | + var key = item.goods_id + "" + act.id; | |
| 575 | + if (th.data.in_zhact_gdmap_gp[key]) { | |
| 576 | + var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap_gp[key]; | |
| 577 | + } | |
| 578 | + //当可买的数量为0 | |
| 579 | + if (cbuy <= 0) { | |
| 580 | + item.num = 0; | |
| 581 | + } else { | |
| 582 | + if (cbuy >= cart_num) item.num = cart_num; | |
| 583 | + else { | |
| 584 | + item.num = cbuy; | |
| 585 | + } | |
| 586 | + } | |
| 587 | + } else { | |
| 588 | + item.num = cart_num; | |
| 589 | + } | |
| 590 | + | |
| 591 | + if (item.num) { | |
| 592 | + all_num += item.num; | |
| 593 | + //当有起购数的控制的时候 | |
| 594 | + if (item.zhqty) { | |
| 595 | + if (item.num < item.zhqty) { | |
| 596 | + need_to_buy += item.zhqty - item.num; | |
| 597 | + } | |
| 598 | + } | |
| 599 | + } else { | |
| 600 | + if (item.zhqty) { | |
| 601 | + need_to_buy += item.zhqty; | |
| 602 | + } | |
| 603 | + } | |
| 604 | + } | |
| 605 | + | |
| 606 | + //当满足组合的要求:总数要满足,起购数要满足 | |
| 607 | + if (all_num >= act.zhbuyqty && !need_to_buy) { | |
| 608 | + //商品的列表 | |
| 609 | + for (var u in goods) { | |
| 610 | + var ite = goods[u]; | |
| 611 | + if (ite.buyqty > 0 && ite.num > 0) { | |
| 612 | + console.log(222, th.data.in_zhact_gdmap_gp); | |
| 613 | + var key = ite.goods_id + "" + act.id; | |
| 614 | + if (th.data.in_zhact_gdmap_gp[key]) { | |
| 615 | + th.data.in_zhact_gdmap_gp[key] += ite.num; | |
| 616 | + } else { | |
| 617 | + th.data.in_zhact_gdmap_gp[key] = ite.num; | |
| 618 | + } | |
| 619 | + } | |
| 620 | + } | |
| 621 | + return true; | |
| 622 | + } | |
| 623 | + return false; | |
| 542 | 624 | } |
| 543 | 625 | |
| 544 | 626 | ... | ... |
pages/cart/cart/cart.js
| ... | ... | @@ -325,13 +325,13 @@ Page({ |
| 325 | 325 | if (is_state == 1) { |
| 326 | 326 | //-- 按件进行计算 -- |
| 327 | 327 | if (fir_act.prom_type == 1) { |
| 328 | - if (fir_act.condition > item1.goods_num) { | |
| 328 | + if (fir_act.condition <= item1.goods_num) { | |
| 329 | 329 | item1.more_cx.push(push_item); |
| 330 | 330 | } |
| 331 | 331 | }else{ |
| 332 | 332 | //-- 按数量进行计算 -- |
| 333 | 333 | var all_price = item1.goods_price * item1.goods_num; |
| 334 | - if (parseFloat(fir_act.condition) > parseFloat(parseFloat(all_price).toFixed(2))) { | |
| 334 | + if (parseFloat(fir_act.condition) <= parseFloat(parseFloat(all_price).toFixed(2))) { | |
| 335 | 335 | item1.more_cx.push(push_item); |
| 336 | 336 | } |
| 337 | 337 | } |
| ... | ... | @@ -344,6 +344,8 @@ Page({ |
| 344 | 344 | } |
| 345 | 345 | } |
| 346 | 346 | |
| 347 | + console.log(JSON.stringify(item1.more_cx),333); | |
| 348 | + | |
| 347 | 349 | }, |
| 348 | 350 | |
| 349 | 351 | onLoad: function () { | ... | ... |
pages/cart/cart/cart.wxml
| ... | ... | @@ -158,14 +158,14 @@ |
| 158 | 158 | <!-- 新增促销多活动的排版 --> |
| 159 | 159 | <block wx:if="{{item.show_can_cx}}"> |
| 160 | 160 | <block wx:for="{{item.show_can_cx}}" wx:for-item="pitem"> |
| 161 | - <view class="bdb16" wx:if="{{pitem.is_duo_gd}}" > | |
| 161 | + <view class="bdb16" wx:if="{{pitem.is_duo_gd && pitem.act_arr.length>1}}" > | |
| 162 | 162 | <view bindtap="switch_cx_group" |
| 163 | 163 | data-index="{{pidx}}" |
| 164 | 164 | data-gd_key="{{index}}" |
| 165 | 165 | class="cx-frame flex" style="position: relative"> |
| 166 | 166 | <view class="cx-sizs fs30">促销</view> |
| 167 | 167 | <view class="flex ai_c f1 pdh20"> |
| 168 | - <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[index].act_arr}}" > | |
| 168 | + <view class="xc-coupon-fram" wx:for="{{pitem.act_arr}}" > | |
| 169 | 169 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> |
| 170 | 170 | <view wx:if="{{item.prom_type==5}}" class="xc-coupon t-c four-level-word">搭配促销</view> |
| 171 | 171 | <view wx:if="{{item.prom_type==7}}" class="xc-coupon t-c four-level-word">组合购</view> | ... | ... |