Commit 54130951310b8beef9fc34cc1fd180790fe9d9a5

Authored by 后端开发-苏由福
1 parent bd24357b

阶梯促销的优化

pages/cart/cart/cart.js
... ... @@ -5,8 +5,9 @@ var t = getApp(),
5 5 app = getApp(),
6 6 rq = t.request,
7 7 ut = require("../../../utils/util.js"),
8   - zh_calc = require("zh_calculate.js");
9   - var regeneratorRuntime = require('../../../utils/runtime.js');
  8 + zh_calc = require("zh_calculate.js"),
  9 + ladder_calc = require("ladder_calculate.js");
  10 + var regeneratorRuntime = require('../../../utils/runtime.js');
10 11  
11 12 Page({
12 13 data: {
... ... @@ -38,6 +39,8 @@ Page({
38 39 zuhe_map:{},
39 40 zuhe_map_good:{},
40 41 in_zhact_gdmap:{}, //不同门店参与同一活动的限购
  42 +
  43 + ladder_map:{}, //阶梯促销需要的map
41 44 },
42 45 onLoad: function() {
43 46 var a = this,ee=a;
... ... @@ -83,7 +86,6 @@ Page({
83 86 th.setData({
84 87 bconfig: e,sales_rules:e.sales_rules
85 88 });
86   -
87 89 getApp().request.promiseGet("/store/storemoduleendtime/page?store_id=" +os.stoid + "&type=6",{}).then(res=>{
88 90 //未购买
89 91 if(res.data.code!=0 || !res.data.data || !res.data.data.pageData || !res.data.data.pageData.length){
... ... @@ -210,6 +212,8 @@ Page({
210 212 get_cart: function() {
211 213 var th = this;
212 214 th.data.in_zhact_gdmap={};
  215 + th.data.ladder_map={};
  216 +
213 217 var rd = Math.random().toString(36).substr(2, 15);
214 218 var user_id=getApp().globalData.userInfo.user_id;
215 219 getApp().request.get("/api/weshop/cart/list", {
... ... @@ -223,8 +227,7 @@ Page({
223 227 success:async function(su) {
224 228 console.log(su,10000);
225 229 //按门店分类的数组
226   - var arr = new Array(),
227   - carr = su.data.data.pageData;
  230 + var arr = new Array(), carr = su.data.data.pageData;
228 231 var all_num = 0;
229 232  
230 233 if(carr && carr.length>0) {
... ... @@ -354,35 +357,86 @@ Page({
354 357 }
355 358 }
356 359  
357   - //--判断优惠活动有没有过期--
  360 + //--判断优惠活动有没有过期,--
358 361 else if (item.prom_type == 3) {
359   - var isok = 1;
360   - await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + item.goods_id + "/1", {}).then(res => {
361   - if (res.data.code == 0) {
362   - var r_data = res.data.data;
363   - if (!r_data.promGoodsLists) {
  362 + var isok = 1,is_g_prom=0;
  363 +
  364 + //因为有全场优惠活动,商品参加的活动还未开始
  365 + var url="/api/weshop/activitylist/getGoodActInfo";
  366 + var req_data={
  367 + store_id:os.stoid,goodsidlist:item.goods_id,is_detail:1
  368 + };
  369 + await getApp().request.promiseGet(url, {data:req_data}).then(async function (res) {
  370 + if(res.data.code==0 && res.data.data && res.data.data.length){
  371 + for(let i in res.data.data){
  372 + let item=res.data.data[i];
  373 + if(item.prom_type==3) {
  374 + is_g_prom=1; break;
  375 + }
  376 + }
  377 + }
  378 + })
  379 +
  380 + if(is_g_prom){
  381 + await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + item.goods_id + "/1", {}).then(res => {
  382 + if (res.data.code == 0) {
  383 + var r_data = res.data.data;
  384 + if (!r_data.promGoodsLists) {
  385 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  386 + getApp().request.delete(url, {});
  387 + //商品已经无活动
  388 + isok = 0;
  389 + }else{
  390 + //如果活动的ID不一样,说明原先的活动已经没有参与了或者过期了
  391 + if(item.prom_id!=r_data.promGoodsLists[0].prom_id ){
  392 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  393 + getApp().request.delete(url, {});
  394 + //商品已经下架
  395 + isok = 0;
  396 + }
  397 + }
  398 +
  399 + } else {
364 400 var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
365 401 getApp().request.delete(url, {});
366   - //商品已经无活动
  402 + //商品已经下架
367 403 isok = 0;
368   - }else{
369   - //如果活动的ID不一样,说明原先的活动已经没有参与了或者过期了
370   - if(item.prom_id!=r_data.promGoodsLists[0].prom_id ){
371   - var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
372   - getApp().request.delete(url, {});
373   - //商品已经下架
374   - isok = 0;
375   - }
376   - }
377   -
378   - } else {
379   - var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
380   - getApp().request.delete(url, {});
381   - //商品已经下架
382   - isok = 0;
383   - }
384   - })
  404 + }
  405 + })
  406 +
  407 + }else{
  408 + await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromNormal/" + os.stoid + "/" + item.goods_id, {}).then(res => {
  409 + if (res.data.code == 0) {
  410 + var r_data = res.data.data;
  411 + if (!r_data.promGoodsLists) {
  412 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  413 + getApp().request.delete(url, {});
  414 + //商品已经无活动
  415 + isok = 0;
  416 + }else{
  417 + //如果活动的ID不一样,说明原先的活动已经没有参与了或者过期了
  418 + if(item.prom_id!=r_data.promGoodsLists[0].prom_id ){
  419 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  420 + getApp().request.delete(url, {});
  421 + //商品已经下架
  422 + isok = 0;
  423 + }
  424 + }
  425 +
  426 + } else {
  427 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  428 + getApp().request.delete(url, {});
  429 + //商品已经下架
  430 + isok = 0;
  431 + }
  432 + })
  433 +
  434 + }
  435 +
385 436 if (!isok) continue;
  437 +
  438 +
  439 +
386 440 }
387 441 else if (item.prom_type == 7) {
388 442 if(!th.data.zuhe_map[item.prom_id]){
... ... @@ -470,6 +524,68 @@ Page({
470 524 // continue;
471 525 // }
472 526 }
  527 + else if (item.prom_type == 10) {
  528 + if(!th.data.ladder_map[item.prom_id]){
  529 + //如果有组合购
  530 + var isok = 1;
  531 + var is_flag=1;
  532 + var act=null;
  533 + var url="/api/weshop/prom/ladderForm/get/"+os.stoid+"/"+item.prom_id;
  534 + await getApp().request.promiseGet(url, {}).then(res => {
  535 + console.log(res,1000);
  536 + if(res.data.code==0 && res.data.data){
  537 + if(res.data.data.isuse!=1){
  538 + isok=0;
  539 + }
  540 + //如果活动已经结束
  541 + if(res.data.data.is_end==1){
  542 + isok=0;
  543 + }
  544 + //已经结束
  545 + if(ut.gettimestamp()>res.data.data.end_time){
  546 + isok=0;
  547 + }
  548 + //还未开始
  549 + if(ut.gettimestamp()<res.data.data.start_time){
  550 + isok=0;
  551 + }
  552 + act=res.data.data;
  553 +
  554 + }else{
  555 + //未找到商品的活动
  556 + is_flag = 0;
  557 + }
  558 + })
  559 + if (!isok){
  560 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  561 + getApp().request.delete(url, {});
  562 + th.data.ladder_map[item.prom_id]=-1;
  563 + continue;
  564 + }
  565 + th.data.ladder_map[item.prom_id]=act;
  566 +
  567 + //-- 获取阶梯规则 --
  568 + var url1 = "/api/weshop/prom/ladderList/list";
  569 + var req_data = {
  570 + store_id: os.stoid,
  571 + form_id: item.prom_id,
  572 + }
  573 + await getApp().request.promiseGet(url1, {
  574 + data: req_data
  575 + }).then(rs1 => {
  576 + if (rs1.data.code==0 && rs1.data.data) {
  577 + var gdlist = rs1.data.data;
  578 + th.data.ladder_map[item.prom_id].ladder_list=gdlist;
  579 + }
  580 + })
  581 + }
  582 + //直接把活动赋值给元素
  583 + if(th.data.ladder_map[item.prom_id] && th.data.ladder_map[item.prom_id]!=-1 ){
  584 + item.act=th.data.ladder_map[item.prom_id];
  585 + }
  586 +
  587 + }
  588 +
473 589 else if(item.prom_type == 0) {
474 590 //如果有优惠活动,要更新活动
475 591 await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + item.goods_id + "/1", {}).then(res => {
... ... @@ -575,9 +691,6 @@ Page({
575 691 }
576 692 }
577 693  
578   - // console.log('AAAAAAAAAAAA', all_num);
579   - // getApp().globalData.cartGoodsNum = all_num;
580   -
581 694 th.setData({
582 695 requestData: arr,
583 696 all_num: all_num,
... ... @@ -948,11 +1061,13 @@ Page({
948 1061 if(item[j].is_gift) continue;
949 1062  
950 1063 var obj=JSON.parse(JSON.stringify(item[j]));
951   - //计算之前先移除
  1064 + //计算之前先移除组合购的计算
952 1065 if(obj.prom_type==7)
953 1066 zh_calc.remove_zhprom(dda,i,obj);
954   -
955   -
  1067 + //计算之前先移除阶梯购的计算
  1068 + if(obj.prom_type==10)
  1069 + ladder_calc.remove_ladder_prom(dda,i,obj);
  1070 +
956 1071 if (fir == 0) {
957 1072 fir = item[j].distr_type;
958 1073 } else {
... ... @@ -965,8 +1080,12 @@ Page({
965 1080 var txt = "requestData[" + i + "].goods[" + j + "].selected";
966 1081  
967 1082 if(e.data.checkAllToggle) obj.goods_num=0;
968   - if(obj.prom_type==7)
969   - zh_calc.add_zhprom(dda,i,obj);
  1083 +
  1084 + //加入组合购计算
  1085 + if(obj.prom_type==7) zh_calc.add_zhprom(dda,i,obj);
  1086 + //加入阶梯促销计算
  1087 + if(obj.prom_type==10) ladder_calc.add_ladder_prom(dda,i,obj);
  1088 +
970 1089  
971 1090 e.setData({
972 1091 [txt]: !e.data.checkAllToggle,
... ... @@ -974,7 +1093,7 @@ Page({
974 1093  
975 1094 if (!e.data.checkAllToggle) {
976 1095 //组合购的金额要另外算
977   - if(item[j].prom_type!=7)
  1096 + if(item[j].prom_type!=7 && item[j].prom_type!=10)
978 1097 tfeel += item[j].goods_num * item[j].goods_price;
979 1098 t_num += item[j].goods_num;
980 1099 }
... ... @@ -1012,6 +1131,12 @@ Page({
1012 1131 offline_price+=zh_calc_res.offline_price;
1013 1132 offline_num+=zh_calc_res.offline_num;
1014 1133  
  1134 + //总的价格,把阶梯促销的商品的价格拿出来
  1135 + var ladder_calc_res=ladder_calc.calculate_ladder(dda,i,this);
  1136 + tfeel+=ladder_calc_res.tfeel;
  1137 + offline_price+=ladder_calc_res.offline_price;
  1138 + offline_num+=ladder_calc_res.offline_num;
  1139 +
1015 1140 //当有线下取价的时候
1016 1141 if(offline_price){
1017 1142 var txt1= "requestData[" + i + "].offline_price";
... ... @@ -1326,7 +1451,10 @@ Page({
1326 1451  
1327 1452 //不管怎么样都要移出去
1328 1453 var obj=JSON.parse(JSON.stringify(item[c]));
  1454 +
1329 1455 zh_calc.remove_zhprom(car,a,obj);
  1456 + ladder_calc.remove_ladder_prom(car,a,obj);
  1457 +
1330 1458 if (item[c].selected == 0) {
1331 1459 ischeck = 0;
1332 1460 is_s_sele = 0;
... ... @@ -1334,11 +1462,20 @@ Page({
1334 1462 obj.goods_num=0;
1335 1463 zh_calc.add_zhprom(car,a,obj);
1336 1464 }
  1465 + if(item[c].prom_type==10) {
  1466 + obj.goods_num=0;
  1467 + ladder_calc.add_ladder_prom(car,a,obj);
  1468 + }
  1469 +
  1470 +
1337 1471 } else {
1338 1472 if(item[c].prom_type==7){
1339   - //先把商品放入组合计算的专用的区域
1340   - zh_calc.add_zhprom(car,a,obj);
1341   - }else{
  1473 + //先把商品放入组合计算的专用的区域
  1474 + zh_calc.add_zhprom(car,a,obj);
  1475 + }else if(item[c].prom_type==10){
  1476 + ladder_calc.add_ladder_prom(car,a,obj);
  1477 + }
  1478 + else{
1342 1479 tfeel += item[c].goods_num * item[c].goods_price;
1343 1480 }
1344 1481 t_num += item[c].goods_num;
... ... @@ -1353,10 +1490,17 @@ Page({
1353 1490  
1354 1491 //总的价格,把组合商品的价格拿出来
1355 1492 var zh_calc_res=zh_calc.calculate_zh(car,a,th);
  1493 + //总的价格,把阶梯促销商品的价格拿出来
  1494 + var ladder_calc_res=ladder_calc.calculate_ladder(car,a,th);
  1495 +
1356 1496 tfeel+=zh_calc_res.tfeel;
1357 1497 offline_price+=zh_calc_res.offline_price;
1358 1498 offline_num+=zh_calc_res.offline_num;
1359 1499  
  1500 + tfeel+=ladder_calc_res.tfeel;
  1501 + offline_price+=ladder_calc_res.offline_price;
  1502 + offline_num+=ladder_calc_res.offline_num;
  1503 +
1360 1504 var txt = "requestData[" + a + "].selected";
1361 1505 th.setData({
1362 1506 [txt]: Number(is_s_sele)
... ... @@ -1409,9 +1553,6 @@ Page({
1409 1553 });
1410 1554 }
1411 1555 }
1412   -
1413   - // getApp().globalData.cartGoodsNum = all_num;
1414   - // console.log('CCCCCCC', all_num, getApp().globalData.cartGoodsNum);
1415 1556  
1416 1557 this.setData({
1417 1558 checkAllToggle: ischeck,
... ... @@ -1423,11 +1564,8 @@ Page({
1423 1564  
1424 1565 //----------------------更新购物数量,加减,调用接口---------------------
1425 1566 postCardList: function(t, item, pitem) {
1426   -
1427 1567 var e = this,th=e;
1428 1568 var user_id = getApp().globalData.user_id;
1429   - // console.log('update');
1430   - // console.log('9995959595959',t);
1431 1569 rq.get("/api/weshop/goods/get/" + oo.stoid + "/" + t.goods_id, {
1432 1570 isShowLoading: 0,
1433 1571 async success(d) {
... ... @@ -1456,12 +1594,9 @@ Page({
1456 1594 th.setData({[txt]:promgoodsbuynum});
1457 1595 }
1458 1596 goodsbuynum = buy_num_data.goodsbuynum;
1459   -
1460   -
1461   - // console.log('goodsbuynum===========', goodsbuynum);
  1597 +
1462 1598 })
1463 1599  
1464   -
1465 1600  
1466 1601 var buyed_mum2 = t.goods_num + goodsbuynum;
1467 1602 if (buyed_mum2 > limit && limit > 0) {
... ...
pages/cart/cart/cart.wxml
... ... @@ -164,6 +164,15 @@
164 164 </view>
165 165 </block>
166 166  
  167 + <!-- 阶梯促销提示多少件的优惠 -->
  168 + <block wx:if="{{item.l_need_list && item.l_need_list.length>0 && !is_edit}}">
  169 +
  170 + <view class="fs28 pdr20 pdl20 pdb20 c-red2 flex jc_sb" wx:for="{{item.l_need_list}}">
  171 + <text>{{item.title}}</text>
  172 + <text data-url="/pages/goods/goodsList/goodsList?ladder_id={{item.id}}" bindtap="go_url">去凑单</text>
  173 + </view>
  174 + </block>
  175 +
167 176  
168 177 <!-- 线下取价 -->
169 178 <view style="margin:10rpx 0; padding: 0 30rpx;color: #999" wx:if="{{item.offline_price}}" class="fs28">
... ...
pages/cart/cart/ladder_calculate.js 0 → 100644
  1 +module.exports = {
  2 + //辅助数组添加元素功能
  3 + find_in_add: function(list, ele) {
  4 + var idx=list.findIndex(function (e) {
  5 + return e.goods_id==ele.goods_id;
  6 + })
  7 + if(idx>-1) return false;
  8 + list.push(ele);
  9 + },
  10 + //辅助数组添加元素功能
  11 + find_in_remove: function(list, ele) {
  12 + var idx=list.findIndex(function (e) {
  13 + return e.goods_id==ele.goods_id;
  14 + })
  15 + if(idx==-1) return false;
  16 + list.splice(idx, 1);
  17 + },
  18 +
  19 + //主要是把组合购的商品分离出来
  20 + add_ladder_prom: function(car, a, ele) {
  21 + var point = car[a];
  22 + if (point.ladder_map) {
  23 + if (point.ladder_map[ele.prom_id]) {
  24 + this.find_in_add(point.ladder_map[ele.prom_id].goods, ele);
  25 + } else {
  26 + point.ladder_map[ele.prom_id] = {
  27 + goods: [],
  28 + act: ele.act
  29 + };
  30 + point.ladder_map[ele.prom_id].goods.push(ele);
  31 + }
  32 + } else {
  33 + point.ladder_map = {};
  34 + point.ladder_map[ele.prom_id] = {
  35 + goods: [],
  36 + act: ele.act
  37 + };
  38 + point.ladder_map[ele.prom_id].goods.push(ele);
  39 + }
  40 + },
  41 + //未选中的商品,要从中剔除
  42 + remove_ladder_prom: function(car, a, ele) {
  43 + var point = car[a];
  44 + if (point.ladder_map) {
  45 + if (point.ladder_map[ele.prom_id]) {
  46 + this.find_in_remove(point.ladder_map[ele.prom_id].goods, ele);
  47 + }
  48 + }
  49 + },
  50 +
  51 + //把组合购的商品价格计算出来,同时每个会员都有购买组合商品的上限!ladder_b_num是已经购买了多少件
  52 + calculate_ladder: function(car, a, th) {
  53 + var car_item = car[a];
  54 + var tfeel = 0,offline_price = 0,offline_num = 0;
  55 + var txt = "requestData[" + a + "].l_need_list";
  56 + var need_to=[];
  57 +
  58 + //活动的列表都存储在这里面,可以快速查询
  59 + if (!car_item.ladder_map) {
  60 + var res = {
  61 + tfeel: tfeel,
  62 + offline_price: offline_price,
  63 + offline_num: offline_num
  64 + };
  65 + th.setData({
  66 + [txt]: null
  67 + });
  68 + return res;
  69 + }
  70 +
  71 + //因为可能有多个组合购的活动
  72 + for (var mi in car_item.ladder_map) {
  73 + var bitem = car_item.ladder_map[mi];
  74 + var act = bitem.act; //获取到组合购的详情
  75 + var all_num = 0; //商品数量之和
  76 + var all_price = 0;
  77 + var aprice=0;
  78 + var no_in_arr = []; //剩余的未加入组合购
  79 +
  80 + var title =""; //提示语;
  81 + var goods = car_item.goods;
  82 +
  83 + //-- 每件商品要剔除的量 --
  84 + for (let v3 in car_item.goods) {
  85 + car_item.goods[v3].l_need_downlow_num=0;
  86 + }
  87 +
  88 + //寻找一下
  89 + function get_num2(ite) {
  90 + var vh=car_item.goods.findIndex(function (e) {
  91 + return e.goods_id == ite.goods_id
  92 + })
  93 + if(vh>-1) return vh;
  94 + return 0;
  95 + }
  96 +
  97 + for (var i in goods) {
  98 + if(goods[i].prom_type!=10) continue;
  99 + if(!goods[i].selected) continue;
  100 + if(goods[i].prom_id!=act.id) continue;
  101 + var item = goods[i];
  102 + item.goods_price=item.goods_price;
  103 + item.offline_price=item.offline_price;
  104 + item.cart_num =item.goods_num;
  105 + all_num += item.cart_num;
  106 + for (var j = 0; j < item.cart_num; j++) {
  107 + no_in_arr.push({
  108 + price: item.goods_price,offline_price:item.offline_price,goods_id:item.goods_id,shop_price:item.shop_price
  109 + })
  110 + }
  111 + }
  112 +
  113 + function sortData(a, b) {
  114 + return a.price - b.price
  115 + }
  116 + no_in_arr.sort(sortData);
  117 +
  118 + //开始阶梯计算价格
  119 + var lev=0;
  120 + for(let j in act.ladder_list){
  121 + if(no_in_arr.length==0) break;
  122 + let item_j=act.ladder_list[j];
  123 + var end=no_in_arr.pop();
  124 + var new_price=parseInt(item_j.discount_field)==1?end.shop_price:end.price;
  125 + aprice+=new_price* parseFloat(item_j.discount)/10;
  126 + lev++;
  127 + }
  128 +
  129 + //获取阶梯促销的下一个促销
  130 + if(lev>0 && lev<act.ladder_list.length){
  131 + title = "再买1件,第"+(lev+1)+"件"+act.ladder_list[lev].discount+"折";
  132 + var it = {
  133 + id: act.id,
  134 + pickup_id: car_item.pid,
  135 + title: title
  136 + };
  137 + need_to.push(it);
  138 + }
  139 +
  140 + all_price+=aprice;
  141 + //算一下剩余的钱
  142 + if (no_in_arr.length) {
  143 + for (var ii in no_in_arr) {
  144 + var item = no_in_arr[ii];
  145 + var gitem=get_num2(item);
  146 + if(gitem) {
  147 + if (!gitem.l_need_downlow_num) {
  148 + gitem.l_need_downlow_num = 1;
  149 + }
  150 + else {
  151 + gitem.l_need_downlow_num++;
  152 + }
  153 + all_price += item.price;
  154 + if (item.offline_price) {
  155 + offline_price += gitem.goods_price - gitem.offline_price;
  156 + offline_num += 1;
  157 + }
  158 + }
  159 + }
  160 + }
  161 + tfeel += all_price;
  162 + }
  163 + var res = {
  164 + tfeel: tfeel,
  165 + aprice:aprice,
  166 + offline_price: offline_price,
  167 + offline_num: offline_num,
  168 + };
  169 +
  170 + th.setData({ [txt]: need_to});
  171 + return res;
  172 + },
  173 +
  174 + find_need_to: function(list, iter) {
  175 + if (!list || list.length <= 0) return -1;
  176 + for (var i in list) {
  177 + var item = list[i];
  178 + if (item.id == iter.id) {
  179 + return i;
  180 + }
  181 + }
  182 + return -1;
  183 + },
  184 +
  185 + //筛选阶梯促销,纯粹的数组按活动id分组
  186 + find_split: function(arr) {
  187 + //过滤只有团购的商品
  188 + var oarr = arr.goods.filter(function(ele) {
  189 + return ele.prom_type == 10
  190 + })
  191 + if(!oarr || oarr.length==0) return null;
  192 + //看一下有多少个不同的团购
  193 + var map = {},dest = [];
  194 + for (var i = 0; i < oarr.length; i++) {
  195 + var ai = oarr[i];
  196 + var index=map[ai.prom_id]
  197 + if (!index) {
  198 + dest.push({
  199 + prom_id: ai.prom_id,
  200 + data: [ai]
  201 + });
  202 + map[ai.prom_id]=dest.length; //存储下标
  203 + } else {
  204 + var dj = dest[index-1];
  205 + dj.data.push(ai);
  206 + }
  207 + }
  208 + return dest;
  209 + }
  210 +
  211 +
  212 +}
... ...
pages/cart/cart2/cart2.js
... ... @@ -4,6 +4,7 @@ var oo = t.globalData.setting, os = oo;
4 4 var regeneratorRuntime = require('../../../utils/runtime.js');
5 5 var util_pay = require("../../../utils/pay.js");
6 6 var zh_calc = require("zh_calculate.js");
  7 +var ladder_calc = require("ladder_calculate.js");
7 8  
8 9 Page({
9 10 data: {
... ... @@ -33,6 +34,7 @@ Page({
33 34 couponCode: "",//使用优惠券(多单就用逗号隔开)
34 35 shipping_price: 0,//物流费用
35 36 },
  37 +
36 38 /*-----------当是购物车结算的时候-------------*/
37 39 cartlist: null,
38 40 old_cartlist: null,
... ... @@ -124,7 +126,10 @@ Page({
124 126 in_zhact_gdmap:{}, //不同门店参与同一活动的限购
125 127 hid_inp:1,
126 128 user_note:{},
127   - zuhe_map_good:{},
  129 + zuhe_map_good:{}, //组合购的map表
  130 + ladder_map:{}, //阶梯促销的map表
  131 +
  132 + state:0, //阶梯促销的的立即购买也走购物车流程state=1
128 133 },
129 134 onLoad: function (t) {
130 135 wx.setNavigationBarTitle({title: "填写订单",})
... ... @@ -140,6 +145,11 @@ Page({
140 145 }
141 146 });
142 147  
  148 + //阶梯购的立即购买
  149 + if(t.state){
  150 + th.data.state=1;
  151 + }
  152 +
143 153  
144 154 },
145 155 onUnload: function () {
... ... @@ -407,9 +417,11 @@ Page({
407 417 //-----真的获取购物车,入口--------
408 418 get_cart: function () {
409 419 var th = this, app = getApp();
  420 + var state=0;
  421 + if(th.data.state) state=1;
410 422 a.get("/api/weshop/cart/list", {
411 423 data: {
412   - user_id: to.globalData.user_id, selected: 1, state: 0,
  424 + user_id: to.globalData.user_id, selected: 1, state: state,
413 425 store_id: oo.stoid, pageSize: 600
414 426 },
415 427 success: async function (su) {
... ... @@ -452,54 +464,113 @@ Page({
452 464 }
453 465  
454 466 //要把组合购的东西拿出来算一下
455   - if (item1.prom_type == 7) {
456   - var isok = 1;
457   - var is_flag=1;
458   - //如果有组合购
459   - var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item1.prom_id+'/'+getApp().globalData.userInfo.user_id;
460   - await getApp().request.promiseGet(url, {}).then(res => {
461   - if (res.data.code == 0 && res.data.data) {
462   - //如果活动已经结束
463   - if (res.data.data.is_end == 1) {
464   - isok = 0;
465   - }
466   - if (ut.gettimestamp() > res.data.data.end_time) {
467   - isok = 0;
  467 + if(item1.prom_type == 7) {
  468 + if(!th.data.zuhe_map_good[item1.prom_id]) {
  469 + var isok = 1;
  470 + var is_flag = 1;
  471 + //如果有组合购
  472 + var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item1.prom_id + '/' + getApp().globalData.userInfo.user_id;
  473 + await getApp().request.promiseGet(url, {}).then(res => {
  474 + if (res.data.code == 0 && res.data.data) {
  475 + //如果活动已经结束
  476 + if (res.data.data.is_end == 1) {
  477 + isok = 0;
  478 + }
  479 + if (ut.gettimestamp() > res.data.data.end_time) {
  480 + isok = 0;
  481 + }
  482 + item1.act = res.data.data;
  483 + } else {
  484 + //未找到商品的活动
  485 + is_flag = 0;
468 486 }
469   - item1.act = res.data.data;
470   - } else {
471   - //未找到商品的活动
472   - is_flag = 0;
  487 + })
  488 + if (!isok) {
  489 + getApp().my_warnning("组合购的活动已经过期", 0, th);
  490 + return false;
473 491 }
474   - })
475   - if (!isok) {
476   - getApp().my_warnning("组合购的活动已经过期", 0, th);
477   - return false;
478   - }
479   - var url1 = "/api/weshop/prom/zhbuyGoods/page";
480   - var req_data = {
481   - page: 1,
482   - pageSize: 2000,
483   - store_id: os.stoid,
484   - zh_id: item1.prom_id,
  492 + var url1 = "/api/weshop/prom/zhbuyGoods/page";
  493 + var req_data = {
  494 + page: 1,
  495 + pageSize: 2000,
  496 + store_id: os.stoid,
  497 + zh_id: item1.prom_id,
  498 + }
  499 + await getApp().request.promiseGet(url1, {
  500 + data: req_data
  501 + }).then(res => {
  502 + if (ut.ajax_ok(res)) {
  503 + var gdlist = res.data.data.pageData;
  504 + gdlist.forEach(i => {
  505 + if (item1.goods_id == i.goods_id && !is_flag) {
  506 + item1.prom_type = 0;
  507 + item1.prom_type1 = 0;
  508 + item1.prom_id = 0;
  509 + item1.prom_id1 = 0
  510 + }
  511 + })
  512 + th.data.zuhe_map_good[item1.prom_id] = gdlist;
  513 + }
  514 + })
485 515 }
486   - await getApp().request.promiseGet(url1, {
487   - data: req_data
488   - }).then(res => {
489   - if (ut.ajax_ok(res)) {
490   - var gdlist = res.data.data.pageData;
491   - gdlist.forEach(i=>{
492   - if(item1.goods_id==i.goods_id&&!is_flag){
493   - item1.prom_type=0;
494   - item1.prom_type1=0;
495   - item1.prom_id=0;
496   - item1.prom_id1=0
  516 + }
  517 + if(item1.prom_type==10){
  518 + if(!th.data.ladder_map[item1.prom_id]){
  519 + //如果有组合购
  520 + var isok = 1;
  521 + var is_flag=1;
  522 + var act=null;
  523 + var url="/api/weshop/prom/ladderForm/get/"+os.stoid+"/"+item1.prom_id;
  524 + await getApp().request.promiseGet(url, {}).then(res => {
  525 + console.log(res,1000);
  526 + if(res.data.code==0 && res.data.data){
  527 + if(res.data.data.isuse!=1){
  528 + isok=0;
497 529 }
498   - })
499   - th.data.zuhe_map_good[item1.prom_id]=gdlist;
  530 + //如果活动已经结束
  531 + if(res.data.data.is_end==1){
  532 + isok=0;
  533 + }
  534 + //已经结束
  535 + if(ut.gettimestamp()>res.data.data.end_time){
  536 + isok=0;
  537 + }
  538 + //还未开始
  539 + if(ut.gettimestamp()<res.data.data.start_time){
  540 + isok=0;
  541 + }
  542 + act=res.data.data;
  543 +
  544 + }else{
  545 + //未找到商品的活动
  546 + is_flag = 0;
  547 + }
  548 + })
  549 + if (!isok){
  550 + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id;
  551 + getApp().request.delete(url, {});
  552 + th.data.ladder_map[item1.prom_id]=-1;
  553 + continue;
500 554 }
501   - })
  555 + th.data.ladder_map[item1.prom_id]=act;
  556 +
  557 + //-- 获取阶梯规则 --
  558 + var url1 = "/api/weshop/prom/ladderList/list";
  559 + var req_data = {
  560 + store_id: os.stoid,
  561 + form_id: item1.prom_id,
  562 + }
  563 + await getApp().request.promiseGet(url1, {
  564 + data: req_data
  565 + }).then(rs1 => {
  566 + if (rs1.data.code==0 && rs1.data.data) {
  567 + var gdlist = rs1.data.data;
  568 + th.data.ladder_map[item1.prom_id].ladder_list=gdlist;
  569 + }
  570 + })
  571 + }
502 572 }
  573 +
503 574 }
504 575  
505 576 //在分组的时候,就不要再调用接口,await
... ... @@ -688,31 +759,31 @@ Page({
688 759 //存储不同活动的商品列表
689 760 u_item.zh_prom_goods = {};
690 761 for (let var1 in obj) {
691   - var h_item=obj[var1];
692   - var gdlist= th.data.zuhe_map_good[h_item.prom_id];
693   - //获取活动需要的商品列表
694   - // u_item.zh_prom_goods[h_item.prom_id]=gdlist;
695   - // var h_item = obj[var1];
696   - // var gdlist = null;
697   - // var url1 = "/api/weshop/prom/zhbuyGoods/page";
698   - // var req_data = {
699   - // page: 1,
700   - // pageSize: 2000,
701   - // store_id: os.stoid,
702   - // zh_id: h_item.prom_id,
703   - // }
704   - // await getApp().request.promiseGet(url1, {
705   - // data: req_data
706   - // }).then(res => {
707   - // if (ut.ajax_ok(res)) {
708   - // gdlist = res.data.data.pageData;
709   - // }
710   - // })
  762 + var h_item = obj[var1];
  763 + var gdlist = th.data.zuhe_map_good[h_item.prom_id];
711 764 //获取活动需要的商品列表
712 765 u_item.zh_prom_goods[h_item.prom_id] = {gdlist: gdlist, act: h_item.act};
713 766 }
714 767 zh_calc.fir_set_arr(u_item, th);
715 768 }
  769 +
  770 + //每一个门店内的阶梯促销要进行拆分,
  771 + //还得把阶梯促销商品的多余商品的线下价格算一算
  772 + for (let var1 in arr) {
  773 + //把阶梯促销进行分组
  774 + var obj = ladder_calc.find_split(u_item);
  775 + if (!obj) continue;
  776 + //存储不同阶梯促销活动的商品列表
  777 + u_item.ladder_map = {};
  778 + for (let var1 in obj) {
  779 + var h_item=obj[var1];
  780 + var act= th.data.ladder_map[h_item.prom_id];
  781 + //获取活动需要的商品列表
  782 + u_item.ladder_map[h_item.prom_id] =act;
  783 + }
  784 + ladder_calc.fir_set_arr(u_item, th);
  785 + }
  786 +
716 787 //深拷贝
717 788 th.data.old_cartlist = JSON.parse(JSON.stringify(arr));
718 789 th.setData({
... ... @@ -1269,6 +1340,7 @@ Page({
1269 1340 var all_coupon_price_m = 0; //所有的订单用户使用优惠券价格
1270 1341 var all_cutprice = 0; //所有的优惠减
1271 1342 var all_zh_cutprice = 0; //所有的组合优惠减
  1343 + var all_ladder_cutprice = 0; //所有的阶梯促销优惠减
1272 1344 var all_order_prom = 0; //所有的订单优惠
1273 1345  
1274 1346 var umoney = th.data.userinfo.user_money - th.data.txmon - (th.data.userinfo.frozen_money ? th.data.userinfo.frozen_money : 0);
... ... @@ -1301,6 +1373,8 @@ Page({
1301 1373 await th.calc_per(c_arr);
1302 1374 //调用函数计算每件组合购商品的单价,
1303 1375 await zh_calc.calc_zh_split_price(c_arr,th);
  1376 + //调用函数计算每件阶梯促销商品的单价,
  1377 + await ladder_calc.calc_split_price(c_arr,th);
1304 1378 //调用函数计算,优惠券优惠什么商品价格,优惠券优惠什么商品
1305 1379 await th.get_cart_quan(c_arr);
1306 1380 //---循环购物车---
... ... @@ -1332,7 +1406,10 @@ Page({
1332 1406 var coupon_price = 0;
1333 1407 var quan_no = null;
1334 1408 var is_has_zh=c_arr[i].is_has_zh;
1335   - var zh_prom_goods=c_arr[i].zh_prom_goods; //组合购计算的原始数据存储空间
  1409 + var is_has_ladder=c_arr[i].is_has_ladder;
  1410 +
  1411 + var zh_prom_goods=c_arr[i].zh_prom_goods; //组合购计算的原始数据存储空间
  1412 + var ladder_prom_goods=c_arr[i].ladder_prom_goods; //组合购计算的原始数据存储空间
1336 1413  
1337 1414 if (th.data.using_quan[pickid] != null && th.data.using_quan[pickid] != undefined)
1338 1415 quan_no = th.data.using_quan[pickid].coupon_no;
... ... @@ -1360,12 +1437,24 @@ Page({
1360 1437  
1361 1438 //--------循环计算总价-----------
1362 1439 for (var j = 0; j < item.length; j++) {
1363   - if(item[j].prom_type!=7){
1364   - o_price_no_zh += item[j].goods_price * item[j].goods_num;
  1440 +
  1441 + var is_no_zh=0;
  1442 + if(item[j].prom_type!=7 || item[j].prom_type!=10 ) is_no_zh=1;
  1443 +
  1444 + //组合购的商品,且有订单优惠的叠加,is_orderyh就是优惠叠加
  1445 + if(item[j].prom_type==7 && zh_prom_goods && zh_prom_goods[item[j].prom_id]
  1446 + && zh_prom_goods[item[j].prom_id].act.is_orderyh )
  1447 + {
  1448 + is_no_zh=1;
1365 1449 }
1366 1450 //组合购的商品,且有订单优惠的叠加,is_orderyh就是优惠叠加
1367   - else if(zh_prom_goods && zh_prom_goods[item[j].prom_id] && zh_prom_goods[item[j].prom_id].act.is_orderyh )
  1451 + if(item[j].prom_type==10 && ladder_prom_goods && ladder_prom_goods[item[j].prom_id]
  1452 + && th.data.ladder_map[item[j].prom_id].is_orderyh )
1368 1453 {
  1454 + is_no_zh=1;
  1455 + }
  1456 +
  1457 + if(is_no_zh){
1369 1458 o_price_no_zh += item[j].goods_price * item[j].goods_num;
1370 1459 }
1371 1460 o_price += item[j].goods_price * item[j].goods_num;
... ... @@ -1391,6 +1480,20 @@ Page({
1391 1480 }
1392 1481 }
1393 1482  
  1483 + //如果有组合购优惠的钱,就要减价
  1484 + if (c_arr[i].ladder_cut_price>0 || c_arr[i].ladder_cut_price<0){
  1485 + o_price -= c_arr[i].ladder_cut_price;
  1486 + if(o_price_no_zh>0){
  1487 + //找到那些可以订单优惠叠加的
  1488 + for(let ij in ladder_prom_goods){
  1489 + let kitem=ladder_prom_goods[ij];
  1490 + var is_has_zh=kitem.is_has_ladder;
  1491 + if(th.data.ladder_map[ij].is_orderyh )
  1492 + o_price_no_zh-=kitem.cut_price;
  1493 + }
  1494 + }
  1495 + }
  1496 +
1394 1497 //-- 计算线下取价的功能 --
1395 1498 if (cart_item.is_offline == 1) {
1396 1499 o_price = o_price - cart_item.offline_price;
... ... @@ -1663,6 +1766,7 @@ Page({
1663 1766 all_coupon_price_m += parseFloat(cart_item.coupon_price);
1664 1767 all_cutprice += parseFloat(cart_item.cut_price);
1665 1768 all_zh_cutprice += parseFloat(cart_item.zh_cut_price);
  1769 + all_ladder_cutprice += parseFloat(cart_item.ladder_cut_price);
1666 1770 all_order_prom += parseFloat(cart_item.order_prom_amount);
1667 1771 }
1668 1772  
... ... @@ -1676,6 +1780,7 @@ Page({
1676 1780 all_cutprice = all_cutprice.toFixed(2);
1677 1781 all_order_prom = all_order_prom.toFixed(2);
1678 1782 all_zh_cutprice = parseFloat(all_zh_cutprice).toFixed(2);
  1783 + all_ladder_cutprice = parseFloat(all_ladder_cutprice).toFixed(2);
1679 1784  
1680 1785 var atxt = "formData.total_amount";
1681 1786 var atxt1 = "formData.order_amount";
... ... @@ -1686,12 +1791,13 @@ Page({
1686 1791 var atxt6 = "formData.cut_price";
1687 1792 var atxt7 = "formData.order_prom_amount";
1688 1793 var atxt8 = "formData.zh_cut_price";
  1794 + var atxt9 = "formData.ladder_cut_price";
1689 1795  
1690 1796 th.setData({
1691 1797 [atxt]: all_total_m, [atxt1]: all_order_m,
1692 1798 [atxt2]: all_price, [atxt3]: all_user_m, [atxt4]: all_shipping_m,
1693 1799 [atxt5]: all_coupon_price_m, [atxt6]: all_cutprice,
1694   - [atxt7]: all_order_prom, show_submit: 1, [atxt8]: all_zh_cutprice
  1800 + [atxt7]: all_order_prom, show_submit: 1, [atxt8]: all_zh_cutprice, [atxt9]: all_ladder_cutprice
1695 1801 })
1696 1802 th.data.order_prom_list_cart = c_arr;
1697 1803 th.set_can_num();
... ... @@ -2379,13 +2485,22 @@ Page({
2379 2485 //--判断优惠活动的提交--
2380 2486 if (t_item.cut_price > 0) {
2381 2487 order_prom_list.discount_amount += t_item.cut_price;
2382   - order_prom_list.prom_pt_json = JSON.stringify(t_item.prom_pt_json);
2383 2488 }
2384 2489 //--判断组合优惠活动的提交--
2385 2490 if (t_item.zh_cut_price > 0 || t_item.zh_cut_price<0) {
2386 2491 order_prom_list.discount_amount += t_item.zh_cut_price;
2387 2492 order_prom_list.zh_pt_json = JSON.stringify(t_item.zh_pt_json);
2388 2493 }
  2494 +
  2495 + //--判断阶梯优惠活动的提交--
  2496 + if (t_item.ladder_cut_price > 0 || t_item.ladder_cut_price<0) {
  2497 + order_prom_list.discount_amount += t_item.ladder_cut_price;
  2498 + }
  2499 +
  2500 + if(t_item.prom_pt_json){
  2501 + order_prom_list.prom_pt_json = JSON.stringify(t_item.prom_pt_json);
  2502 + }
  2503 +
2389 2504 if (t_item.s_intValue > 0) {
2390 2505 order_prom_list.give_integral = t_item.s_intValue;
2391 2506 }
... ...
pages/cart/cart2/cart2.wxml
... ... @@ -95,7 +95,8 @@
95 95  
96 96 <!-----商品名称规格------>
97 97 <view class="order-num flex-space-between">
98   - <view class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view>
  98 + <view wx:if="{{items.prom_type==10}}" class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text><text>({{items.discount}}折)</text></view>
  99 + <view wx:else class="co-red">¥<text class="fs36">{{filters.toFix(items.goods_price,2)}}</text></view>
99 100 <view class="goods-num">x{{items.goods_num}}</view>
100 101 </view>
101 102 </navigator>
... ... @@ -431,6 +432,11 @@
431 432 <view>组合购优惠</view>
432 433 <view class="co-red">- ¥ {{filters.toFix(formData.zh_cut_price,2)}}元</view>
433 434 </view>
  435 + <!-- 组合购优惠金额 -->
  436 + <view class="item" wx:if="{{formData.ladder_cut_price>0 || formData.ladder_cut_price<0}}">
  437 + <view>阶梯促销优惠</view>
  438 + <view class="co-red">- ¥ {{filters.toFix(formData.ladder_cut_price,2)}}元</view>
  439 + </view>
434 440  
435 441 <!-- 订单优惠优惠金额 -->
436 442 <view class="item" wx:if="{{formData.order_prom_amount>0}}">
... ...
pages/cart/cart2/ladder_calculate.js 0 → 100644
  1 +var regeneratorRuntime = require('../../../utils/runtime.js');
  2 +module.exports = {
  3 + //主要的作用,就是把阶梯促销多余的商品进行拆分,
  4 + //如果没有达成阶梯促销的要求,所有的商品都打回原价购买
  5 + fir_set_arr: function (c_item, th) {
  6 + //寻找一下
  7 + function get_num2(ite) {
  8 + var vh = c_item.goods.findIndex(function (e) {
  9 + return e.goods_id == ite.goods_id
  10 + })
  11 + if (vh > -1) return vh;
  12 + return 0;
  13 + }
  14 +
  15 + //组合活动,以及组合活动从表的商品
  16 + let ladder_map = c_item.ladder_map;
  17 + let goods = c_item.goods; //一个门店中所有的商品
  18 + let tfeel = 0, cut_price = 0, offline_price = 0, offline_num = 0;
  19 + //多个活动要拿来循环一下
  20 + for (let i in ladder_map) {
  21 + let title = ""; //提示语;
  22 + //其中的一个活动
  23 + let act_item = ladder_map[i];
  24 + let ladder_list = act_item.ladder_list;
  25 +
  26 + let all_num = 0; //商品数量之和
  27 + let all_price0 = 0; //商品数量之和
  28 + let aprice = 0; //达到活动条件的购买价格
  29 +
  30 + let no_in_arr = []; //剩余的未加入组合购
  31 + let del_g=[];
  32 + for (var li in goods) {
  33 + if (goods[li].prom_type != 10) continue;
  34 + if (goods[li].prom_id != act_item.id) continue;
  35 + var item = goods[li];
  36 + item.goods_price = item.goods_price;
  37 + item.offline_price = item.offline_price;
  38 + item.cart_num = item.goods_num;
  39 + all_num += item.cart_num;
  40 + for (var j = 0; j < item.cart_num; j++) {
  41 + no_in_arr.push({
  42 + price: item.goods_price,
  43 + offline_price: item.offline_price,
  44 + goods_id: item.goods_id,
  45 + shop_price: item.shop_price,
  46 + item:item
  47 + })
  48 + }
  49 + del_g.push(item);
  50 + }
  51 +
  52 + //开始阶梯计算价格
  53 + var lev = 0;
  54 + for (let j in ladder_list) {
  55 + if (no_in_arr.length == 0) break;
  56 + let item_j =ladder_list[j];
  57 + var end = no_in_arr.pop();
  58 + var new_price = parseInt(item_j.discount_field) == 1 ? end.shop_price : end.price;
  59 + var account=new_price * parseFloat(item_j.discount) / 10;
  60 + aprice +=account;
  61 +
  62 + //-- 单个文件新增 --
  63 + let new_g = JSON.parse(JSON.stringify(end.item));
  64 + new_g.goods_num = 1;
  65 + new_g.account = account.toFixed(2);
  66 + new_g.discount = item_j.discount;
  67 + new_g.goods_price =new_price;
  68 + goods.push(new_g);
  69 + lev++;
  70 + }
  71 +
  72 + let goods_map = {};
  73 + //算一下剩余的商品
  74 + if (no_in_arr.length) {
  75 + for (let ii in no_in_arr) {
  76 + let item = no_in_arr[ii];
  77 + if (item.offline_price) {
  78 + offline_price += item.price - item.offline_price;
  79 + offline_num += 1;
  80 + }
  81 + if (goods_map[item.goods_id]) {
  82 + var num = goods_map[item.goods_id];
  83 + goods_map[item.goods_id] = ++num;
  84 + } else {
  85 + goods_map[item.goods_id] = 1;
  86 + }
  87 + }
  88 + }
  89 +
  90 + if (Object.keys(goods_map).length) {
  91 + //这里就开始拆分提交订单时的列表
  92 + for (let j in goods_map) {
  93 + //map中存的就是商品的数量
  94 + let num = goods_map[j];
  95 + //找到相应的商品
  96 + let idx = goods.findIndex(function (ele) {
  97 + return ele.goods_id == j;
  98 + })
  99 + //goods[idx].goods_num -= num;
  100 + let new_g = JSON.parse(JSON.stringify(goods[idx]));
  101 + new_g.goods_num = num;
  102 + new_g.prom_type = 0;
  103 + new_g.prom_id = 0;
  104 + goods.push(new_g);
  105 + goods.splice(idx, 1);
  106 + }
  107 + }
  108 +
  109 + for(var h in del_g){
  110 + var it=del_g[h];
  111 + let idx = goods.findIndex(function (ele) {
  112 + return ele.goods_id == it.goods_id;
  113 + })
  114 + goods.splice(idx, 1);
  115 + }
  116 +
  117 + //-- 只统计是参与活动的商品 --
  118 + for (var ij in goods) {
  119 + var iter = goods[ij];
  120 + if (iter.prom_type != 10 || iter.prom_id != act_item.id) {
  121 + continue;
  122 + }
  123 + all_price0 += iter.goods_num * iter.goods_price;
  124 + }
  125 +
  126 + if(!c_item.ladder_prom_goods) c_item.ladder_prom_goods={};
  127 + if(!c_item.ladder_prom_goods[act_item.id]) c_item.ladder_prom_goods[act_item.id]={};
  128 +
  129 + //-- 活动的条件已经满足 --
  130 + c_item.ladder_prom_goods[act_item.id].is_has_ladder = 1;
  131 + c_item.is_has_ladder = 1;
  132 + c_item.ladder_prom_goods[act_item.id].actual_price = aprice;
  133 + c_item.ladder_prom_goods[act_item.id].cut_price = all_price0 - aprice;
  134 +
  135 + tfeel += aprice;
  136 + cut_price += all_price0 - aprice;
  137 +
  138 + }
  139 +
  140 + c_item.ladder_all_price = tfeel;
  141 + c_item.ladder_cut_price = cut_price;
  142 +
  143 + if (c_item.is_offline == 1) {
  144 + c_item.offline_price += offline_price;
  145 + c_item.offline_num += offline_num;
  146 + } else {
  147 + c_item.is_offline == 1;
  148 + c_item.offline_price = offline_price;
  149 + c_item.offline_num = offline_num;
  150 + }
  151 + },
  152 + //筛选组合购,纯粹的数组按活动id分组
  153 + find_split: function (arr) {
  154 + //过滤只有团购的商品
  155 + let oarr = arr.goods.filter(function (ele) {
  156 + return ele.prom_type == 10
  157 + })
  158 + if (!oarr || oarr.length == 0) return null;
  159 + //看一下有多少个不同的团购
  160 + let map = {},
  161 + dest = [];
  162 + for (let i = 0; i < oarr.length; i++) {
  163 + let ai = oarr[i];
  164 + let index = map[ai.prom_id]
  165 + if (!index) {
  166 + dest.push({
  167 + prom_id: ai.prom_id,
  168 + act: ai.act,
  169 + data: [ai]
  170 + });
  171 + map[ai.prom_id] = dest.length; //存储下标
  172 + } else {
  173 + let dj = dest[index - 1];
  174 + dj.data.push(ai);
  175 + }
  176 + }
  177 + return dest;
  178 + },
  179 +
  180 + //-- 平摊组合购的价格 --
  181 + calc_split_price: async function (c_arr, th) {
  182 + //-- 循环处理 --
  183 + for (var k in c_arr) {
  184 + var cart_item = c_arr[k]; //就是每一单的意思
  185 + var ord_goods = c_arr[k].goods; //就是每一单的从表的意思
  186 +
  187 + var ladder_map = cart_item.ladder_prom_goods; //一单中所有的组合购的集合
  188 + var item_map = {};
  189 + for (let i in ladder_map) {
  190 + let item = ladder_map[i];
  191 + let prom_id = i;
  192 + //如果这个活动还没有达到要求,继续下一个计算
  193 + if (!item.is_has_ladder) continue;
  194 + //过滤出相应组合购活动的商品
  195 + let glist = ord_goods.filter(function (ele) {
  196 + return ele.prom_type == 10 && ele.prom_id == i;
  197 + })
  198 +
  199 + var all_good_price = 0;
  200 + var post_gd = [];
  201 + for (let j in glist) {
  202 + let item = glist[j];
  203 + all_good_price += item.goods_price * item.goods_num;
  204 + var gitem = {
  205 + goods_id: item.goods_id,
  206 + goods_num: item.goods_num,
  207 + goods_price: item.goods_price
  208 + }
  209 + post_gd.push(gitem);
  210 + }
  211 + //要进行优惠的计算
  212 + if (all_good_price - item.actual_price) {
  213 + if (cart_item.prom_pt_json) {
  214 + cart_item.prom_pt_json.push({
  215 + "ladder_prom_id": prom_id,
  216 + "dis": (all_good_price - item.actual_price).toFixed(2),
  217 + "ispt": 0
  218 + })
  219 + } else {
  220 + cart_item.prom_pt_json = [{
  221 + "ladder_prom_id": prom_id,
  222 + "dis": (all_good_price - item.actual_price).toFixed(2),
  223 + "ispt": 0
  224 + }];
  225 + }
  226 + }
  227 + }
  228 +
  229 +
  230 + }
  231 + }
  232 +
  233 +
  234 +}
... ...
pages/cart/cart2_pt/cart2_pt.js
... ... @@ -296,7 +296,7 @@ Page({
296 296 th.setData({ user_addr: ie });
297 297 if (!th.data.user_addr || th.data.user_addr.address_id != ie.address_id) {
298 298 th.setData({ add_back: 1 });
299   - if (this.data.bn_goods) th.calculatePrice2();
  299 + if (th.data.bn_goods) th.calculatePrice2();
300 300 }
301 301 })
302 302 //--更新默认地址--,看一下是不是跳到地址页面
... ...
pages/goods/goodsInfo/goodsInfo.js
... ... @@ -469,7 +469,7 @@ Page({
469 469 } else {
470 470 //要用接口是获取距离,js的计算不准
471 471 getApp().request.promiseGet("/api/weshop/pickup/list", {
472   - data: { store_id: os.stoid, pickup_id: e.pickup_id, lat: th.data.lat, lon: th.data.lon,is_pos:1,isstop:0 },
  472 + data: { store_id: os.stoid, pickup_id: e.pickup_id, lat: th.data.lat, lon: th.data.lon },
473 473 }).then(res => {
474 474 if (res.data.code == 0) {
475 475 e = res.data.data.pageData[0];
... ... @@ -840,7 +840,7 @@ Page({
840 840  
841 841  
842 842 //获取统一条形码,普通商品和优惠促销的商品
843   - if (ee.data.data.prom_type == 0 || ee.data.data.prom_type == 3 || ee.data.data.prom_type == 5 || ee.data.data.prom_type == 7) {
  843 + if (ee.data.data.prom_type == 0 || ee.data.data.prom_type == 3 || ee.data.data.prom_type == 5 || ee.data.data.prom_type == 7 || ee.data.data.prom_type == 10) {
844 844 //默认门店要拿下门店库存
845 845 if (that.data.sales_rules == 2 && that.data.is_newsales_rules) {
846 846 //获取门店
... ... @@ -1056,7 +1056,7 @@ Page({
1056 1056 if (this.data.prom_type == 1 || this.data.prom_type == 2) {
1057 1057 this.getactLen(function (num) {
1058 1058 if (num < th.data.goodsInputNum) {
1059   - getApp().my_warnning("秒杀库存不足!", 0, th);
  1059 + getApp().my_warnning("活动库存不足!", 0, th);
1060 1060 return false;
1061 1061 } else {
1062 1062 th.add_cart_func(t);
... ... @@ -1342,10 +1342,15 @@ Page({
1342 1342 })
1343 1343  
1344 1344 }
1345   - else if (th.data.prom_type == 0 || th.data.prom_type == 3 || th.data.prom_type == 4 || th.data.prom_type == 5) {
  1345 + else if (th.data.prom_type == 0 || th.data.prom_type == 3 || th.data.prom_type == 4 || th.data.prom_type == 5 || th.data.prom_type==10) {
1346 1346 newd.prom_type = 0;
1347 1347 newd.prom_id = 0;
1348 1348  
  1349 + if(th.data.prom_type == 10){
  1350 + newd.prom_type = th.data.prom_type;
  1351 + newd.prom_id = th.data.prom_id;
  1352 + }
  1353 +
1349 1354 //---如果是线下门店销售的时候---
1350 1355 if (th.data.sales_rules == 2) {
1351 1356 var pick = th.get_pick_from_list(th.data.sto_sele_id)
... ... @@ -1506,9 +1511,39 @@ Page({
1506 1511 });
1507 1512  
1508 1513 }
1509   - //else "exchange" == t.currentTarget.dataset.action ? this.exchange(d) : this.buyNow(d);
1510 1514 else {
1511 1515  
  1516 +
  1517 + if(newd.prom_type==10){
  1518 + //----先看会员在购物车中是否加入了该商品,立即购买的-----
  1519 + getApp().request.get("/api/weshop/cart/page", {
  1520 + data: {
  1521 + store_id: e.data.stoid,
  1522 + user_id: oo.user_id,
  1523 + state:1
  1524 + },
  1525 + success: function (res) {
  1526 + //-------如果购物车中有相关的数据---------
  1527 + if (res.data.code==0 && res.data.data.total > 0) {
  1528 + var item=res.data.data.pageData[0];
  1529 + var url = '/api/weshop/cart/del/' +e.data.stoid+ '/' + item.id;
  1530 + getApp().request.delete(url, {});
  1531 + }
  1532 + newd.state=1;
  1533 + getApp().request.post("/api/weshop/cart/save", {
  1534 + data: newd,
  1535 + success: function (t) {
  1536 + th.closeSpecModal();
  1537 + getApp().goto("/pages/cart/cart2/cart2?state=1");
  1538 + }
  1539 + });
  1540 +
  1541 +
  1542 + }
  1543 + })
  1544 + }
  1545 +
  1546 +
1512 1547 if (th.data.prom_goods) {
1513 1548 var prom_d = th.data.prom_goods;
1514 1549 for (var i in prom_d) {
... ... @@ -1803,39 +1838,43 @@ Page({
1803 1838 });
1804 1839 },
1805 1840  
1806   - openSpecModel: function (t) {
1807   - var th = this;
1808   - var open_store = t.currentTarget.dataset.ind;
1809   - this.setData({
1810   - store: 0,
1811   - choice_sort_store: 0,
1812   - sort_store: 0,
1813   - open_ind_store: open_store,
1814   - })
1815   - //--先判断会员状态--
1816   - var user_info = getApp().globalData.userInfo;
1817   - if (user_info == null || user_info.mobile == undefined || user_info.mobile == "" || user_info.mobile == null) {
1818   - wx.navigateTo({
1819   - url: '/pages/togoin/togoin',
1820   - })
1821   - return false;
1822   - }
1823   -
1824   - if(th.data.more_flash && open_store==1){
1825   - th.setData({is_pop_more:1});
1826   - }else{
1827   - var ind = t.currentTarget.dataset.ind;
1828   - //回调。判断是不是优惠促销
1829   - th.check_is_prom_goods(function () {
1830   - th.setData({
1831   - openSpecModal: !0,
1832   - openSpecModal_ind: ind,
1833   - });
1834   - //var is_open=th.data.config
1835   - th.get_off_price();
  1841 + openSpecModel: function (t) {
  1842 + var th = this;
  1843 + var open_store = t.currentTarget.dataset.ind;
  1844 + this.setData({
  1845 + store: 0,
  1846 + choice_sort_store: 0,
  1847 + sort_store: 0,
  1848 + open_ind_store: open_store,
1836 1849 })
1837   - }
1838   - },
  1850 + //--先判断会员状态--
  1851 + var user_info = getApp().globalData.userInfo;
  1852 + if (user_info == null || user_info.mobile == undefined || user_info.mobile == "" || user_info.mobile == null) {
  1853 + wx.navigateTo({
  1854 + url: '/pages/togoin/togoin',
  1855 + })
  1856 + return false;
  1857 + }
  1858 + var is_go_next = 1;
  1859 + if (th.data.more_flash && th.data.more_flash.length > 1 && open_store == 1) {
  1860 + is_go_next = 0;
  1861 + }
  1862 + if (is_go_next) {
  1863 + var ind = t.currentTarget.dataset.ind;
  1864 + //回调。判断是不是优惠促销
  1865 + th.check_is_prom_goods(function () {
  1866 + th.setData({
  1867 + openSpecModal: !0,
  1868 + openSpecModal_ind: ind,
  1869 + });
  1870 + //var is_open=th.data.config
  1871 + th.get_off_price();
  1872 + })
  1873 + } else {
  1874 + th.setData({is_pop_more: 1});
  1875 +
  1876 + }
  1877 + },
1839 1878  
1840 1879 open_next(){
1841 1880 var th=this;
... ... @@ -2498,7 +2537,6 @@ Page({
2498 2537 dd = {
2499 2538 store_id: o.stoid,
2500 2539 isstop: 0,
2501   - is_pos: 1,
2502 2540 pageSize: 2000
2503 2541 }
2504 2542 }
... ... @@ -2997,7 +3035,7 @@ Page({
2997 3035 var user_id=getApp().globalData.user_id;
2998 3036 if(!user_id) user_id=0;
2999 3037  
3000   - if (prom_type == 3 || prom_type == 0 || prom_type == 5 || prom_type == 7) {
  3038 + if (prom_type == 3 || prom_type == 0 || prom_type == 5 || prom_type == 7 || prom_type == 10) {
3001 3039 this.setData({
3002 3040 prom_type: 0,isshow: 1,
3003 3041 });
... ... @@ -3101,6 +3139,7 @@ Page({
3101 3139  
3102 3140  
3103 3141 }
  3142 +
3104 3143 if (prom_type == 1 && prom_id==0){
3105 3144 this.setData({
3106 3145 prom_type: 0,isshow: 1,
... ... @@ -6019,13 +6058,43 @@ Page({
6019 6058 check_has_flash:function () {
6020 6059 var th=this;
6021 6060 var url="/api/weshop/activitylist/getGoodActInfo";
  6061 + var user_id=getApp().globalData.user_id;
  6062 + if(!user_id) user_id=0;
  6063 +
6022 6064 var req_data={
6023   - store_id:os.stoid,goodsidlist:this.data.data.goods_id,is_detail:1
  6065 + store_id:os.stoid,goodsidlist:this.data.data.goods_id,is_detail:1,user_id:user_id
6024 6066 };
6025 6067 //获取秒杀的多规格
6026   - getApp().request.promiseGet(url, {data:req_data}).then(res=>{
  6068 + getApp().request.promiseGet(url, {data:req_data}).then(async function (res) {
6027 6069 if(res.data.code==0 && res.data.data && res.data.data.length){
6028   - th.setData({more_flash:res.data.data});
  6070 + var arr_data=res.data.data;
  6071 + for(let i in arr_data){
  6072 + let item=arr_data[i];
  6073 + if(item.prom_type==10){
  6074 + var url1="/api/weshop/prom/ladderList/list?store_id="+os.stoid+"&form_id="+item.act_id;
  6075 + await getApp().request.promiseGet(url1, {}).then(rs=>{
  6076 + if(rs.data.code==0 && rs.data.data && rs.data.data.length) {
  6077 + var prom_content="";
  6078 + for(let jj in rs.data.data){
  6079 + if(rs.data.data[jj].discount==10){
  6080 + prom_content+="第"+(jj+1)+"件原价,";
  6081 + }else{
  6082 + prom_content+="第"+(jj+1)+"件"+rs.data.data[jj].discount+"折,";
  6083 + }
  6084 + }
  6085 + prom_content=ut.sub_last(prom_content);
  6086 + item.prom_content=prom_content;
  6087 + }
  6088 + })
  6089 + }
  6090 + }
  6091 +
  6092 + if(res.data.data.length=1){
  6093 + th.data.prom_id=res.data.data[0].act_id;
  6094 + th.data.prom_type=res.data.data[0].prom_type;
  6095 + }
  6096 +
  6097 + th.setData({more_flash:arr_data});
6029 6098 }
6030 6099 })
6031 6100 },
... ... @@ -6050,9 +6119,12 @@ Page({
6050 6119 corpId: id,
6051 6120 success(res) {}
6052 6121 })
6053   - }
6054   -
  6122 + },
6055 6123  
  6124 + go_more_ladder:function (e) {
  6125 + var prom_id=e.currentTarget.dataset.id;
  6126 + getApp().goto("/pages/goods/goodsList/goodsList?ladder_id="+prom_id);
  6127 + }
6056 6128  
6057 6129  
6058 6130 });
... ...
pages/goods/goodsInfo/goodsInfo.wxml
... ... @@ -655,23 +655,33 @@
655 655 <block wx:if="{{more_flash}}">
656 656  
657 657 <block wx:for="{{more_flash}}">
658   -
659 658 <view class="cx-frame flex" style="position: relative; height: auto" wx:if="{{item.prom_type==1}}" >
660   - <view class="cx-sizs wsize" style="width: 144rpx">秒杀</view>
661   - <!-- 中间显示层 -->
662   - <view class="flex ai-center jc_sb" style="width: 570rpx" bindtap="go_more_flash" data-id="{{item.act_id}}">
663   - <view class="flex">
664   - <view class="miao_lab">秒</view>
665   - <view class="order_hui">
666   - <view class="fs28 ellipsis-1">{{item.act_name}}</view>
667   - <view class="fs26">
668   - (活动时间:{{tool.format_tt(item.s_time)}} - {{tool.format_tt(item.e_time)}})
  659 + <view class="cx-sizs wsize" style="width: 144rpx">秒杀</view>
  660 + <!-- 中间显示层 -->
  661 + <view class="flex ai-center jc_sb" style="width: 570rpx" bindtap="go_more_flash" data-id="{{item.act_id}}">
  662 + <view class="flex">
  663 + <view class="miao_lab">秒</view>
  664 + <view class="order_hui">
  665 + <view class="fs28 ellipsis-1">{{item.act_name}}</view>
  666 + <view class="fs26">
  667 + (活动时间:{{tool.format_tt(item.s_time)}} - {{tool.format_tt(item.e_time)}})
  668 + </view>
  669 + </view>
669 670 </view>
670   - </view>
  671 + <view><text class="bg_jj is_more_cx" style="position: relative;top:-10rpx"></text></view>
  672 + </view>
  673 + </view>
  674 +
  675 + <view class="cx-frame flex jc_sb" bindtap="go_more_ladder" data-id="{{item.act_id}}" style="position: relative; height: auto" wx:if="{{item.prom_type==10}}">
  676 + <view class="flex" style="width: 92%">
  677 + <view class="cx-sizs fs30" style="width: 90rpx;flex-shrink: 0">阶梯促</view>
  678 + <!-- 中间显示层 -->
  679 + <view class="ellipsis-1 fs24"><text class="jie_show fs22">阶</text>{{item.prom_content}}</view>
  680 + </view>
  681 + <view data-coupon="1" bindtap="show_more_cx" class="cx-obtain-coupon wsize">
  682 + <text class="bg_jj" style="position: relative;right: 3rpx"></text>
671 683 </view>
672   - <view><text class="bg_jj is_more_cx" style="position: relative;top:-10rpx"></text></view>
673 684 </view>
674   - </view>
675 685 </block>
676 686 </block>
677 687 <view class="bz_view flex bdt16" wx:if="{{bconfig}}" style="">
... ...
pages/goods/goodsInfo/goodsInfo.wxss
... ... @@ -2875,4 +2875,6 @@ button.custom-service::after{
2875 2875 line-height: 70rpx;
2876 2876 border-radius: 50%;
2877 2877 color: #aaa;
2878   -}
2879 2878 \ No newline at end of file
  2879 +}
  2880 +
  2881 +.jie_show{ display: inline-block; width: 40rpx; height: 40rpx; background-color:#ff0505;border-radius:50%;color: #fff;text-align: center; margin: 0 20rpx }
2880 2882 \ No newline at end of file
... ...
pages/goods/goodsList/goodsList.wxml
... ... @@ -12,8 +12,10 @@
12 12 <text space="{{true}}" wx:if="{{item.content.is_libao && item.content.is_libao!='0'}}">送{{item.content.lb_name}} </text>
13 13 </view>
14 14 </block>
  15 + <!-- 新增 -->
  16 + <view wx:if="{{jieti_prom}}" class="fs30 ellipsis-1" style="padding: 20rpx">阶梯促销:第一件原价,第二件9折,第三件8折</view>
  17 +
15 18 </view>
16   -
17 19 <view class="pd20 flex ai-center jc_sb">
18 20 <!-- 搜索框 -->
19 21 <view class="search-box f1">
... ...