Commit 8dd423ba924d4a6bbd158e8cdb17027a62cbcaa4
1 parent
c608a345
确认订单页面的优化
Showing
3 changed files
with
167 additions
and
40 deletions
packageE/pages/cart/cart2/cart2.js
... | ... | @@ -181,13 +181,12 @@ Page({ |
181 | 181 | yhcx_buy_map:{}, |
182 | 182 | |
183 | 183 | //-- 订单促销判断积累 ---2024-2-20 |
184 | - order_prom_map_ck: { | |
185 | - shop_price_all:0, //手店价的累计 | |
186 | - market_price_all:0, //市场价的累计 | |
187 | - goods_price_all:0, //实收价的累计 | |
188 | - no_ord_price:0, //要累计上不参与订单促销的金额 | |
189 | - goodsList:[], | |
190 | - }, | |
184 | + order_prom_map_ck: {}, | |
185 | + | |
186 | + //能不能使用订单促销 | |
187 | + can_use_ord_prom:{}, | |
188 | + show_ord_prom:{}, | |
189 | + join_ord_prom_goodslist:{} | |
191 | 190 | |
192 | 191 | }, |
193 | 192 | |
... | ... | @@ -1043,6 +1042,23 @@ Page({ |
1043 | 1042 | for (var i = 0; i < carr.length; i++) { |
1044 | 1043 | |
1045 | 1044 | let item1 = carr[i]; |
1045 | + | |
1046 | + //如果有户有点击参与订单促销的话,那么可以参与订单促销的商品的活动都要清理成0 | |
1047 | + if(this.data.can_use_ord_prom[item.pick_id]){ | |
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; | |
1050 | + if(gdlist && gdlist.length){ | |
1051 | + //查找商品item1有没有在gdlist中,就要把商品的prom_type清理0 | |
1052 | + let f_idx=gdlist.findIndex(function (ele) { | |
1053 | + return ele.id == item1.id | |
1054 | + }); | |
1055 | + if (f_idx!=-1){ | |
1056 | + carr[i].prom_type=0; | |
1057 | + continue; //要跳过 | |
1058 | + } | |
1059 | + } | |
1060 | + } | |
1061 | + | |
1046 | 1062 | //如果不是活动的时候,不是代发商品的时候,不是赠品的时候,不是阶梯商品拆分的,不是组合购拆分的 |
1047 | 1063 | if([1, 2, 4, 6, 8, 9].indexOf(item1.prom_type)== -1 && !item1.whsle_id |
1048 | 1064 | && !item1.is_gift && !item1.is_ld_split && !item1.is_zh_split ){ |
... | ... | @@ -3058,6 +3074,8 @@ Page({ |
3058 | 3074 | |
3059 | 3075 | var no_order_yh = 0; //-- 有些活动不能和订单优惠叠加的金额 -- |
3060 | 3076 | var no_post_temp = 0; //-- 有些活动不能和包邮模板的金额 -- |
3077 | + var no_post_temp_shop_price = 0; //-- 有些活动不能和包邮模板的金额 --因为订单促销有手店价取价 | |
3078 | + var no_post_temp_market_price = 0; //-- 有些活动不能和包邮模板的金额 --因为订单促销有市场价取价 | |
3061 | 3079 | |
3062 | 3080 | if (th.data.using_quan[pickid] != null && th.data.using_quan[pickid] != undefined) |
3063 | 3081 | quan_no = th.data.using_quan[pickid].coupon_no; |
... | ... | @@ -3114,15 +3132,22 @@ Page({ |
3114 | 3132 | |
3115 | 3133 | |
3116 | 3134 | var whsle_goods_price = 0; |
3135 | + var whsle_shop_price = 0; | |
3136 | + var whsle_market_price = 0; | |
3137 | + | |
3117 | 3138 | var no_zh_all_quan_num=0; //不是组合购商品的使用的优惠券综合 |
3118 | 3139 | |
3119 | 3140 | //--------循环计算总价----------- |
3120 | 3141 | for (var jc = 0; jc < item.length; jc++) { |
3121 | 3142 | |
3143 | + if (item[jc].prom_type == 0) { //如果item的prom_type==0,没有如果活动的时候 | |
3144 | + th.get_order_prom_map_ck(item,pickid); | |
3145 | + } | |
3146 | + | |
3122 | 3147 | if (item[jc].whsle_id > 0) { |
3123 | 3148 | whsle_goods_price += item[jc].goods_price * item[jc].goods_num; |
3124 | - }else if (item[jc].prom_type == 0) { //如果item的prom_type==0,没有如果活动的时候 | |
3125 | - th.get_order_prom_map_ck(item); | |
3149 | + whsle_shop_price += item[jc].shop_price * item[jc].goods_num; | |
3150 | + whsle_market_price += item[jc].goods_market_price * item[jc].goods_num; | |
3126 | 3151 | } |
3127 | 3152 | |
3128 | 3153 | var is_no_zh = 0; |
... | ... | @@ -3132,13 +3157,13 @@ Page({ |
3132 | 3157 | if (item[jc].prom_type == 7 && th.data.zhhe_act_map && th.data.zhhe_act_map[item[jc].prom_id] |
3133 | 3158 | && th.data.zhhe_act_map[item[jc].prom_id].is_orderyh) { |
3134 | 3159 | is_no_zh = 1; |
3135 | - th.get_order_prom_map_ck(item); //有订单优惠叠加的时候,就要构建数据解救 | |
3160 | + th.get_order_prom_map_ck(item[jc],pickid); //有订单优惠叠加的时候,就要构建数据解救 | |
3136 | 3161 | } |
3137 | 3162 | //阶梯购的商品,且有订单优惠的叠加,is_orderyh就是优惠叠加,就要累积阶梯促销的金额 |
3138 | 3163 | if (item[jc].prom_type == 10 && ladder_prom_goods && ladder_prom_goods[item[jc].prom_id] |
3139 | 3164 | && th.data.ladder_map[item[jc].prom_id].is_useorderyh) { |
3140 | 3165 | is_no_zh = 1; |
3141 | - th.get_order_prom_map_ck(item); //有订单优惠叠加的时候,就要构建数据解救 | |
3166 | + th.get_order_prom_map_ck(item[jc],pickid); //有订单优惠叠加的时候,就要构建数据解救 | |
3142 | 3167 | } |
3143 | 3168 | |
3144 | 3169 | if (is_no_zh) { |
... | ... | @@ -3161,16 +3186,23 @@ Page({ |
3161 | 3186 | } |
3162 | 3187 | //参与订单促销的时候 |
3163 | 3188 | if(item[jc].is_order_yh && !item[jc].whsle_id && item[jc].prom_type!=7 && item[jc].prom_type!=10){ |
3164 | - th.get_order_prom_map_ck(item); //有订单优惠叠加的时候,就要构建数据解救 | |
3189 | + th.get_order_prom_map_ck(item[jc],pickid); //有订单优惠叠加的时候,就要构建数据解救 | |
3165 | 3190 | } |
3166 | 3191 | |
3167 | 3192 | if(!item[jc].is_post_temp){ |
3168 | 3193 | no_post_temp+=gd_price * item[jc].goods_num; |
3194 | + no_post_temp_shop_price+=item[jc].shop_price * item[jc].goods_num; | |
3195 | + no_post_temp_market_price+=item[jc].goods_market_price * item[jc].goods_num; | |
3169 | 3196 | if(item[jc].quan_num) no_post_temp-=item[jc].quan_num; //券要把他补回去 |
3170 | 3197 | } |
3171 | 3198 | } |
3199 | + | |
3200 | + //-- 商品是不是没有参与优惠促销的话 -- | |
3201 | + th.ch_no_order_prom_map_ck(item[jc],pickid) | |
3172 | 3202 | } |
3173 | 3203 | |
3204 | + | |
3205 | + | |
3174 | 3206 | //判断是不是有组合购的金额 |
3175 | 3207 | var f_o_price = o_price; |
3176 | 3208 | //如果又优惠的钱,就要减价 |
... | ... | @@ -3250,7 +3282,16 @@ Page({ |
3250 | 3282 | } |
3251 | 3283 | |
3252 | 3284 | //判断订单促销的实收价的累计 |
3253 | - this.data.order_prom_map_ck.goods_price_all=ord_prom_condition; | |
3285 | + if(!this.data.order_prom_map_ck[pickid]){ | |
3286 | + this.data.order_prom_map_ck[pickid]={ | |
3287 | + shop_price_all:0, //手店价的累计 | |
3288 | + market_price_all:0, //市场价的累计 | |
3289 | + goods_price_all:0, //实收价的累计 | |
3290 | + no_ord_price:0, //要累计上不参与订单促销的金额 | |
3291 | + goodsList:[], | |
3292 | + } | |
3293 | + } | |
3294 | + this.data.order_prom_map_ck[pickid].goods_price_all=ord_prom_condition; | |
3254 | 3295 | //---判断是不是有订单优惠--- |
3255 | 3296 | // await getApp().request.promiseGet("/api/weshop/promorder/getOrderPromotion", { |
3256 | 3297 | // data: { store_id: os.stoid, orderAmount: parseFloat(ord_prom_condition).toFixed(2), user_id: getApp().globalData.user_id } |
... | ... | @@ -3260,7 +3301,7 @@ Page({ |
3260 | 3301 | // } |
3261 | 3302 | // }) |
3262 | 3303 | //获取当前时间段的进行中的订单促销 |
3263 | - ord_prom=await th.get_cur_ord_prom(); | |
3304 | + ord_prom=await th.get_cur_ord_prom(pickid); | |
3264 | 3305 | |
3265 | 3306 | //如果有使用优惠券,如何订单促销有控制使用优惠券不参与此活动的话 |
3266 | 3307 | if(quan_price>0 && ord_prom && ord_prom.is_xz_yh ){ |
... | ... | @@ -3320,17 +3361,16 @@ Page({ |
3320 | 3361 | let user_addr = th.data.user_addr; |
3321 | 3362 | let c_wuliu=parseFloat(o_price - quan_price - whsle_goods_price - no_post_temp).toFixed(2); |
3322 | 3363 | |
3364 | + //-- 因为订单促销的取价规则,所以要判断一下各种情况 -- | |
3323 | 3365 | switch (ord_prom && ord_prom.discount_field){ |
3324 | 3366 | case 1: |
3325 | - | |
3367 | + c_wuliu=parseFloat(ord_prom.real_condition_price - whsle_shop_price - no_post_temp_shop_price).toFixed(2); | |
3326 | 3368 | break; |
3327 | 3369 | case 2: |
3328 | - | |
3329 | - | |
3370 | + c_wuliu=parseFloat(ord_prom.real_condition_price - whsle_market_price - no_post_temp_market_price).toFixed(2); | |
3330 | 3371 | break; |
3331 | 3372 | } |
3332 | 3373 | |
3333 | - | |
3334 | 3374 | var req_d = { |
3335 | 3375 | province: user_addr.province, city: user_addr.city, district: user_addr.district, |
3336 | 3376 | wuliu: c_wuliu, store_id: os.stoid |
... | ... | @@ -8732,31 +8772,69 @@ Page({ |
8732 | 8772 | }, |
8733 | 8773 | |
8734 | 8774 | //---订单促销累计的数据结构的构建,购物车计算流程的那一部分 |
8735 | - get_order_prom_map_ck(item) { | |
8736 | - this.data.order_prom_map_ck.shop_price_all += item.shop_price * item.goods_num; | |
8737 | - this.data.order_prom_map_ck.market_price_all += item.goods_market_price * item.goods_num; | |
8775 | + get_order_prom_map_ck(item,pickid) { | |
8776 | + | |
8777 | + var order_prom_map_ck= this.data.order_prom_map_ck; | |
8778 | + if(!order_prom_map_ck[pickid]){ | |
8779 | + order_prom_map_ck[pickid]={ | |
8780 | + shop_price_all:0, //手店价的累计 | |
8781 | + market_price_all:0, //市场价的累计 | |
8782 | + goods_price_all:0, //实收价的累计 | |
8783 | + no_ord_price:0, //要累计上不参与订单促销的金额 | |
8784 | + goodsList:[], | |
8785 | + } | |
8786 | + } | |
8787 | + | |
8788 | + let pk_ord_map=order_prom_map_ck[pickid]; | |
8789 | + pk_ord_map.shop_price_all += item.shop_price * item.goods_num; | |
8790 | + pk_ord_map.market_price_all += item.goods_market_price * item.goods_num; | |
8791 | + | |
8738 | 8792 | let ite = { |
8739 | 8793 | id: item.id, |
8740 | 8794 | goods_id: item.goods_id, |
8741 | 8795 | goods_num: item.goods_num, |
8742 | 8796 | prom_type: item.prom_type |
8743 | 8797 | } |
8744 | - this.data.order_prom_map_ck.goodsList.push(item); | |
8798 | + 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 | + } | |
8745 | 8826 | }, |
8746 | 8827 | |
8747 | 8828 | //重置订单促销判断累计 |
8748 | 8829 | re_set_order_prom_map_ck() { |
8749 | - this.data.order_prom_map_ck = { | |
8750 | - shop_price_all: 0, //手店价的累计 | |
8751 | - market_price_all: 0, //市场价的累计 | |
8752 | - goodsList: [], | |
8753 | - } | |
8830 | + this.data.order_prom_map_ck = {} | |
8754 | 8831 | }, |
8755 | 8832 | |
8756 | 8833 | //获取当前进行中订单促销,同时带入相应的金额判断订单促销是不是运行,同时订单促销的条件不是实收价判断的话,默认的时候,订单促销是不参与运算的 |
8757 | - async get_cur_ord_prom() { | |
8834 | + async get_cur_ord_prom(pickid) { | |
8758 | 8835 | let ord_prom = null; |
8759 | - let order_prom_map_ck = this.data.order_prom_map_ck; | |
8836 | + let order_prom_map_ck = this.data.order_prom_map_ck[pickid]; | |
8837 | + if(!order_prom_map_ck) return null; | |
8760 | 8838 | |
8761 | 8839 | //获取当前进行中的优惠促销 |
8762 | 8840 | await getApp().request.promiseGet("/api/weshop/promorder/getPromOrder", { |
... | ... | @@ -8774,6 +8852,11 @@ Page({ |
8774 | 8852 | if (!ord_prom) return null; |
8775 | 8853 | //用于计算订单促销的金额 |
8776 | 8854 | let calculate_price=0; |
8855 | + | |
8856 | + | |
8857 | + let txt1='show_ord_prom['+pickid+']'; | |
8858 | + let txt2='join_ord_prom_goodslist['+pickid+']'; | |
8859 | + | |
8777 | 8860 | //-- 此时判断活动的金额满足与否 -- |
8778 | 8861 | switch (ord_prom.discount_field) { |
8779 | 8862 | //实收价的时候 |
... | ... | @@ -8789,14 +8872,16 @@ Page({ |
8789 | 8872 | } |
8790 | 8873 | //要显示订单促销使用的按钮 |
8791 | 8874 | this.setData({ |
8792 | - show_ord_prom: 1, | |
8793 | - join_ord_prom_goodslist:order_prom_map_ck.goodsList //用于筛选商品的价格选手 | |
8875 | + [txt1]: 1, | |
8876 | + [txt2]:order_prom_map_ck.goodsList //用于筛选商品的价格选手 | |
8794 | 8877 | }); |
8795 | 8878 | //要用户点击了同意使用订单优惠的按钮后,才允许使用订单优惠 |
8796 | 8879 | if (!this.data.can_use_ord_prom) { |
8797 | 8880 | return null; |
8798 | 8881 | } |
8799 | - calculate_price=order_prom_map_ck.shop_price_all; | |
8882 | + | |
8883 | + //计算金额是参与订单促销的金额+不参与订单促销的金额 | |
8884 | + calculate_price=order_prom_map_ck.shop_price_all+order_prom_map_ck.no_ord_price; | |
8800 | 8885 | |
8801 | 8886 | break; |
8802 | 8887 | //市场价的时候 |
... | ... | @@ -8804,24 +8889,31 @@ Page({ |
8804 | 8889 | if (ord_prom.money > order_prom_map_ck.market_price_all){ |
8805 | 8890 | return null; |
8806 | 8891 | } |
8892 | + | |
8893 | + console.log('aaa'); | |
8894 | + console.log(order_prom_map_ck.goodsList); | |
8895 | + | |
8807 | 8896 | //要显示订单促销使用的按钮 |
8808 | 8897 | this.setData({ |
8809 | - show_ord_prom: 2, | |
8810 | - join_ord_prom_goodslist:order_prom_map_ck.goodsList //用于筛选商品的价格选手 | |
8898 | + [txt1]: 2, | |
8899 | + [txt2]:order_prom_map_ck.goodsList //用于筛选商品的价格选手 | |
8811 | 8900 | }); |
8812 | 8901 | //要用户点击了同意使用订单优惠的按钮后,才允许使用订单优惠 |
8813 | 8902 | if (!this.data.can_use_ord_prom) { |
8814 | 8903 | return null; |
8815 | 8904 | } |
8816 | - calculate_price = order_prom_map_ck.market_price_all; | |
8905 | + //计算金额是参与订单促销的金额+不参与订单促销的金额 | |
8906 | + calculate_price = order_prom_map_ck.market_price_all+order_prom_map_ck.no_ord_price; | |
8817 | 8907 | break; |
8818 | 8908 | } |
8819 | 8909 | |
8820 | - if (calculate_price > 0) { | |
8910 | + let order_prom_amount=0; | |
8911 | + //如果用户有点击按钮要参与订单促销的时候 | |
8912 | + if (calculate_price > 0 && this.data.can_use_ord_prom[pickid]) { | |
8821 | 8913 | //-- 订单促销是按照实收价格进行计算的时候 -- |
8822 | 8914 | switch (ord_prom['type']) { |
8823 | 8915 | case 0: |
8824 | - order_m = Math.round(calculate_price * ord_prom['expression']) / 100;//满额打折 | |
8916 | + let order_m = Math.round(calculate_price * ord_prom['expression']) / 100;//满额打折 | |
8825 | 8917 | order_prom_amount = (calculate_price - order_m).toFixed(2); |
8826 | 8918 | break; |
8827 | 8919 | case 1: |
... | ... | @@ -8839,6 +8931,20 @@ Page({ |
8839 | 8931 | } |
8840 | 8932 | return ord_prom; |
8841 | 8933 | |
8934 | + }, | |
8935 | + | |
8936 | + //设置能够参与订单促销 | |
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 | + }) | |
8944 | + | |
8945 | + let carr=ut.deep_cp(th.data.cartlist_y); | |
8946 | + //-- 重新计算一下价格 -- | |
8947 | + this.get_cart_next(carr); | |
8842 | 8948 | } |
8843 | 8949 | |
8844 | 8950 | ... | ... |
packageE/pages/cart/cart2/cart2.wxml
... | ... | @@ -107,7 +107,8 @@ |
107 | 107 | |
108 | 108 | <!-----商品名称规格------> |
109 | 109 | <view class="order-num flex-space-between"> |
110 | - <view wx:if="{{can_use_ord_prom}}" class="co-red">¥<text class="fs36">{{util.fm_join_ord_prom_price(items,join_ord_prom_goodslist,item.show_ord_prom,2)}}</text></view> | |
110 | + <!-- 动态显示商品的价格 --> | |
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> | |
111 | 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> |
112 | 113 | <view wx:else class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view> |
113 | 114 | <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> |
... | ... | @@ -346,6 +347,14 @@ |
346 | 347 | </block> |
347 | 348 | </view> |
348 | 349 | |
350 | + <!-- 订单促销取价规则的优化 --> | |
351 | + <view class="set-mes" wx:if="{{show_ord_prom[item.pickup_id]}}"> | |
352 | + <view class="use-item" data-pd="{{item.pickup_id}}" bindtap='set_can_use_ord_prom'> | |
353 | + <icon color="{{can_use_ord_prom[item.pickup_id]?'red':'gray'}}" size="16" type="success"></icon> | |
354 | + <view class="yu_er">参与订单促销</view> | |
355 | + </view> | |
356 | + </view> | |
357 | + | |
349 | 358 | <!-----使用优惠券------> |
350 | 359 | <view class="xc-coupon-frame flex-center" data-bn="0" bindtap="open_coupon_list" wx:if="{{!(yh_is_xz_yh[item.pickup_id]) && ((item.quan_list && item.quan_list.length>0 ) || get_by_quan_list_cart[item.pickup_id]!=null && item.can_num>0)}}" data-cind="{{pidx}}" data-pickid="{{item.pickup_id}}"> |
351 | 360 | <view class="work-frame flex-space-between"> | ... | ... |
packageE/pages/cart/cart2/filter.wxs
... | ... | @@ -54,10 +54,22 @@ function check_is_last(index,goods_id){ |
54 | 54 | //-- 用于筛选商品的价格显示 -- |
55 | 55 | function fm_join_ord_prom_price(gd,join_gd_list,show_ord_prom,count){ |
56 | 56 | var price=gd.goods_price; |
57 | + | |
58 | + console.log('1111'); | |
59 | + console.log(gd.id); | |
60 | + | |
57 | 61 | //在join_gd_list中查找是否已经存在gd商品,靠购物车的id来判断 |
58 | 62 | for(var i=0;i<join_gd_list.length;i++){ |
59 | 63 | var jgd=join_gd_list[i]; |
64 | + | |
65 | + console.log(jgd.id); | |
66 | + | |
67 | + | |
60 | 68 | if(jgd.id==gd.id){ |
69 | + | |
70 | + console.log('yyy'); | |
71 | + | |
72 | + | |
61 | 73 | switch (show_ord_prom){ |
62 | 74 | case 1: |
63 | 75 | price=gd.shop_price; |
... | ... | @@ -72,8 +84,8 @@ function fm_join_ord_prom_price(gd,join_gd_list,show_ord_prom,count){ |
72 | 84 | if (!price) { |
73 | 85 | return parseFloat(0).toFixed(count); |
74 | 86 | } |
75 | - val = parseFloat(val); | |
76 | - return val.toFixed(count); | |
87 | + price = parseFloat(price); | |
88 | + return price.toFixed(count); | |
77 | 89 | } |
78 | 90 | |
79 | 91 | ... | ... |