Commit 63c20f6408e28284b61ebc286ecaac5f4edabc6f
1 parent
8dd423ba
订单促销的bug优化
Showing
3 changed files
with
55 additions
and
144 deletions
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 | } | ... | ... |