diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index caf9cd3..d095dfc 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -1314,10 +1314,8 @@ Page({ total_num: t_num, }); - th.data.duo_zp_num_arr={}; - for (var i in e.data.requestData) { - e.check_prom_activity(i) - } + e.all_check_prom_activity(); + } } @@ -3142,6 +3140,313 @@ Page({ } }, + + async all_check_prom_activity(){ + this.data.duo_zp_num_arr={}; + for (var i in this.data.requestData) { + var cindex=i; + var make_up_arr = new Array(); + var send_gift_arr = new Array(); + var th = this; + var map = new Map(); + var list = JSON.parse(JSON.stringify(this.data.requestData[cindex])); + //循环处理活动,看活动商品的数量,用map来出来存储,key为活动id,值是数量 + + //-- 所有的购物车的数据,要用拷贝的赖进行计算 -- + var alllist = JSON.parse(JSON.stringify(this.data.requestData)); + var list2 = alllist[cindex]; + var no_gift_arr = []; + + + //主要判断有没有促销活动 + var is_sele_prom = 0; + var is_gift_del = 0; + for (var i = 0; i < list.goods.length; i++) { + var item = list.goods[i]; + if (item.prom_type == 3 && item.selected && !item.is_gift) { + is_sele_prom = 1; + if (map.has(item.prom_id + "")) { + var ob = map.get(item.prom_id + ""); + ob.num += item.goods_num; + ob.price += item.goods_num * item.goods_price; + delete map[item.prom_id + ""]; + map.set(item.prom_id + "", ob); + } else { + var ob = {}; + ob.num = item.goods_num; + ob.price = item.goods_num * item.goods_price; + if (item.guide_id) { + ob.guide_id = item.guide_id; + } + if (item.guide_type) { + ob.guide_type = item.guide_type; + } + map.set(item.prom_id + "", ob); + } + } + if (item.is_gift == 1) { + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; + //getApp().request.delete(url, {}); + await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 + list2.goods.splice(i, 1); + list.goods.splice(i--, 1); + is_gift_del = 1; + } + } + //--如果没有选中的促销活动的,直接退出 -- + if (!is_sele_prom) { + //如果有赠品,要重新更新购物车的前台渲染-- + if (is_gift_del) { + var rq_text = "requestData[" + cindex + "]"; + this.setData({ + [rq_text]: list + }); + } + + var rq_text2 = "requestData[" + cindex + "].make_up_arr"; + this.setData({ + [rq_text2]:null, + }) + + var gift_text = "requestData[" + cindex + "].send_gift_arr"; + this.setData({ + [gift_text]:null, + }) + continue; + } + //-- 循环判断活动 -- + for (let p_item of map.entries()) { + var prom = null; + //使用缓存,减少接口的调用 + if(th.data.promgoods_map[p_item[0]]){ + prom=th.data.promgoods_map[p_item[0]]; + }else{ + await getApp().request.promiseGet("/api/weshop/promgoods/get/" + os.stoid + "/" + p_item[0], {}).then(res => { + if (res.data.code == 0) { + prom = res.data.data; + } + }) + } + //如果活动已经结束 + if (!prom || prom.is_end || prom.end_time < ut.gettimestamp()) { + for (var ii in list.goods) { + var item = list.goods[ii]; + list.goods.splice(ii, 1); + if (item.prom_id == p_item[0] && item.prom_type == 3) { + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; + getApp().request.delete(url, {}); + } + } + continue; + } + + if(!th.data.promgoods_map[p_item[0]]) th.data.promgoods_map[p_item[0]]=prom; + //---读取打折的详情--- + var ob = p_item[1]; + var discount = null; + + //看一下是不是多赠品,如果是多赠品 + var promgoods_list=null; + if(th.data.promgoods_list[p_item[0]]){ + promgoods_list=th.data.promgoods_list[p_item[0]]; + }else{ + //-- 获取凑单提示 -- + await getApp().request.promiseGet("/api/weshop/promgoodslist/list", { + data: { + prom_id: prom.id + } + }).then(res => { + if (res.data.code == 0) { + promgoods_list = res.data.data; + } + }) + if(!promgoods_list) continue; + th.data.promgoods_list[p_item[0]]=promgoods_list; + } + + for (var i in promgoods_list) { + var item = promgoods_list[i]; + if (item.prom_type == 0) { + if (ob.price < item.condition) { + var elem = { + prom_id: prom.id, + diff_type: item.prom_type, + diff: (item.condition - ob.price).toFixed(2), + content: JSON.parse(item.preferential_type) + } + make_up_arr.push(elem); + break; + } + } else { + if (ob.num < item.condition) { + var elem = { + prom_id: prom.id, + diff_type: item.prom_type, + diff: (item.condition - ob.num).toFixed(2), + content: JSON.parse(item.preferential_type) + } + make_up_arr.push(elem); + break; + } + } + } + + + + //-- 只有在单赠品的时候,才要进行计算 -- + await getApp().request.promiseGet("/api/weshop/goods/getDiscount", { + data: { + price: parseFloat(ob.price).toFixed(2), + prom_id: p_item[0], + goods_num: ob.num, + user_id: getApp().globalData.user_id, + is_bz: prom.is_bz + } + }).then(res => { + if (res.data.code == 0) discount = res.data.data; + }) + + if(discount) { + + if (!discount.zp_num || parseInt(discount.zp_num) == 0) discount.zp_num = 1; + //判断一下赠品的模式 + if (parseInt(discount.zp_mode)== 1 ) + { + + var can_zp_num=0; + var a_limit_num=0; + for(let iy in discount.giftsinfo){ + let item=discount.giftsinfo[iy]; + can_zp_num+= parseInt(item.gift_storecount)>parseInt(item.limit_num)?parseInt(item.limit_num): parseInt(item.gift_storecount); + } + + var t_zp_num=parseInt(discount.zp_num)*parseInt(discount.bs); + if(th.data.duo_zp_num_arr[prom.id]){ + t_zp_num+=th.data.duo_zp_num_arr[prom.id]; + } + + if(can_zp_num>=t_zp_num ) { + var json={}; + json.prom_id=prom.id; + json.prom_name=prom.name; + send_gift_arr.push(json); + th.data.duo_zp_num_arr[prom.id]=t_zp_num; + } + + } + else + { + //---如果有打折的信息,赠送的信息,赠送的时候要判断是不是限购数量--- + if (discount && discount['goods_id'] && discount.limit_num >= discount.bs * discount.zp_num + && discount.gift_storecount >= discount.bs * discount.zp_num) { + //如果这礼品超了情况下 + if (no_gift_arr.indexOf(discount.gift_id) != -1) continue; + var o = discount.goodsinfo; + //-- 默认等于1,兼容旧的活动 -- + + var newd = { + goods_id: o.goods_id, + goods_num: discount.bs * discount.zp_num, //是赠品的翻倍 + pick_id: list.pid, + user_id: app.globalData.user_id, + store_id: os.stoid, + goods_price: 0, + guide_id: ob.guide_id ? ob.guide_id : 0, + guide_type: ob.guide_type ? ob.guide_type : 0, + member_goods_price: 0, + goods_name: o.goods_name, + goods_sn: o.goods_sn, + sku: o.sku, + is_gift: 1, + prom_id: p_item[0], + prom_type: 3, + selected: 1, + gift_id: discount.gift_id, + original_img: th.data.imgUrl + o.original_img + }; + + list2.goods.push(newd); + var all_num = 0; + var all_limit_num = 0; + + for (var i in alllist) { + var list_item = alllist[i]; + if(list_item.pid==list.pid) continue; + for (var j in list_item.goods) { + //如果赠品的ID一样,要进行统计数量 + if (list_item.goods[j].is_gift == 1 && list_item.goods[j].gift_id == newd.gift_id) { + all_num += list_item.goods[j].goods_num; + } + if (list_item.goods[j].is_gift == 1 && list_item.goods[j].gift_id == newd.gift_id && list_item.goods[j].prom_id == p_item[0]) { + all_limit_num += list_item.goods[j].goods_num; + } + + } + } + + //-- 赠品的数量超出库存数量和会员的限制,这里是保证所有的赠品部会超出 -- + if (discount.gift_storecount < all_num+newd.goods_num || discount.limit_num { + if (res.data.code == 0) { + add_data = res.data.data; + } + }) + if (add_data) { + newd.id = add_data.id; + list.goods.push(newd); + } + } + } + } + + } + //--更新购物车的前台渲染-- + var rq_text = "requestData[" + cindex + "]"; + this.setData({ + [rq_text]: list + }); + + var diff_text = "requestData[" + cindex + "].make_up_arr"; + //-- 如果有凑单的话 -- + if (make_up_arr.length > 0) { + this.setData({ + [diff_text]: make_up_arr + }); + } else { + this.setData({ + [diff_text]: null + }); + } + + var gift_text = "requestData[" + cindex + "].send_gift_arr"; + //-- 如果有凑单的话 -- + if (send_gift_arr.length > 0) { + this.setData({ + [gift_text]: send_gift_arr + }); + } else { + this.setData({ + [gift_text]: null + }); + } + + + } + }, + //去凑单 go_cou_dang: function (e) { var prom_id = e.currentTarget.dataset.prom_id;