Commit e29578e1a7e851ad90e7db9858ba753c969269c3
1 parent
b9aff81c
多促销活动的优化
Showing
5 changed files
with
701 additions
and
764 deletions
packageE/pages/cart/cart2/cart2.js
@@ -5,6 +5,9 @@ var regeneratorRuntime = require('../../../../utils/runtime.js'); | @@ -5,6 +5,9 @@ var regeneratorRuntime = require('../../../../utils/runtime.js'); | ||
5 | var util_pay = require("../../../../utils/pay.js"); | 5 | var util_pay = require("../../../../utils/pay.js"); |
6 | var zh_calc = require("zh_calculate.js"); | 6 | var zh_calc = require("zh_calculate.js"); |
7 | var ladder_calc = require("ladder_calculate.js"); | 7 | var ladder_calc = require("ladder_calculate.js"); |
8 | +//公共的函数合并在一起 | ||
9 | +const m_cx = require("../../../../utils/more_cx.js"); | ||
10 | + | ||
8 | // 防抖函数用定时器 | 11 | // 防抖函数用定时器 |
9 | let timer; | 12 | let timer; |
10 | Page({ | 13 | Page({ |
@@ -749,6 +752,8 @@ Page({ | @@ -749,6 +752,8 @@ Page({ | ||
749 | 752 | ||
750 | th.data.cartlist_y = carr; //存储原始购物车列表 | 753 | th.data.cartlist_y = carr; //存储原始购物车列表 |
751 | 754 | ||
755 | + wx.showLoading(); | ||
756 | + | ||
752 | th.get_cart_next(carr); | 757 | th.get_cart_next(carr); |
753 | 758 | ||
754 | } | 759 | } |
@@ -1014,7 +1019,10 @@ Page({ | @@ -1014,7 +1019,10 @@ Page({ | ||
1014 | 1019 | ||
1015 | } | 1020 | } |
1016 | 1021 | ||
1017 | - item.original_img = oo.imghost + item.original_img; | 1022 | + |
1023 | + //商品的图片不能重复的赋值 | ||
1024 | + if(item.original_img.indexOf(oo.imghost)==-1) | ||
1025 | + item.original_img = oo.imghost + item.original_img; | ||
1018 | 1026 | ||
1019 | var car_item = item; | 1027 | var car_item = item; |
1020 | /*----接口要弄出来的,先顶着-----*/ | 1028 | /*----接口要弄出来的,先顶着-----*/ |
@@ -1164,7 +1172,7 @@ Page({ | @@ -1164,7 +1172,7 @@ Page({ | ||
1164 | var c_item = arr[k]; | 1172 | var c_item = arr[k]; |
1165 | if(!is_change){ | 1173 | if(!is_change){ |
1166 | //-- 要进行归类一下活动 -- | 1174 | //-- 要进行归类一下活动 -- |
1167 | - await th.cart_cx_group(arr[k].goods,c_item,(show_can_cx)=>{ | 1175 | + await m_cx.cart_cx_group(th,arr[k].goods,c_item,1,1,(show_can_cx)=>{ |
1168 | arr[k].show_can_cx=show_can_cx; | 1176 | arr[k].show_can_cx=show_can_cx; |
1169 | }) | 1177 | }) |
1170 | }else{ | 1178 | }else{ |
@@ -7120,403 +7128,6 @@ Page({ | @@ -7120,403 +7128,6 @@ Page({ | ||
7120 | }, | 7128 | }, |
7121 | 7129 | ||
7122 | 7130 | ||
7123 | - //-- 判读一下促销分组的问题 -- | ||
7124 | - async cart_cx_group(goods,car_item,func){ | ||
7125 | - //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 | ||
7126 | - if(this.data.change_act){ | ||
7127 | - var show_can_cx=car_item.show_can_cx; | ||
7128 | - for(var k in show_can_cx){ | ||
7129 | - var k_item=show_can_cx[k]; | ||
7130 | - var ck_prom_type=null; | ||
7131 | - //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
7132 | - //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
7133 | - if(k_item.act_arr.length>1){ | ||
7134 | - var json_d =this.data.json_d; | ||
7135 | - var auto_promote_sale=json_d.auto_promote_sale; | ||
7136 | - var sort_type=''; | ||
7137 | - | ||
7138 | - if(!auto_promote_sale){ | ||
7139 | - sort_type='prom_type'; | ||
7140 | - }else{ | ||
7141 | - var auto_promote_sale=auto_promote_sale.split(','); | ||
7142 | - //-- 循环处理 -- | ||
7143 | - k_item.act_arr.map(function (e){ | ||
7144 | - var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
7145 | - e.sort=fd; | ||
7146 | - }) | ||
7147 | - sort_type='sort'; | ||
7148 | - } | ||
7149 | - //-- 排序一下,进行升序 -- | ||
7150 | - function comp(a, b) { | ||
7151 | - return a[sort_type]-b[sort_type]; //升序 | ||
7152 | - } | ||
7153 | - //活动要排序一下 | ||
7154 | - k_item.act_arr.sort(comp); | ||
7155 | - | ||
7156 | - //确定一下活动,先看一下有没有选择的活动 | ||
7157 | - ck_prom_type=k_item.act_arr.find(function (el){ | ||
7158 | - return el.sele; | ||
7159 | - }) | ||
7160 | - | ||
7161 | - } | ||
7162 | - //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
7163 | - if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | ||
7164 | - | ||
7165 | - k_item.sele_prom_type=ck_prom_type.prom_type; | ||
7166 | - | ||
7167 | - //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | ||
7168 | - if(is_need_ck_num){ | ||
7169 | - var t_pid=ck_prom_type.prom_id; | ||
7170 | - switch (ck_prom_type.prom_type){ | ||
7171 | - case 3: | ||
7172 | - if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | ||
7173 | - th.data.in_yhact_new[t_pid]++; | ||
7174 | - break; | ||
7175 | - case 7: | ||
7176 | - if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | ||
7177 | - th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | ||
7178 | - //-- 数组的优化 -- | ||
7179 | - var nei_gd_map=ck_prom_type.in_zhact_gdmap; | ||
7180 | - if(nei_gd_map){ | ||
7181 | - for (var vg in nei_gd_map) { | ||
7182 | - if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | ||
7183 | - th.datain_zhact_gdmap_new[vg] += nei_gd_map[vg]; | ||
7184 | - } | ||
7185 | - } | ||
7186 | - break; | ||
7187 | - } | ||
7188 | - } | ||
7189 | - | ||
7190 | - | ||
7191 | - //-- 此时要把购物车中的商品确定活动 -- | ||
7192 | - for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
7193 | - //-- 开始查找 -- | ||
7194 | - var fg=goods.findIndex(function (g_item){ | ||
7195 | - return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
7196 | - }) | ||
7197 | - if(fg>-1){ | ||
7198 | - goods[fg].prom_type=ck_prom_type.prom_type; | ||
7199 | - goods[fg].prom_id=ck_prom_type.prom_id; | ||
7200 | - } | ||
7201 | - } | ||
7202 | - | ||
7203 | - } | ||
7204 | - func(show_can_cx); | ||
7205 | - return false; | ||
7206 | - } | ||
7207 | - | ||
7208 | - var th=this; | ||
7209 | - //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 --- | ||
7210 | - var cx_act_map=[]; | ||
7211 | - for(var i=0; i<goods.length;i++){ | ||
7212 | - var c_item=goods[i]; | ||
7213 | - //没有选中 | ||
7214 | - if(!c_item.selected) continue; | ||
7215 | - //如果是秒杀之类是商品 | ||
7216 | - if([1,2,4,6,8,9].indexOf(c_item.prom_type)>-1) continue; | ||
7217 | - | ||
7218 | - //-- 把活动进行规整 -- | ||
7219 | - var more_cx=c_item.more_cx; | ||
7220 | - for (var j=0;j<more_cx.length;j++){ | ||
7221 | - var n_item=more_cx[j]; | ||
7222 | - var key=n_item.prom_type+'-'+n_item.prom_id; | ||
7223 | - var fd=cx_act_map.find(function (e){ | ||
7224 | - return e.key==key; | ||
7225 | - }) | ||
7226 | - if(fd){ | ||
7227 | - fd.goods.push(c_item); | ||
7228 | - }else{ | ||
7229 | - var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; | ||
7230 | - if(n_item.prom_type==7){ | ||
7231 | - p_item.zh_pro=n_item.zh_pro; | ||
7232 | - } | ||
7233 | - p_item.goods.push(c_item); | ||
7234 | - cx_act_map.push(p_item); | ||
7235 | - } | ||
7236 | - } | ||
7237 | - //goods[i].prom_type=0; | ||
7238 | - //goods[i].prom_id=0; | ||
7239 | - } | ||
7240 | - //-- 如果活动数量大于1个,那么活动就要排序一下,有商品种类数最多排再前面,降序进行排列 -- | ||
7241 | - if(cx_act_map.length>1){ | ||
7242 | - //门店分类要排序下 | ||
7243 | - function compare(a, b) { | ||
7244 | - var value1 = a.goods.length; | ||
7245 | - var value2 = b.goods.length; | ||
7246 | - return value2 - value1; | ||
7247 | - } | ||
7248 | - cx_act_map.sort(compare); | ||
7249 | - } | ||
7250 | - | ||
7251 | - //-- 在确认订单的页面强行要用数量的控制 | ||
7252 | - var is_need_ck_num=1; | ||
7253 | - //-- 能够进行最后计算的活动(包含切换) -- | ||
7254 | - var can_calc_cx=[]; | ||
7255 | - //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- | ||
7256 | - for(var ii=0;ii<cx_act_map.length;ii++){ | ||
7257 | - | ||
7258 | - var item_act_map=cx_act_map[ii]; | ||
7259 | - //如果活动有交集的时候,商品数量一样多(不是完全相同时,就是参与的商品有交集),就按照后台确定的活动顺序 | ||
7260 | - //如果活动商品数量少的和 活动数量多的 有交集,那么数量少的不显示,也不计算 | ||
7261 | - //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序 | ||
7262 | - if(!th.check_ok_cx_pro(item_act_map,can_calc_cx)){ | ||
7263 | - continue; | ||
7264 | - } | ||
7265 | - switch(item_act_map.prom_type){ | ||
7266 | - case 3: | ||
7267 | - | ||
7268 | - //活动ID | ||
7269 | - var aid=item_act_map.prom_id; | ||
7270 | - var need_num=0; | ||
7271 | - //-- 这个时候要判断是不是要判断优惠促销多门店的时候的限购 -- | ||
7272 | - if(is_need_ck_num){ | ||
7273 | - need_num=th.data.in_yhact_new[aid]?th.data.in_yhact_new[aid]:0; | ||
7274 | - } | ||
7275 | - //-- 判断优惠促销要不要限购 -- | ||
7276 | - var fd=null; | ||
7277 | - var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | ||
7278 | - if(fd_res && fd_res.data.code==0 ){ | ||
7279 | - fd=fd_res.data.data; | ||
7280 | - } | ||
7281 | - //如果有限购的时候,也要计算一下 | ||
7282 | - if (fd && fd['limit_num'] > 0){ | ||
7283 | - //-- 获取已经购买了多少件 -- | ||
7284 | - var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
7285 | - +getApp().globalData.user_id+"&prom_type=3&prom_id="+zh_pro0.id; | ||
7286 | - await getApp().request.promiseGet(url, {}).then(rh => { | ||
7287 | - if(rh.data.code==0){ | ||
7288 | - item_act_map.buyed=rh.data.data.userbuynum; | ||
7289 | - } | ||
7290 | - }) | ||
7291 | - if(item_act_map.buyed+need_num>=fd['limit_num']){ | ||
7292 | - continue; //-- 进行下一个循环 -- | ||
7293 | - } | ||
7294 | - } | ||
7295 | - | ||
7296 | - var fir_act=item_act_map.act.fir_act; | ||
7297 | - var t_goods=item_act_map.goods; | ||
7298 | - var all_num=0; | ||
7299 | - var all_pri=0; | ||
7300 | - for(var f=0;f<t_goods.length;f++){ | ||
7301 | - all_num+=t_goods[f].goods_num; | ||
7302 | - all_pri+=t_goods[f].goods_num*t_goods[f].goods_price; | ||
7303 | - } | ||
7304 | - | ||
7305 | - var yh_ok=1; | ||
7306 | - switch (fir_act.prom_type){ | ||
7307 | - case 0: | ||
7308 | - if(all_pri<fir_act.condition) { | ||
7309 | - yh_ok=0; | ||
7310 | - } | ||
7311 | - break; | ||
7312 | - case 1: | ||
7313 | - if(all_num<fir_act.condition) { | ||
7314 | - yh_ok=0; | ||
7315 | - } | ||
7316 | - break; | ||
7317 | - } | ||
7318 | - | ||
7319 | - //-- 如果有满足优惠条件的时候 -- | ||
7320 | - if(yh_ok){ | ||
7321 | - can_calc_cx.push(item_act_map) | ||
7322 | - } | ||
7323 | - break | ||
7324 | - | ||
7325 | - case 7: | ||
7326 | - //-- 活动列表 -- | ||
7327 | - var zhact_gdlist=item_act_map.act.gdlist; | ||
7328 | - var zh_goods=item_act_map.goods; | ||
7329 | - | ||
7330 | - //--- 要循环计算一下商品的已购数量 --- | ||
7331 | - for(var h=0;h<zh_goods.length;h++){ | ||
7332 | - //-- 商品的限购 -- | ||
7333 | - var promgoodsbuynum = 0; | ||
7334 | - var res=await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { | ||
7335 | - data: { | ||
7336 | - store_id: os.stoid, | ||
7337 | - user_id: getApp().globalData.user_id, | ||
7338 | - goods_id: zh_goods[h].goods_id, | ||
7339 | - prom_type: 7, | ||
7340 | - prom_id: item_act_map.prom_id | ||
7341 | - }, | ||
7342 | - }) | ||
7343 | - if(res.data.code==0 && res.data.data && res.data.data.promgoodsbuynum){ | ||
7344 | - promgoodsbuynum = res.data.data.promgoodsbuynum; | ||
7345 | - } | ||
7346 | - zh_goods[h].zh_b_num=promgoodsbuynum; | ||
7347 | - } | ||
7348 | - //-- 放到map中 -- | ||
7349 | - th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist; | ||
7350 | - if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; | ||
7351 | - car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; | ||
7352 | - | ||
7353 | - var zh_pro0 = th.data.zhhe_act_map[item_act_map.prom_id]; | ||
7354 | - //-- 获取活动信息 -- | ||
7355 | - var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
7356 | - +getApp().globalData.user_id+"&prom_type=7&prom_id="+zh_pro0.id; | ||
7357 | - await getApp().request.promiseGet(url, {}).then(rh => { | ||
7358 | - if(rh.data.code==0){ | ||
7359 | - item_act_map.buyed=rh.data.data.userbuynum; | ||
7360 | - } | ||
7361 | - }) | ||
7362 | - | ||
7363 | - //当满足组合的要求:总数要满足,起购数要满足 | ||
7364 | - if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th,item_act_map,is_need_ck_num)){ | ||
7365 | - can_calc_cx.push(item_act_map) | ||
7366 | - } | ||
7367 | - break; | ||
7368 | - default: | ||
7369 | - can_calc_cx.push(item_act_map); | ||
7370 | - } | ||
7371 | - | ||
7372 | - } | ||
7373 | - | ||
7374 | - //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- | ||
7375 | - //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- | ||
7376 | - //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- | ||
7377 | - var show_can_cx={}; | ||
7378 | - | ||
7379 | - if(can_calc_cx.length){ | ||
7380 | - for(var p=0;p<can_calc_cx.length;p++){ | ||
7381 | - var ch_map=[]; | ||
7382 | - | ||
7383 | - //-- 立即购买的时候,选择的活动是确定的 -- | ||
7384 | - if(can_calc_cx[p].prom_type==can_calc_cx[p].goods[0].prom_type){ | ||
7385 | - can_calc_cx[p].sele=1; | ||
7386 | - } | ||
7387 | - can_calc_cx[p].goods.map(function (gd){ | ||
7388 | - ch_map.push(gd.goods_id); | ||
7389 | - }) | ||
7390 | - ch_map.sort(); | ||
7391 | - //-- 先找一下,有没有参与的商品一模一样的 -- | ||
7392 | - var fd=show_can_cx[ch_map.join()]; | ||
7393 | - if(fd){ | ||
7394 | - //-- 把数组添加进去 --ch_map | ||
7395 | - fd.act_arr.push(can_calc_cx[p]) | ||
7396 | - }else{ | ||
7397 | - var e={ch_map:ch_map,act_arr:[]}; | ||
7398 | - if(ch_map.length>1){ | ||
7399 | - e.is_duo_gd=1; | ||
7400 | - } | ||
7401 | - e.act_arr.push(can_calc_cx[p]); | ||
7402 | - show_can_cx[ch_map.join()]=e; | ||
7403 | - } | ||
7404 | - } | ||
7405 | - } | ||
7406 | - | ||
7407 | - for(var k in show_can_cx){ | ||
7408 | - var k_item=show_can_cx[k]; | ||
7409 | - var ck_prom_type=null; | ||
7410 | - //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
7411 | - //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
7412 | - if(k_item.act_arr.length>1){ | ||
7413 | - var json_d =this.data.json_d; | ||
7414 | - var auto_promote_sale=json_d.auto_promote_sale; | ||
7415 | - var sort_type=''; | ||
7416 | - | ||
7417 | - if(!auto_promote_sale){ | ||
7418 | - sort_type='prom_type'; | ||
7419 | - }else{ | ||
7420 | - var auto_promote_sale=auto_promote_sale.split(','); | ||
7421 | - //-- 循环处理 -- | ||
7422 | - k_item.act_arr.map(function (e){ | ||
7423 | - var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
7424 | - e.sort=fd; | ||
7425 | - }) | ||
7426 | - sort_type='sort'; | ||
7427 | - } | ||
7428 | - //-- 排序一下,进行升序 -- | ||
7429 | - function comp(a, b) { | ||
7430 | - return a[sort_type]-b[sort_type]; //升序 | ||
7431 | - } | ||
7432 | - //活动要排序一下 | ||
7433 | - k_item.act_arr.sort(comp); | ||
7434 | - | ||
7435 | - //确定一下活动,先看一下有没有选择的活动 | ||
7436 | - ck_prom_type=k_item.act_arr.find(function (el){ | ||
7437 | - return el.sele; | ||
7438 | - }) | ||
7439 | - | ||
7440 | - } | ||
7441 | - //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
7442 | - if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | ||
7443 | - | ||
7444 | - k_item.sele_prom_type=ck_prom_type.prom_type; | ||
7445 | - | ||
7446 | - //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | ||
7447 | - if(is_need_ck_num){ | ||
7448 | - var t_pid=ck_prom_type.prom_id; | ||
7449 | - switch (ck_prom_type.prom_type){ | ||
7450 | - case 3: | ||
7451 | - if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | ||
7452 | - th.data.in_yhact_new[t_pid]++; | ||
7453 | - break; | ||
7454 | - case 7: | ||
7455 | - if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | ||
7456 | - th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | ||
7457 | - //-- 数组的优化 -- | ||
7458 | - var nei_gd_map=ck_prom_type.in_zhact_gdmap; | ||
7459 | - if(nei_gd_map){ | ||
7460 | - for (var vg in nei_gd_map) { | ||
7461 | - if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | ||
7462 | - th.data.in_zhact_gdmap_new[vg] += nei_gd_map[vg]; | ||
7463 | - } | ||
7464 | - } | ||
7465 | - break; | ||
7466 | - } | ||
7467 | - } | ||
7468 | - | ||
7469 | - | ||
7470 | - //-- 此时要把购物车中的商品确定活动 -- | ||
7471 | - for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
7472 | - //-- 开始查找 -- | ||
7473 | - var fg=goods.findIndex(function (g_item){ | ||
7474 | - return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
7475 | - }) | ||
7476 | - if(fg>-1){ | ||
7477 | - goods[fg].prom_type=ck_prom_type.prom_type; | ||
7478 | - goods[fg].prom_id=ck_prom_type.prom_id; | ||
7479 | - } | ||
7480 | - } | ||
7481 | - } | ||
7482 | - | ||
7483 | - //-- 显示到前端,并切换 -- | ||
7484 | - //th.setData({show_can_cx}) | ||
7485 | - //--- 调用回调函数 --- | ||
7486 | - func(show_can_cx); | ||
7487 | - }, | ||
7488 | - //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- | ||
7489 | - check_ok_cx_pro(item_act_map,can_calc_cx){ | ||
7490 | - //-- 加入第一个,返回真 -- | ||
7491 | - if(!can_calc_cx.length) return true; | ||
7492 | - var th_goods=item_act_map.goods; | ||
7493 | - for(var i=0;i<can_calc_cx.length;i++){ | ||
7494 | - var can_goods=can_calc_cx[i].goods; | ||
7495 | - //计算一下有交集的数量,没有交集,OK | ||
7496 | - var num=this.hasJiao(can_goods,th_goods); | ||
7497 | - if(!num) continue; | ||
7498 | - //计算一下俩个shu | ||
7499 | - if(can_goods.length==th_goods.length && can_goods.length==num){ | ||
7500 | - return true; | ||
7501 | - } | ||
7502 | - if(can_goods.length>th_goods.length){ | ||
7503 | - return false; | ||
7504 | - } | ||
7505 | - } | ||
7506 | - return true; | ||
7507 | - }, | ||
7508 | - //-- 判断是不是有交集,返回交集的数量 -- | ||
7509 | - hasJiao(arr1, arr2){ | ||
7510 | - var num=0; | ||
7511 | - arr1.map(function (e){ | ||
7512 | - var idx=arr2.findIndex(function (g){ | ||
7513 | - return g.goods_id==e.goods_id; | ||
7514 | - }) | ||
7515 | - if(idx>-1) num++; | ||
7516 | - }) | ||
7517 | - return num; | ||
7518 | - }, | ||
7519 | - | ||
7520 | //-- 开始显示活动的弹出 -- | 7131 | //-- 开始显示活动的弹出 -- |
7521 | switch_cx_group:function (e){ | 7132 | switch_cx_group:function (e){ |
7522 | var idx=e.currentTarget.dataset.index; | 7133 | var idx=e.currentTarget.dataset.index; |
@@ -7582,6 +7193,9 @@ Page({ | @@ -7582,6 +7193,9 @@ Page({ | ||
7582 | if(fg>-1){ | 7193 | if(fg>-1){ |
7583 | goods[fg].prom_type=ck_prom_type.prom_type; | 7194 | goods[fg].prom_type=ck_prom_type.prom_type; |
7584 | goods[fg].prom_id=ck_prom_type.prom_id; | 7195 | goods[fg].prom_id=ck_prom_type.prom_id; |
7196 | + th.data.cartlist_y[idx].goods[fg].prom_type= goods[fg].prom_type; | ||
7197 | + th.data.cartlist_y[idx].goods[fg].prom_id= goods[fg].prom_id; | ||
7198 | + | ||
7585 | } | 7199 | } |
7586 | } | 7200 | } |
7587 | 7201 |
pages/cart/cart/cart.js
@@ -9,7 +9,8 @@ var t = getApp(), | @@ -9,7 +9,8 @@ var t = getApp(), | ||
9 | ladder_calc = require("ladder_calculate.js"); | 9 | ladder_calc = require("ladder_calculate.js"); |
10 | var regeneratorRuntime = require('../../../utils/runtime.js'); | 10 | var regeneratorRuntime = require('../../../utils/runtime.js'); |
11 | const e = require("../../../utils/common.js"); | 11 | const e = require("../../../utils/common.js"); |
12 | - | 12 | +//公共的函数合并在一起 |
13 | +const m_cx = require("../../../utils/more_cx.js"); | ||
13 | 14 | ||
14 | Page({ | 15 | Page({ |
15 | data: { | 16 | data: { |
@@ -1894,9 +1895,12 @@ Page({ | @@ -1894,9 +1895,12 @@ Page({ | ||
1894 | th.data.in_zhact_gdmap = {}; | 1895 | th.data.in_zhact_gdmap = {}; |
1895 | for (var a = 0; a < car.length; a++) { | 1896 | for (var a = 0; a < car.length; a++) { |
1896 | 1897 | ||
1898 | + car[a].zh_map=null; | ||
1899 | + car[a].ladder_map=null; | ||
1900 | + | ||
1897 | var item = car[a].goods, is_s_sele = 1; | 1901 | var item = car[a].goods, is_s_sele = 1; |
1898 | //-- 先批量判断一下活动的类型,同时要同步跟新 -- | 1902 | //-- 先批量判断一下活动的类型,同时要同步跟新 -- |
1899 | - await th.cart_cx_group(item,car[a],1,(show_can_cx)=>{ | 1903 | + await m_cx.cart_cx_group(th,item,car[a],1,0,(show_can_cx)=>{ |
1900 | var offline_price = 0; | 1904 | var offline_price = 0; |
1901 | var offline_num = 0; | 1905 | var offline_num = 0; |
1902 | for (var c = 0; c < item.length; c++) { | 1906 | for (var c = 0; c < item.length; c++) { |
@@ -1922,6 +1926,7 @@ Page({ | @@ -1922,6 +1926,7 @@ Page({ | ||
1922 | obj.goods_num = 0; | 1926 | obj.goods_num = 0; |
1923 | zh_calc.add_zhprom(car, a, obj); | 1927 | zh_calc.add_zhprom(car, a, obj); |
1924 | } | 1928 | } |
1929 | + | ||
1925 | if (item[c].prom_type == 10) { | 1930 | if (item[c].prom_type == 10) { |
1926 | obj.goods_num = 0; | 1931 | obj.goods_num = 0; |
1927 | ladder_calc.add_ladder_prom(car, a, obj); | 1932 | ladder_calc.add_ladder_prom(car, a, obj); |
@@ -1929,6 +1934,8 @@ Page({ | @@ -1929,6 +1934,8 @@ Page({ | ||
1929 | 1934 | ||
1930 | 1935 | ||
1931 | } else { | 1936 | } else { |
1937 | + | ||
1938 | + | ||
1932 | if (item[c].prom_type == 7) { | 1939 | if (item[c].prom_type == 7) { |
1933 | //先把商品放入组合计算的专用的区域 | 1940 | //先把商品放入组合计算的专用的区域 |
1934 | console.log('是组合商品---') | 1941 | console.log('是组合商品---') |
@@ -4204,363 +4211,7 @@ Page({ | @@ -4204,363 +4211,7 @@ Page({ | ||
4204 | }); | 4211 | }); |
4205 | }, | 4212 | }, |
4206 | 4213 | ||
4207 | - //-- 判读一下促销分组的问题 -- | ||
4208 | - async cart_cx_group(goods,car_item,is_need_ck_num,func){ | ||
4209 | - //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 | ||
4210 | - if(this.data.change_act || (car_item.show_can_cx && Object.keys(car_item.show_can_cx).length>0)){ | ||
4211 | - var show_can_cx=car_item.show_can_cx; | ||
4212 | - for(var k in show_can_cx){ | ||
4213 | - var k_item=show_can_cx[k]; | ||
4214 | - var ck_prom_type=null; | ||
4215 | - //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
4216 | - //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
4217 | - if(k_item.act_arr.length>1){ | ||
4218 | - var json_d =this.data.json_d; | ||
4219 | - var auto_promote_sale=json_d.auto_promote_sale; | ||
4220 | - var sort_type=''; | ||
4221 | - | ||
4222 | - if(!auto_promote_sale){ | ||
4223 | - sort_type='prom_type'; | ||
4224 | - }else{ | ||
4225 | - var auto_promote_sale=auto_promote_sale.split(','); | ||
4226 | - //-- 循环处理 -- | ||
4227 | - k_item.act_arr.map(function (e){ | ||
4228 | - var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
4229 | - e.sort=fd; | ||
4230 | - }) | ||
4231 | - sort_type='sort'; | ||
4232 | - } | ||
4233 | - //-- 排序一下,进行升序 -- | ||
4234 | - function comp(a, b) { | ||
4235 | - return a[sort_type]-b[sort_type]; //升序 | ||
4236 | - } | ||
4237 | - //活动要排序一下 | ||
4238 | - k_item.act_arr.sort(comp); | ||
4239 | - | ||
4240 | - //确定一下活动,先看一下有没有选择的活动 | ||
4241 | - ck_prom_type=k_item.act_arr.find(function (el){ | ||
4242 | - return el.sele; | ||
4243 | - }) | ||
4244 | - | ||
4245 | - } | ||
4246 | - //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
4247 | - if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | ||
4248 | - | ||
4249 | - //-- 此时要把购物车中的商品确定活动 -- | ||
4250 | - for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
4251 | - //-- 开始查找 -- | ||
4252 | - var fg=goods.findIndex(function (g_item){ | ||
4253 | - return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
4254 | - }) | ||
4255 | - if(fg>-1){ | ||
4256 | - goods[fg].prom_type=ck_prom_type.prom_type; | ||
4257 | - goods[fg].prom_id=ck_prom_type.prom_id; | ||
4258 | - } | ||
4259 | - } | ||
4260 | - | ||
4261 | - } | ||
4262 | - func(show_can_cx); | ||
4263 | - return false; | ||
4264 | - } | ||
4265 | - | ||
4266 | - var th=this; | ||
4267 | - //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 --- | ||
4268 | - var cx_act_map=[]; | ||
4269 | - for(var i=0; i<goods.length;i++){ | ||
4270 | - var c_item=goods[i]; | ||
4271 | - //没有选中 | ||
4272 | - if(!c_item.selected) continue; | ||
4273 | - //如果是秒杀之类是商品 | ||
4274 | - if([1,2,4,6,8,9].indexOf(c_item.prom_type)>-1) continue; | ||
4275 | - | ||
4276 | - //-- 把活动进行规整 -- | ||
4277 | - var more_cx=c_item.more_cx; | ||
4278 | - for (var j=0;j<more_cx.length;j++){ | ||
4279 | - var n_item=more_cx[j]; | ||
4280 | - var key=n_item.prom_type+'-'+n_item.prom_id; | ||
4281 | - var fd=cx_act_map.find(function (e){ | ||
4282 | - return e.key==key; | ||
4283 | - }) | ||
4284 | - if(fd){ | ||
4285 | - fd.goods.push(c_item); | ||
4286 | - }else{ | ||
4287 | - var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; | ||
4288 | - if(n_item.prom_type==7){ | ||
4289 | - p_item.zh_pro=n_item.zh_pro; | ||
4290 | - } | ||
4291 | - p_item.goods.push(c_item); | ||
4292 | - cx_act_map.push(p_item); | ||
4293 | - } | ||
4294 | - } | ||
4295 | - goods[i].prom_type=0; | ||
4296 | - goods[i].prom_id=0; | ||
4297 | - } | ||
4298 | - //-- 如果活动数量大于1个,那么活动就要排序一下,有商品种类数最多排再前面,降序进行排列 -- | ||
4299 | - if(cx_act_map.length>1){ | ||
4300 | - //门店分类要排序下 | ||
4301 | - function compare(a, b) { | ||
4302 | - var value1 = a.goods.length; | ||
4303 | - var value2 = b.goods.length; | ||
4304 | - return value2 - value1; | ||
4305 | - } | ||
4306 | - cx_act_map.sort(compare); | ||
4307 | - } | ||
4308 | - //-- 能够进行最后计算的活动(包含切换) -- | ||
4309 | - var can_calc_cx=[]; | ||
4310 | - //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- | ||
4311 | - for(var ii=0;ii<cx_act_map.length;ii++){ | ||
4312 | - | ||
4313 | - var item_act_map=cx_act_map[ii]; | ||
4314 | - //如果活动有交集的时候,商品数量一样多(不是完全相同时,就是参与的商品有交集),就按照后台确定的活动顺序 | ||
4315 | - //如果活动商品数量少的和 活动数量多的 有交集,那么数量少的不显示,也不计算 | ||
4316 | - //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序 | ||
4317 | - if(!th.check_ok_cx_pro(item_act_map,can_calc_cx)){ | ||
4318 | - continue; | ||
4319 | - } | ||
4320 | - switch(item_act_map.prom_type){ | ||
4321 | - case 3: | ||
4322 | - //活动ID | ||
4323 | - var aid=item_act_map.prom_id; | ||
4324 | - var need_num=0; | ||
4325 | - //-- 这个时候要判断是不是要判断优惠促销多门店的时候的限购 -- | ||
4326 | - if(is_need_ck_num){ | ||
4327 | - need_num=th.data.in_yhact_new[aid]?th.data.in_yhact_new[aid]:0; | ||
4328 | - } | ||
4329 | - //-- 判断优惠促销要不要限购 -- | ||
4330 | - var fd=null; | ||
4331 | - var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | ||
4332 | - if(fd_res && fd_res.data.code==0 ){ | ||
4333 | - fd=fd_res.data.data; | ||
4334 | - } | ||
4335 | - //如果有限购的时候,也要计算一下 | ||
4336 | - if (fd && fd['limit_num'] > 0){ | ||
4337 | - //-- 获取已经购买了多少件 -- | ||
4338 | - var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
4339 | - +getApp().globalData.user_id+"&prom_type=3&prom_id="+zh_pro0.id; | ||
4340 | - await getApp().request.promiseGet(url, {}).then(rh => { | ||
4341 | - if(rh.data.code==0){ | ||
4342 | - item_act_map.buyed=rh.data.data.userbuynum; | ||
4343 | - } | ||
4344 | - }) | ||
4345 | - if(item_act_map.buyed+need_num>=fd['limit_num']){ | ||
4346 | - continue; //-- 进行下一个循环 -- | ||
4347 | - } | ||
4348 | - } | ||
4349 | - | ||
4350 | - var fir_act=item_act_map.act.fir_act; | ||
4351 | - var t_goods=item_act_map.goods; | ||
4352 | - var all_num=0; | ||
4353 | - var all_pri=0; | ||
4354 | - for(var f=0;f<t_goods.length;f++){ | ||
4355 | - all_num+=t_goods[f].goods_num; | ||
4356 | - all_pri+=t_goods[f].goods_num*t_goods[f].goods_price; | ||
4357 | - } | ||
4358 | - var yh_ok=1; | ||
4359 | - switch (fir_act.prom_type){ | ||
4360 | - case 0: | ||
4361 | - if(all_pri<fir_act.condition) { | ||
4362 | - yh_ok=0; | ||
4363 | - } | ||
4364 | - break; | ||
4365 | - case 1: | ||
4366 | - if(all_num<fir_act.condition) { | ||
4367 | - yh_ok=0; | ||
4368 | - } | ||
4369 | - break; | ||
4370 | - } | ||
4371 | - //-- 如果有满足优惠条件的时候 -- | ||
4372 | - if(yh_ok){ | ||
4373 | - can_calc_cx.push(item_act_map) | ||
4374 | - } | ||
4375 | - break | ||
4376 | - | ||
4377 | - case 7: | ||
4378 | - //-- 活动列表 -- | ||
4379 | - var zhact_gdlist=item_act_map.act.gdlist; | ||
4380 | - var zh_goods=item_act_map.goods; | ||
4381 | - //--- 要循环计算一下商品的已购数量 --- | ||
4382 | - for(var h=0;h<zh_goods.length;h++){ | ||
4383 | - //-- 商品的限购 -- | ||
4384 | - var promgoodsbuynum = 0; | ||
4385 | - var res=await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { | ||
4386 | - data: { | ||
4387 | - store_id: os.stoid, | ||
4388 | - user_id: getApp().globalData.user_id, | ||
4389 | - goods_id: zh_goods[h].goods_id, | ||
4390 | - prom_type: 7, | ||
4391 | - prom_id: item_act_map.prom_id | ||
4392 | - }, | ||
4393 | - }) | ||
4394 | - if(res.data.code==0 && res.data.data && res.data.data.promgoodsbuynum){ | ||
4395 | - promgoodsbuynum = res.data.data.promgoodsbuynum; | ||
4396 | - } | ||
4397 | - zh_goods[h].zh_b_num=promgoodsbuynum; | ||
4398 | - } | ||
4399 | - //-- 放到参与组合优惠促销的map中 -- | ||
4400 | - th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist; | ||
4401 | - if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; | ||
4402 | - car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; | ||
4403 | - | ||
4404 | - var zh_pro0 = th.data.zuhe_map[item_act_map.prom_id]; | ||
4405 | - | ||
4406 | - //-- 获取活动信息 -- | ||
4407 | - var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
4408 | - +getApp().globalData.user_id+"&prom_type=7&prom_id="+zh_pro0.id; | ||
4409 | - await getApp().request.promiseGet(url, {}).then(rh => { | ||
4410 | - if(rh.data.code==0){ | ||
4411 | - item_act_map.buyed=rh.data.data.userbuynum; | ||
4412 | - } | ||
4413 | - }) | ||
4414 | - //当满足组合的要求:总数要满足,起购数要满足 | ||
4415 | - if(zh_calc.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th,item_act_map,is_need_ck_num)){ | ||
4416 | - can_calc_cx.push(item_act_map) | ||
4417 | - } | ||
4418 | - break; | ||
4419 | - default: | ||
4420 | - can_calc_cx.push(item_act_map); | ||
4421 | - } | ||
4422 | - | ||
4423 | - } | ||
4424 | 4214 | ||
4425 | - //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- | ||
4426 | - //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- | ||
4427 | - //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- | ||
4428 | - //-- can_calc_cx的元素(item_act_map)最后是放到act_arr里面去了 -- | ||
4429 | - var show_can_cx={}; | ||
4430 | - if(can_calc_cx.length){ | ||
4431 | - for(var p=0;p<can_calc_cx.length;p++){ | ||
4432 | - var ch_map=[]; | ||
4433 | - can_calc_cx[p].goods.map(function (gd){ | ||
4434 | - ch_map.push(gd.goods_id); | ||
4435 | - }) | ||
4436 | - ch_map.sort(); | ||
4437 | - //-- 先找一下,有没有参与的商品一模一样的 -- | ||
4438 | - var fd=show_can_cx[ch_map.join()]; | ||
4439 | - if(fd){ | ||
4440 | - //-- 把数组添加进去 --ch_map | ||
4441 | - fd.act_arr.push(can_calc_cx[p]) | ||
4442 | - }else{ | ||
4443 | - var e={ch_map:ch_map,act_arr:[]}; | ||
4444 | - if(ch_map.length>1){ | ||
4445 | - e.is_duo_gd=1; | ||
4446 | - } | ||
4447 | - e.act_arr.push(can_calc_cx[p]); | ||
4448 | - show_can_cx[ch_map.join()]=e; | ||
4449 | - } | ||
4450 | - } | ||
4451 | - } | ||
4452 | - | ||
4453 | - for(var k in show_can_cx){ | ||
4454 | - var k_item=show_can_cx[k]; | ||
4455 | - var ck_prom_type=null; | ||
4456 | - //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
4457 | - //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
4458 | - if(k_item.act_arr.length>1){ | ||
4459 | - var json_d =this.data.json_d; | ||
4460 | - var auto_promote_sale=json_d.auto_promote_sale; | ||
4461 | - var sort_type=''; | ||
4462 | - | ||
4463 | - if(!auto_promote_sale){ | ||
4464 | - sort_type='prom_type'; | ||
4465 | - }else{ | ||
4466 | - var auto_promote_sale=auto_promote_sale.split(','); | ||
4467 | - //-- 循环处理 -- | ||
4468 | - k_item.act_arr.map(function (e){ | ||
4469 | - var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
4470 | - e.sort=fd; | ||
4471 | - }) | ||
4472 | - sort_type='sort'; | ||
4473 | - } | ||
4474 | - //-- 排序一下,进行升序 -- | ||
4475 | - function comp(a, b) { | ||
4476 | - return a[sort_type]-b[sort_type]; //升序 | ||
4477 | - } | ||
4478 | - //活动要排序一下 | ||
4479 | - k_item.act_arr.sort(comp); | ||
4480 | - | ||
4481 | - //确定一下活动,先看一下有没有选择的活动 | ||
4482 | - ck_prom_type=k_item.act_arr.find(function (el){ | ||
4483 | - return el.sele; | ||
4484 | - }) | ||
4485 | - | ||
4486 | - } | ||
4487 | - //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
4488 | - if(!ck_prom_type){ | ||
4489 | - ck_prom_type=k_item.act_arr[0]; | ||
4490 | - k_item.act_arr[0].sele=1; | ||
4491 | - } | ||
4492 | - | ||
4493 | - //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | ||
4494 | - if(is_need_ck_num){ | ||
4495 | - var t_pid=ck_prom_type.prom_id; | ||
4496 | - switch (ck_prom_type.prom_type){ | ||
4497 | - case 3: | ||
4498 | - if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | ||
4499 | - th.data.in_yhact_new[t_pid]++; | ||
4500 | - break; | ||
4501 | - case 7: | ||
4502 | - if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | ||
4503 | - th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | ||
4504 | - //-- 数组的优化 -- | ||
4505 | - var nei_gd_map=ck_prom_type.in_zhact_gdmap; | ||
4506 | - if(nei_gd_map){ | ||
4507 | - for (var vg in nei_gd_map) { | ||
4508 | - if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | ||
4509 | - th.data.in_zhact_gdmap_new[vg] += nei_gd_map[vg]; | ||
4510 | - } | ||
4511 | - } | ||
4512 | - break; | ||
4513 | - } | ||
4514 | - } | ||
4515 | - //-- 此时要把购物车中的商品确定活动 -- | ||
4516 | - for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
4517 | - //-- 开始查找 -- | ||
4518 | - var fg=goods.findIndex(function (g_item){ | ||
4519 | - return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
4520 | - }) | ||
4521 | - if(fg>-1){ | ||
4522 | - goods[fg].prom_type=ck_prom_type.prom_type; | ||
4523 | - goods[fg].prom_id=ck_prom_type.prom_id; | ||
4524 | - } | ||
4525 | - } | ||
4526 | - } | ||
4527 | - //-- 显示到前端,并切换 -- | ||
4528 | - //th.setData({show_can_cx}) | ||
4529 | - //--- 调用回调函数 --- | ||
4530 | - func(show_can_cx); | ||
4531 | - | ||
4532 | - }, | ||
4533 | - //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- | ||
4534 | - check_ok_cx_pro(item_act_map,can_calc_cx){ | ||
4535 | - //-- 加入第一个,返回真 -- | ||
4536 | - if(!can_calc_cx.length) return true; | ||
4537 | - var th_goods=item_act_map.goods; | ||
4538 | - for(var i=0;i<can_calc_cx.length;i++){ | ||
4539 | - var can_goods=can_calc_cx[i].goods; | ||
4540 | - //计算一下有交集的数量,没有交集,OK | ||
4541 | - var num=this.hasJiao(can_goods,th_goods); | ||
4542 | - if(!num) continue; | ||
4543 | - //计算一下俩个shu | ||
4544 | - if(can_goods.length==th_goods.length && can_goods.length==num){ | ||
4545 | - return true; | ||
4546 | - } | ||
4547 | - if(can_goods.length>th_goods.length){ | ||
4548 | - return false; | ||
4549 | - } | ||
4550 | - } | ||
4551 | - return true; | ||
4552 | - }, | ||
4553 | - //-- 判断是不是有交集,返回交集的数量 -- | ||
4554 | - hasJiao(arr1, arr2){ | ||
4555 | - var num=0; | ||
4556 | - arr1.map(function (e){ | ||
4557 | - var idx=arr2.findIndex(function (g){ | ||
4558 | - return g.goods_id==e.goods_id; | ||
4559 | - }) | ||
4560 | - if(idx>-1) num++; | ||
4561 | - }) | ||
4562 | - return num; | ||
4563 | - }, | ||
4564 | 4215 | ||
4565 | //-- 开始显示活动的弹出 -- | 4216 | //-- 开始显示活动的弹出 -- |
4566 | switch_cx_group:function (e){ | 4217 | switch_cx_group:function (e){ |
@@ -4607,10 +4258,17 @@ Page({ | @@ -4607,10 +4258,17 @@ Page({ | ||
4607 | else cx_prom_group[dx].sele=1; | 4258 | else cx_prom_group[dx].sele=1; |
4608 | } | 4259 | } |
4609 | 4260 | ||
4610 | - this.cx_check_ok2(function (the_rs){ | 4261 | + this.cx_check_ok2(async function (the_rs){ |
4611 | if(the_rs.code==0){ | 4262 | if(the_rs.code==0){ |
4612 | th.data.change_act=1; | 4263 | th.data.change_act=1; |
4613 | - th.doCheckAll(); | 4264 | + |
4265 | + | ||
4266 | + th.doCheckAll(async function (){ | ||
4267 | + for (var i in th.data.requestData) { | ||
4268 | + await th.check_prom_activity(i) | ||
4269 | + } | ||
4270 | + }); | ||
4271 | + | ||
4614 | }else{ | 4272 | }else{ |
4615 | wx.showToast({ | 4273 | wx.showToast({ |
4616 | title: the_rs.msg, | 4274 | title: the_rs.msg, |
@@ -4655,12 +4313,11 @@ Page({ | @@ -4655,12 +4313,11 @@ Page({ | ||
4655 | } | 4313 | } |
4656 | } | 4314 | } |
4657 | //-- 先批量判断一下活动的类型,同时要同步跟新 -- | 4315 | //-- 先批量判断一下活动的类型,同时要同步跟新 -- |
4658 | - this.cart_cx_group(item,car[c_idx],0,(show_can_cx)=>{ | 4316 | + m_cx.cart_cx_group(this,item,car[c_idx],0,0,(show_can_cx)=>{ |
4659 | car[c_idx].show_can_cx=show_can_cx; | 4317 | car[c_idx].show_can_cx=show_can_cx; |
4660 | th.cx_check_ok2(func,car); | 4318 | th.cx_check_ok2(func,car); |
4661 | }); | 4319 | }); |
4662 | 4320 | ||
4663 | - | ||
4664 | }, | 4321 | }, |
4665 | 4322 | ||
4666 | //--- 在点击商品和或者门店的时候调用,这个可以在活动切换的时候调用,也可以被单个选择调用--- | 4323 | //--- 在点击商品和或者门店的时候调用,这个可以在活动切换的时候调用,也可以被单个选择调用--- |
pages/cart/cart/cart.wxml
@@ -137,7 +137,7 @@ | @@ -137,7 +137,7 @@ | ||
137 | data-index="{{pidx}}" | 137 | data-index="{{pidx}}" |
138 | data-gd_key="{{items.goods_id}}" | 138 | data-gd_key="{{items.goods_id}}" |
139 | class="cx-frame flex" style="position: relative"> | 139 | class="cx-frame flex" style="position: relative"> |
140 | - <view class="cx-sizs fs30">促销</view> | 140 | + <view class="cx-sizs fs30">可参促销</view> |
141 | <view class="flex ai_c f1 pdh20"> | 141 | <view class="flex ai_c f1 pdh20"> |
142 | <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[items.goods_id].act_arr}}" > | 142 | <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[items.goods_id].act_arr}}" > |
143 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> | 143 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> |
@@ -166,7 +166,7 @@ | @@ -166,7 +166,7 @@ | ||
166 | data-index="{{pidx}}" | 166 | data-index="{{pidx}}" |
167 | data-gd_key="{{index}}" | 167 | data-gd_key="{{index}}" |
168 | class="cx-frame flex" style="position: relative"> | 168 | class="cx-frame flex" style="position: relative"> |
169 | - <view class="cx-sizs fs30">促销</view> | 169 | + <view class="cx-sizs fs30">可参促销</view> |
170 | <view class="flex ai_c f1 pdh20"> | 170 | <view class="flex ai_c f1 pdh20"> |
171 | <view class="xc-coupon-fram" wx:for="{{pitem.act_arr}}" > | 171 | <view class="xc-coupon-fram" wx:for="{{pitem.act_arr}}" > |
172 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> | 172 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> |
pages/cart/cart/zh_calculate.js
@@ -787,7 +787,9 @@ module.exports = { | @@ -787,7 +787,9 @@ module.exports = { | ||
787 | item_act_map.in_zhact_gdmap=in_zhact_gdmap; | 787 | item_act_map.in_zhact_gdmap=in_zhact_gdmap; |
788 | return true; | 788 | return true; |
789 | } | 789 | } |
790 | - return false; | 790 | + |
791 | + item_act_map.act_num=0; | ||
792 | + return true; | ||
791 | } | 793 | } |
792 | 794 | ||
793 | 795 |
utils/more_cx.js
0 → 100644
1 | +var regeneratorRuntime = require('runtime.js'); | ||
2 | +module.exports = { | ||
3 | + zhqty_bz_fun(zhqty_bz,be,zhqty_bz_arr){ | ||
4 | + let zhqty_bz_flag =true; | ||
5 | + for(let i=0;i<zhqty_bz.length;i++){ | ||
6 | + let item=zhqty_bz[i]; | ||
7 | + let bz_num = be * item['zhqty']; //超量倍增 | ||
8 | + let num = item['num'] - item['zhqty']; //购买数量减去超量 | ||
9 | + if (bz_num > num) { | ||
10 | + zhqty_bz_flag=false; | ||
11 | + | ||
12 | + var be=0; | ||
13 | + if (num % vv.zhqty == 0) { | ||
14 | + be = num / vv.zhqty; | ||
15 | + } else { | ||
16 | + be = Math.floor(num / vv.zhqty) | ||
17 | + } | ||
18 | + item.be=item; | ||
19 | + | ||
20 | + zhqty_bz_arr.push(item); | ||
21 | + // zhqty_bz.splice(i,1) | ||
22 | + } | ||
23 | + } | ||
24 | + return zhqty_bz_flag; | ||
25 | + }, | ||
26 | + //-- 判断组合购有没有满足,只有在检查的时候,要用新的 --- | ||
27 | + ch_zh_ok(act,gdlist,c_goods,th,item_act_map,is_need_ck_num,need_ok){ | ||
28 | + | ||
29 | + //-- 寻找一下 -- | ||
30 | + function get_num(ite) { | ||
31 | + for (let v1 in c_goods) { | ||
32 | + var vh = c_goods[v1]; | ||
33 | + if (vh.goods_id == ite.goods_id) { | ||
34 | + return vh; | ||
35 | + } | ||
36 | + } | ||
37 | + return 0; | ||
38 | + } | ||
39 | + var goods =gdlist; | ||
40 | + var all_num=0; | ||
41 | + var need_to_buy=0; | ||
42 | + var all_zhqty=0; | ||
43 | + //-- 是综合考虑到组合购的总数量和限购数量 -- | ||
44 | + var min_can_buy=-1; | ||
45 | + var aid=act.id; | ||
46 | + | ||
47 | + let no_in_arr = []; //剩余的未加入组合购 | ||
48 | + let out_arr = []; //超出活动限购的商品放入 | ||
49 | + | ||
50 | + //-- 判断组合购的总数量是不是到了 -- | ||
51 | + if(act.zh_num>0){ | ||
52 | + //如果是在全选的情况下,那么就需要in_zhact_new来控制数量 | ||
53 | + var need_ck=0; | ||
54 | + if(is_need_ck_num){ | ||
55 | + need_ck=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | ||
56 | + } | ||
57 | + if(need_ck+act.zh_buy_num>=act.zh_num ){ | ||
58 | + return false; | ||
59 | + }else{ | ||
60 | + min_can_buy= act.zh_num-act.zh_buy_num-need_ck; | ||
61 | + } | ||
62 | + } | ||
63 | + //-- 判断组合购的限购是不是到了 -- | ||
64 | + if(act.buy_limit>0){ | ||
65 | + var need_ck0=0; | ||
66 | + if(is_need_ck_num){ | ||
67 | + need_ck0=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; | ||
68 | + } | ||
69 | + var min_can_buy0=0; | ||
70 | + if(need_ck+item_act_map.buyed>=act.buy_limit ){ | ||
71 | + return false; | ||
72 | + }else{ | ||
73 | + min_can_buy0=act.buy_limit-item_act_map.buyed-need_ck; | ||
74 | + } | ||
75 | + if(min_can_buy>0){ | ||
76 | + if(min_can_buy0<min_can_buy) min_can_buy=min_can_buy0; | ||
77 | + }else{ | ||
78 | + min_can_buy=min_can_buy0; | ||
79 | + } | ||
80 | + } | ||
81 | + | ||
82 | + if(!need_ok) return true; | ||
83 | + for (var i in goods) { | ||
84 | + var item = goods[i]; | ||
85 | + var cart_num = get_num(item).goods_num; | ||
86 | + var zh_b_num = get_num(item).zh_b_num; | ||
87 | + if (!cart_num) { | ||
88 | + if (item.zhqty) { | ||
89 | + need_to_buy += item.zhqty; | ||
90 | + } | ||
91 | + continue; | ||
92 | + } | ||
93 | + | ||
94 | + item.cart_num = cart_num; | ||
95 | + //-- 当商品有购买的时候,以及有限购的时候 -- | ||
96 | + if (item.buyqty > 0) { | ||
97 | + var cbuy = item.buyqty - zh_b_num; | ||
98 | + var key = item.goods_id + "." + act.id; | ||
99 | + if (is_need_ck_num && th.data.in_zhact_gdmap_new[key]) { | ||
100 | + var cbuy = item.buyqty - zh_b_num - th.data.in_zhact_gdmap_new[key]; | ||
101 | + } | ||
102 | + //当可买的数量为0 | ||
103 | + if (cbuy <= 0) { | ||
104 | + item.num = 0; | ||
105 | + out_arr.push({ | ||
106 | + goods_id: item.goods_id, | ||
107 | + num: cart_num | ||
108 | + }) | ||
109 | + } else { | ||
110 | + if (cbuy >= cart_num) item.num = cart_num; | ||
111 | + else { | ||
112 | + item.num = cbuy; | ||
113 | + out_arr.push({ | ||
114 | + goods_id: item.goods_id, | ||
115 | + num: cart_num - cbuy | ||
116 | + }) | ||
117 | + } | ||
118 | + } | ||
119 | + } else { | ||
120 | + item.num = cart_num; | ||
121 | + } | ||
122 | + | ||
123 | + if (item.num) { | ||
124 | + all_num += item.num; | ||
125 | + //当有起购数的控制的时候 | ||
126 | + if (item.zhqty) { | ||
127 | + all_zhqty += item.zhqty; | ||
128 | + if (item.num < item.zhqty) { | ||
129 | + need_to_buy += item.zhqty - item.num; | ||
130 | + } | ||
131 | + if (item.num > item.zhqty) { | ||
132 | + for (let i = 0; i < item.num - item.zhqty; i++) { | ||
133 | + no_in_arr.push({ | ||
134 | + goods_id: item.goods_id, | ||
135 | + }) | ||
136 | + } | ||
137 | + } | ||
138 | + } | ||
139 | + else { | ||
140 | + for (let j = 0; j < item.num; j++) { | ||
141 | + no_in_arr.push({ | ||
142 | + goods_id: item.goods_id, | ||
143 | + }) | ||
144 | + } | ||
145 | + } | ||
146 | + } else { | ||
147 | + if (item.zhqty) { | ||
148 | + need_to_buy += item.zhqty; | ||
149 | + } | ||
150 | + } | ||
151 | + } | ||
152 | + //当满足组合的要求:总数要满足,起购数要满足 | ||
153 | + if (all_num >= act.zhbuyqty && !need_to_buy) { | ||
154 | + //默认数量是1 | ||
155 | + var act_num=1; | ||
156 | + function sortData(a, b) { | ||
157 | + return a.price - b.price | ||
158 | + } | ||
159 | + if (no_in_arr.length > 0) no_in_arr.sort(sortData); | ||
160 | + if (act.zhbuyqty > all_zhqty) { | ||
161 | + for (let n = 0; n < act.zhbuyqty - all_zhqty; n++) { | ||
162 | + no_in_arr.pop(); | ||
163 | + } | ||
164 | + } | ||
165 | + | ||
166 | + //看一下剩下的数量有没有满足组合购的要求,以及要不要倍增 | ||
167 | + if (act.is_bz && no_in_arr.length >= act.zhbuyqty) { | ||
168 | + | ||
169 | + var bz_num_ok = 0; //超量倍增是否满足 | ||
170 | + var zhqty_len = 0; //几个超量倍增 | ||
171 | + var delete_num = 0; | ||
172 | + //看一下是几倍 | ||
173 | + let be = parseInt(no_in_arr.length / act.zhbuyqty); | ||
174 | + //如果有总数控制的时候 | ||
175 | + if (min_can_buy>0) { | ||
176 | + var be1 = min_can_buy - 1; | ||
177 | + if (be1 < be) be = be1; | ||
178 | + } | ||
179 | + if(be) { | ||
180 | + if (act.is_bzyh && zhqty_bz.length > 0) { | ||
181 | + | ||
182 | + let zhqty_bz_arr = []; | ||
183 | + let zhqty_bz_flag = this.zhqty_bz_fun(zhqty_bz, be, zhqty_bz_arr); | ||
184 | + if (zhqty_bz_flag) { | ||
185 | + for (let i = 0; i < zhqty_bz.length; i++) { | ||
186 | + var vv = zhqty_bz[i]; | ||
187 | + for (let j = 0; j < be * vv['zhqty']; j++) { | ||
188 | + let index = no_in_arr.findIndex(i => { | ||
189 | + return vv.goods_id === i.goods_id | ||
190 | + }) | ||
191 | + if (index > -1) { | ||
192 | + delete_num++ | ||
193 | + no_in_arr.splice(index, 1) | ||
194 | + } | ||
195 | + } | ||
196 | + } | ||
197 | + } else { | ||
198 | + zhqty_len = 1; | ||
199 | + let min_bz_num = Math.min.apply(Math, zhqty_bz_arr.map(function (o) { | ||
200 | + return o['be']; | ||
201 | + })); | ||
202 | + let new_arr = zhqty_bz_arr.filter(ii => { | ||
203 | + return ii['be'] == min_bz_num; | ||
204 | + }) | ||
205 | + //-- 要看一下倍数还有没有 --- | ||
206 | + be = new_arr[0].be; | ||
207 | + //如果有总数控制的时候 | ||
208 | + if (min_can_buy>0) { | ||
209 | + var be1 = min_can_buy - 1; | ||
210 | + if (be1 < be) be = be1; | ||
211 | + } | ||
212 | + if(be){ | ||
213 | + for (let i = 0; i < zhqty_bz.length; i++) { | ||
214 | + let item1 = zhqty_bz[i]; | ||
215 | + for (let j = 0; j < be * item1['zhqty']; j++) { | ||
216 | + let index = no_in_arr.findIndex(i => { | ||
217 | + return item1.goods_id === i.goods_id | ||
218 | + }) | ||
219 | + if (index > -1) { | ||
220 | + no_in_arr.splice(index, 1) | ||
221 | + } | ||
222 | + } | ||
223 | + } | ||
224 | + act_num+=be; | ||
225 | + } | ||
226 | + } | ||
227 | + } | ||
228 | + if (!zhqty_len) { | ||
229 | + let pop_num = be * act.zhbuyqty - delete_num; | ||
230 | + for (var m = 0; m < pop_num; m++) { | ||
231 | + no_in_arr.pop(); | ||
232 | + } | ||
233 | + act_num+=be; | ||
234 | + } | ||
235 | + } | ||
236 | + } | ||
237 | + | ||
238 | + //-- 参与活动的金额要返回回去 -- | ||
239 | + item_act_map.act_num=act_num; | ||
240 | + let goods_map = {}; | ||
241 | + //算一下剩余的商品 | ||
242 | + if (no_in_arr.length) { | ||
243 | + for (let ii in no_in_arr) { | ||
244 | + let item = no_in_arr[ii]; | ||
245 | + if (goods_map[item.goods_id]) { | ||
246 | + var num = goods_map[item.goods_id]; | ||
247 | + goods_map[item.goods_id] = ++num; | ||
248 | + } else { | ||
249 | + goods_map[item.goods_id] = 1; | ||
250 | + } | ||
251 | + } | ||
252 | + } | ||
253 | + //超量的部分也要计算一下 | ||
254 | + if (out_arr.length) { | ||
255 | + for (var m in out_arr) { | ||
256 | + if (goods_map[item.goods_id]) { | ||
257 | + var num = goods_map[item.goods_id]; | ||
258 | + num += item.num | ||
259 | + goods_map[item.goods_id] = num; | ||
260 | + } else { | ||
261 | + goods_map[item.goods_id] = item.num; | ||
262 | + } | ||
263 | + } | ||
264 | + } | ||
265 | + | ||
266 | + //-- 组合购的商品限购的数组控制 -- | ||
267 | + var in_zhact_gdmap={}; | ||
268 | + //商品的列表 | ||
269 | + for (var u in goods) { | ||
270 | + var ite = goods[u]; | ||
271 | + var cart_num = get_num(ite).goods_num; | ||
272 | + | ||
273 | + if (ite.buyqty > 0 && cart_num > 0) { | ||
274 | + var key = ite.goods_id + "." + act.id; | ||
275 | + if(goods_map[ite.goods_id]){ | ||
276 | + cart_num-=goods_map[ite.goods_id]; | ||
277 | + } | ||
278 | + if(cart_num>0){ | ||
279 | + if (in_zhact_gdmap[key]) { | ||
280 | + in_zhact_gdmap[key] += ite.num; | ||
281 | + } else { | ||
282 | + in_zhact_gdmap[key] = ite.num; | ||
283 | + } | ||
284 | + } | ||
285 | + | ||
286 | + } | ||
287 | + } | ||
288 | + item_act_map.in_zhact_gdmap=in_zhact_gdmap; | ||
289 | + return true; | ||
290 | + } | ||
291 | + return false; | ||
292 | + }, | ||
293 | + //-- 判读一下促销分组的问题 -- | ||
294 | + //-- is_need_ck_num 是多门店计算的时候,数量是不是要累家计算 -- | ||
295 | + //-- need_ok是判断要不要满足条件 -- | ||
296 | + async cart_cx_group(th,goods,car_item,is_need_ck_num,need_ok,func){ | ||
297 | + | ||
298 | + var os= getApp().globalData.setting; | ||
299 | + //更改活动的时候,就不能再重新计算活动,只有再加减数量和选择商品的时候,就要重新计算活动 | ||
300 | + if(th.data.change_act || (car_item.show_can_cx && Object.keys(car_item.show_can_cx).length>0)){ | ||
301 | + var show_can_cx=car_item.show_can_cx; | ||
302 | + for(var k in show_can_cx){ | ||
303 | + var k_item=show_can_cx[k]; | ||
304 | + var ck_prom_type=null; | ||
305 | + //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
306 | + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
307 | + if(k_item.act_arr.length>1){ | ||
308 | + var json_d =th.data.json_d; | ||
309 | + var auto_promote_sale=json_d.auto_promote_sale; | ||
310 | + var sort_type=''; | ||
311 | + | ||
312 | + if(!auto_promote_sale){ | ||
313 | + sort_type='prom_type'; | ||
314 | + }else{ | ||
315 | + var auto_promote_sale=auto_promote_sale.split(','); | ||
316 | + //-- 循环处理 -- | ||
317 | + k_item.act_arr.map(function (e){ | ||
318 | + var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
319 | + e.sort=fd; | ||
320 | + }) | ||
321 | + sort_type='sort'; | ||
322 | + } | ||
323 | + //-- 排序一下,进行升序 -- | ||
324 | + function comp(a, b) { | ||
325 | + return a[sort_type]-b[sort_type]; //升序 | ||
326 | + } | ||
327 | + //活动要排序一下 | ||
328 | + k_item.act_arr.sort(comp); | ||
329 | + | ||
330 | + //确定一下活动,先看一下有没有选择的活动 | ||
331 | + ck_prom_type=k_item.act_arr.find(function (el){ | ||
332 | + return el.sele; | ||
333 | + }) | ||
334 | + | ||
335 | + } | ||
336 | + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
337 | + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0]; | ||
338 | + | ||
339 | + //-- 此时要把购物车中的商品确定活动 -- | ||
340 | + for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
341 | + //-- 开始查找 -- | ||
342 | + var fg=goods.findIndex(function (g_item){ | ||
343 | + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
344 | + }) | ||
345 | + if(fg>-1){ | ||
346 | + goods[fg].prom_type=ck_prom_type.prom_type; | ||
347 | + goods[fg].prom_id=ck_prom_type.prom_id; | ||
348 | + } | ||
349 | + } | ||
350 | + | ||
351 | + } | ||
352 | + func(show_can_cx); | ||
353 | + return false; | ||
354 | + } | ||
355 | + | ||
356 | + //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 --- | ||
357 | + var cx_act_map=[]; | ||
358 | + for(var i=0; i<goods.length;i++){ | ||
359 | + var c_item=goods[i]; | ||
360 | + //没有选中 | ||
361 | + if(!c_item.selected) continue; | ||
362 | + //如果是秒杀之类是商品 | ||
363 | + if([1,2,4,6,8,9].indexOf(c_item.prom_type)>-1) continue; | ||
364 | + | ||
365 | + //-- 把活动进行规整 -- | ||
366 | + var more_cx=c_item.more_cx; | ||
367 | + for (var j=0;j<more_cx.length;j++){ | ||
368 | + var n_item=more_cx[j]; | ||
369 | + var key=n_item.prom_type+'-'+n_item.prom_id; | ||
370 | + var fd=cx_act_map.find(function (e){ | ||
371 | + return e.key==key; | ||
372 | + }) | ||
373 | + if(fd){ | ||
374 | + fd.goods.push(c_item); | ||
375 | + }else{ | ||
376 | + var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item}; | ||
377 | + if(n_item.prom_type==7){ | ||
378 | + p_item.zh_pro=n_item.zh_pro; | ||
379 | + } | ||
380 | + p_item.goods.push(c_item); | ||
381 | + cx_act_map.push(p_item); | ||
382 | + } | ||
383 | + } | ||
384 | + goods[i].prom_type=0; | ||
385 | + goods[i].prom_id=0; | ||
386 | + } | ||
387 | + //-- 如果活动数量大于1个,那么活动就要排序一下,有商品种类数最多排再前面,降序进行排列 -- | ||
388 | + if(cx_act_map.length>1){ | ||
389 | + //门店分类要排序下 | ||
390 | + function compare(a, b) { | ||
391 | + var value1 = a.goods.length; | ||
392 | + var value2 = b.goods.length; | ||
393 | + return value2 - value1; | ||
394 | + } | ||
395 | + cx_act_map.sort(compare); | ||
396 | + } | ||
397 | + //-- 能够进行最后计算的活动(包含切换) -- | ||
398 | + var can_calc_cx=[]; | ||
399 | + //-- 此时对数组的活动进行判断,看能不能达到购买数量的条件 -- | ||
400 | + for(var ii=0;ii<cx_act_map.length;ii++){ | ||
401 | + | ||
402 | + var item_act_map=cx_act_map[ii]; | ||
403 | + //如果活动有交集的时候,商品数量一样多(不是完全相同时,就是参与的商品有交集),就按照后台确定的活动顺序 | ||
404 | + //如果活动商品数量少的和 活动数量多的 有交集,那么数量少的不显示,也不计算 | ||
405 | + //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序 | ||
406 | + if(!this.check_ok_cx_pro(item_act_map,can_calc_cx)){ | ||
407 | + continue; | ||
408 | + } | ||
409 | + switch(item_act_map.prom_type){ | ||
410 | + case 3: | ||
411 | + //活动ID | ||
412 | + var aid=item_act_map.prom_id; | ||
413 | + var need_num=0; | ||
414 | + //-- 这个时候要判断是不是要判断优惠促销多门店的时候的限购 -- | ||
415 | + if(is_need_ck_num){ | ||
416 | + need_num=th.data.in_yhact_new[aid]?th.data.in_yhact_new[aid]:0; | ||
417 | + } | ||
418 | + //-- 判断优惠促销要不要限购 -- | ||
419 | + var fd=null; | ||
420 | + var fd_res = await getApp().request.promiseGet('/api/weshop/promgoods/get/'+os.stoid+'/'+ky0,{}) | ||
421 | + if(fd_res && fd_res.data.code==0 ){ | ||
422 | + fd=fd_res.data.data; | ||
423 | + } | ||
424 | + //如果有限购的时候,也要计算一下 | ||
425 | + if (fd && fd['limit_num'] > 0){ | ||
426 | + //-- 获取已经购买了多少件 -- | ||
427 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
428 | + +getApp().globalData.user_id+"&prom_type=3&prom_id="+zh_pro0.id; | ||
429 | + await getApp().request.promiseGet(url, {}).then(rh => { | ||
430 | + if(rh.data.code==0){ | ||
431 | + item_act_map.buyed=rh.data.data.userbuynum; | ||
432 | + } | ||
433 | + }) | ||
434 | + if(item_act_map.buyed+need_num>=fd['limit_num']){ | ||
435 | + continue; //-- 进行下一个循环 -- | ||
436 | + } | ||
437 | + } | ||
438 | + | ||
439 | + if(!need_ok){ | ||
440 | + can_calc_cx.push(item_act_map); | ||
441 | + continue; | ||
442 | + } | ||
443 | + | ||
444 | + var fir_act=item_act_map.act.fir_act; | ||
445 | + var t_goods=item_act_map.goods; | ||
446 | + var all_num=0; | ||
447 | + var all_pri=0; | ||
448 | + for(var f=0;f<t_goods.length;f++){ | ||
449 | + all_num+=t_goods[f].goods_num; | ||
450 | + all_pri+=t_goods[f].goods_num*t_goods[f].goods_price; | ||
451 | + } | ||
452 | + var yh_ok=1; | ||
453 | + switch (fir_act.prom_type){ | ||
454 | + case 0: | ||
455 | + if(all_pri<fir_act.condition) { | ||
456 | + yh_ok=0; | ||
457 | + } | ||
458 | + break; | ||
459 | + case 1: | ||
460 | + if(all_num<fir_act.condition) { | ||
461 | + yh_ok=0; | ||
462 | + } | ||
463 | + break; | ||
464 | + } | ||
465 | + //-- 如果有满足优惠条件的时候 -- | ||
466 | + if(yh_ok){ | ||
467 | + can_calc_cx.push(item_act_map) | ||
468 | + } | ||
469 | + break | ||
470 | + | ||
471 | + case 7: | ||
472 | + //-- 活动列表 -- | ||
473 | + var zhact_gdlist=item_act_map.act.gdlist; | ||
474 | + var zh_goods=item_act_map.goods; | ||
475 | + //--- 要循环计算一下商品的已购数量 --- | ||
476 | + for(var h=0;h<zh_goods.length;h++){ | ||
477 | + //-- 商品的限购 -- | ||
478 | + var promgoodsbuynum = 0; | ||
479 | + var res=await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { | ||
480 | + data: { | ||
481 | + store_id: os.stoid, | ||
482 | + user_id: getApp().globalData.user_id, | ||
483 | + goods_id: zh_goods[h].goods_id, | ||
484 | + prom_type: 7, | ||
485 | + prom_id: item_act_map.prom_id | ||
486 | + }, | ||
487 | + }) | ||
488 | + if(res.data.code==0 && res.data.data && res.data.data.promgoodsbuynum){ | ||
489 | + promgoodsbuynum = res.data.data.promgoodsbuynum; | ||
490 | + } | ||
491 | + zh_goods[h].zh_b_num=promgoodsbuynum; | ||
492 | + } | ||
493 | + //-- 放到参与组合优惠促销的map中 -- | ||
494 | + th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist; | ||
495 | + if(!car_item.zh_prom_goods) car_item.zh_prom_goods={}; | ||
496 | + car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist; | ||
497 | + | ||
498 | + //-- 兼容购物车和确认订单的页面 -- | ||
499 | + var ob=th.data.zuhe_map; | ||
500 | + if(!ob) ob=th.data.zhhe_act_map; | ||
501 | + | ||
502 | + var zh_pro0 = ob[item_act_map.prom_id]; | ||
503 | + | ||
504 | + //-- 获取活动信息 -- | ||
505 | + var url = "/api/weshop/ordergoods/getUserBuyPromNum?store_id="+os.stoid+"&user_id=" | ||
506 | + +getApp().globalData.user_id+"&prom_type=7&prom_id="+zh_pro0.id; | ||
507 | + await getApp().request.promiseGet(url, {}).then(rh => { | ||
508 | + if(rh.data.code==0){ | ||
509 | + item_act_map.buyed=rh.data.data.userbuynum; | ||
510 | + } | ||
511 | + }) | ||
512 | + //当满足组合的要求:总数要满足,起购数要满足 | ||
513 | + if(this.ch_zh_ok(zh_pro0,zhact_gdlist,zh_goods,th,item_act_map,is_need_ck_num,need_ok)){ | ||
514 | + can_calc_cx.push(item_act_map) | ||
515 | + } | ||
516 | + break; | ||
517 | + default: | ||
518 | + can_calc_cx.push(item_act_map); | ||
519 | + } | ||
520 | + | ||
521 | + } | ||
522 | + | ||
523 | + //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, -- | ||
524 | + //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。-- | ||
525 | + //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 -- | ||
526 | + //-- can_calc_cx的元素(item_act_map)最后是放到act_arr里面去了 -- | ||
527 | + var show_can_cx={}; | ||
528 | + if(can_calc_cx.length){ | ||
529 | + for(var p=0;p<can_calc_cx.length;p++){ | ||
530 | + var ch_map=[]; | ||
531 | + can_calc_cx[p].goods.map(function (gd){ | ||
532 | + ch_map.push(gd.goods_id); | ||
533 | + }) | ||
534 | + ch_map.sort(); | ||
535 | + //-- 先找一下,有没有参与的商品一模一样的 -- | ||
536 | + var fd=show_can_cx[ch_map.join()]; | ||
537 | + if(fd){ | ||
538 | + //-- 把数组添加进去 --ch_map | ||
539 | + fd.act_arr.push(can_calc_cx[p]) | ||
540 | + }else{ | ||
541 | + var e={ch_map:ch_map,act_arr:[]}; | ||
542 | + if(ch_map.length>1){ | ||
543 | + e.is_duo_gd=1; | ||
544 | + } | ||
545 | + e.act_arr.push(can_calc_cx[p]); | ||
546 | + show_can_cx[ch_map.join()]=e; | ||
547 | + } | ||
548 | + } | ||
549 | + } | ||
550 | + | ||
551 | + for(var k in show_can_cx){ | ||
552 | + var k_item=show_can_cx[k]; | ||
553 | + var ck_prom_type=null; | ||
554 | + //-- 如果是多活动,先把活动按照后台的顺序排序一下, | ||
555 | + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 -- | ||
556 | + if(k_item.act_arr.length>1){ | ||
557 | + var json_d =th.data.json_d; | ||
558 | + var auto_promote_sale=json_d.auto_promote_sale; | ||
559 | + var sort_type=''; | ||
560 | + | ||
561 | + if(!auto_promote_sale){ | ||
562 | + sort_type='prom_type'; | ||
563 | + }else{ | ||
564 | + var auto_promote_sale=auto_promote_sale.split(','); | ||
565 | + //-- 循环处理 -- | ||
566 | + k_item.act_arr.map(function (e){ | ||
567 | + var fd=auto_promote_sale.indexOf(e.prom_type+''); | ||
568 | + e.sort=fd; | ||
569 | + }) | ||
570 | + sort_type='sort'; | ||
571 | + } | ||
572 | + //-- 排序一下,进行升序 -- | ||
573 | + function comp(a, b) { | ||
574 | + return a[sort_type]-b[sort_type]; //升序 | ||
575 | + } | ||
576 | + //活动要排序一下 | ||
577 | + k_item.act_arr.sort(comp); | ||
578 | + | ||
579 | + //确定一下活动,先看一下有没有选择的活动 | ||
580 | + ck_prom_type=k_item.act_arr.find(function (el){ | ||
581 | + return el.sele; | ||
582 | + }) | ||
583 | + | ||
584 | + } | ||
585 | + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 -- | ||
586 | + if(!ck_prom_type){ | ||
587 | + ck_prom_type=k_item.act_arr[0]; | ||
588 | + k_item.act_arr[0].sele=1; | ||
589 | + } | ||
590 | + | ||
591 | + //-- 如果是要控制数量的时候,也就是全选的时候,或者加减号的时候 -- | ||
592 | + if(is_need_ck_num){ | ||
593 | + var t_pid=ck_prom_type.prom_id; | ||
594 | + switch (ck_prom_type.prom_type){ | ||
595 | + case 3: | ||
596 | + if(!th.data.in_yhact_new[t_pid]) th.data.in_yhact_new[t_pid]=0; | ||
597 | + th.data.in_yhact_new[t_pid]++; | ||
598 | + break; | ||
599 | + case 7: | ||
600 | + if(!th.data.in_zhact_new[t_pid]) th.data.in_zhact_new[t_pid]=0; | ||
601 | + th.data.in_zhact_new[t_pid]+=ck_prom_type.act_num; | ||
602 | + //-- 数组的优化 -- | ||
603 | + var nei_gd_map=ck_prom_type.in_zhact_gdmap; | ||
604 | + if(nei_gd_map){ | ||
605 | + for (var vg in nei_gd_map) { | ||
606 | + if (!th.data.in_zhact_gdmap_new[vg]) th.data.in_zhact_gdmap_new[vg] = 0; | ||
607 | + th.data.in_zhact_gdmap_new[vg] += nei_gd_map[vg]; | ||
608 | + } | ||
609 | + } | ||
610 | + break; | ||
611 | + } | ||
612 | + } | ||
613 | + //-- 此时要把购物车中的商品确定活动 -- | ||
614 | + for (var b=0; b<ck_prom_type.goods.length;b++){ | ||
615 | + //-- 开始查找 -- | ||
616 | + var fg=goods.findIndex(function (g_item){ | ||
617 | + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1; | ||
618 | + }) | ||
619 | + if(fg>-1){ | ||
620 | + goods[fg].prom_type=ck_prom_type.prom_type; | ||
621 | + goods[fg].prom_id=ck_prom_type.prom_id; | ||
622 | + } | ||
623 | + } | ||
624 | + } | ||
625 | + //-- 显示到前端,并切换 -- | ||
626 | + //th.setData({show_can_cx}) | ||
627 | + //--- 调用回调函数 --- | ||
628 | + func(show_can_cx); | ||
629 | + | ||
630 | + }, | ||
631 | + //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的-- | ||
632 | + check_ok_cx_pro(item_act_map,can_calc_cx){ | ||
633 | + //-- 加入第一个,返回真 -- | ||
634 | + if(!can_calc_cx.length) return true; | ||
635 | + var th_goods=item_act_map.goods; | ||
636 | + for(var i=0;i<can_calc_cx.length;i++){ | ||
637 | + var can_goods=can_calc_cx[i].goods; | ||
638 | + //计算一下有交集的数量,没有交集,OK | ||
639 | + var num=this.hasJiao(can_goods,th_goods); | ||
640 | + if(!num) continue; | ||
641 | + //计算一下俩个shu | ||
642 | + if(can_goods.length==th_goods.length && can_goods.length==num){ | ||
643 | + return true; | ||
644 | + } | ||
645 | + if(can_goods.length>th_goods.length){ | ||
646 | + return false; | ||
647 | + } | ||
648 | + } | ||
649 | + return true; | ||
650 | + }, | ||
651 | + //-- 判断是不是有交集,返回交集的数量 -- | ||
652 | + hasJiao(arr1, arr2){ | ||
653 | + var num=0; | ||
654 | + arr1.map(function (e){ | ||
655 | + var idx=arr2.findIndex(function (g){ | ||
656 | + return g.goods_id==e.goods_id; | ||
657 | + }) | ||
658 | + if(idx>-1) num++; | ||
659 | + }) | ||
660 | + return num; | ||
661 | + }, | ||
662 | + | ||
663 | + | ||
664 | +} | ||
0 | \ No newline at end of file | 665 | \ No newline at end of file |