From 60831945a811d59f671bc5ca81e33be19547a051 Mon Sep 17 00:00:00 2001 From: yvan.ni <765199919@qq.com> Date: Mon, 13 Apr 2020 16:41:06 +0800 Subject: [PATCH] 一、线下库存测试用例 1.商品详请在显示门店的时候会计算门店的线下库存,以及门店的预出库数! 2.商品在加入购物车,或者立即购买时,也要计算门店的线下库存,以及门店的预出库数! 3.购物车中,商品在加数量,减数量时也要计算门店的线下库存,以及门店的预出库数! 4.购物车结算时也要计算门店的线下库存,以及门店的预出库数! 5.提交订单时,也要计算门店的线下库存,以及门店的预出库数! 6.多条吗商品在选择条码,加入购物车,立即购买,选择门店的时候 也要计算门店的线下库存,以及门店的预出库数! 7.在订单列表中重新支付订单,如果线上也要判断商品是不是活动商品,看价格有没有变化,同时限购是不是到了, 也要计算门店的线下库存,以及门店的预出库数! 8.在订单列表中重新支付订单,如果订单是3.0公众号下的积分购,优化购买,团购,搭配购就要提醒到3.0公众号处理 9.商品详情在开启急速库存时的显示。 --- pages/cart/cart/cart.js | 309 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------ pages/cart/cart2/cart2.js | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- pages/goods/goodsInfo/goodsInfo.js | 851 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- pages/goods/goodsInfo/goodsInfo.wxml | 2 +- pages/goods/goodsInfo/goodsInfo.wxss | 3 ++- pages/user/order_detail/order_detail.js | 14 +++++++++----- pages/user/order_detail/order_detail.wxml | 5 ++++- pages/user/order_list/order_list.js | 334 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------- pages/user/order_list/order_list.wxml | 10 +++++----- pages/user/order_list/order_list.wxss | 4 ++-- 10 files changed, 1200 insertions(+), 413 deletions(-) diff --git a/pages/cart/cart/cart.js b/pages/cart/cart/cart.js index f99152a..27d9c66 100644 --- a/pages/cart/cart/cart.js +++ b/pages/cart/cart/cart.js @@ -1,6 +1,7 @@ var t = getApp(), a = t.request, oo = t.globalData.setting, + os=oo, app = getApp(), rq = t.request, ut = require("../../../utils/util.js"); @@ -26,13 +27,24 @@ Page({ isadd: 0, //是否可以加商品数量 card_field:"", + bconf:null, + }, onLoad: function() { + var a = this,ee=a; + //----获取系统参数----- + getApp().getConfig2(function(e) { + ee.setData({ + bconfig: e, + sales_rules:e.sales_rules + }); + }) + wx.setNavigationBarTitle({ title: "购物车", }) - var a = this; + //判断是否有登陆 t.auth.hadAuth() && t.getUserInfo(function() { a.getCardList(); @@ -117,6 +129,8 @@ Page({ var all_num = 0; for (var i = 0; i < carr.length; i++) { + + var item = carr[i]; all_num += item.goods_num; item.original_img = oo.imghost + item.original_img; @@ -427,7 +441,7 @@ Page({ //----------------------更新购物数量,加减,调用接口--------------------- postCardList: function(t, item, pitem) { - var e = this; + var e = this,th=e; var user_id = getApp().globalData.user_id; console.log('update'); console.log(t); @@ -436,11 +450,12 @@ Page({ async success(d) { var limit = d.data.data.viplimited; var store_count = d.data.data.store_count; + var wareIds=d.data.data.erpwareid; var goodsinfo = e.data.requestData[pitem].goods[item]; var promgoodsbuynum = 0; var goodsbuynum = 0; - + //--要获得商品,该用户买了多少件,同步应用-- await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { data: { @@ -455,6 +470,7 @@ Page({ if (buy_num_data.promgoodsbuynum) promgoodsbuynum = buy_num_data.promgoodsbuynum; goodsbuynum = buy_num_data.goodsbuynum; }) + var buyed_mum2 = t.goods_num + goodsbuynum; if (buyed_mum2 > limit && limit > 0) { @@ -463,7 +479,7 @@ Page({ content: '购买数量超出商品限购' }); var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; - var cbuy = limit - buyed_mum; + var cbuy = limit - buyed_mum2; e.setData({ [txt]: cbuy > 0 ? cbuy : 0, }); @@ -471,78 +487,177 @@ Page({ return false; } - if (t.goods_num > store_count) { - wx.showModal({ - title: '提示', - content: '购买数量超出商品库存' - }); - var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; - e.setData({ - [txt]: store_count - }); - e.doCheckAll(); - return false; - } - + if (goodsinfo.prom_type == 1) { - //读取秒杀 - rq.get("/api/ms/flash_sale/getFlashSaleOne/" + oo.stoid + "/" + goodsinfo.prom_id, { + //读取秒杀 + rq.get("/api/ms/flash_sale/getFlashSaleOne/" + oo.stoid + "/" + goodsinfo.prom_id, { isShowLoading: 0, success: function(res_d) { - var false_data = res_d.data.data; - - //--判断库存-- - if (t.goods_num > false_data.goods_num - false_data.buy_num) { - wx.showModal({ - title: '提示', - content: '购买数量超出活动库存' - }); - var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; - e.setData({ - [txt]: false_data.goods_num - false_data.buy_num - }); - e.doCheckAll(); - return false; - } - - //--判断redis数量是否已经超出-- - if (t.goods_num > false_data.redisnum) { - wx.showModal({ - title: '提示', - content: '购买数量超出商品库存' - }); - var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; - e.setData({ - [txt]: false_data.redisnum - }); - e.doCheckAll(); - return false; - } - - //--活动的限购是不是要判断-- - if (t.goods_num + promgoodsbuynum > false_data.buy_limit && false_data.buy_limit > 0) { - wx.showModal({ - title: '提示', - content: '购买数量超出秒杀限购' - }); - var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; - e.setData({ - [txt]: false_data.false_data.buy_limit - }); - e.doCheckAll(); - return false; - } - e.update_cart(t, pitem, item); + + if(res_d.data.code==0){ + if (t.goods_num > store_count) { + wx.showModal({ + title: '提示', + content: '购买数量超出商品库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: store_count + }); + e.doCheckAll(); + return false; + } + + var false_data = res_d.data.data; + //--判断库存-- + if (t.goods_num > false_data.goods_num - false_data.buy_num) { + wx.showModal({ + title: '提示', + content: '购买数量超出活动库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: false_data.goods_num - false_data.buy_num + }); + e.doCheckAll(); + return false; + } + + //--判断redis数量是否已经超出-- + if (t.goods_num > false_data.redisnum) { + wx.showModal({ + title: '提示', + content: '购买数量超出商品库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: false_data.redisnum + }); + e.doCheckAll(); + return false; + } + + //--活动的限购是不是要判断-- + if (t.goods_num + promgoodsbuynum > false_data.buy_limit && false_data.buy_limit > 0) { + wx.showModal({ + title: '提示', + content: '购买数量超出秒杀限购' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: false_data.false_data.buy_limit + }); + e.doCheckAll(); + return false; + } + }else{ + //--- 看一下是不是线下库存 --- + if(th.data.sales_rules==2){ + th.check_down_line(t, pitem, item,wareIds); + }else{ + if (t.goods_num > store_count) { + wx.showModal({ + title: '提示', + content: '购买数量超出商品库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: store_count + }); + e.doCheckAll(); + return false; + } + e.update_cart(t, pitem, item); + } + } + } }) - } else { - e.update_cart(t, pitem, item); + } else { + //--- 看一下是不是线下库存 --- + if(th.data.sales_rules==2){ + th.check_down_line(t, pitem, item,wareIds); + }else{ + if (t.goods_num > store_count) { + wx.showModal({ + title: '提示', + content: '购买数量超出商品库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + e.setData({ + [txt]: store_count + }); + e.doCheckAll(); + return false; + } + e.update_cart(t, pitem, item); + } } } }); }, - - //更新购物车 + + //---检验线下库存的数量--- + async check_down_line(t, pitem, item,erpwareid){ + var ob={},th=this; + await this.check_down_line_next(t, pitem, item,erpwareid,function(res){ + ob=res; + }); + var log=0; + if(ob.code==-1){ + wx.showModal({ + title: '提示', + content: '购买数量超出商品库存' + }); + var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; + th.setData({ + [txt]: ob.CanOutQty + }); + th.doCheckAll(); + return false; + } + this.update_cart(t, pitem, item); + }, + + //---检验线下库存的数量的子函数--- + async check_down_line_next(t, pitem, item,erpwareid,func){ + var goodsinfo = this.data.requestData[pitem].goods[item]; + var lock=0,pick_no,plist; + //先读取门店的lock + await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ + data:{store_id:os.stoid,wareId:t.goods_id,storageId:goodsinfo.pick_id} + }).then(res=>{ + if(res.data.code==0 && res.data.data.total>0){ + lock=res.data.data.pageData[0].outQty; + } + }) + //先获取门店的编号 + await getApp().request.promiseGet("/api/weshop/pickup/get/"+os.stoid+"/"+goodsinfo.pick_id,{ + data:{storeId:os.stoid,goodsId:t.goods_id,pickupId:goodsinfo.pick_id} + }).then(res=>{ + if(res.data.code==0){ + pick_no=res.data.data.pickup_no; + } + }) + //读取线下的门店库存 + await getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ + data:{storageNos:pick_no,wareIds:encodeURIComponent(erpwareid),storeId:os.stoid} + }).then(res=>{ + if(res.data.code==0){ + plist=res.data.data.pageData[0]; + } + }) + var ob={}; ob.code=1; + if(t.goods_num>plist.CanOutQty-lock){ + ob.code=-1; + ob.CanOutQty=plist.CanOutQty-lock + if(ob.CanOutQty<0) ob.CanOutQty=0; + } + func(ob) + }, + + + //--更新购物车--- update_cart: function(t, pitem, item) { var e = this; getApp().request.put("/api/weshop/cart/update", { @@ -573,7 +688,7 @@ Page({ var th = this; var ab = 0; //选中 - console.log('checkout'); + wx.showLoading(); 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++) { @@ -594,6 +709,25 @@ Page({ } glist += i_arr[j].goods_id + ","; ab = 1; + //--普通商品,如果有开启线下库存的功能,要调用线下库存进行计算--- + if(i_arr[j].prom_type==0 && th.data.sales_rules==2){ + //--获取商品的线下商品ID-- + var gd=null; + await getApp().request.promiseGet("/api/weshop/goods/get/" + oo.stoid + "/" + i_arr[j].goods_id,{}).then(res=>{ + if(res.data.code==0) gd=res.data.data; + }) + //--判断商品是线下库存-- + var ob={} + await th.check_down_line_next(i_arr[j],i,j,gd.erpwareid,function(rs){ + ob=rs; + }); + if(ob.code==-1){ + t.my_warnning(gd.goods_name+"门店库存不足", 0, th); + wx.hideLoading(); + return false; + } + } + } else { rq.put("/api/weshop/cart/update", { data: { @@ -610,6 +744,7 @@ Page({ } if (ab == 0) { t.my_warnning("未选择商品", 0, th); + wx.hideLoading(); return false; } @@ -657,7 +792,8 @@ Page({ } try { - ddata.forEach(function(val, ind) { + for(var ind in ddata) { + var val=ddata[ind]; var num = map.get(val.goods_id + ""); if (num <= 0) { isok = 0; @@ -665,12 +801,25 @@ Page({ throw "购买数量不能为0"; return false; } - if (num > val.store_count) { - isok = 0; - gname = val.goods_name; - throw "超出库存"; - return false; - } + + if(val.prom_type==1 || val.prom_type==6){ + if (num > val.store_count) { + isok = 0; + gname = val.goods_name; + throw "超出库存"; + return false; + } + } + + if(th.data.sales_rules!=2){ + if (num > val.store_count) { + isok = 0; + gname = val.goods_name; + throw "超出库存"; + return false; + } + } + if (num > val.redisnum && val.redisnum) { isok = 0; gname = val.goods_name; @@ -712,7 +861,7 @@ Page({ throw "商品价格已经变化"; } }else{ - if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price) { + if (g_arr[i].goods_price != val.shop_price && g_arr[i].goods_price != val.prom_price) { isok = 0; gname = val.goods_name; throw "商品价格已经变化"; @@ -733,14 +882,16 @@ Page({ } } - }) + } } catch (e) { err = e; } if (isok == 0) { t.confirmBox(gname + ":" + err); + wx.hideLoading(); return false; } + wx.hideLoading(); wx.navigateTo({ url: "/pages/cart/cart2/cart2" }); @@ -821,6 +972,8 @@ Page({ wx.switchTab({ url: '/pages/index/index/index', }) - } + }, + + }); \ No newline at end of file diff --git a/pages/cart/cart2/cart2.js b/pages/cart/cart2/cart2.js index 0c1d7de..3d4a6f5 100644 --- a/pages/cart/cart2/cart2.js +++ b/pages/cart/cart2/cart2.js @@ -1,6 +1,6 @@ var t = getApp(),app=t, a = t.request, e = require("../../../utils/common.js"), s = require("../../../utils/util.js"), o = require("../../../utils/md5.js"), to = getApp(); -var oo=t.globalData.setting; +var oo=t.globalData.setting,os=oo; var regeneratorRuntime = require('../../../utils/runtime.js'); var util_pay = require("../../../utils/pay.js"); @@ -84,6 +84,9 @@ Page({ is_coupon:null, //选择券的控制属性 is_shipping_code:"",//插入用户默认地址 wu_arr_txt:"", //要更新的物流的字段 + + sales_rules:1, //默认是显示线上库存 + }, onLoad: function(t) { @@ -101,7 +104,7 @@ Page({ //先获取是否有关闭使用优惠券 getApp().getConfig2(function (ee) { var json_d = JSON.parse(ee.switch_list); - th.setData({ is_close_quan: json_d.is_close_quan }); + th.setData({ is_close_quan: json_d.is_close_quan,sales_rules:ee.sales_rules }); //-----先获取物流,再获取用户信息,再展示页面----- th.get_wuliu(th.get_info(th.show_page)); }) @@ -698,7 +701,7 @@ Page({ }, //--------------------提交订单----------------------- - submitForm: function(t) { + async submitForm(t){ if(this.data.is_summit_ing==1) return false; //--提交中退出-- this.data.is_summit_ing=1; var th=this,pdata=new Array(); @@ -772,7 +775,20 @@ Page({ 'prom_type':th.data.bn_goods.prom_type, //促销活动类型 'prom_id': th.data.bn_goods.prom_id, //促销活动id }; - + + //如果不立即购买或者秒杀,如果是线下库存购买的时候 + if(goods.prom_type!=1 && goods.prom_type!=6 && th.data.sales_rules==2){ + var isok=1; + await th.check_store_num(goods.goods_id,th.data.bn_pick, gg.goods_num,function(res){ + isok=res; + }); + if(!isok){ + getApp().confirmBox("商品的门店库存不足"); + th.data.is_summit_ing=0; + return false; + } + } + //--组装优惠券的钱-- if(th.data.formData.coupon_price){ item.coupon_price=th.data.formData.coupon_price; @@ -868,6 +884,20 @@ Page({ }else{ goods.prom_type = 0;goods.prom_id =0; } + + //如果不立即购买或者秒杀,如果是线下库存购买的时候 + if(goods.prom_type==0 && th.data.sales_rules==2){ + var isok=1; + await th.check_store_num(goods.goods_id, t_item.pickup_id,goods.goods_num,function(res){ + isok=res; + }); + if(!isok){ + getApp().confirmBox( goods.goods_name+"的门店库存不足"); + th.data.is_summit_ing=0; + return false; + } + } + item.order_goods.push(goods); } pdata.push(item); @@ -975,6 +1005,49 @@ Page({ }) }, + + //---确认线下门店的数量足不足--- + async check_store_num(goods_id,pick,goods_num,func){ + var lock=0,pick_no,plist,erpwareid; + //先读取门店的lock + await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ + data:{store_id:os.stoid,wareId:goods_id,storageId:pick} + }).then(res=>{ + if(res.data.code==0 && res.data.data.total>0){ + lock=res.data.data.pageData[0].outQty; + } + }) + //先获取门店的编号 + await getApp().request.promiseGet("/api/weshop/pickup/get/"+os.stoid+"/"+pick,{ + data:{storeId:os.stoid,goodsId:t.goods_id,pickupId:pick} + }).then(res=>{ + if(res.data.code==0){ + pick_no=res.data.data.pickup_no; + } + }) + //先获取商品的线下库存 + await getApp().request.promiseGet("/api/weshop/goods/get/"+os.stoid+"/"+goods_id,{ + data:{storeId:os.stoid,goodsId:t.goods_id,pickupId:pick} + }).then(res=>{ + if(res.data.code==0){ + erpwareid=res.data.data.erpwareid; + } + }) + //读取线下的门店库存 + await getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ + data:{storageNos:pick_no,wareIds:encodeURIComponent(erpwareid),storeId:os.stoid} + }).then(res=>{ + if(res.data.code==0){ + plist=res.data.data.pageData[0]; + } + }) + var isok=1; + if(goods_num>plist.CanOutQty-lock){ + isok=0; + } + func(isok); + }, + useCoupon: function() { if (this.data.order.couponNum <= 0) { diff --git a/pages/goods/goodsInfo/goodsInfo.js b/pages/goods/goodsInfo/goodsInfo.js index 5ee836e..6093d83 100644 --- a/pages/goods/goodsInfo/goodsInfo.js +++ b/pages/goods/goodsInfo/goodsInfo.js @@ -125,8 +125,8 @@ Page({ pickpu_list: null, //读出的所有门店list def_pickpu_list: null, //一开始5个门店list sec_pick_index: 0, //第二级门店选择ID - fir_pick_index: 0, //第一级门店选择ID - + fir_pick_index: 0, //第一级门店选择ID + all_pick_list:null,//所有的门店先记录起来 //同一条形码的所有商品 sku_g: null, sku_g_pt: null, //---拼单的普通购买--- @@ -301,27 +301,27 @@ Page({ //---回调卡的列表--- th.getPlusCardType(function(ob){ th.setData({card_list:ob.card_list}); - var ti = setInterval(function () { - var user = getApp().globalData.userInfo; - if (!user) return false; - clearInterval(ti); - - if(user.card_field ){ - var str = user['card_expiredate'].replace(/-/g, '/'); - var end = new Date(str); - end = Date.parse(end) / 1000; - var now = ut.gettimestamp(); - //--- 判断是等级会员,且在有效期范围内 --- - if(user.card_field && now5) card_name=card_name.substring(0,5); - - var is_near_date=0; - if(end-now<60*60*30*24) is_near_date=1; //如果小于30天 - th.setData({card_field:user.card_field,card_name:card_name,card_list:ob.card_list,is_near_date:is_near_date}); - } - } - }, 500) + var ti = setInterval(function () { + var user = getApp().globalData.userInfo; + if (!user) return false; + clearInterval(ti); + + if(user.card_field ){ + var str = user['card_expiredate'].replace(/-/g, '/'); + var end = new Date(str); + end = Date.parse(end) / 1000; + var now = ut.gettimestamp(); + //--- 判断是等级会员,且在有效期范围内 --- + if(user.card_field && now5) card_name=card_name.substring(0,5); + + var is_near_date=0; + if(end-now<60*60*30*24) is_near_date=1; //如果小于30天 + th.setData({card_field:user.card_field,card_name:card_name,card_list:ob.card_list,is_near_date:is_near_date}); + } + } + }, 500) }) } @@ -372,9 +372,7 @@ Page({ sto_sele_distr: e.distr_type }) } - - - + } } }) @@ -624,11 +622,13 @@ Page({ userInfo:getApp().globalData.userInfo }); - //获取门店 - ee.get_sto(); + //获取统一条形码,普通商品和优惠促销的商品 - if (ee.data.data.prom_type == 0 || ee.data.data.prom_type == 3 || ee.data.data.prom_type == 5) - ee.get_sku(o.stoid, t.data.data.sku, gid); + if (ee.data.data.prom_type == 0 || ee.data.data.prom_type == 3 || ee.data.data.prom_type == 5){ + //获取门店 + ee.get_sto(); + ee.get_sku(o.stoid, t.data.data.sku, gid); + } else { var gg = "", item = t.data.data; @@ -695,11 +695,6 @@ Page({ }); this.data.enterAddressPage && (this.data.enterAddressPage = !1); - - - - - }, enterAddress: function() { this.data.enterAddressPage = !0, wx.navigateTo({ @@ -812,6 +807,7 @@ Page({ addCart: function(t) { var th = this; var ind = t.currentTarget.dataset.openSpecModal_ind; + if(!ind) ind = t.currentTarget.dataset.openspecmodal_ind; th.setData({ open_ind_store: ind }); @@ -838,9 +834,8 @@ Page({ var e = this, th = e, a = 0, - o = this.data.sele_g; - if (o.store_count <= 0) return s.my_warnning("库存已为空!", 0, th); - a = o.goods_id; + o = this.data.sele_g; + a = o.goods_id; //----------添加到购物车时,要判断限购数量,-------- e.get_buy_num(o, function(ee) { @@ -866,7 +861,6 @@ Page({ } if (th.data.goodsInputNum <= 0) return s.my_warnning("商品数量不能为0", 0, th); - if (th.data.goodsInputNum > o.store_count) return s.my_warnning("超出商品库存", 0, th); if (th.data.sto_sele_name == null || th.data.sto_sele_name == undefined) this.setData({ sto_sele_name: "" @@ -891,20 +885,76 @@ Page({ if (th.data.prom_type == 1) { newd.goods_price = th.data.prom_price; newd.member_goods_price = th.data.prom_price, - newd.prom_type = th.data.prom_type; + newd.prom_type = th.data.prom_type; newd.prom_id = th.data.prom_id; - } else if (th.data.prom_type == 3 || th.data.prom_type == 2 || th.data.prom_type == 4 || th.data.prom_type == 5) { + + if (o.store_count <= 0) return s.my_warnning("库存已为空!", 0, th); + if (o.store_count 0){ + var CanOutQty=res.data.data.pageData[0].CanOutQty; + if(CanOutQty0){ + var lock= res_data.data.data.pageData[0].outQty; + if(CanOutQty<=lock){ + return s.my_warnning("库存不足!", 0, th); + } + th.add_cart_next(e,t,a,o,newd,CanOutQty-lock); + }else{ + th.add_cart_next(e,t,a,o,newd,CanOutQty); + } + } + }) + }else{ + return s.my_warnning("库存不足!", 0, th); + } + + } + } + }) + }else{ + if (o.store_count <= 0) return s.my_warnning("库存已为空!", 0, th); + if (o.store_count now){ var card_price=o[getApp().globalData.userInfo['card_field']]; //如果会员有等级价 if(getApp().globalData.userInfo['card_field']!=undefined && getApp().globalData.userInfo['card_field']!=null @@ -914,64 +964,76 @@ Page({ } } } - - - //if (this.data.data.goods.is_virtual) return this.buyVirtualGoods(d); - if ("add" == t.currentTarget.dataset.action) { - //----先看会员在购物车中是否加入了该商品----- - i.get("/api/weshop/cart/page", { - data: { - store_id: e.data.stoid, - user_id: oo.user_id, - goods_id: a, - pick_id: e.data.sto_sele_id, - }, - success: function(re) { - //-------如果购物车中有相关的数据--------- - if (re.data.data.total > 0) { - var item = re.data.data.pageData[0]; - var updata = { - id: item.id, - goods_num: e.data.goodsInputNum + item.goods_num, - goods_price: newd.goods_price, - store_id: th.data.stoid, - }; - - i.put("/api/weshop/cart/update", { - data: updata, - success: function(t) { - getApp().my_warnning('加入购物车成功', 1, th, 450); - var c_num = th.data.cartGoodsNum + th.data.goodsInputNum; - th.setData({ - cartGoodsNum: c_num - }); - th.closeSpecModal(); - } - }); - } else { - i.post("/api/weshop/cart/save", { - data: newd, - success: function(t) { - getApp().my_warnning('加入购物车成功', 1, th, 450); - var c_num = th.data.cartGoodsNum + e.data.goodsInputNum; - th.setData({ - cartGoodsNum: c_num - }); - th.closeSpecModal(); - } - }); - } - } - }); - } - //else "exchange" == t.currentTarget.dataset.action ? this.exchange(d) : this.buyNow(d); - else { - newd['pick_name'] = th.data.sto_sele_name; - newd['pick_dis'] = th.data.sto_sele_distr; - th.buyNow(newd); - } - }) + + //if (this.data.data.goods.is_virtual) return this.buyVirtualGoods(d); + if ("add" == t.currentTarget.dataset.action) { + //----先看会员在购物车中是否加入了该商品----- + i.get("/api/weshop/cart/page", { + data: { + store_id: e.data.stoid, + user_id: oo.user_id, + goods_id: a, + pick_id: e.data.sto_sele_id, + }, + success: function(re) { + //判断数量,要看下购物车中有没有该商品 + if(CanOutQty){ + if(th.data.cartGoodsNum + th.data.goodsInputNum>CanOutQty){ + return s.my_warnning("库存不足!", 0, th); + } + }else{ + if(th.data.cartGoodsNum + th.data.goodsInputNum>o.store_count){ + return s.my_warnning("库存不足!", 0, th); + } + } + //-------如果购物车中有相关的数据--------- + if (re.data.data.total > 0) { + var item = re.data.data.pageData[0]; + var updata = { + id: item.id, + goods_num: e.data.goodsInputNum + item.goods_num, + goods_price: newd.goods_price, + store_id: th.data.stoid, + }; + + i.put("/api/weshop/cart/update", { + data: updata, + success: function(t) { + getApp().my_warnning('加入购物车成功', 1, th, 450); + var c_num = th.data.cartGoodsNum + th.data.goodsInputNum; + th.setData({ + cartGoodsNum: c_num + }); + th.closeSpecModal(); + } + }); + } else { + i.post("/api/weshop/cart/save", { + data: newd, + success: function(t) { + getApp().my_warnning('加入购物车成功', 1, th, 450); + var c_num = th.data.cartGoodsNum + e.data.goodsInputNum; + th.setData({ + cartGoodsNum: c_num + }); + th.closeSpecModal(); + } + }); + } + } + }); + } + //else "exchange" == t.currentTarget.dataset.action ? this.exchange(d) : this.buyNow(d); + else { + newd['pick_name'] = th.data.sto_sele_name; + newd['pick_dis'] = th.data.sto_sele_distr; + th.buyNow(newd); + } }, + + + + //----------购买虚拟商品------ buyVirtualGoods: function(e) { Object.assign(e, { @@ -1275,7 +1337,7 @@ Page({ //----------装载同一条形码的商品---------- async get_sku(stoid, sku, g_id, is_normal, func) { - var tt = this; + var tt = this,arrdata=null; await getApp().request.promiseGet("/api/weshop/goods/page", { data: { store_id: o.stoid, @@ -1284,17 +1346,38 @@ Page({ is_on_sale: 1 } }).then(res => { - var e = res; - var arrsku = new Array(); - var gitem = null; - if (e.data.code == 0) { - var arrdata = e.data.data.pageData, - gb = 1, - gg = ""; - for (var i = 0; i < arrdata.length; i++) { - var item = arrdata[i], - gg = ""; - + var e = res; + if (e.data.code == 0) arrdata = e.data.data.pageData; + }) + if(!arrdata) return fasle; + + var arrsku = new Array(); + var gitem = null; + var gb = 1,gg = ""; + for (var i = 0; i < arrdata.length; i++) { + var goodsinfo=arrdata[i],prom=null; + if (goodsinfo.goods_id != g_id) { + if(goodsinfo.prom_type==1){ + await getApp().request.promiseGet("/api/ms/flash_sale/get/"+os.stoid+"/"+goodsinfo.prom_id,{ + }).then(res=>{ + if(res.data.code==0) prom=res.data.data; + }) + } + if(goodsinfo.prom_type==6){ + await getApp().request.promiseGet("/api/weshop/teamlist/get/"+os.stoid+"/"+goodsinfo.prom_id,{ + }).then(res=>{ + if(res.data.code==0) prom=res.data.data; + }) + } + } + //---如果有活动,不算在一起--- + if(prom){ + if(prom.is_end==0 && prom.end_time>now && prom.start_time{ + if(res.data.code==0){ + prom=res.data.data; + } + }) + } + if(goodsinfo.prom_type==6){ + await getApp().request.promiseGet("/api/weshop/teamlist/get/"+os.stoid+"/"+goodsinfo.prom_id,{ + }).then(res=>{ + if(res.data.code==0){ + prom=res.data.data; + } + }) + } + //----------如果有活动,并且在进行中,就不计算线下库存--------------- + var now=ut.gettimestamp(); + if(prom){ + if(prom.is_end==0 && prom.end_time>now && prom.start_time { var e = res; if (e.data.code == 0) { - //如果有开启距离的功能,没有设置默认门店,要用最近的门店作为默认门店 if(dd.lat && !th.data.def_pick_store && th.data.bconfig.is_sort_storage){ th.setData({ @@ -1403,152 +1533,246 @@ Page({ e.data.data.pageData.splice(0, 0, th.data.def_pick_store); //添加 } - /*---- - //--获取线下库存-- - if(th.data.sales_rules){ - - }---*/ - - //单总量超出5个的时候 - if (e.data.data.total > 5) { - i.get("/api/weshop/storagecategory/page", { - data: { - store_id: o.stoid, - is_show: 1, - pageSize: 300 - }, - success: function(ee) { - if (ee.data.code == 0) { - if (ee.data.data && ee.data.data.pageData && ee.data.data.pageData.length > 0) { - var def_arr = new Array(); - var ishas = 0; - //-- 开始就看5个门店 -- - for (var k = 0; k < 5; k++) { - if (k == e.data.data.pageData.length) break; - def_arr.push(e.data.data.pageData[k]); - } - - th.setData({ - def_pickpu_list: def_arr, - pickpu_list: ee.data.data.pageData - }); - var sto_cate = ee.data.data.pageData; - var sto_arr = e.data.data.pageData; - var newarr = new Array(); - var qita = new Array(); - - //----要进行门店分组-------- - for (var i = 0; i < sto_arr.length; i++) { - //找一下这个门店有没有在分类数组内 - var find2 = 0, - find2name = ""; - for (var m = 0; m < sto_cate.length; m++) { - if (sto_arr[i].category_id == sto_cate[m].cat_id) { - find2 = sto_cate[m].cat_id; - find2name = sto_cate[m].cat_name; - break; - } - } - - if (newarr.length > 0) { - var find = 0; - //如果有找到,那门店就在这个分组内,否则,分类就要排在其他 - if (find2 != 0) { - for (var ii = 0; ii < newarr.length; ii++) { - if (sto_arr[i].category_id == newarr[ii].cat_id) { - newarr[ii].s_arr.push(sto_arr[i]); - find = 1; - break; - } - } - if (find == 0) { - var arr0 = new Array(); - arr0.push(sto_arr[i]); - var item = { - cat_id: find2, - name: find2name, - s_arr: arr0 - }; - newarr.push(item); - } - } else { - qita.push(sto_arr[i]); - } - } else { - //如果有找到,那门店就在这个分组内,否则,分类就要排在其他 - if (find2 != 0) { - var arr0 = new Array(); - arr0.push(sto_arr[i]); - var item = { - cat_id: find2, - name: find2name, - s_arr: arr0 - }; - newarr.push(item); - } else { - qita.push(sto_arr[i]); - } - } - } - - //----安排其他的分类----- - if (qita.length > 0) { - var item = { - cat_id: -1, - name: "其他", - s_arr: qita - }; - newarr.push(item); - } - th.setData({ - is_show_sto_cat: 1, - all_sto: newarr - }); - - } else { - th.setData({ - is_show_sto_cat: -1, - only_pk: e.data.data.pageData - }); - //-----如果没有默认门店,要取第一个门店作为默认店.此时没有门店分类的情况------ - if (!th.data.def_pick_store) { - th.setData({def_pick_store:e.data.data.pageData[0]}) - } - } - } else { - th.setData({ - is_show_sto_cat: -1, - only_pk: e.data.data.pageData - }); - //-----如果没有默认门店,要取第一个门店作为默认店.此时没有门店分类的情况------ - if (!th.data.def_pick_store) { - th.setData({def_pick_store:e.data.data.pageData[0]}) - } - - } - } - }); - } else { - th.setData({ - is_show_sto_cat: 0, - only_pk: e.data.data.pageData - }); - //-----如果没有默认门店,要取第一个门店作为默认店------ - if (!th.data.def_pick_store && th.data.bconfig.is_sort_storage) { - th.setData({ - def_pick_store:e.data.data.pageData[0], - sto_sele_name: e.data.data.pageData[0].pickup_name, - sto_sele_id: e.data.data.pageData[0].pickup_id, - sto_sele_distr: e.data.data.pageData[0].distr_type - }) - } - } - } + th.setData({all_pick_list:e.data.data.pageData}); + + //--获取线下库存,而且不是新的门店规则,同时不能是活动-- + if(th.data.sales_rules==2 && !th.data.is_newsales_rules && th.data.prom_type!=1 && th.data.prom_type!=6){ + th.deal_pickup_dline(e); + }else{ + th.deal_pickup(e); //--普通门店排版-- + } + } }) }, 200) + }, + + //------------处理门店--------------- + deal_pickup(e){ + var th=this; + //单总量超出5个的时候 + if (e.data.data.total > 5) { + i.get("/api/weshop/storagecategory/page", { + data: { + store_id: o.stoid, + is_show: 1, + pageSize: 1000 + }, + success: function(ee) { + if (ee.data.code == 0) { + if (ee.data.data && ee.data.data.pageData && ee.data.data.pageData.length > 0) { + var def_arr = new Array(); + var ishas = 0; + //-- 开始就看5个门店 -- + for (var k = 0; k < 5; k++) { + if (k == e.data.data.pageData.length) break; + def_arr.push(e.data.data.pageData[k]); + } + + th.setData({ + def_pickpu_list: def_arr, + pickpu_list: ee.data.data.pageData + }); + var sto_cate = ee.data.data.pageData; + var sto_arr = e.data.data.pageData; + var newarr = new Array(); + var qita = new Array(); + + //----要进行门店分组-------- + for (var i = 0; i < sto_arr.length; i++) { + //找一下这个门店有没有在分类数组内 + var find2 = 0, + find2name = ""; + for (var m = 0; m < sto_cate.length; m++) { + if (sto_arr[i].category_id == sto_cate[m].cat_id) { + find2 = sto_cate[m].cat_id; + find2name = sto_cate[m].cat_name; + break; + } + } + + if (newarr.length > 0) { + var find = 0; + //如果有找到,那门店就在这个分组内,否则,分类就要排在其他 + if (find2 != 0) { + for (var ii = 0; ii < newarr.length; ii++) { + if (sto_arr[i].category_id == newarr[ii].cat_id) { + newarr[ii].s_arr.push(sto_arr[i]); + find = 1; + break; + } + } + if (find == 0) { + var arr0 = new Array(); + arr0.push(sto_arr[i]); + var item = { + cat_id: find2, + name: find2name, + s_arr: arr0 + }; + newarr.push(item); + } + } else { + qita.push(sto_arr[i]); + } + } else { + //如果有找到,那门店就在这个分组内,否则,分类就要排在其他 + if (find2 != 0) { + var arr0 = new Array(); + arr0.push(sto_arr[i]); + var item = { + cat_id: find2, + name: find2name, + s_arr: arr0 + }; + newarr.push(item); + } else { + qita.push(sto_arr[i]); + } + } + } + + //----安排其他的分类----- + if (qita.length > 0) { + var item = { + cat_id: -1, + name: "其他", + s_arr: qita + }; + newarr.push(item); + } + th.setData({ + is_show_sto_cat: 1, + all_sto: newarr + }); + + } else { + th.setData({ + is_show_sto_cat: -1, + only_pk: e.data.data.pageData + }); + //-----如果没有默认门店,要取第一个门店作为默认店.此时没有门店分类的情况------ + if (!th.data.def_pick_store) { + th.setData({def_pick_store:e.data.data.pageData[0]}) + } + } + } else { + th.setData({ + is_show_sto_cat: -1, + only_pk: e.data.data.pageData + }); + //-----如果没有默认门店,要取第一个门店作为默认店.此时没有门店分类的情况------ + if (!th.data.def_pick_store) { + th.setData({def_pick_store:e.data.data.pageData[0]}) + } + + } + } + }); + } else { + th.setData({ + is_show_sto_cat: 0, + only_pk: e.data.data.pageData + }); + //-----如果没有默认门店,要取第一个门店作为默认店------ + if (!th.data.def_pick_store && th.data.bconfig.is_sort_storage) { + th.setData({ + def_pick_store:e.data.data.pageData[0], + sto_sele_name: e.data.data.pageData[0].pickup_name, + sto_sele_id: e.data.data.pageData[0].pickup_id, + sto_sele_distr: e.data.data.pageData[0].distr_type + }) + } + } + + }, + //------------处理线下门店库存-------- + async deal_pickup_dline(e){ + var pkno=[],th=this; + if(this.data.def_pick_store){ + pkno.push(this.data.def_pick_store.pickup_no); + } + for(var i in e.data.data.pageData){ + var item=e.data.data.pageData[i]; + pkno.push(item.pickup_no); + } + var pkno_str=pkno.join(","); + var o_plist=e.data.data.pageData; + var new_list=[]; + var is_find_def_store=0; + + var lock=[]; + //先读取门店的lock + await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ + data:{store_id:os.stoid,wareId:th.data.data.goods_id} + }).then(res=>{ + if(res.data.code==0 && res.data.data.total>0){ + lock=res.data.data.pageData + } + }) + + //---通过接口获取门店的线下库存信息-- + await getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ + data:{storageNos:pkno_str,wareIds:encodeURIComponent(th.data.data.erpwareid),storeId:os.stoid} + }).then(res=>{ + if(res.data.code==0){ + if(res.data.data.pageData){ + var plist=res.data.data.pageData; + //以原来的数组为外循环,保证距离的顺序 + for(var kk in o_plist){ + for(var ii in plist){ + //线下的门店小心 + var n_item=plist[ii]; + if(n_item.StorageNo==o_plist[kk].pickup_no){ + + //拿到锁库的数量 + var lock_num=th.find_lock_num(o_plist[kk].pickup_id,lock); + //可出库数大于预出库库存的数量,可以判断为有库存 + if(n_item.CanOutQty>lock_num){ + o_plist[kk].CanOutQty=n_item.CanOutQty-lock_num + new_list.push(o_plist[kk]); + //如果找到默认门店 + if(th.data.def_pick_store && n_item.StorageNo==th.data.def_pick_store.pickup_no){ + th.data.def_pick_store.CanOutQty=n_item.CanOutQty; + is_find_def_store=1; + } + } + } + } + } + + //数据组装下 + var em={};em.data={};em.data.data={}; + em.data.data.total=new_list.length; + em.data.data.pageData=new_list; + + //---把数组组装进去--- + th.deal_pickup(em); + if(th.data.def_pick_store && !is_find_def_store){ + th.setData({def_pick_store:null}); + } + + }else{ + th.setData({def_pick_store:null,all_sto:null,only_pk:null}) + } + }else{ + th.setData({def_pick_store:null,all_sto:null,only_pk:null}) + } + }) + + }, + find_lock_num(pick_id,lock){ + var lock_num=0; + if(!lock) return 0; + if(lock.length<0) return 0; + for(var i in lock){ + if(pick_id==lock[i].pickupId){ + lock_num=lock[i].outQty; + } + } + return lock_num; }, //----------取货门店被点击的效果------ @@ -1709,6 +1933,7 @@ Page({ isshow: 1, }); ee.get_sku(os.stoid, ee.data.data.sku, gid); + ee.get_sto(); return false; } //----已经过期----- @@ -1729,6 +1954,7 @@ Page({ isshow: 1, }); ee.get_sku(os.stoid, ee.data.data.sku, gid); + ee.get_sto(); return false; } @@ -1746,6 +1972,8 @@ Page({ prom_start_time: prom_start_time, isshow: 1, }); + + ee.get_sto(); var newTime = ut.gettimestamp(); @@ -1800,6 +2028,7 @@ Page({ isshow: 1, }); ee.get_sku(os.stoid, ee.data.data.sku, gid); + ee.get_sto(); return false; } //----已经结束----- @@ -1819,6 +2048,7 @@ Page({ isshow: 1, }); ee.get_sku(os.stoid, ee.data.data.sku, gid); + ee.get_sto(); return false; } @@ -1829,6 +2059,7 @@ Page({ isshow: 1, }); ee.get_sku(os.stoid, ee.data.data.sku, gid); + ee.get_sto(); return false; } @@ -1910,6 +2141,8 @@ Page({ prom_start_time: prom_start_time, isshow: 1, }); + + ee.get_sto(); var newTime = now; var endTime2 = t.data.data.end_time; @@ -3195,16 +3428,70 @@ Page({ sec_pick_index: 0 }); }, - - - choose_for_store_fir: function(e) { var index_c = e.currentTarget.dataset.ind; - - this.setData({ - fir_pick_index: index_c - }) + var th=this; + this.check_the_pick(index_c,function(){ + th.setData({ + fir_pick_index: index_c + }) + }) + + }, + + //如果开启线下库存,已经急速库存才会使用 + async check_the_pick(index,func){ + var th=this; + var goodsinfo=th.data.sele_g; + var erpwareid=goodsinfo.erpwareid; + var plist=null; + + //---如果是活动的时候--- + if(th.data.prom_type==1 || th.data.prom_type==6){ + func(); return false; + } + + if(this.data.sales_rules!=2 && this.data.is_newsales_rules!=1){ + func(); + }else{ + var item=null; + if (th.data.choice_sort_store == 0) { + if (th.data.is_show_sto_cat == 1) { + item = th.data.def_pickpu_list[index]; + } else { + item = th.data.only_pk[index]; //当没有门店分类的时候 + } + } else { + item = th.data.sec_sto.s_arr[index]; + } + + //先读取门店的lock + await getApp().request.promiseGet("/api/weshop/order/ware/lock/page",{ + data:{store_id:os.stoid,wareId:t.goods_id,storageId:goodsinfo.pick_id} + }).then(res=>{ + if(res.data.code==0 && res.data.data.total>0){ + lock=res.data.data.pageData[0].outQty; + } + }) + + //读取线下的门店库存 + await getApp().request.promiseGet("/api/weshop/goods/getWareStorages",{ + data:{storageNos:item.pickup_no,wareIds:encodeURIComponent(erpwareid),storeId:os.stoid} + }).then(res=>{ + if(res.data.code==0 && res.data.data.total>0){ + plist=res.data.data.pageData[0]; + } + }) + + if(plist && plist.CanOutQty-lock>0){ + func() + return false; + } + getApp().my_warnning(item.pickup_name+"库存不足!", 0, th); + + } }, + //确定def_pick为选择的门店 sure_pick: function(e) { @@ -3266,11 +3553,13 @@ Page({ //---点击二级之后的选择--- choose_for_store: function(e) { var index_c = e.currentTarget.dataset.ind; - - this.setData({ - sec_pick_index: index_c, - fir_pick_index: index_c - }) + var th=this; + th.check_the_pick(index_c,function(){ + th.setData({ + sec_pick_index: index_c, + fir_pick_index: index_c + }) + }) }, //把选择的门店设置成默认的门店def_pick set_def_pick: function(e) { @@ -3455,7 +3744,19 @@ Page({ }, go_card_info:function(){ getApp().goto("/pages/user/cardinfo/cardinfo"); + }, + //-- 根据ID拿出门店 -- + get_pick_from_list(pid){ + var all_pick_list=this.data.all_pick_list; + for(var i in all_pick_list){ + var item=all_pick_list[i]; + if(item.pickup_id==pid){ + return item; + } + } } + + }); diff --git a/pages/goods/goodsInfo/goodsInfo.wxml b/pages/goods/goodsInfo/goodsInfo.wxml index 23cf623..565fe98 100644 --- a/pages/goods/goodsInfo/goodsInfo.wxml +++ b/pages/goods/goodsInfo/goodsInfo.wxml @@ -911,7 +911,7 @@ - @@ -126,8 +128,6 @@ - - 已取消 取消订单 拼团失败 @@ -136,7 +136,7 @@ 申请退款 - 删除订单 + 删除订单 重新退款 退款详情 diff --git a/pages/user/order_list/order_list.wxss b/pages/user/order_list/order_list.wxss index c5f5be2..a63509b 100644 --- a/pages/user/order_list/order_list.wxss +++ b/pages/user/order_list/order_list.wxss @@ -152,8 +152,8 @@ page { } .Commodity_number .lin { - border-left: 2rpx solid rgb(129, 65, 81); - margin: 0rpx 15rpx; + border-right: 1rpx solid #C4182E; + margin: 0rpx 11rpx; width: 2rpx; height: 31rpx; } -- libgit2 0.21.4