Commit 8dd423ba924d4a6bbd158e8cdb17027a62cbcaa4

Authored by yvan.ni
1 parent c608a345

确认订单页面的优化

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  
... ...