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 | ... | ... |