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 | 105 | //-- order_prom_list -- |
106 | 106 | order_prom_list_cart:null, |
107 | 107 | |
108 | + ispt_goods:0, //是否平摊至单品,0要平摊 1不平摊 | |
109 | + | |
108 | 110 | }, |
109 | 111 | onLoad: function(t) { |
110 | 112 | |
... | ... | @@ -122,7 +124,8 @@ Page({ |
122 | 124 | //先获取是否有关闭使用优惠券 |
123 | 125 | getApp().getConfig2(function (ee) { |
124 | 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 | 130 | th.get_wuliu(th.get_info(th.show_page)); |
128 | 131 | }) |
... | ... | @@ -638,19 +641,17 @@ Page({ |
638 | 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 | 645 | var pickid=cart_item.pickup_id; |
643 | 646 | var o_price=0; |
644 | 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 | 651 | for(var j=0;j<item.length;j++){ |
650 | 652 | o_price += item[j].goods_price * item[j].goods_num; |
651 | 653 | } |
652 | 654 | var f_o_price=o_price; |
653 | - var prom_g=th.data.prom_goods_map[pickid]; | |
654 | 655 | |
655 | 656 | //判断包邮券的钱 |
656 | 657 | var q_conditin=0; |
... | ... | @@ -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 | 702 | if(item_map.prom_price && item_map.price-item_map.prom_price){ |
709 | 703 | if(cart_item.prom_pt_json){ |
... | ... | @@ -712,11 +706,73 @@ Page({ |
712 | 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 | 759 | o_price-=(item_map.price-item_map.prom_price); |
716 | 760 | //如果有限制使用优惠券,就要减掉参与的活动商品的钱 |
717 | 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 | 777 | if(!cart_item.cut_price) cart_item.cut_price=0; |
722 | 778 | cart_item.cut_price+=(item_map.price-item_map.prom_price); |
... | ... | @@ -857,7 +913,6 @@ Page({ |
857 | 913 | continue; |
858 | 914 | } |
859 | 915 | |
860 | - | |
861 | 916 | //----------------如果是选择了物流--------------------- |
862 | 917 | if(cart_item.exp_type == 0 && item[j].is_free_shipping==0){ |
863 | 918 | //如果地址不为空 |
... | ... | @@ -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 | 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 | 942 | cart_item.shipping_price = |
888 | 943 | th.calculatewuliu(code, o_shipping_price, goods_weight, |
889 | 944 | goods_piece,th.data.user_addr, freight_free, o_price, rs); |
... | ... | @@ -1476,6 +1531,24 @@ Page({ |
1476 | 1531 | goods.quan_num=th.data.formData.coupon_price; |
1477 | 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 | 1552 | item.order_goods.push(goods); |
1480 | 1553 | |
1481 | 1554 | //--如果有赠品的时候,赠品也要提交--- |
... | ... | @@ -1598,6 +1671,12 @@ Page({ |
1598 | 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 | 1681 | if(t_item.quan_youhui_list && t_item.coupon_price ){ |
1603 | 1682 | for(var kk in t_item.quan_youhui_list ){ |
... | ... | @@ -2657,7 +2736,7 @@ Page({ |
2657 | 2736 | }) |
2658 | 2737 | }, |
2659 | 2738 | |
2660 | - //--- 加入优惠活动的映射中 --- | |
2739 | + //--- 加入优惠活动的映射中,同时要有一个good列表 --- | |
2661 | 2740 | add_prom_goods_map:async function (item) { |
2662 | 2741 | var th=this; |
2663 | 2742 | var pickid=item.pick_id; |
... | ... | @@ -2669,6 +2748,8 @@ Page({ |
2669 | 2748 | var ob=map[pickid][item.prom_id]; |
2670 | 2749 | ob.price+=item.goods_price*item.goods_num; |
2671 | 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 | 2753 | }else{ |
2673 | 2754 | var prom=null; |
2674 | 2755 | await getApp().request.promiseGet("/api/weshop/promgoods/get/"+os.stoid+"/"+item.prom_id,{}).then(res=>{ |
... | ... | @@ -2680,6 +2761,8 @@ Page({ |
2680 | 2761 | ob.goods_num=item.goods_num; |
2681 | 2762 | ob.is_bz=prom.is_bz; |
2682 | 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 | 2766 | map[pickid][item.prom_id]=ob; |
2684 | 2767 | } |
2685 | 2768 | }else{ |
... | ... | @@ -2693,6 +2776,9 @@ Page({ |
2693 | 2776 | ob.goods_num=item.goods_num; |
2694 | 2777 | ob.is_bz=prom.is_bz; |
2695 | 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 | 2782 | var obj={}; |
2697 | 2783 | obj[item.prom_id]=ob; |
2698 | 2784 | map[pickid]=obj; |
... | ... | @@ -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 | 2791 | var good=this.data.buy_now_gift_goods; |
2706 | 2792 | var goods_weight=-1, goods_piece=-1; |
2707 | 2793 | var gift_shipping_price=0; |
... | ... | @@ -2739,8 +2825,14 @@ Page({ |
2739 | 2825 | goods_piece, user_addr, gift_freight_free, allpice, rs); |
2740 | 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 | }); | ... | ... |