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 | }); | ... | ... |