From 4c07085965c7e1eae531feba60f68a2618ce9868 Mon Sep 17 00:00:00 2001 From: yvan.ni Date: Tue, 27 Jun 2023 23:38:39 +0800 Subject: [PATCH] 购物车优化,商品详情页面的优化 --- pages/cart/cart/cart.js | 323 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------- pages/goods/goodsInfo/goodsInfo.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ utils/more_cx.js | 21 ++++++++++++++++++--- 3 files changed, 224 insertions(+), 214 deletions(-) diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index 141d56c..4a4641b 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -3145,6 +3145,9 @@ Page({ } var garr = this.data.requestData; var check_is_goods_selected = 0; + + var th=this; + if (garr) { for (var ii in garr) { for (var ij in garr[ii].goods) { @@ -3157,17 +3160,16 @@ Page({ } //-- 如果是商品的结算 -- if (check_is_goods_selected) { - var glist = []; //用逗号隔开的 - var map = new Map(); //使用map值键进行运算。值计算商品ID - var map_limit = new Map(); //使用map值键进行存储限购,特定的活动的数量 + var glist = []; //商品数组 + var map = new Map(); //使用map值键进行运算 + var g_arr = new Array(); //已选的商品列表 var user_id = getApp().globalData.user_id; - var th = this; + //用于判断是不是积分购的普通购买 var normal_arr = {}; var ab = 0; //选中 wx.showLoading(); - let checkArr7 = []; //组合购选中的数据 let checkObj3 = {}; //优惠促销次数判断 @@ -3177,12 +3179,11 @@ Page({ // let checkOff=false for (var i = 0; i < this.data.requestData.length; i++) { - //-- 循环每一个活动 -- var i_arr = this.data.requestData[i].goods; - for (var j = 0; j < i_arr.length; j++){ + for (var j = 0; j < i_arr.length; j++) { if (i_arr[j].selected && i_arr[j].is_gift != 1) { if (i_arr[j].is_pd_normal || i_arr[j].prom_type == 0 || i_arr[j].prom_type == 3) { - normal_arr[i_arr[j].id] = 1; + normal_arr[i_arr[j].goods_id] = 1; } //检查活动是不是满足了条件,或者要取满足条件的活动 @@ -3261,7 +3262,6 @@ Page({ prom_id: i_arr[j].prom_id, prom_type: i_arr[j].prom_type, }; - //判断是不是线下取价 if (i_arr[j].is_offline) { ie.is_offline = i_arr[j].is_offline; @@ -3280,11 +3280,9 @@ Page({ //glist += i_arr[j].goods_id + ","; if(!i_arr[j].is_gift){ - var et= {"prom_type":i_arr[j].prom_type,"prom_id":i_arr[j].prom_id,"goods_id":i_arr[j].goods_id}; - glist.push(et); + var et= {"prom_type":i_arr[j].prom_type,"prom_id":i_arr[j].prom_id,"goods_id":i_arr[j].goods_id}; + glist.push(et); } - - //判断有没有选择商品 ab = 1; //-- 获取促销活动是不是有参与 -- @@ -3319,6 +3317,7 @@ Page({ } + //--普通商品,如果有开启线下库存的功能,要调用线下库存进行计算,赠品不要进行调用线下库存--- if ((i_arr[j].prom_type == 0 || i_arr[j].prom_type == 3 || i_arr[j].prom_type == 5 || i_arr[j].prom_type == 7 || i_arr[j].prom_type == 10 || i_arr[j].need_downlow_num) && th.data.sales_rules >= 2 && i_arr[j].is_gift != 1 && !i_arr[j].whsle_id) { @@ -3454,9 +3453,6 @@ Page({ } - //glist = glist.substring(0, glist.length - 1); - //--取一下商品的限购 以及活动的限购,redis数量- - //-- 组合购的控制 --- if (checkArr7.length > 0) { let checkStr = [] checkArr7.map(item => { @@ -3492,8 +3488,10 @@ Page({ wx.hideLoading(); return false; } - //购买商品的下一步 - this.cart_goods_buy_next(glist,map_limit,map,g_arr) + + //进行到下一步 + th.cart_buy_next(glist,map,g_arr,checkArr7) + } else if (res.cancel) { wx.hideLoading(); @@ -3523,12 +3521,10 @@ Page({ return false; } - //购买商品的下一步 - this.cart_goods_buy_next(glist,map_limit,map,g_arr) - } - - + //进行到下一步 + th.cart_buy_next(glist,map,g_arr,checkArr7) + } } else { //-- 开始服务卡的购物车购买 -- @@ -3563,179 +3559,181 @@ Page({ } }, - //map_limit 是包含活动prom_type prom_id - cart_goods_buy_next(glist,map_limit,map,g_arr){ - //判断活动的限购,和readis数量 + cart_buy_next(glist,map,g_arr,checkArr7){ + var th=this; + var map_limit = new Map(); //使用map值键进行存储限购 + //--取一下商品的限购 以及活动的限购,redis数量-- getApp().request.promisePost("/api/weshop/goods/listGoodsListNumNew", { is_json:1, data: { listNumNewDtos: glist, store_id: oo.stoid - }, - }).then( async ee=>{ - console.log(ee); - if (ee.data.code == 0) { - var ddata = ee.data.data, - isok = 1, - gname = "", - err = ""; - //--组装-- - for (var ij = 0; ij < ddata.length; ij++) { - - var val = ddata[ij]; - var ky=val.goods_id + "-"+val.prom_type+'-'+val.prom_id; - var obj = map_limit.get(ky); - if (obj) continue; - - var promgoodsbuynum = 0; - var goodsbuynum = 0; - - //--要获得商品,该用户买了多少件,同步应用-- - await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { - data: { - store_id: oo.stoid, - user_id: getApp().globalData.user_id, - goods_id: val.goods_id, - prom_type: val.prom_type, - prom_id: val.prom_id - }, - }).then(res => { - var buy_num_data = res.data.data; - if (buy_num_data.promgoodsbuynum) promgoodsbuynum = buy_num_data.promgoodsbuynum; - goodsbuynum = buy_num_data.goodsbuynum; - }) - var ie = { - promgoodsbuynum: promgoodsbuynum, - goodsbuynum: goodsbuynum - }; - map_limit.set(ky, ie); - } - - try { - for (var ind in ddata) { - var val = ddata[ind]; - var ky=val.goods_id + "-"+val.prom_type+'-'+val.prom_id; - - var num = map.get(val.goods_id+""); - if (num <= 0) { - isok = 0; - gname = val.goods_name; - throw "购买数量不能为0"; - return false; - } + } + }).then(async ee=>{ + if (ee.data.code == 0) { + var ddata = ee.data.data, + isok = 1, + gname = "", + err = ""; + //--组装-- + for (var ij = 0; ij < ddata.length; ij++) { + var val = ddata[ij]; + + var ky=val.goods_id + "-"+val.prom_type + "-"+val.prom_id; + var obj = map_limit.get(ky); + if (obj) continue; + + var promgoodsbuynum = 0; + var goodsbuynum = 0; + + //--要获得商品,该用户买了多少件,同步应用-- + await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { + data: { + store_id: oo.stoid, + user_id:getApp().globalData.user_id, + goods_id: val.goods_id, + prom_type: val.prom_type, + prom_id: val.prom_id + }, + }).then(res => { + var buy_num_data = res.data.data; + if (buy_num_data.promgoodsbuynum) promgoodsbuynum = buy_num_data.promgoodsbuynum; + goodsbuynum = buy_num_data.goodsbuynum; + }) + var ie = { + promgoodsbuynum: promgoodsbuynum, + goodsbuynum: goodsbuynum + }; + map_limit.set(ky, ie); + } - if (val.prom_type == 1 || val.prom_type == 2) { - if (num > val.store_count) { + //try { + for (var ind in ddata) { + var val = ddata[ind]; + var num = map.get(val.goods_id + ""); + if (num <= 0) { isok = 0; gname = val.goods_name; - throw "超出库存"; + throw "购买数量不能为0"; return false; } + if (val.prom_type == 1 || val.prom_type == 2) { + if (num > val.store_count) { + isok = 0; + gname = val.goods_name; + throw "超出库存"; + return false; + } + } + + if (th.data.sales_rules == 1) { + if (num > val.store_count) { + isok = 0; + gname = val.goods_name; + err="超出库存"; + break; + } + } if (num > val.redisnum && val.redisnum) { isok = 0; gname = val.goods_name; - throw "超出活动库存"; - return false; + err="超出活动库存"; + break; } - - - } - - if (th.data.sales_rules == 1) { - if (num > val.store_count) { + if (num > val.goods_num - val.buy_num && val.goods_num) { isok = 0; gname = val.goods_name; - throw "超出库存"; - return false; + err="超出活动库存"; + break; } - } - - if (num > val.goods_num - val.buy_num && val.goods_num) { - isok = 0; - gname = val.goods_name; - throw "超出活动库存"; - return false; - } - var buyed = map_limit.get(ky); - if (num + buyed.goodsbuynum > val.viplimited && val.viplimited > 0) { - isok = 0; - gname = val.goods_name; - throw "超出商品限购"; - return false; - } - - if (num + buyed.promgoodsbuynum > val.buy_limit && val.buy_limit > 0) { - isok = 0; - gname = val.goods_name; - throw "超出活动限购"; - return false; - } + var buyed = map_limit.get(ky); + if (num + buyed.goodsbuynum > val.viplimited && val.viplimited > 0) { + isok = 0; + gname = val.goods_name; + err="超出商品限购"; + break; + } - var card_field = th.data.card_field; - for (var i = 0; i < g_arr.length; i++) { + if (num + buyed.promgoodsbuynum > val.buy_limit && val.buy_limit > 0) { + isok = 0; + gname = val.goods_name; + err="超出活动限购"; + break; + } - if (g_arr[i].goods_id == val.goods_id && g_arr[i].prom_type==val.prom_type && g_arr[i].prom_id==val.id ) { + var card_field = th.data.card_field; + for (var i = 0; i < g_arr.length; i++) { + if (g_arr[i].goods_id == val.goods_id) { + + //如果会员是等级会员,商品有等级价,且不是活动商品 + if (card_field && val[card_field] > 0 && + ((val.prom_type == 0 && g_arr[i].prom_type == 0) || g_arr[i].prom_type == 3 || g_arr[i].prom_type == 5 || g_arr[i].prom_type == 7 || g_arr[i].prom_type == 10)) { + if (g_arr[i].goods_price != val[card_field]) { + isok = 0; + gname = val.goods_name; + err="商品价格已经变化"; + break; + } + } else { + if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price && val.prom_price > 0) { + isok = 0; + gname = val.goods_name; + err="商品价格已经变化"; + break; + } + } - //如果会员是等级会员,商品有等级价,且不是活动商品 - if (card_field && val[card_field] > 0 && - ((val.prom_type == 0 && g_arr[i].prom_type == 0) || val.prom_type == 3 || val.prom_type == 5 || val.prom_type == 7 || val.prom_type == 10)) { - if (g_arr[i].goods_price != val[card_field]) { - isok = 0; - gname = val.goods_name; - throw "商品价格已经变化"; + //-- 数据的更新 -- + var data = { + id: g_arr[i].id, + selected: 1, + store_id: oo.stoid, + prom_type: g_arr[i].prom_type, + prom_id: g_arr[i].prom_id, + }; + let gitem = checkArr7.find(item => item.goods_id == g_arr[i].goods_id) + if (gitem) { + data.prom_type = 0 + data.prom_id = 0 } - } else { - if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price && val.prom_price > 0) { - isok = 0; - gname = val.goods_name; - throw "商品价格已经变化"; + //-- 如果有线下取价的时候 -- + if (g_arr[i].is_offline) { + data.pricing_type = g_arr[i].pricing_type; + data.offline_price = g_arr[i].offline_price; } + rq.put("/api/weshop/cart/update", { + data: data, + success: function (ee) { + console.log(ee); + } + }); } + } - //-- 数据的更新 -- - var data = { - id: g_arr[i].id, - selected: 1, - store_id: oo.stoid, - prom_type: g_arr[i].prom_type, - prom_id: g_arr[i].prom_id, - }; + if(!isok) break; - //-- 如果有线下取价的时候 -- - if (g_arr[i].is_offline) { - data.pricing_type = g_arr[i].pricing_type; - data.offline_price = g_arr[i].offline_price; - } - rq.put("/api/weshop/cart/update", { - data: data, - success: function (ee) { - console.log(ee); - } - }); - } } - + // } catch (e) { + // err = e; + // } + if (isok == 0) { + t.confirmBox(gname + ":" + err); + wx.hideLoading(); + return false; } - } catch (e) { - err = e; - } - if (isok == 0) { - t.confirmBox(gname + ":" + err); + + wx.hideLoading(); - return false; + wx.navigateTo({ + url: "/packageE/pages/cart/cart2/cart2" + }); } - wx.hideLoading(); - wx.navigateTo({ - url: "/packageE/pages/cart/cart2/cart2" - }); - } }) }, - //结算到最后一个商品 set_last: function (ab, isok, gname) { if (isok == 0) { @@ -4041,7 +4039,6 @@ Page({ }) if (discount) { - if (!discount.zp_num || parseInt(discount.zp_num) == 0) discount.zp_num = 1; //判断一下赠品的模式 if (parseInt(discount.zp_mode) == 1) { @@ -4567,7 +4564,7 @@ Page({ "user_id": user_id, } - //获取秒杀的多规格 + //获取秒杀的多规格 getApp().request.promiseGet(url, { data: req_d }).then(res => { diff --git a/pages/goods/goodsInfo/goodsInfo.js b/pages/goods/goodsInfo/goodsInfo.js index f65e925..c98eca6 100644 --- a/pages/goods/goodsInfo/goodsInfo.js +++ b/pages/goods/goodsInfo/goodsInfo.js @@ -2068,53 +2068,51 @@ Page({ th.data.zh_act.zhbuyqty <= th.data.goodsInputNum && (!th.data.zh_act.zh_num || th.data.zh_act.zh_buy_num < th.data.zh_act.zh_num)) { wx.hideLoading(); - if ((th.data.zh_act.buy_limit != 0 && th.data.zh_act.buy_limit <= th.data.userbuynum)) { - wx.showModal({ - title: '提示', - // content: `商品${str},组合购活动,购买次数已超,将以普通商品购买?`, - content: `${th.data.data.goods_name}超出组合购限购次数,将以普通商品购买`, - success: res => { - if (res.confirm) { - console.log('用户点击确定') - //----先看会员在购物车中是否加入了该商品,立即购买的----- - getApp().request.get("/api/weshop/cart/page", { - data: { - store_id: os.stoid, - user_id: oo.user_id, - state: 1 - }, - success: function (res) { - //-------如果购物车中有相关的数据--------- - if (res.data.code == 0 && res.data.data.total > 0) { - for (let j in res.data.data.pageData) { - let item_j = res.data.data.pageData[j]; - var url = '/api/weshop/cart/del/' + e.data.stoid + '/' + item_j.id; - getApp().request.delete(url, {}); - } - } - newd.state = 1; - newd.prom_type = 0; - newd.prom_id = 0 - getApp().request.post("/api/weshop/cart/save", { - data: newd, - success: function (t) { - th.closeSpecModal(); - getApp().goto("/packageE/pages/cart/cart2/cart2?state=1"); - } - }); - } - }) - } else if (res.cancel) { - - console.log('用户点击取消') - } - } - }) - } else { - - - //----先看会员在购物车中是否加入了该商品,立即购买的----- - getApp().request.get("/api/weshop/cart/page", { + // if ((th.data.zh_act.buy_limit != 0 && th.data.zh_act.buy_limit <= th.data.userbuynum)) { + // wx.showModal({ + // title: '提示', + // // content: `商品${str},组合购活动,购买次数已超,将以普通商品购买?`, + // content: `${th.data.data.goods_name}超出组合购限购次数,将以普通商品购买`, + // success: res => { + // if (res.confirm) { + // console.log('用户点击确定') + // //----先看会员在购物车中是否加入了该商品,立即购买的----- + // getApp().request.get("/api/weshop/cart/page", { + // data: { + // store_id: os.stoid, + // user_id: oo.user_id, + // state: 1 + // }, + // success: function (res) { + // //-------如果购物车中有相关的数据--------- + // if (res.data.code == 0 && res.data.data.total > 0) { + // for (let j in res.data.data.pageData) { + // let item_j = res.data.data.pageData[j]; + // var url = '/api/weshop/cart/del/' + e.data.stoid + '/' + item_j.id; + // getApp().request.delete(url, {}); + // } + // } + // newd.state = 1; + // newd.prom_type = 0; + // newd.prom_id = 0 + // getApp().request.post("/api/weshop/cart/save", { + // data: newd, + // success: function (t) { + // th.closeSpecModal(); + // getApp().goto("/packageE/pages/cart/cart2/cart2?state=1"); + // } + // }); + // } + // }) + // } else if (res.cancel) { + // + // console.log('用户点击取消') + // } + // } + // }) + // } else { + //----先看会员在购物车中是否加入了该商品,立即购买的----- + getApp().request.get("/api/weshop/cart/page", { data: { store_id: os.stoid, user_id: oo.user_id, @@ -2143,7 +2141,7 @@ Page({ } }) - } + //} return false diff --git a/utils/more_cx.js b/utils/more_cx.js index fd88013..36e432d 100644 --- a/utils/more_cx.js +++ b/utils/more_cx.js @@ -55,11 +55,20 @@ module.exports = { need_ck=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; } if(need_ck+act.zh_buy_num>=act.zh_num ){ - return false; + if(!need_ok) { + item_act_map.is_no_ok = 1; + }else{ + return false; + } }else{ min_can_buy= act.zh_num-act.zh_buy_num-need_ck; } } + + if(!need_ok) { + item_act_map.is_no_ok = 1; + return true; + } //-- 判断组合购的限购是不是到了 -- if(act.buy_limit>0){ var need_ck0=0; @@ -67,8 +76,14 @@ module.exports = { need_ck0=th.data.in_zhact_new[aid]?th.data.in_zhact_new[aid]:0; } var min_can_buy0=0; - if(need_ck+item_act_map.buyed>=act.buy_limit ){ - return false; + if(need_ck+item_act_map.buyed>=act.buy_limit){ + if(!need_ok) { + item_act_map.is_no_ok = 1; + }else{ + return false; + } + + }else{ min_can_buy0=act.buy_limit-item_act_map.buyed-need_ck; } -- libgit2 0.21.4