Commit 64681b7adae4b7cd4563ea5be42edee9252877be
1 parent
e6622b89
小程序购物车,优化多赠品的bug
Showing
1 changed file
with
309 additions
and
4 deletions
pages/cart/cart/cart.js
@@ -1314,10 +1314,8 @@ Page({ | @@ -1314,10 +1314,8 @@ Page({ | ||
1314 | total_num: t_num, | 1314 | total_num: t_num, |
1315 | }); | 1315 | }); |
1316 | 1316 | ||
1317 | - th.data.duo_zp_num_arr={}; | ||
1318 | - for (var i in e.data.requestData) { | ||
1319 | - e.check_prom_activity(i) | ||
1320 | - } | 1317 | + e.all_check_prom_activity(); |
1318 | + | ||
1321 | } | 1319 | } |
1322 | } | 1320 | } |
1323 | 1321 | ||
@@ -3142,6 +3140,313 @@ Page({ | @@ -3142,6 +3140,313 @@ Page({ | ||
3142 | } | 3140 | } |
3143 | 3141 | ||
3144 | }, | 3142 | }, |
3143 | + | ||
3144 | + async all_check_prom_activity(){ | ||
3145 | + this.data.duo_zp_num_arr={}; | ||
3146 | + for (var i in this.data.requestData) { | ||
3147 | + var cindex=i; | ||
3148 | + var make_up_arr = new Array(); | ||
3149 | + var send_gift_arr = new Array(); | ||
3150 | + var th = this; | ||
3151 | + var map = new Map(); | ||
3152 | + var list = JSON.parse(JSON.stringify(this.data.requestData[cindex])); | ||
3153 | + //循环处理活动,看活动商品的数量,用map来出来存储,key为活动id,值是数量 | ||
3154 | + | ||
3155 | + //-- 所有的购物车的数据,要用拷贝的赖进行计算 -- | ||
3156 | + var alllist = JSON.parse(JSON.stringify(this.data.requestData)); | ||
3157 | + var list2 = alllist[cindex]; | ||
3158 | + var no_gift_arr = []; | ||
3159 | + | ||
3160 | + | ||
3161 | + //主要判断有没有促销活动 | ||
3162 | + var is_sele_prom = 0; | ||
3163 | + var is_gift_del = 0; | ||
3164 | + for (var i = 0; i < list.goods.length; i++) { | ||
3165 | + var item = list.goods[i]; | ||
3166 | + if (item.prom_type == 3 && item.selected && !item.is_gift) { | ||
3167 | + is_sele_prom = 1; | ||
3168 | + if (map.has(item.prom_id + "")) { | ||
3169 | + var ob = map.get(item.prom_id + ""); | ||
3170 | + ob.num += item.goods_num; | ||
3171 | + ob.price += item.goods_num * item.goods_price; | ||
3172 | + delete map[item.prom_id + ""]; | ||
3173 | + map.set(item.prom_id + "", ob); | ||
3174 | + } else { | ||
3175 | + var ob = {}; | ||
3176 | + ob.num = item.goods_num; | ||
3177 | + ob.price = item.goods_num * item.goods_price; | ||
3178 | + if (item.guide_id) { | ||
3179 | + ob.guide_id = item.guide_id; | ||
3180 | + } | ||
3181 | + if (item.guide_type) { | ||
3182 | + ob.guide_type = item.guide_type; | ||
3183 | + } | ||
3184 | + map.set(item.prom_id + "", ob); | ||
3185 | + } | ||
3186 | + } | ||
3187 | + if (item.is_gift == 1) { | ||
3188 | + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; | ||
3189 | + //getApp().request.delete(url, {}); | ||
3190 | + await getApp().request.promiseDelete(url, {}) // 要用同步让赠品删除 | ||
3191 | + list2.goods.splice(i, 1); | ||
3192 | + list.goods.splice(i--, 1); | ||
3193 | + is_gift_del = 1; | ||
3194 | + } | ||
3195 | + } | ||
3196 | + //--如果没有选中的促销活动的,直接退出 -- | ||
3197 | + if (!is_sele_prom) { | ||
3198 | + //如果有赠品,要重新更新购物车的前台渲染-- | ||
3199 | + if (is_gift_del) { | ||
3200 | + var rq_text = "requestData[" + cindex + "]"; | ||
3201 | + this.setData({ | ||
3202 | + [rq_text]: list | ||
3203 | + }); | ||
3204 | + } | ||
3205 | + | ||
3206 | + var rq_text2 = "requestData[" + cindex + "].make_up_arr"; | ||
3207 | + this.setData({ | ||
3208 | + [rq_text2]:null, | ||
3209 | + }) | ||
3210 | + | ||
3211 | + var gift_text = "requestData[" + cindex + "].send_gift_arr"; | ||
3212 | + this.setData({ | ||
3213 | + [gift_text]:null, | ||
3214 | + }) | ||
3215 | + continue; | ||
3216 | + } | ||
3217 | + //-- 循环判断活动 -- | ||
3218 | + for (let p_item of map.entries()) { | ||
3219 | + var prom = null; | ||
3220 | + //使用缓存,减少接口的调用 | ||
3221 | + if(th.data.promgoods_map[p_item[0]]){ | ||
3222 | + prom=th.data.promgoods_map[p_item[0]]; | ||
3223 | + }else{ | ||
3224 | + await getApp().request.promiseGet("/api/weshop/promgoods/get/" + os.stoid + "/" + p_item[0], {}).then(res => { | ||
3225 | + if (res.data.code == 0) { | ||
3226 | + prom = res.data.data; | ||
3227 | + } | ||
3228 | + }) | ||
3229 | + } | ||
3230 | + //如果活动已经结束 | ||
3231 | + if (!prom || prom.is_end || prom.end_time < ut.gettimestamp()) { | ||
3232 | + for (var ii in list.goods) { | ||
3233 | + var item = list.goods[ii]; | ||
3234 | + list.goods.splice(ii, 1); | ||
3235 | + if (item.prom_id == p_item[0] && item.prom_type == 3) { | ||
3236 | + var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; | ||
3237 | + getApp().request.delete(url, {}); | ||
3238 | + } | ||
3239 | + } | ||
3240 | + continue; | ||
3241 | + } | ||
3242 | + | ||
3243 | + if(!th.data.promgoods_map[p_item[0]]) th.data.promgoods_map[p_item[0]]=prom; | ||
3244 | + //---读取打折的详情--- | ||
3245 | + var ob = p_item[1]; | ||
3246 | + var discount = null; | ||
3247 | + | ||
3248 | + //看一下是不是多赠品,如果是多赠品 | ||
3249 | + var promgoods_list=null; | ||
3250 | + if(th.data.promgoods_list[p_item[0]]){ | ||
3251 | + promgoods_list=th.data.promgoods_list[p_item[0]]; | ||
3252 | + }else{ | ||
3253 | + //-- 获取凑单提示 -- | ||
3254 | + await getApp().request.promiseGet("/api/weshop/promgoodslist/list", { | ||
3255 | + data: { | ||
3256 | + prom_id: prom.id | ||
3257 | + } | ||
3258 | + }).then(res => { | ||
3259 | + if (res.data.code == 0) { | ||
3260 | + promgoods_list = res.data.data; | ||
3261 | + } | ||
3262 | + }) | ||
3263 | + if(!promgoods_list) continue; | ||
3264 | + th.data.promgoods_list[p_item[0]]=promgoods_list; | ||
3265 | + } | ||
3266 | + | ||
3267 | + for (var i in promgoods_list) { | ||
3268 | + var item = promgoods_list[i]; | ||
3269 | + if (item.prom_type == 0) { | ||
3270 | + if (ob.price < item.condition) { | ||
3271 | + var elem = { | ||
3272 | + prom_id: prom.id, | ||
3273 | + diff_type: item.prom_type, | ||
3274 | + diff: (item.condition - ob.price).toFixed(2), | ||
3275 | + content: JSON.parse(item.preferential_type) | ||
3276 | + } | ||
3277 | + make_up_arr.push(elem); | ||
3278 | + break; | ||
3279 | + } | ||
3280 | + } else { | ||
3281 | + if (ob.num < item.condition) { | ||
3282 | + var elem = { | ||
3283 | + prom_id: prom.id, | ||
3284 | + diff_type: item.prom_type, | ||
3285 | + diff: (item.condition - ob.num).toFixed(2), | ||
3286 | + content: JSON.parse(item.preferential_type) | ||
3287 | + } | ||
3288 | + make_up_arr.push(elem); | ||
3289 | + break; | ||
3290 | + } | ||
3291 | + } | ||
3292 | + } | ||
3293 | + | ||
3294 | + | ||
3295 | + | ||
3296 | + //-- 只有在单赠品的时候,才要进行计算 -- | ||
3297 | + await getApp().request.promiseGet("/api/weshop/goods/getDiscount", { | ||
3298 | + data: { | ||
3299 | + price: parseFloat(ob.price).toFixed(2), | ||
3300 | + prom_id: p_item[0], | ||
3301 | + goods_num: ob.num, | ||
3302 | + user_id: getApp().globalData.user_id, | ||
3303 | + is_bz: prom.is_bz | ||
3304 | + } | ||
3305 | + }).then(res => { | ||
3306 | + if (res.data.code == 0) discount = res.data.data; | ||
3307 | + }) | ||
3308 | + | ||
3309 | + if(discount) { | ||
3310 | + | ||
3311 | + if (!discount.zp_num || parseInt(discount.zp_num) == 0) discount.zp_num = 1; | ||
3312 | + //判断一下赠品的模式 | ||
3313 | + if (parseInt(discount.zp_mode)== 1 ) | ||
3314 | + { | ||
3315 | + | ||
3316 | + var can_zp_num=0; | ||
3317 | + var a_limit_num=0; | ||
3318 | + for(let iy in discount.giftsinfo){ | ||
3319 | + let item=discount.giftsinfo[iy]; | ||
3320 | + can_zp_num+= parseInt(item.gift_storecount)>parseInt(item.limit_num)?parseInt(item.limit_num): parseInt(item.gift_storecount); | ||
3321 | + } | ||
3322 | + | ||
3323 | + var t_zp_num=parseInt(discount.zp_num)*parseInt(discount.bs); | ||
3324 | + if(th.data.duo_zp_num_arr[prom.id]){ | ||
3325 | + t_zp_num+=th.data.duo_zp_num_arr[prom.id]; | ||
3326 | + } | ||
3327 | + | ||
3328 | + if(can_zp_num>=t_zp_num ) { | ||
3329 | + var json={}; | ||
3330 | + json.prom_id=prom.id; | ||
3331 | + json.prom_name=prom.name; | ||
3332 | + send_gift_arr.push(json); | ||
3333 | + th.data.duo_zp_num_arr[prom.id]=t_zp_num; | ||
3334 | + } | ||
3335 | + | ||
3336 | + } | ||
3337 | + else | ||
3338 | + { | ||
3339 | + //---如果有打折的信息,赠送的信息,赠送的时候要判断是不是限购数量--- | ||
3340 | + if (discount && discount['goods_id'] && discount.limit_num >= discount.bs * discount.zp_num | ||
3341 | + && discount.gift_storecount >= discount.bs * discount.zp_num) { | ||
3342 | + //如果这礼品超了情况下 | ||
3343 | + if (no_gift_arr.indexOf(discount.gift_id) != -1) continue; | ||
3344 | + var o = discount.goodsinfo; | ||
3345 | + //-- 默认等于1,兼容旧的活动 -- | ||
3346 | + | ||
3347 | + var newd = { | ||
3348 | + goods_id: o.goods_id, | ||
3349 | + goods_num: discount.bs * discount.zp_num, //是赠品的翻倍 | ||
3350 | + pick_id: list.pid, | ||
3351 | + user_id: app.globalData.user_id, | ||
3352 | + store_id: os.stoid, | ||
3353 | + goods_price: 0, | ||
3354 | + guide_id: ob.guide_id ? ob.guide_id : 0, | ||
3355 | + guide_type: ob.guide_type ? ob.guide_type : 0, | ||
3356 | + member_goods_price: 0, | ||
3357 | + goods_name: o.goods_name, | ||
3358 | + goods_sn: o.goods_sn, | ||
3359 | + sku: o.sku, | ||
3360 | + is_gift: 1, | ||
3361 | + prom_id: p_item[0], | ||
3362 | + prom_type: 3, | ||
3363 | + selected: 1, | ||
3364 | + gift_id: discount.gift_id, | ||
3365 | + original_img: th.data.imgUrl + o.original_img | ||
3366 | + }; | ||
3367 | + | ||
3368 | + list2.goods.push(newd); | ||
3369 | + var all_num = 0; | ||
3370 | + var all_limit_num = 0; | ||
3371 | + | ||
3372 | + for (var i in alllist) { | ||
3373 | + var list_item = alllist[i]; | ||
3374 | + if(list_item.pid==list.pid) continue; | ||
3375 | + for (var j in list_item.goods) { | ||
3376 | + //如果赠品的ID一样,要进行统计数量 | ||
3377 | + if (list_item.goods[j].is_gift == 1 && list_item.goods[j].gift_id == newd.gift_id) { | ||
3378 | + all_num += list_item.goods[j].goods_num; | ||
3379 | + } | ||
3380 | + 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]) { | ||
3381 | + all_limit_num += list_item.goods[j].goods_num; | ||
3382 | + } | ||
3383 | + | ||
3384 | + } | ||
3385 | + } | ||
3386 | + | ||
3387 | + //-- 赠品的数量超出库存数量和会员的限制,这里是保证所有的赠品部会超出 -- | ||
3388 | + if (discount.gift_storecount < all_num+newd.goods_num || discount.limit_num <all_limit_num+newd.goods_num ) { | ||
3389 | + no_gift_arr.push(discount.gift_id); | ||
3390 | + //--进入下一个循环 -- | ||
3391 | + continue; | ||
3392 | + } | ||
3393 | + | ||
3394 | + | ||
3395 | + var url = "/api/weshop/cart/delGift?store_id=" + newd.store_id + "&user_id=" + | ||
3396 | + newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id | ||
3397 | + await getApp().request.promiseDelete(url, {}) | ||
3398 | + | ||
3399 | + var add_data = null; | ||
3400 | + await getApp().request.promisePost("/api/weshop/cart/save", { | ||
3401 | + data: newd | ||
3402 | + }).then(res => { | ||
3403 | + if (res.data.code == 0) { | ||
3404 | + add_data = res.data.data; | ||
3405 | + } | ||
3406 | + }) | ||
3407 | + if (add_data) { | ||
3408 | + newd.id = add_data.id; | ||
3409 | + list.goods.push(newd); | ||
3410 | + } | ||
3411 | + } | ||
3412 | + } | ||
3413 | + } | ||
3414 | + | ||
3415 | + } | ||
3416 | + //--更新购物车的前台渲染-- | ||
3417 | + var rq_text = "requestData[" + cindex + "]"; | ||
3418 | + this.setData({ | ||
3419 | + [rq_text]: list | ||
3420 | + }); | ||
3421 | + | ||
3422 | + var diff_text = "requestData[" + cindex + "].make_up_arr"; | ||
3423 | + //-- 如果有凑单的话 -- | ||
3424 | + if (make_up_arr.length > 0) { | ||
3425 | + this.setData({ | ||
3426 | + [diff_text]: make_up_arr | ||
3427 | + }); | ||
3428 | + } else { | ||
3429 | + this.setData({ | ||
3430 | + [diff_text]: null | ||
3431 | + }); | ||
3432 | + } | ||
3433 | + | ||
3434 | + var gift_text = "requestData[" + cindex + "].send_gift_arr"; | ||
3435 | + //-- 如果有凑单的话 -- | ||
3436 | + if (send_gift_arr.length > 0) { | ||
3437 | + this.setData({ | ||
3438 | + [gift_text]: send_gift_arr | ||
3439 | + }); | ||
3440 | + } else { | ||
3441 | + this.setData({ | ||
3442 | + [gift_text]: null | ||
3443 | + }); | ||
3444 | + } | ||
3445 | + | ||
3446 | + | ||
3447 | + } | ||
3448 | + }, | ||
3449 | + | ||
3145 | //去凑单 | 3450 | //去凑单 |
3146 | go_cou_dang: function (e) { | 3451 | go_cou_dang: function (e) { |
3147 | var prom_id = e.currentTarget.dataset.prom_id; | 3452 | var prom_id = e.currentTarget.dataset.prom_id; |