Commit 785d8889eaf48812e82cc7e87d6f0dd08ccb02eb
Merge branch 'dev' into 'test'
小程序购物车,优化多赠品的bug See merge request !1011
Showing
1 changed file
with
309 additions
and
4 deletions
pages/cart/cart/cart.js
| ... | ... | @@ -1314,10 +1314,8 @@ Page({ |
| 1314 | 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 | 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 | 3451 | go_cou_dang: function (e) { |
| 3147 | 3452 | var prom_id = e.currentTarget.dataset.prom_id; | ... | ... |