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 | 5 | var util_pay = require("../../../../utils/pay.js"); |
6 | 6 | var zh_calc = require("zh_calculate.js"); |
7 | 7 | var ladder_calc = require("ladder_calculate.js"); |
8 | +//公共的函数合并在一起 | |
9 | +const m_cx = require("../../../../utils/more_cx.js"); | |
10 | + | |
8 | 11 | // 防抖函数用定时器 |
9 | 12 | let timer; |
10 | 13 | Page({ |
... | ... | @@ -749,6 +752,8 @@ Page({ |
749 | 752 | |
750 | 753 | th.data.cartlist_y = carr; //存储原始购物车列表 |
751 | 754 | |
755 | + wx.showLoading(); | |
756 | + | |
752 | 757 | th.get_cart_next(carr); |
753 | 758 | |
754 | 759 | } |
... | ... | @@ -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 | 1027 | var car_item = item; |
1020 | 1028 | /*----接口要弄出来的,先顶着-----*/ |
... | ... | @@ -1164,7 +1172,7 @@ Page({ |
1164 | 1172 | var c_item = arr[k]; |
1165 | 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 | 1176 | arr[k].show_can_cx=show_can_cx; |
1169 | 1177 | }) |
1170 | 1178 | }else{ |
... | ... | @@ -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 | 7132 | switch_cx_group:function (e){ |
7522 | 7133 | var idx=e.currentTarget.dataset.index; |
... | ... | @@ -7582,6 +7193,9 @@ Page({ |
7582 | 7193 | if(fg>-1){ |
7583 | 7194 | goods[fg].prom_type=ck_prom_type.prom_type; |
7584 | 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 | 9 | ladder_calc = require("ladder_calculate.js"); |
10 | 10 | var regeneratorRuntime = require('../../../utils/runtime.js'); |
11 | 11 | const e = require("../../../utils/common.js"); |
12 | - | |
12 | +//公共的函数合并在一起 | |
13 | +const m_cx = require("../../../utils/more_cx.js"); | |
13 | 14 | |
14 | 15 | Page({ |
15 | 16 | data: { |
... | ... | @@ -1894,9 +1895,12 @@ Page({ |
1894 | 1895 | th.data.in_zhact_gdmap = {}; |
1895 | 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 | 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 | 1904 | var offline_price = 0; |
1901 | 1905 | var offline_num = 0; |
1902 | 1906 | for (var c = 0; c < item.length; c++) { |
... | ... | @@ -1922,6 +1926,7 @@ Page({ |
1922 | 1926 | obj.goods_num = 0; |
1923 | 1927 | zh_calc.add_zhprom(car, a, obj); |
1924 | 1928 | } |
1929 | + | |
1925 | 1930 | if (item[c].prom_type == 10) { |
1926 | 1931 | obj.goods_num = 0; |
1927 | 1932 | ladder_calc.add_ladder_prom(car, a, obj); |
... | ... | @@ -1929,6 +1934,8 @@ Page({ |
1929 | 1934 | |
1930 | 1935 | |
1931 | 1936 | } else { |
1937 | + | |
1938 | + | |
1932 | 1939 | if (item[c].prom_type == 7) { |
1933 | 1940 | //先把商品放入组合计算的专用的区域 |
1934 | 1941 | console.log('是组合商品---') |
... | ... | @@ -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 | 4217 | switch_cx_group:function (e){ |
... | ... | @@ -4607,10 +4258,17 @@ Page({ |
4607 | 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 | 4262 | if(the_rs.code==0){ |
4612 | 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 | 4272 | }else{ |
4615 | 4273 | wx.showToast({ |
4616 | 4274 | title: the_rs.msg, |
... | ... | @@ -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 | 4317 | car[c_idx].show_can_cx=show_can_cx; |
4660 | 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 | 137 | data-index="{{pidx}}" |
138 | 138 | data-gd_key="{{items.goods_id}}" |
139 | 139 | class="cx-frame flex" style="position: relative"> |
140 | - <view class="cx-sizs fs30">促销</view> | |
140 | + <view class="cx-sizs fs30">可参促销</view> | |
141 | 141 | <view class="flex ai_c f1 pdh20"> |
142 | 142 | <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[items.goods_id].act_arr}}" > |
143 | 143 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> |
... | ... | @@ -166,7 +166,7 @@ |
166 | 166 | data-index="{{pidx}}" |
167 | 167 | data-gd_key="{{index}}" |
168 | 168 | class="cx-frame flex" style="position: relative"> |
169 | - <view class="cx-sizs fs30">促销</view> | |
169 | + <view class="cx-sizs fs30">可参促销</view> | |
170 | 170 | <view class="flex ai_c f1 pdh20"> |
171 | 171 | <view class="xc-coupon-fram" wx:for="{{pitem.act_arr}}" > |
172 | 172 | <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view> | ... | ... |
pages/cart/cart/zh_calculate.js
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 | 665 | \ No newline at end of file | ... | ... |