Commit efb6b05d8c64eb1c51c7a83e92ec4ef0894eb28d
1 parent
4d38a898
优惠活动的商品要平摊相应的商品的
Showing
1 changed file
with
112 additions
and
20 deletions
pages/cart/cart2/cart2.js
@@ -105,6 +105,8 @@ Page({ | @@ -105,6 +105,8 @@ Page({ | ||
105 | //-- order_prom_list -- | 105 | //-- order_prom_list -- |
106 | order_prom_list_cart:null, | 106 | order_prom_list_cart:null, |
107 | 107 | ||
108 | + ispt_goods:0, //是否平摊至单品,0要平摊 1不平摊 | ||
109 | + | ||
108 | }, | 110 | }, |
109 | onLoad: function(t) { | 111 | onLoad: function(t) { |
110 | 112 | ||
@@ -122,7 +124,8 @@ Page({ | @@ -122,7 +124,8 @@ Page({ | ||
122 | //先获取是否有关闭使用优惠券 | 124 | //先获取是否有关闭使用优惠券 |
123 | getApp().getConfig2(function (ee) { | 125 | getApp().getConfig2(function (ee) { |
124 | var json_d = JSON.parse(ee.switch_list); | 126 | var json_d = JSON.parse(ee.switch_list); |
125 | - th.setData({ is_close_quan: json_d.is_close_quan,sales_rules:ee.sales_rules }); | 127 | + th.data.ispt_goods=json_d.ispt_goods; //是不是平摊到单品的控制参数赋值 |
128 | + th.setData({ is_close_quan: json_d.is_close_quan,sales_rules:ee.sales_rules}); | ||
126 | //-----先获取物流,再获取用户信息,再展示页面----- | 129 | //-----先获取物流,再获取用户信息,再展示页面----- |
127 | th.get_wuliu(th.get_info(th.show_page)); | 130 | th.get_wuliu(th.get_info(th.show_page)); |
128 | }) | 131 | }) |
@@ -638,19 +641,17 @@ Page({ | @@ -638,19 +641,17 @@ Page({ | ||
638 | if(th.data.cartlist) c_arr[i].check_quan_ware_list= th.data.cartlist[i].check_quan_ware_list; //优惠券优惠什么商品 | 641 | if(th.data.cartlist) c_arr[i].check_quan_ware_list= th.data.cartlist[i].check_quan_ware_list; //优惠券优惠什么商品 |
639 | } | 642 | } |
640 | 643 | ||
641 | - var cart_item=c_arr[i]; | 644 | + var cart_item=c_arr[i]; //就是每一单的意思 |
642 | var pickid=cart_item.pickup_id; | 645 | var pickid=cart_item.pickup_id; |
643 | var o_price=0; | 646 | var o_price=0; |
644 | var o_shipping_price=0,goods_weight=-1, goods_piece=-1; | 647 | var o_shipping_price=0,goods_weight=-1, goods_piece=-1; |
645 | - var item=c_arr[i].goods; | ||
646 | - //--获取物流code-- | 648 | + var item=c_arr[i].goods; //就是每一单的从表的意思 |
647 | 649 | ||
648 | //--------循环计算总价----------- | 650 | //--------循环计算总价----------- |
649 | for(var j=0;j<item.length;j++){ | 651 | for(var j=0;j<item.length;j++){ |
650 | o_price += item[j].goods_price * item[j].goods_num; | 652 | o_price += item[j].goods_price * item[j].goods_num; |
651 | } | 653 | } |
652 | var f_o_price=o_price; | 654 | var f_o_price=o_price; |
653 | - var prom_g=th.data.prom_goods_map[pickid]; | ||
654 | 655 | ||
655 | //判断包邮券的钱 | 656 | //判断包邮券的钱 |
656 | var q_conditin=0; | 657 | var q_conditin=0; |
@@ -695,15 +696,8 @@ Page({ | @@ -695,15 +696,8 @@ Page({ | ||
695 | } | 696 | } |
696 | }) | 697 | }) |
697 | } | 698 | } |
698 | - //--------循环计算商品是不是包邮,是不是使用优惠券----------- | ||
699 | - for(var j=0;j<item.length;j++){ | ||
700 | - if(item[j].prom_type==3 && item[j].prom_id==item_map.prom_id){ | ||
701 | - item[j].is_xz_yh= item_map.is_xz_yh; | ||
702 | - item[j].is_past= item_map.is_past; | ||
703 | - } | ||
704 | - } | 699 | + |
705 | //有活动,且优惠活动并没有限制使用优惠券,且有减价 | 700 | //有活动,且优惠活动并没有限制使用优惠券,且有减价 |
706 | - //if(item_map && !item_map.is_xz_yh && item_map.price) q_conditin=o_price-item_map.price; | ||
707 | //--看有没有减价-- | 701 | //--看有没有减价-- |
708 | if(item_map.prom_price && item_map.price-item_map.prom_price){ | 702 | if(item_map.prom_price && item_map.price-item_map.prom_price){ |
709 | if(cart_item.prom_pt_json){ | 703 | if(cart_item.prom_pt_json){ |
@@ -712,11 +706,73 @@ Page({ | @@ -712,11 +706,73 @@ Page({ | ||
712 | cart_item.prom_pt_json=[{"prom_id":item_map.prom_id,"dis":(item_map.price-item_map.prom_price).toFixed(2),"ispt":0}]; | 706 | cart_item.prom_pt_json=[{"prom_id":item_map.prom_id,"dis":(item_map.price-item_map.prom_price).toFixed(2),"ispt":0}]; |
713 | } | 707 | } |
714 | 708 | ||
709 | + | ||
710 | + //---如果是系统要平摊至单品的时候--- | ||
711 | + if(!th.data.ispt_goods) { | ||
712 | + //此处要对商品从表排序一下,按商品件数升序,商品单价降序 | ||
713 | + function sort_fun(a, b) { | ||
714 | + if (a["goods_num"] === b["goods_num"]) { | ||
715 | + if (a["goods_price"] < b["goods_price"]) { | ||
716 | + return 1; | ||
717 | + } else if (a["goods_price"] > b["goods_price"]) { | ||
718 | + return -1; | ||
719 | + } else { | ||
720 | + return 0; | ||
721 | + } | ||
722 | + } else { | ||
723 | + if (a["goods_num"] > b["goods_num"]) { | ||
724 | + return 1; | ||
725 | + } else { | ||
726 | + return -1; | ||
727 | + } | ||
728 | + } | ||
729 | + } | ||
730 | + | ||
731 | + //进行排序 | ||
732 | + item_map.goods.sort(sort_fun); | ||
733 | + //这个位置就要开始平摊优惠到优惠活动的单品 | ||
734 | + var account_all = 0; | ||
735 | + var per = (item_map.price - item_map.prom_price) / item_map.price; //优惠单价 | ||
736 | + | ||
737 | + //比例太小的时候,就不进行平摊 | ||
738 | + if (per < 0.001) { | ||
739 | + item_map.goods[0].account_yu = item_map.price - item_map.prom_price; | ||
740 | + } else { | ||
741 | + per = Math.floor(1000 * per) / 1000; //保留3位小数 | ||
742 | + for (var i in item_map.goods) { | ||
743 | + var m_item = item_map.goods[i]; | ||
744 | + var m_all_amount = m_item.goods_price * m_item.goods_num - m_item.goods_price * m_item.goods_num * per; | ||
745 | + var account = Math.floor(100 * m_all_amount /m_item.goods_num) / 100; | ||
746 | + if (account) { | ||
747 | + item_map.goods[i].account = account; | ||
748 | + account_all += account * m_item.goods_num; //累加总实收 | ||
749 | + } | ||
750 | + } | ||
751 | + //算出余数 | ||
752 | + var yu = account_all - item_map.prom_price; | ||
753 | + if (yu != 0) { | ||
754 | + item_map.goods[0].account_yu = parseFloat(yu.toFixed(2)); | ||
755 | + } | ||
756 | + } | ||
757 | + } | ||
758 | + | ||
715 | o_price-=(item_map.price-item_map.prom_price); | 759 | o_price-=(item_map.price-item_map.prom_price); |
716 | //如果有限制使用优惠券,就要减掉参与的活动商品的钱 | 760 | //如果有限制使用优惠券,就要减掉参与的活动商品的钱 |
717 | if(!item_map.is_xz_yh) q_conditin=o_price; | 761 | if(!item_map.is_xz_yh) q_conditin=o_price; |
718 | } | 762 | } |
719 | 763 | ||
764 | + | ||
765 | + //--------循环计算商品是不是包邮,是不是使用优惠券,此时循环是商品从表----------- | ||
766 | + for(var j=0;j<item.length;j++){ | ||
767 | + if(item[j].prom_type==3 && item[j].prom_id==item_map.prom_id){ | ||
768 | + item[j].is_xz_yh= item_map.is_xz_yh; | ||
769 | + item[j].is_past= item_map.is_past; | ||
770 | + item[j].account= th.item_map_get_goods(item[j].goods_id,item_map).account; | ||
771 | + item[j].account_yu= th.item_map_get_goods(item[j].goods_id,item_map).account_yu; | ||
772 | + } | ||
773 | + } | ||
774 | + | ||
775 | + | ||
720 | //--优惠多少钱-- | 776 | //--优惠多少钱-- |
721 | if(!cart_item.cut_price) cart_item.cut_price=0; | 777 | if(!cart_item.cut_price) cart_item.cut_price=0; |
722 | cart_item.cut_price+=(item_map.price-item_map.prom_price); | 778 | cart_item.cut_price+=(item_map.price-item_map.prom_price); |
@@ -857,7 +913,6 @@ Page({ | @@ -857,7 +913,6 @@ Page({ | ||
857 | continue; | 913 | continue; |
858 | } | 914 | } |
859 | 915 | ||
860 | - | ||
861 | //----------------如果是选择了物流--------------------- | 916 | //----------------如果是选择了物流--------------------- |
862 | if(cart_item.exp_type == 0 && item[j].is_free_shipping==0){ | 917 | if(cart_item.exp_type == 0 && item[j].is_free_shipping==0){ |
863 | //如果地址不为空 | 918 | //如果地址不为空 |
@@ -881,9 +936,9 @@ Page({ | @@ -881,9 +936,9 @@ Page({ | ||
881 | 936 | ||
882 | 937 | ||
883 | //计算物流价格 | 938 | //计算物流价格 |
884 | - if (c_arr[i].exp_type == 0) { | 939 | + if (cart_item.exp_type == 0) { |
885 | freight_free=0; //后面不在进行判断 | 940 | freight_free=0; //后面不在进行判断 |
886 | - var code = th.data.wu_arr[c_arr[i].wind].code; | 941 | + var code = th.data.wu_arr[cart_item.wind].code; |
887 | cart_item.shipping_price = | 942 | cart_item.shipping_price = |
888 | th.calculatewuliu(code, o_shipping_price, goods_weight, | 943 | th.calculatewuliu(code, o_shipping_price, goods_weight, |
889 | goods_piece,th.data.user_addr, freight_free, o_price, rs); | 944 | goods_piece,th.data.user_addr, freight_free, o_price, rs); |
@@ -1476,6 +1531,24 @@ Page({ | @@ -1476,6 +1531,24 @@ Page({ | ||
1476 | goods.quan_num=th.data.formData.coupon_price; | 1531 | goods.quan_num=th.data.formData.coupon_price; |
1477 | goods.quan_no= item.coupon_no; | 1532 | goods.quan_no= item.coupon_no; |
1478 | } | 1533 | } |
1534 | + | ||
1535 | + | ||
1536 | + | ||
1537 | + //--- 如果有优惠促销的金额,要把金额先平摊下去 --- | ||
1538 | + if(th.data.formData.cut_price>0 && !th.data.ispt_goods){ | ||
1539 | + var per=th.data.formData.cut_price/(goods.goods_price*goods.goods_num) //优惠单价 | ||
1540 | + //比例太小不平摊 | ||
1541 | + if(per<0.001){ | ||
1542 | + goods.account_yu=th.data.formData.cut_price; | ||
1543 | + }else{ | ||
1544 | + per=Math.floor(per*1000)/1000; | ||
1545 | + var all_amount=goods.goods_price*goods.goods_num-goods.goods_price*goods.goods_num*per; //商品总实收 | ||
1546 | + var account=Math.floor(all_amount/goods.goods_num*100)/100; //实收单价保留俩位小数 | ||
1547 | + var account_yu=account*goods.goods_num-(goods.goods_price*goods.goods_num-th.data.formData.cut_price); //算出余数 | ||
1548 | + goods.account=account; | ||
1549 | + goods.account_yu=parseFloat(account_yu.toFixed(2)); | ||
1550 | + } | ||
1551 | + } | ||
1479 | item.order_goods.push(goods); | 1552 | item.order_goods.push(goods); |
1480 | 1553 | ||
1481 | //--如果有赠品的时候,赠品也要提交--- | 1554 | //--如果有赠品的时候,赠品也要提交--- |
@@ -1598,6 +1671,12 @@ Page({ | @@ -1598,6 +1671,12 @@ Page({ | ||
1598 | 'store_id': oo.stoid, | 1671 | 'store_id': oo.stoid, |
1599 | }; | 1672 | }; |
1600 | 1673 | ||
1674 | + //把优惠的平摊结果写进去 | ||
1675 | + if(g_item.account){ | ||
1676 | + goods.account=g_item.account; | ||
1677 | + goods.account_yu=g_item.account_yu; | ||
1678 | + } | ||
1679 | + | ||
1601 | //--把券的钱,写入从表--- | 1680 | //--把券的钱,写入从表--- |
1602 | if(t_item.quan_youhui_list && t_item.coupon_price ){ | 1681 | if(t_item.quan_youhui_list && t_item.coupon_price ){ |
1603 | for(var kk in t_item.quan_youhui_list ){ | 1682 | for(var kk in t_item.quan_youhui_list ){ |
@@ -2657,7 +2736,7 @@ Page({ | @@ -2657,7 +2736,7 @@ Page({ | ||
2657 | }) | 2736 | }) |
2658 | }, | 2737 | }, |
2659 | 2738 | ||
2660 | - //--- 加入优惠活动的映射中 --- | 2739 | + //--- 加入优惠活动的映射中,同时要有一个good列表 --- |
2661 | add_prom_goods_map:async function (item) { | 2740 | add_prom_goods_map:async function (item) { |
2662 | var th=this; | 2741 | var th=this; |
2663 | var pickid=item.pick_id; | 2742 | var pickid=item.pick_id; |
@@ -2669,6 +2748,8 @@ Page({ | @@ -2669,6 +2748,8 @@ Page({ | ||
2669 | var ob=map[pickid][item.prom_id]; | 2748 | var ob=map[pickid][item.prom_id]; |
2670 | ob.price+=item.goods_price*item.goods_num; | 2749 | ob.price+=item.goods_price*item.goods_num; |
2671 | ob.goods_num+=item.goods_num; | 2750 | ob.goods_num+=item.goods_num; |
2751 | + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num}); | ||
2752 | + | ||
2672 | }else{ | 2753 | }else{ |
2673 | var prom=null; | 2754 | var prom=null; |
2674 | await getApp().request.promiseGet("/api/weshop/promgoods/get/"+os.stoid+"/"+item.prom_id,{}).then(res=>{ | 2755 | await getApp().request.promiseGet("/api/weshop/promgoods/get/"+os.stoid+"/"+item.prom_id,{}).then(res=>{ |
@@ -2680,6 +2761,8 @@ Page({ | @@ -2680,6 +2761,8 @@ Page({ | ||
2680 | ob.goods_num=item.goods_num; | 2761 | ob.goods_num=item.goods_num; |
2681 | ob.is_bz=prom.is_bz; | 2762 | ob.is_bz=prom.is_bz; |
2682 | ob.is_xz_yh=prom.is_xz_yh; | 2763 | ob.is_xz_yh=prom.is_xz_yh; |
2764 | + ob.goods=new Array(); | ||
2765 | + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num}); | ||
2683 | map[pickid][item.prom_id]=ob; | 2766 | map[pickid][item.prom_id]=ob; |
2684 | } | 2767 | } |
2685 | }else{ | 2768 | }else{ |
@@ -2693,6 +2776,9 @@ Page({ | @@ -2693,6 +2776,9 @@ Page({ | ||
2693 | ob.goods_num=item.goods_num; | 2776 | ob.goods_num=item.goods_num; |
2694 | ob.is_bz=prom.is_bz; | 2777 | ob.is_bz=prom.is_bz; |
2695 | ob.is_xz_yh=prom.is_xz_yh; | 2778 | ob.is_xz_yh=prom.is_xz_yh; |
2779 | + ob.goods=new Array(); | ||
2780 | + ob.goods.push({goods_id:item.goods_id,goods_price:item.goods_price,goods_num:item.goods_num}); | ||
2781 | + | ||
2696 | var obj={}; | 2782 | var obj={}; |
2697 | obj[item.prom_id]=ob; | 2783 | obj[item.prom_id]=ob; |
2698 | map[pickid]=obj; | 2784 | map[pickid]=obj; |
@@ -2700,8 +2786,8 @@ Page({ | @@ -2700,8 +2786,8 @@ Page({ | ||
2700 | } | 2786 | } |
2701 | }, | 2787 | }, |
2702 | 2788 | ||
2703 | - //计算立即购买赠品的物流费用 | ||
2704 | - get_now_gift_goods_wuliu:function (code, o_shipping_price, user_addr, gift_freight_free,allpice, rs,shipping_price,no_by_data) { | 2789 | + //计算立即购买赠品的物流费用 |
2790 | + get_now_gift_goods_wuliu:function (code, o_shipping_price, user_addr, gift_freight_free,allpice, rs,shipping_price,no_by_data) { | ||
2705 | var good=this.data.buy_now_gift_goods; | 2791 | var good=this.data.buy_now_gift_goods; |
2706 | var goods_weight=-1, goods_piece=-1; | 2792 | var goods_weight=-1, goods_piece=-1; |
2707 | var gift_shipping_price=0; | 2793 | var gift_shipping_price=0; |
@@ -2739,8 +2825,14 @@ Page({ | @@ -2739,8 +2825,14 @@ Page({ | ||
2739 | goods_piece, user_addr, gift_freight_free, allpice, rs); | 2825 | goods_piece, user_addr, gift_freight_free, allpice, rs); |
2740 | return t_shipping_price+shipping_price; | 2826 | return t_shipping_price+shipping_price; |
2741 | 2827 | ||
2742 | - } | 2828 | + }, |
2743 | 2829 | ||
2830 | + //从优惠的映射中拿出商品从表的item | ||
2831 | + item_map_get_goods:function(goods_id,map){ | ||
2832 | + for(var i in map.goods){ | ||
2833 | + if(map.goods[i].goods_id==goods_id) return map.goods[i]; | ||
2834 | + } | ||
2835 | + } | ||
2744 | 2836 | ||
2745 | 2837 | ||
2746 | }); | 2838 | }); |