Commit 63c20f6408e28284b61ebc286ecaac5f4edabc6f

Authored by yvan.ni
1 parent 8dd423ba

订单促销的bug优化

packageE/pages/cart/cart2/cart2.js
... ... @@ -182,11 +182,10 @@ Page({
182 182  
183 183 //-- 订单促销判断积累 ---2024-2-20
184 184 order_prom_map_ck: {},
185   -
186 185 //能不能使用订单促销
187 186 can_use_ord_prom:{},
  187 + //存储订单促销的取价,按照门店进行索引
188 188 show_ord_prom:{},
189   - join_ord_prom_goodslist:{}
190 189  
191 190 },
192 191  
... ... @@ -954,7 +953,8 @@ Page({
954 953 // }
955 954 // })
956 955  
957   - th.data.cartlist_y =JSON.parse(JSON.stringify(carr)); //存储原始购物车列表
  956 + th.data.cartlist_y =JSON.parse(JSON.stringify(carr)); //存储原始购物车列表,这个数据还会收到污染
  957 + th.data.cartlist_old =JSON.parse(JSON.stringify(carr)); //存储原始购物车列表
958 958 wx.showLoading();
959 959  
960 960 th.get_cart_next(carr);
... ... @@ -1043,16 +1043,25 @@ Page({
1043 1043  
1044 1044 let item1 = carr[i];
1045 1045  
1046   - //如果有户有点击参与订单促销的话,那么可以参与订单促销的商品的活动都要清理成0
1047   - if(this.data.can_use_ord_prom[item.pick_id]){
  1046 + //如果有户有点击参与订单促销的话,那么可以参与订单促销的商品的活动都要清理成0,订单促销在使用过程中的重要方法
  1047 + if(this.data.can_use_ord_prom[item1.pick_id]){
1048 1048 //从订单促销的order_prom_map_ck数据结构中获取到可以参与的商品列表
1049   - let gdlist=this.data.order_prom_map_ck[item.pick_id]?this.data.order_prom_map_ck[item.pick_id].goodsList:null;
  1049 + let gdlist=this.data.order_prom_map_ck[item1.pick_id]?this.data.order_prom_map_ck[item1.pick_id].goodsList:null;
1050 1050 if(gdlist && gdlist.length){
1051 1051 //查找商品item1有没有在gdlist中,就要把商品的prom_type清理0
1052 1052 let f_idx=gdlist.findIndex(function (ele) {
1053 1053 return ele.id == item1.id
1054 1054 });
1055 1055 if (f_idx!=-1){
  1056 + //开始变换商品的价格显示
  1057 + switch (th.data.show_ord_prom[item1.pick_id]){
  1058 + case 1:
  1059 + carr[i].goods_price=item1.shop_price;
  1060 + break;
  1061 + case 2:
  1062 + carr[i].goods_price=item1.goods_market_price;
  1063 + break;
  1064 + }
1056 1065 carr[i].prom_type=0;
1057 1066 continue; //要跳过
1058 1067 }
... ... @@ -1313,11 +1322,8 @@ Page({
1313 1322 if (ie.exp_type == 0 || ie.exp_type == 2) is_a_zt= 0;
1314 1323 }
1315 1324 th.setData({ is_all_zt: is_a_zt});
1316   -
1317 1325 }
1318 1326  
1319   -
1320   -
1321 1327 var cart_commission = 0;
1322 1328 //-- 循环计算一下线下取价 --
1323 1329 for (var k = 0; k < arr.length; k++) {
... ... @@ -3197,8 +3203,6 @@ Page({
3197 3203 }
3198 3204 }
3199 3205  
3200   - //-- 商品是不是没有参与优惠促销的话 --
3201   - th.ch_no_order_prom_map_ck(item[jc],pickid)
3202 3206 }
3203 3207  
3204 3208  
... ... @@ -3575,11 +3579,7 @@ Page({
3575 3579 var order_m = 0;
3576 3580 //么有使用券,或者活动没有限制使用优惠券
3577 3581 if (ord_prom && (quan_price <= 0 || !ord_prom.is_xz_yh)) {
3578   - order_prom_id = ord_prom['id'];
3579   -
3580   - if(ord_prom.discount_field>0){
3581   -
3582   - }else{
  3582 + order_prom_id = ord_prom['id'];
3583 3583 //-- 订单促销是按照实收价格进行计算的时候 --
3584 3584 switch (ord_prom['type']) {
3585 3585 case 0:
... ... @@ -3595,7 +3595,7 @@ Page({
3595 3595 order_prom_amount = ord_prom['expression'];
3596 3596 break;
3597 3597 }
3598   - }
  3598 +
3599 3599 }
3600 3600  
3601 3601 cart_item.order_prom_amount = 0;
... ... @@ -6606,6 +6606,7 @@ Page({
6606 6606 get_cart_quan: async function (order_prom_list_cart) {
6607 6607 var th = this;
6608 6608 var user_id = getApp().globalData.user_id;
  6609 +
6609 6610 //等待值的出现
6610 6611 //getApp().waitfor2(this,"g_cart_q_time","order_prom_list_cart",async function () {
6611 6612 //var arr=th.data.order_prom_list_cart;
... ... @@ -6617,6 +6618,12 @@ Page({
6617 6618 //------------开始计算使用优惠券相关------------
6618 6619 for (var ind in arr) {
6619 6620 var ep = arr[ind];
  6621 +
  6622 + //如果门店订单使用订单促销(此订单促销取价规则不是实收价的时候)
  6623 + if(th.data.can_use_ord_prom[ep.pickup_id]){
  6624 + continue;
  6625 + }
  6626 +
6620 6627 var goodlist = ep.goods;
6621 6628 var pickup_id = ep.pickup_id;
6622 6629 //--更优惠券抵用有关,立即购买的,如果是购物车,如果有等级价还有考虑等级价的东西
... ... @@ -8796,33 +8803,6 @@ Page({
8796 8803 prom_type: item.prom_type
8797 8804 }
8798 8805 pk_ord_map.goodsList.push(ite);
8799   -
8800   - console.log('pk_ord_map');
8801   - console.log(pk_ord_map);
8802   -
8803   - },
8804   -
8805   - //寻找一下商品有没有参与订单促销
8806   - ch_no_order_prom_map_ck(item,pickid){
8807   - var order_prom_map_ck= this.data.order_prom_map_ck;
8808   - if(!order_prom_map_ck[pickid]){
8809   - order_prom_map_ck[pickid]={
8810   - shop_price_all:0, //手店价的累计
8811   - market_price_all:0, //市场价的累计
8812   - goods_price_all:0, //实收价的累计
8813   - no_ord_price:0, //要累计上不参与订单促销的金额
8814   - goodsList:[],
8815   - }
8816   - }
8817   - let pk_ord_map=order_prom_map_ck[pickid];
8818   -
8819   - //快速查找item有没有在goodsList中
8820   - var fg = pk_ord_map.goodsList.findIndex(function (ite){
8821   - return ite.id==item.id
8822   - })
8823   - if(fg==-1){
8824   - pk_ord_map.no_ord_price= item.goods_price * item.goods_num;
8825   - }
8826 8806 },
8827 8807  
8828 8808 //重置订单促销判断累计
... ... @@ -8853,10 +8833,7 @@ Page({
8853 8833 //用于计算订单促销的金额
8854 8834 let calculate_price=0;
8855 8835  
8856   -
8857 8836 let txt1='show_ord_prom['+pickid+']';
8858   - let txt2='join_ord_prom_goodslist['+pickid+']';
8859   -
8860 8837 //-- 此时判断活动的金额满足与否 --
8861 8838 switch (ord_prom.discount_field) {
8862 8839 //实收价的时候
... ... @@ -8872,79 +8849,54 @@ Page({
8872 8849 }
8873 8850 //要显示订单促销使用的按钮
8874 8851 this.setData({
8875   - [txt1]: 1,
8876   - [txt2]:order_prom_map_ck.goodsList //用于筛选商品的价格选手
  8852 + [txt1]: 1
8877 8853 });
8878   - //要用户点击了同意使用订单优惠的按钮后,才允许使用订单优惠
8879   - if (!this.data.can_use_ord_prom) {
8880   - return null;
8881   - }
8882   -
8883   - //计算金额是参与订单促销的金额+不参与订单促销的金额
8884   - calculate_price=order_prom_map_ck.shop_price_all+order_prom_map_ck.no_ord_price;
8885   -
8886 8854 break;
8887 8855 //市场价的时候
8888 8856 case 2:
8889 8857 if (ord_prom.money > order_prom_map_ck.market_price_all){
8890 8858 return null;
8891 8859 }
8892   -
8893   - console.log('aaa');
8894   - console.log(order_prom_map_ck.goodsList);
8895   -
8896 8860 //要显示订单促销使用的按钮
8897 8861 this.setData({
8898   - [txt1]: 2,
8899   - [txt2]:order_prom_map_ck.goodsList //用于筛选商品的价格选手
  8862 + [txt1]: 2
8900 8863 });
8901   - //要用户点击了同意使用订单优惠的按钮后,才允许使用订单优惠
8902   - if (!this.data.can_use_ord_prom) {
8903   - return null;
8904   - }
8905   - //计算金额是参与订单促销的金额+不参与订单促销的金额
8906   - calculate_price = order_prom_map_ck.market_price_all+order_prom_map_ck.no_ord_price;
8907 8864 break;
8908 8865 }
8909   -
8910   - let order_prom_amount=0;
8911   - //如果用户有点击按钮要参与订单促销的时候
8912   - if (calculate_price > 0 && this.data.can_use_ord_prom[pickid]) {
8913   - //-- 订单促销是按照实收价格进行计算的时候 --
8914   - switch (ord_prom['type']) {
8915   - case 0:
8916   - let order_m = Math.round(calculate_price * ord_prom['expression']) / 100;//满额打折
8917   - order_prom_amount = (calculate_price - order_m).toFixed(2);
8918   - break;
8919   - case 1:
8920   - //order_m = o_condition - ord_prom['expression'];//满额优惠金额
8921   - var bs = 1;
8922   - if (ord_prom.is_bz) {
8923   - bs = Math.floor(calculate_price / ord_prom.money);
8924   - }
8925   - order_prom_amount = ord_prom['expression'];
8926   - break;
8927   - }
8928   - //保存到订单促销中,订单促销的金额
8929   - ord_prom.real_order_prom_amount = order_prom_amount;
8930   - ord_prom.real_condition_price = calculate_price;
  8866 + //如果订单促销是不参与订单促销的,那么就直接返回null(订单促销不是实收价的时候)
  8867 + if(ord_prom.discount_field>0 && !this.data.can_use_ord_prom[pickid]){
  8868 + return null;
8931 8869 }
8932 8870 return ord_prom;
8933   -
8934 8871 },
8935 8872  
8936 8873 //设置能够参与订单促销
8937   - set_can_use_ord_prom:function (e){
8938   - let pickid=e.currentTarget.dataset.pd;
8939   - let txt='can_use_ord_prom['+pickid+']';
8940   - let can_use=this.data.can_use_ord_prom[pickid]?this.data.can_use_ord_prom[pickid]:0;
8941   - this.setData({
8942   - [txt]:!can_use
8943   - })
  8874 + set_can_use_ord_prom: function (e) {
  8875 + let pickid = e.currentTarget.dataset.pd;
  8876 + let txt = 'can_use_ord_prom[' + pickid + ']';
  8877 + let can_use = this.data.can_use_ord_prom[pickid] ? this.data.can_use_ord_prom[pickid] : 0;
  8878 + this.setData({
  8879 + [txt]: !can_use
  8880 + })
8944 8881  
8945   - let carr=ut.deep_cp(th.data.cartlist_y);
8946   - //-- 重新计算一下价格 --
8947   - this.get_cart_next(carr);
  8882 + //购物车进行还原,一下数据的清理的必须的
  8883 + let carr = ut.deep_cp(this.data.cartlist_old);
  8884 + this.setData({
  8885 + send_lb: {},
  8886 + month_lb: {},
  8887 + send_gf: {}
  8888 + })
  8889 + //清空优惠促销的内容
  8890 + this.data.prom_goods_map = {};
  8891 + //-- 过滤掉赠品 --
  8892 + let n_carr=[];
  8893 + for (var i = 0; i < carr.length; i++) {
  8894 + if (!carr[i].is_gift) {
  8895 + n_carr.push(carr[i]);
  8896 + }
  8897 + }
  8898 + //-- 重新计算一下价格 --
  8899 + this.get_cart_next(n_carr);
8948 8900 }
8949 8901  
8950 8902  
... ...
packageE/pages/cart/cart2/cart2.wxml
... ... @@ -104,12 +104,10 @@
104 104 <block><text>{{filters.show_gui_ge(items.goods_spec,items.goods_color)}}</text></block>
105 105 </view>
106 106 </view>
107   -
108 107 <!-----商品名称规格------>
109 108 <view class="order-num flex-space-between">
110 109 <!-- 动态显示商品的价格 -->
111   - <view wx:if="{{can_use_ord_prom[item.pickup_id]}}" class="co-red">¥<text class="fs36">{{util.fm_join_ord_prom_price(items,join_ord_prom_goodslist[item.pickup_id],show_ord_prom[item.pickup_id],2)}}</text></view>
112   - <view wx:elif="{{items.prom_type==10}}" class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text><text>({{items.discount}}折)</text></view>
  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>
113 111 <view wx:else class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view>
114 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>
115 113 <view class="goods-num">x{{items.goods_num}}</view>
... ...
packageE/pages/cart/cart2/filter.wxs
... ... @@ -51,48 +51,9 @@ function check_is_last(index,goods_id){
51 51 return false;
52 52 }
53 53  
54   -//-- 用于筛选商品的价格显示 --
55   -function fm_join_ord_prom_price(gd,join_gd_list,show_ord_prom,count){
56   - var price=gd.goods_price;
57   -
58   - console.log('1111');
59   - console.log(gd.id);
60   -
61   - //在join_gd_list中查找是否已经存在gd商品,靠购物车的id来判断
62   - for(var i=0;i<join_gd_list.length;i++){
63   - var jgd=join_gd_list[i];
64   -
65   - console.log(jgd.id);
66   -
67   -
68   - if(jgd.id==gd.id){
69   -
70   - console.log('yyy');
71   -
72   -
73   - switch (show_ord_prom){
74   - case 1:
75   - price=gd.shop_price;
76   - break;
77   - case 2:
78   - price=gd.goods_market_price;
79   - break;
80   - }
81   - break;
82   - }
83   - }
84   - if (!price) {
85   - return parseFloat(0).toFixed(count);
86   - }
87   - price = parseFloat(price);
88   - return price.toFixed(count);
89   -}
90   -
91   -
92 54 module.exports = {
93 55 format: format,
94 56 is_more_act:is_more_act,
95 57 check_show:check_show,
96 58 check_is_last:check_is_last,
97   - fm_join_ord_prom_price:fm_join_ord_prom_price,
98 59 }
... ...