From e2015e88c3fb95c9d11dbb0e15ad21b7c843f413 Mon Sep 17 00:00:00 2001 From: yvan.ni Date: Tue, 18 Apr 2023 14:51:11 +0800 Subject: [PATCH] 优惠促销多活动的后台优化 --- packageE/pages/cart/cart2/cart2.js | 395 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- packageE/pages/cart/cart2/cart2.wxml | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------- packageE/pages/cart/cart2/cart2.wxss | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ packageE/pages/cart/cart2/filter.wxs | 11 ++++++++++- packageE/pages/cart/cart2/zh_calculate.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pages/cart/cart/cart.js | 6 ++++-- pages/cart/cart/cart.wxml | 4 ++-- pages/cart/cart/cart.wxss | 1 + 8 files changed, 621 insertions(+), 55 deletions(-) diff --git a/packageE/pages/cart/cart2/cart2.js b/packageE/pages/cart/cart2/cart2.js index 3c0daf9..2a2f12e 100644 --- a/packageE/pages/cart/cart2/cart2.js +++ b/packageE/pages/cart/cart2/cart2.js @@ -678,10 +678,9 @@ Page({ }, - //获取促销活动的组合 - cx_prom_group(prom_list){ + //-- 获取促销活动的组合 -- + cx_prom_group(prom_list,item1){ var th=this; - //需要读者系统顺序 var json_d =this.data.json_d; var auto_promote_sale=json_d.auto_promote_sale; @@ -691,10 +690,13 @@ Page({ sort_type='prom_type'; }else{ var auto_promote_sale=auto_promote_sale.split(','); - //-- 循环处理 -- + //--- 循环处理 --- prom_list.map(function (e){ var fd=auto_promote_sale.indexOf(e.prom_type+''); e.sort=fd; + if(e.prom_type==item1.prom_type){ + e.sele=1; + } }) sort_type='sort'; } @@ -703,7 +705,6 @@ Page({ function comp(a, b) { return a[sort_type]-b[sort_type]; //升序 } - //使用sort排序 prom_list.sort(comp); }, @@ -750,25 +751,10 @@ Page({ //-- 判断组合购是总数量是不是存在 -- var no_zh_num={}; - //-------- 如果是立即购买过来的时候 或者购买的商品只有一种的时候 --- - if(carr.length==1){ - var item1=carr[0]; - await th.buy_pro_group(item1,1); - - if(item1.more_cx){ - //-- 对活动进行排序 -- - th.cx_prom_group(item1.more_cx); - } - - if(item1.prom_type==0){ - item1.prom_type=item1.more_cx[0].prom_type; - item1.prom_type=item1.more_cx[0].prom_id; - } - } - - for (var i = 0; i < carr.length; i++) { var item1 = carr[i]; + //-- 获取一下商品的所有活动 -- + await th.buy_pro_group(item1); //把已经购买了多少见的内容填入 var goodsbuynum = 0, promgoodsbuynum = 0; //--要获得商品,该用户买了多少件,同步应用-- @@ -1153,6 +1139,13 @@ Page({ //-- 循环计算一下线下取价 -- for (var k = 0; k < arr.length; k++) { var c_item = arr[k]; + + //-- 要进行归类一下活动 -- + await th.cart_cx_group(arr[k].goods,c_item,(show_can_cx)=>{ + arr[k].show_can_cx=show_can_cx; + }) + + var item = arr[k].goods; var offline_price = 0; var offline_num = 0; @@ -1201,8 +1194,7 @@ Page({ await getApp().request.promisePost("/api/weshop/order/getrebateSum", { is_json: 1, data: req_d }).then(rs => { - - if (rs.data.code == 0) back_data = rs.data.data; + if (rs.data.code == 0) back_data = rs.data.data; }); if (back_data && parseFloat(back_data)) { @@ -1876,7 +1868,7 @@ Page({ if (is_zh_ok) { //-- 组合的数组填充一下 -- - th.data.zuhe_map[zh_pro0.id] = zh_pro0; + th.data.zhhe_act_map[zh_pro0.id] = zh_pro0; var url1 = "/api/weshop/prom/zhbuyGoods/page"; var req_data = { @@ -2071,13 +2063,13 @@ Page({ if (is_state == 1) { //-- 按件进行计算 -- if (fir_act.prom_type == 1) { - if (fir_act.condition > item1.goods_num) { + if (fir_act.condition <= item1.goods_num) { item1.more_cx.push(push_item); } }else{ //-- 按数量进行计算 -- var all_price = item1.goods_price * item1.goods_num; - if (parseFloat(fir_act.condition) > parseFloat(parseFloat(all_price).toFixed(2))) { + if (parseFloat(fir_act.condition) <= parseFloat(parseFloat(all_price).toFixed(2))) { item1.more_cx.push(push_item); } } @@ -7349,6 +7341,355 @@ Page({ } } return false; + }, + + + //-- 判读一下促销分组的问题 -- + async cart_cx_group(goods,car_item,func){ + + //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 + if(this.data.change_act){ + var show_can_cx=car_item.show_can_cx; + for(var k in show_can_cx){ + var k_item=show_can_cx[k]; + var ck_prom_type=null; + //-- 如果是多活动,先把活动按照后台的顺序排序一下, + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- + if(k_item.act_arr.length>1){ + var json_d =this.data.json_d; + var auto_promote_sale=json_d.auto_promote_sale; + var sort_type=''; + + if(!auto_promote_sale){ + sort_type='prom_type'; + }else{ + var auto_promote_sale=auto_promote_sale.split(','); + //-- 循环处理 -- + k_item.act_arr.map(function (e){ + var fd=auto_promote_sale.indexOf(e.prom_type+''); + e.sort=fd; + }) + sort_type='sort'; + } + //-- 排序一下,进行升序 -- + function comp(a, b) { + return a[sort_type]-b[sort_type]; //升序 + } + //活动要排序一下 + k_item.act_arr.sort(comp); + + //确定一下活动,先看一下有没有选择的活动 + ck_prom_type=k_item.act_arr.find(function (el){ + return el.sele; + }) + + } + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; + + //-- 此时要把购物车中的商品确定活动 -- + for (var b=0; b-1; + }) + if(fg>-1){ + goods[fg].prom_type=ck_prom_type.prom_type; + goods[fg].prom_id=ck_prom_type.prom_id; + } + } + + } + func(show_can_cx); + return false; + } + + var th=this; + //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 --- + var cx_act_map=[]; + for(var i=0; i-1) continue; + + //-- 把活动进行规整 -- + var more_cx=c_item.more_cx; + for (var j=0;j1){ + //门店分类要排序下 + function compare(a, b) { + var value1 = a.goods.length; + var value2 = b.goods.length; + return value2 - value1; + } + cx_act_map.sort(compare); + } + //-- 能够进行最后计算的活动(包含切换) -- + var can_calc_cx=[]; + //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- + for(var ii=0;ii { + zh_pro0 = rh.data.data; + }) + if(!zh_pro0) break; + //当满足组合的要求:总数要满足,起购数要满足 + if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th)){ + can_calc_cx.push(item_act_map) + } + break; + default: + can_calc_cx.push(item_act_map); + } + + } + + //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- + //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- + //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- + var show_can_cx={}; + + if(can_calc_cx.length){ + for(var p=0;p1){ + e.is_duo_gd=1; + } + e.act_arr.push(can_calc_cx[p]); + show_can_cx[ch_map.join()]=e; + } + } + } + + for(var k in show_can_cx){ + var k_item=show_can_cx[k]; + var ck_prom_type=null; + //-- 如果是多活动,先把活动按照后台的顺序排序一下, + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- + if(k_item.act_arr.length>1){ + var json_d =this.data.json_d; + var auto_promote_sale=json_d.auto_promote_sale; + var sort_type=''; + + if(!auto_promote_sale){ + sort_type='prom_type'; + }else{ + var auto_promote_sale=auto_promote_sale.split(','); + //-- 循环处理 -- + k_item.act_arr.map(function (e){ + var fd=auto_promote_sale.indexOf(e.prom_type+''); + e.sort=fd; + }) + sort_type='sort'; + } + //-- 排序一下,进行升序 -- + function comp(a, b) { + return a[sort_type]-b[sort_type]; //升序 + } + //活动要排序一下 + k_item.act_arr.sort(comp); + + //确定一下活动,先看一下有没有选择的活动 + ck_prom_type=k_item.act_arr.find(function (el){ + return el.sele; + }) + + } + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; + //-- 此时要把购物车中的商品确定活动 -- + for (var b=0; b-1; + }) + if(fg>-1){ + goods[fg].prom_type=ck_prom_type.prom_type; + goods[fg].prom_id=ck_prom_type.prom_id; + } + } + } + + //-- 显示到前端,并切换 -- + //th.setData({show_can_cx}) + //--- 调用回调函数 --- + func(show_can_cx); + }, + //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- + check_ok_cx_pro(item_act_map,can_calc_cx){ + //-- 加入第一个,返回真 -- + if(!can_calc_cx.length) return true; + var th_goods=item_act_map.goods; + for(var i=0;ith_goods.length){ + return false; + } + } + return true; + }, + //-- 判断是不是有交集,返回交集的数量 -- + hasJiao(arr1, arr2){ + var num=0; + arr1.map(function (e){ + var idx=arr2.findIndex(function (g){ + return g.goods_id==e.goods_id; + }) + if(idx>-1) num++; + }) + return num; + }, + + //-- 开始显示活动的弹出 -- + switch_cx_group:function (e){ + var idx=e.currentTarget.dataset.index; + var gd_key=e.currentTarget.dataset.gd_key; + this.data.sele_cx_group_cidx=idx; + this.data.cx_group_gd_key=gd_key; + //-- 获取到-- + var cx_prom_group=this.data.requestData[idx].show_can_cx[gd_key].act_arr; + + var cx_arr=[]; + var find_sele=0; + for (var h=0;h - + @@ -85,32 +85,85 @@ {{item.pname}} - - - - - 组合购 - - - - - {{items.goods_name}} - - - - {{filters.show_gui_ge(items.goods_spec,items.goods_color)}} + + + + + + + + 组合购 + + + + {{items.goods_name}} + + + + {{filters.show_gui_ge(items.goods_spec,items.goods_color)}} + + + + + + {{filters.toFix(items.goods_price,2)}}({{items.discount}}折) + {{filters.toFix(items.goods_price,2)}} + 佣金:{{filters.toFix(items.use_commission/items.goods_num,2)}}*{{items.goods_num}} + x{{items.goods_num}} + + + + + + + 促销 + + + 优惠促销 + 搭配促销 + 组合购 + 阶梯促销 + + + + + + + + - - - {{filters.toFix(items.goods_price,2)}}({{items.discount}}折) - {{filters.toFix(items.goods_price,2)}} - 佣金:{{filters.toFix(items.use_commission/items.goods_num,2)}}*{{items.goods_num}} - x{{items.goods_num}} + + + + + + + 促销 + + + 优惠促销 + 搭配促销 + 组合购 + 阶梯促销 + + + + + + - - + + + -1) return false; + if(!show_can_cx) return false; + return true; +} + module.exports = { - format: format + format: format, + is_more_act:is_more_act } diff --git a/packageE/pages/cart/cart2/zh_calculate.js b/packageE/pages/cart/cart2/zh_calculate.js index 69e525a..d4697f1 100644 --- a/packageE/pages/cart/cart2/zh_calculate.js +++ b/packageE/pages/cart/cart2/zh_calculate.js @@ -539,6 +539,88 @@ module.exports = { } } return zhqty_bz_flag; + }, + + //-- 判断组合购有没有满足 --- + ch_zh_ok(act,gdlist,c_goods,th){ + //-- 寻找一下 -- + function get_num(ite) { + for (let v1 in c_goods) { + var vh = c_goods[v1]; + if (vh.goods_id == ite.goods_id) { + return vh; + } + } + return 0; + } + var goods =gdlist; + var all_num=0; + var need_to_buy=0; + for (var i in goods) { + var item = goods[i]; + var cart_num = get_num(item).goods_num; + var zh_b_num = get_num(item).zh_b_num; + if (!cart_num) { + if (item.zhqty) { + need_to_buy += item.zhqty; + } + continue; + } + + item.cart_num = cart_num; + //-- 当商品有购买的时候,以及有限购的时候 -- + if (item.buyqty > 0) { + var cbuy = item.buyqty - zh_b_num; + var key = item.goods_id + "" + act.id; + if (th.data.in_zhact_gdmap_gp[key]) { + var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap_gp[key]; + } + //当可买的数量为0 + if (cbuy <= 0) { + item.num = 0; + } else { + if (cbuy >= cart_num) item.num = cart_num; + else { + item.num = cbuy; + } + } + } else { + item.num = cart_num; + } + + if (item.num) { + all_num += item.num; + //当有起购数的控制的时候 + if (item.zhqty) { + if (item.num < item.zhqty) { + need_to_buy += item.zhqty - item.num; + } + } + } else { + if (item.zhqty) { + need_to_buy += item.zhqty; + } + } + } + + //当满足组合的要求:总数要满足,起购数要满足 + if (all_num >= act.zhbuyqty && !need_to_buy) { + //商品的列表 + for (var u in goods) { + var ite = goods[u]; + if (ite.buyqty > 0 && ite.num > 0) { + console.log(222, th.data.in_zhact_gdmap_gp); + var key = ite.goods_id + "" + act.id; + if (th.data.in_zhact_gdmap_gp[key]) { + th.data.in_zhact_gdmap_gp[key] += ite.num; + } else { + th.data.in_zhact_gdmap_gp[key] = ite.num; + } + } + } + return true; + } + return false; } diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index 84d0099..bc1efa8 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -325,13 +325,13 @@ Page({ if (is_state == 1) { //-- 按件进行计算 -- if (fir_act.prom_type == 1) { - if (fir_act.condition > item1.goods_num) { + if (fir_act.condition <= item1.goods_num) { item1.more_cx.push(push_item); } }else{ //-- 按数量进行计算 -- var all_price = item1.goods_price * item1.goods_num; - if (parseFloat(fir_act.condition) > parseFloat(parseFloat(all_price).toFixed(2))) { + if (parseFloat(fir_act.condition) <= parseFloat(parseFloat(all_price).toFixed(2))) { item1.more_cx.push(push_item); } } @@ -344,6 +344,8 @@ Page({ } } + console.log(JSON.stringify(item1.more_cx),333); + }, onLoad: function () { diff --git a/pages/cart/cart/cart.wxml b/pages/cart/cart/cart.wxml index 8a70175..2e76e99 100644 --- a/pages/cart/cart/cart.wxml +++ b/pages/cart/cart/cart.wxml @@ -158,14 +158,14 @@ - + 促销 - + 优惠促销 搭配促销 组合购 diff --git a/pages/cart/cart/cart.wxss b/pages/cart/cart/cart.wxss index c06eba5..20979b5 100644 --- a/pages/cart/cart/cart.wxss +++ b/pages/cart/cart/cart.wxss @@ -401,6 +401,7 @@ page { } + .cx-frame { /* border-top:3rpx solid #eee; */ /* width:99%; -- libgit2 0.21.4