var t = getApp(), a = t.request, oo = t.globalData.setting, os = oo, app = getApp(), rq = t.request, ut = require("../../../utils/util.js"), zh_calc = require("zh_calculate.js"), ladder_calc = require("ladder_calculate.js"); var regeneratorRuntime = require('../../../utils/runtime.js'); Page({ data: { url: t.globalData.setting.url, resourceUrl: t.globalData.setting.resourceUrl, iurl: t.globalData.setting.imghost, requestData: null, checkAllToggle: 0, total_fee: 0, //结算金额 total_num: 0, //结算数量 all_num: 0, //购物车中所有商品数量 allsto: null, imgUrl: t.globalData.setting.imghost, is_has_flash: 0, //是否又秒杀活动 is_edit: 0, //是否编辑 is_load: 0, //是否已加载 up_dating: 0, //更新中 isreduce: 0, //商品数量是否可减 isadd: 0, //是否可以加商品数量 card_field:"", bconf:null, btn_click:1, service_data:null, max_sw_height:200, zhhe_prom:[], //组合活动需要显示差多少件 zuhe_map:{}, zuhe_map_good:{}, in_zhact_gdmap:{}, //不同门店参与同一活动的限购 ladder_map:{}, //阶梯促销需要的map }, onLoad: function () { var a = this, ee = a; //----获取系统参数----- // getApp().getConfig2(function (e) { // ee.setData({ // bconfig: e, // sales_rules: e.sales_rules // }); // }) wx.setNavigationBarTitle({ title: "购物车", }) //判断是否有登录 t.auth.hadAuth() && t.getUserInfo(function () { //a.getCardList(); }); }, onShow: function () { //每次显示都清空 this.data.in_zhact_gdmap = {}; if (typeof this.getTabBar === 'function' && this.getTabBar()) { var index = getApp().getPageIndex(this); this.getTabBar().setData({ active: index //数字是当前页面在tabbar的索引 }) getApp().requestCardNum(this); } var th = this; this.setData({ requestData: null, is_load: 0 }); //调用底部导航 //t.editTabBar(th,getApp().globalData.setting.stoid,getApp().globalData.url); //----获取系统参数----- getApp().getConfig2(function(e) { var json_d = JSON.parse(e.switch_list); var is_open_offline=json_d.is_pricing_open; th.setData({ bconfig: e, freight_free:e.freight_free, weight_free:e.weight_free, sales_rules:e.sales_rules, }); getApp().request.promiseGet("/store/storemoduleendtime/page?store_id=" +os.stoid + "&type=6",{}).then(res=>{ //未购买 if(res.data.code!=0 || !res.data.data || !res.data.data.pageData || !res.data.data.pageData.length){ is_open_offline=0; }else{ //已经过期 var item=res.data.data.pageData[0]; if(item.end_time { if(res.data.code==0 && res.data.data && res.data.data.pageData && res.data.data.pageData.length>0){ var a = res.data.data.pageData; var narr=[]; for(var i in a){ var tt = { 'ad_code': os.imghost + a[i].ad_code, 'media_link': '', 'ad_weapplink':a[i].ad_weapplink }; narr.push(tt); } th.setData({ad_data:narr}); }else{ var user_id=getApp().globalData.user_id; if(!user_id) user_id=0; var req_d= { store_id: oo.stoid, timetype: 2, is_end: 0, is_show: 1, pageSize: 1, user_id: user_id } //--获取是否又秒杀活动-- getApp().request.promiseGet("/api/ms/flash_sale/spikepage", { data: req_d, }).then(res => { if (res.data.code == 0 && res.data.data && res.data.data.pageData.length > 0) { th.setData({ is_has_flash: 1 }) } }); } }) }, onHide() { this.data.zuhe_map = {}; }, onUnLoad() { getApp().globalData.cart_zh_act = null; }, //-------------获取购物车列表,要安装门店进行分类订单----------- getCardList: function () { var th = this; //要获取会员是不是等级会员 getApp().getConfig2(function (conf) { //--- 看后台是不是有开通等级卡 --- if (conf.switch_list) { var s_list = JSON.parse(conf.switch_list); var user = getApp().globalData.userInfo; //如果后台有开启等级价的功能 if (user && parseInt(s_list.rank_switch) == 2 && user['card_expiredate']) { 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 && now < end) { th.setData({ card_field: user.card_field }) } } //如果门店还未读出来的时候 if (th.data.allsto == null) { //读取门店 app.get_allsto(function (e) { th.setData({ allsto: e }); th.get_cart(); th.get_ser_cart(); }) } else { th.get_cart(); th.get_ser_cart(); } } }) if ((!this.data.requestData || this.data.requestData.length == 0) && (!this.data.service_data || this.data.service_data.length == 0)) { setTimeout(function () { var goods_list = th.selectComponent("#goods_list"); //组件的id if (goods_list) { goods_list.init(); goods_list.get_list(); } }, 800) } }, //-----真的获取购物车-------- get_cart: function () { var th = this; th.data.in_zhact_gdmap={}; th.data.ladder_map={}; var rd = Math.random().toString(36).substr(2, 15); var user_id = getApp().globalData.userInfo.user_id; getApp().request.get("/api/weshop/cart/list", { data: { user_id: app.globalData.user_id, rd: rd, store_id: oo.stoid, pageSize: 600, state: 0 }, success: async function (su) { console.log(su, 10000); //按门店分类的数组 var arr = new Array(), carr = su.data.data.pageData; var all_num = 0; if (carr && carr.length > 0) { var g_arr = []; for (var i = 0; i < carr.length; i++) { if (g_arr.length == 0) g_arr.push(carr[i].goods_id); else { var ind = g_arr.findIndex(function (ele) { return ele.goods_id == carr[i].goods_id }) if (ind > -1) continue; g_arr.push(carr[i].goods_id) } } var by_map = null; //--要获得商品,该用户买了多少件,同步应用-- await getApp().request.promiseGet("/api/weshop/ordergoods/listUserBuyGoodsNum", { data: { store_id: oo.stoid, user_id: user_id, goods_ids: g_arr.join(','), }, }).then(res => { if (res.data.code == 0 && res.data.data && res.data.data.length > 0) { by_map = {}; for (let i in res.data.data) { let item = res.data.data[i]; by_map[item.goods_id] = item; } } }) for (var i = 0; i < carr.length; i++) { var item = carr[i]; var good = item; if (item.is_gift) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, { success: function (t) {} }); //商品已经下架 continue; } var tt = ut.gettimestamp(); //如果商品下架了,或者商品是赠品,一开始都要清除 if ((good.down_time > 0 && good.down_time < tt) || good.is_on_sale == 0) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, { success: function (t) {} }); //商品已经下架 continue; } var goodsbuynum = 0, promgoodsbuynum = 0, limit = 0; if (by_map && by_map[good.goods_id]) { goodsbuynum = by_map[good.goods_id].goodsbuynum; promgoodsbuynum = by_map[good.goods_id].promgoodsbuynum; } limit = good.viplimited; //判断商品的限购 if (item.goods_num + goodsbuynum > limit && limit > 0) { var cbuy = limit - goodsbuynum; if (cbuy <= 0) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; a.delete(url, {}); continue; } //-- 购物车更新 -- var updata1 = { id: item.id, goods_num: cbuy, store_id: os.stoid, user_id: getApp().globalData.userInfo.user_id }; getApp().request.put("/api/weshop/cart/update", { data: updata1, }) item.goods_num = cbuy; } //如果秒杀活动都去掉了,或者结束了,那么这个商品也没有必要留着 if (item.prom_type == 1) { var prom = null; var now = ut.gettimestamp(); await getApp().request.promiseGet("/api/ms/flash_sale/getNew/" + os.stoid + '/' + user_id + "/" + item.prom_id, {}).then(res => { if (res.data.code == 0) { prom = res.data.data; prom.price = prom.user_price; } }) //---如果互动都已经过期,或者还未开始,或者无活动 if (!prom || prom.is_end == 1 || prom.end_time < now || prom.start_time > now) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; a.delete(url, { success: function (t) {} }); //商品已经下架 continue; } //判断秒杀的限购 if (item.goods_num + promgoodsbuynum > prom.buy_limit && prom.buy_limit > 0) { var cbuy = prom.buy_limit - promgoodsbuynum; if (cbuy <= 0) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; a.delete(url, {}); continue; } //-- 购物车更新 -- var updata1 = { id: item.id, goods_num: cbuy, store_id: os.stoid, user_id: getApp().globalData.userInfo.user_id }; getApp().request.put("/api/weshop/cart/update", { data: updata1, }) item.goods_num = cbuy; } //价格不对,就要更新一下 if (good.goods_price != prom.price) { good.goods_price = prom.price; //-- 购物车更新秒杀价格 -- var updata1 = { id: item.id, goods_price: prom.price, store_id: os.stoid, user_id: getApp().globalData.userInfo.user_id }; getApp().request.put("/api/weshop/cart/update", { data: updata1, }) } } //--判断优惠活动有没有过期,-- else if (item.prom_type == 3) { var isok = 1,is_g_prom=0; //因为有全场优惠活动,商品参加的活动还未开始 var url="/api/weshop/activitylist/getGoodActInfo"; var req_data={ store_id:os.stoid,goodsidlist:item.goods_id,is_detail:1,user_id:user_id }; await getApp().request.promiseGet(url, {data:req_data}).then(async function (res) { if(res.data.code==0 && res.data.data && res.data.data.length){ for(let i in res.data.data){ let item=res.data.data[i]; if(item.prom_type==3) { is_g_prom=1; break; } } } }) if (is_g_prom) { await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + item.goods_id + "/1", {}).then(res => { if (res.data.code == 0) { var r_data = res.data.data; if (!r_data.promGoodsLists) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经无活动 isok = 0; } else { //如果活动的ID不一样,说明原先的活动已经没有参与了或者过期了 if (item.prom_id != r_data.promGoodsLists[0].prom_id) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经下架 isok = 0; } } } else { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经下架 isok = 0; } }) } else { await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromNormal/" + os.stoid + "/" + item.goods_id, {}).then(res => { if (res.data.code == 0) { var r_data = res.data.data; if (!r_data.promGoodsLists) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经无活动 isok = 0; } else { //如果活动的ID不一样,说明原先的活动已经没有参与了或者过期了 if (item.prom_id != r_data.promGoodsLists[0].prom_id) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经下架 isok = 0; } } } else { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); //商品已经下架 isok = 0; } }) } if (!isok) continue; } else if (item.prom_type == 7) { if(!th.data.zuhe_map[item.prom_id]){ //如果有组合购 var isok = 1; var is_flag = 1; var act = null; var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item.prom_id + "/" + getApp().globalData.userInfo.user_id; await getApp().request.promiseGet(url, {}).then(res => { console.log(res, 1000); if (res.data.code == 0 && res.data.data) { if (res.data.data.is_show != 1) { isok = 0; } //如果活动已经结束 if (res.data.data.is_end == 1) { isok = 0; } //已经结束 if (ut.gettimestamp() > res.data.data.end_time) { isok = 0; } //还未开始 if (ut.gettimestamp() < res.data.data.start_time) { isok = 0; } act = res.data.data; } else { //未找到商品的活动 is_flag = 0; } }) if (!isok) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); th.data.zuhe_map[item.prom_id] = -1; continue; } th.data.zuhe_map[item.prom_id] = act; var url1 = "/api/weshop/prom/zhbuyGoods/page"; var req_data = { page: 1, pageSize: 2000, store_id: os.stoid, zh_id: item.prom_id, } await getApp().request.promiseGet(url1, { data: req_data }).then(res => { console.log(res, 2000); if (ut.ajax_ok(res)) { var gdlist = res.data.data.pageData; gdlist.forEach(i => { if (item.goods_id == i.goods_id && !is_flag) { item.prom_type = 0; item.prom_type1 = 0; item.prom_id = 0; item.prom_id1 = 0 } }) th.data.zuhe_map_good[item.prom_id] = gdlist; } }) } if (th.data.zuhe_map[item.prom_id] && th.data.zuhe_map[item.prom_id] != -1) { var gdlist = th.data.zuhe_map_good[item.prom_id]; var t_item = gdlist.find(function (ele) { return ele.goods_id == item.goods_id }) if (!t_item) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, {}); th.data.zuhe_map[item.prom_id] = -1; continue; } item.buyqty = t_item.buyqty; item.zh_b_num = promgoodsbuynum; item.act = th.data.zuhe_map[item.prom_id]; } //else{ // var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; // getApp().request.delete(url, {}); // th.data.zuhe_map[item.prom_id]=-1; // continue; // } } else if (item.prom_type == 10) { if(!th.data.ladder_map[item.prom_id]){ //如果有阶梯购 var isok = 1; var is_flag=1; var act=null; var url="/api/weshop/prom/ladderForm/getNew/"+os.stoid+"/"+user_id+"/"+item.prom_id; await getApp().request.promiseGet(url, {}).then(res => { console.log(res,1000); if(res.data.code==0 && res.data.data){ if(res.data.data.isuse!=1){ isok=0; } //如果活动已经结束 if(res.data.data.is_end==1){ isok=0; } //已经结束 if(ut.gettimestamp()>res.data.data.end_time){ isok=0; } //还未开始 if(ut.gettimestamp() { if (rs1.data.code==0 && rs1.data.data) { var gdlist = rs1.data.data; th.data.ladder_map[item.prom_id].ladder_list=gdlist; } }) } //直接把活动赋值给元素 if(th.data.ladder_map[item.prom_id] && th.data.ladder_map[item.prom_id]!=-1 ){ item.act=th.data.ladder_map[item.prom_id]; } } else if(item.prom_type == 0) { //如果有优惠活动,要更新活动 await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + item.goods_id + "/1", {}).then(res => { if (res.data.code == 0) { var r_data = res.data.data; if (r_data.promGoodsLists) { var url = '/api/weshop/cart/update'; getApp().request.put(url, { data: { id: item.id, store_id: oo.stoid, prom_type: 3, prom_id: r_data.promGoodsLists[0].prom_id } }); item.prom_type=3; item.prom_id=r_data.promGoodsLists[0].prom_id; }else if(r_data.ladderLists){ item.prom_type=10; item.prom_id=r_data.ladderLists[0].form_id; } } }) //如果是阶梯购的时候 if(item.prom_type==10){ if(!th.data.ladder_map[item.prom_id]){ //如果有阶梯购,要判断身份 var isok = 1; var is_flag=1; var act=null; var url="/api/weshop/prom/ladderForm/getNew/"+os.stoid+"/"+user_id+"/"+item.prom_id; await getApp().request.promiseGet(url, {}).then(res => { console.log(res,1000); if(res.data.code==0 && res.data.data){ if(res.data.data.isuse!=1){ isok=0; } //如果活动已经结束 if(res.data.data.is_end==1){ isok=0; } //已经结束 if(ut.gettimestamp()>res.data.data.end_time){ isok=0; } //还未开始 if(ut.gettimestamp() { if (rs1.data.code==0 && rs1.data.data) { var gdlist = rs1.data.data; th.data.ladder_map[item.prom_id].ladder_list=gdlist; } }) } } //直接把活动赋值给元素 if(th.data.ladder_map[item.prom_id] && th.data.ladder_map[item.prom_id]!=-1 ){ item.act=th.data.ladder_map[item.prom_id]; //如果有活动,就更新商品的活动那个 var url = '/api/weshop/cart/update'; getApp().request.put(url, { data:{id:item.id,store_id:oo.stoid,prom_type:10,prom_id:item.prom_id} }); } } } all_num += item.goods_num; item.original_img = oo.imghost + item.original_img; item.selected = 0; item.erpwareid = good.erpwareid; //要同步下线商品的id item.shop_price = good.shop_price; //要同步下线商品的id //当商品要计算等级价的售 if (item.prom_type == 0 || item.prom_type == 3 || item.prom_type == 5 || item.prom_type == 7) { if (th.data.card_field && good[th.data.card_field]) { item.goods_price = good[th.data.card_field]; //要同步下线商品的id } else { item.goods_price = good.shop_price; } var t = { id: item.id, store_id: os.stoid, user_id: getApp().globalData.userInfo.user_id, goods_price: item.goods_price } getApp().request.put("/api/weshop/cart/update", { isShowLoading: 0, data: t, }) } var pcid = item.pick_id; var find = 0; //---------循环查找门店--- if (arr.length > 0) { for (var j = 0; j < arr.length; j++) { if (arr[j].pid == pcid) { arr[j].goods.push(item); find = 1; break; } } } //------如果没有找到----- if (find == 0) { var pikname = ''; //找到门店名称 for (var k = 0; k < th.data.allsto.length; k++) { if (pcid == th.data.allsto[k].pickup_id) { pikname = th.data.allsto[k].pickup_name; break; } } var narr = new Array(); narr.push(item); var ie = { pid: pcid, pname: pikname, goods: narr, selected: 0 }; arr.push(ie); } } } if (th.data.is_open_offline && th.data.is_open_offline > 0 && th.data.sales_rules == 2) { //-- 此时要实时更新线下取价价格 -- for (var i = 0; i < arr.length; i++) { //每个门店都去看下线下取价 var list = arr[i]; await th.set_offline(list); } } else { //-- 此时要实时更新线下取价价格 -- for (var ij in arr) { //每个门店都去看下线下取价 var list = arr[ij]; for (var i in list.goods) { list.goods[i].offline_price = 0 } } } for (let u1 in arr) { var u_item=arr[u1]; //把组合购进行分组 var obj=zh_calc.find_split(u_item); if(!obj) continue; //存储不同活动的商品列表 u_item.zh_prom_goods={}; for (let var1 in obj) { var h_item=obj[var1]; var gdlist= th.data.zuhe_map_good[h_item.prom_id]; //获取活动需要的商品列表 u_item.zh_prom_goods[h_item.prom_id]=gdlist; } } th.setData({ requestData: arr, all_num: all_num, is_load: 1, is_edit: 0 }), th.doCheckAll(), wx.stopPullDownRefresh(); } }); }, //-----真的获取购物车-------- get_ser_cart: function () { var th = this; var rd = Math.random().toString(36).substr(2, 15); getApp().request.get("/api/weshop/cartService/page", { data: { user_id: app.globalData.user_id, rd: rd, store_id: oo.stoid, pageSize: 600, }, success: async function (su) { //按门店分类的数组 var arr = new Array(), carr = su.data.data.pageData; var all_num = 0; if (carr && carr.length > 0) { for (var i = 0; i < carr.length; i++) { var item = carr[i]; var good = null; await getApp().request.promiseGet("/api/weshop/serviceCard/get/" + oo.stoid + "/" + item.service_id, {}).then(res => { good = res.data.data; }) if (!good) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, { success: function (t) {} }); continue; } //如果商品下架了,或者商品是赠品,一开始都要清除 if (good.is_show == 0) { var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; getApp().request.delete(url, { success: function (t) {} }); //商品已经下架 continue; } all_num += item.goods_num; item.img_url = oo.imghost + good.imgUrl; item.selected = 0; var pcid = item.pick_id; var find = 0; //---------循环查找门店--- if (arr.length > 0) { for (var j = 0; j < arr.length; j++) { if (arr[j].pid == pcid) { arr[j].goods.push(item); find = 1; break; } } } //------如果没有找到----- if (find == 0) { var pikname = ''; //找到门店名称 for (var k = 0; k < th.data.allsto.length; k++) { if (pcid == th.data.allsto[k].pickup_id) { pikname = th.data.allsto[k].pickup_name; break; } } var narr = new Array(); narr.push(item); var ie = { pid: pcid, pname: pikname, goods: narr, selected: 0 }; arr.push(ie); } } } // console.log('BBBBBB', all_num); th.setData({ service_data: arr, all_num2: all_num, is_edit: 0 }), th.doCheckAll(), wx.stopPullDownRefresh(); } }); }, //设置莫个门店的所有线下价格 async set_offline(list) { var th = this; var userInfo = getApp().globalData.userInfo; //组织一下商品,然后进行线下价格的赋值 var wlist = ""; for (var i in list.goods) { //如果商品有促销活动 if (list.goods[i].prom_type > 0 && list.goods[i].prom_type != 7) continue; wlist += encodeURIComponent(list.goods[i].erpwareid) + ","; } wlist = ut.sub_last(wlist); //调用接口进行赋值 await getApp().request.promiseGet("/api/weshop/goods/listWarePrice", { data: { store_id: os.stoid, PickupId: list.pid, WareIds: wlist, VIPId: encodeURIComponent(userInfo.erpvipid) } }).then(res => { if (res.data.code == 0 && res.data.data && res.data.data.length > 0) { for (var e in res.data.data) { th.set_cart_offline_price(res.data.data[e], list.goods); } } }) }, //-- 设置购物车线下 -- set_cart_offline_price: function (data, glist) { for (var i in glist) { if (glist[i].erpwareid == data.WareId && (glist[i].prom_type == 0 || glist[i].prom_type == 7)) { if (glist[i].goods_price >= data.WarePrice) { glist[i].is_offline = 1; glist[i].offline_price = data.WarePrice; glist[i].pricing_type = data.PriceType; } } } }, //删除商品 delete_th_item: function (t) { var e = this; var a = rq; console.log(a); wx.showModal({ title: "确定删除?", success: function (s) { if (s.confirm) { var r = t.currentTarget.dataset.cartid; var url = '/api/weshop/cart/del/' + oo.stoid + '/' + r; a.delete(url, { success: function (t) { e.getCardList(); } }); } } }); }, //-----------------点击输入修改商品数量--------------- valueToNum: function (t) { if (!this.data.is_load) return false; //控制住,避免事件响应冲突,只有input有输入的时候,才刷新 if (this.data.btn_click) { return false; } this.data.btn_click = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.requestData[b].goods[a]; var e = a; var th = this; if (a = isNaN(t.detail.value) || t.detail.value < 1 ? 1 : parseInt(t.detail.value)) { var s = { goods_num: a, goods_id: e.goods_id, id: e.id, store_id: oo.stoid }; th.postCardList(s, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); } }, //-------------加数量--------------------- addNum: function (t) { if (!this.data.is_load) return false; if (this.data.up_dating == 1) return false; this.data.up_dating = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.requestData[b].goods[a]; console.log('add+'); if (a.goods_num < a.store_count) { var e = { goods_num: a.goods_num + 1, id: a.id, goods_id: a.goods_id, store_id: oo.stoid }; // console.log('goods_num', e.goods_num); this.postCardList(e, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); } else { wx.showModal({ title: '提示', content: '购买的数量不能超出库存数量', }); this.data.up_dating = 0; } }, //-------------减数量--------------------- subNum: function (t) { if (!this.data.is_load) return false; if (this.data.up_dating == 1) return false; this.data.up_dating = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.requestData[b].goods[a]; this.data.btn_click = 1; if (a.goods_num - 1 < 0) { this.data.up_dating = 0; return false; } if (1 != a.goods_num) { var e = { goods_num: a.goods_num - 1, id: a.id, goods_id: a.goods_id, store_id: oo.stoid }; this.postCardList(e, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); } }, //-----------------点击输入修改商品数量--------------- valueToNum_ser: function (t) { if (!this.data.is_load) return false; //控制住,避免事件响应冲突,只有input有输入的时候,才刷新 if (this.data.btn_click) { return false; } this.data.btn_click = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.service_data[b].goods[a]; var e = a; var th = this; if (a = isNaN(t.detail.value) || t.detail.value < 1 ? 1 : parseInt(t.detail.value)) { var s = { goods_num: a, goods_id: e.goods_id, id: e.id, store_id: oo.stoid }; th.postCardList_ser(s, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); } }, //-------------加数量--------------------- addNum_ser: function (t) { if (!this.data.is_load) return false; if (this.data.up_dating == 1) return false; this.data.up_dating = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.service_data[b].goods[a]; var e = { goods_num: a.goods_num + 1, id: a.id, goods_id: a.goods_id, store_id: oo.stoid }; // this.postCardList_ser(e, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); }, //-------------减数量--------------------- subNum_ser: function (t) { if (!this.data.is_load) return false; if (this.data.up_dating == 1) return false; this.data.up_dating = 1; var a = t.currentTarget.dataset.item; var b = t.currentTarget.dataset.pitems; a = this.data.service_data[b].goods[a]; this.data.btn_click = 1; if (a.goods_num - 1 < 0) { this.data.up_dating = 0; return false; } if (1 != a.goods_num) { var e = { goods_num: a.goods_num - 1, id: a.id, goods_id: a.goods_id, store_id: oo.stoid }; this.postCardList_ser(e, t.currentTarget.dataset.item, t.currentTarget.dataset.pitems); } }, //---------------全选,全选的时候要判断是否门店的匹配方式一致-------------- checkAll: function () { var e = this, th = this, dda = e.data.requestData, sdda = e.data.service_data, tfeel = 0, t_num = 0, text_arr = ""; if (e.data.requestData && e.data.requestData.length > 0 && e.data.service_data && e.data.service_data.length > 0) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); return false; } this.data.btn_click = 1; var offline_price = 0; var offline_num = 0; th.data.in_zhact_gdmap = {}; if (dda && dda.length > 0) { for (var i = 0; i < dda.length; i++) { var item = dda[i].goods; if (e.data.checkAllToggle) { var txt = "requestData[" + i + "].selected"; e.setData({ [txt]: 0, }); } var fir = 0; for (var j = 0; j < item.length; j++) { if(item[j].is_gift) continue; var obj=JSON.parse(JSON.stringify(item[j])); //计算之前先移除组合购的计算 if(obj.prom_type==7) zh_calc.remove_zhprom(dda,i,obj); //计算之前先移除阶梯购的计算 if(obj.prom_type==10) ladder_calc.remove_ladder_prom(dda,i,obj); if (fir == 0) { fir = item[j].distr_type; } else { //如果同一门店有不同门店的商品,不能同一配送 if (fir != item[j].distr_type && !e.data.checkAllToggle && item[j].distr_type != 0) { text_arr += item[j].goods_name + " "; break; } } var txt = "requestData[" + i + "].goods[" + j + "].selected"; if(e.data.checkAllToggle) obj.goods_num=0; //加入组合购计算 if(obj.prom_type==7) zh_calc.add_zhprom(dda,i,obj); //加入阶梯促销计算 if(obj.prom_type==10) ladder_calc.add_ladder_prom(dda,i,obj); e.setData({ [txt]: !e.data.checkAllToggle, }) if (!e.data.checkAllToggle) { //组合购的金额要另外算 if(item[j].prom_type!=7 && item[j].prom_type!=10) tfeel += item[j].goods_num * item[j].goods_price; t_num += item[j].goods_num; } //-- 如果这个商品是线下取价的时候 -- if (item[j].is_offline && item[j].prom_type != 7) { offline_price += (item[j].goods_price - item[j].offline_price) * item[j].goods_num; offline_num += item[j].goods_num; } } } if (text_arr != "") { wx.showModal({ title: '提示', content: text_arr + '不能与门店中其他商品一起结算,配送方式不一致' }); return false; } else { for (var i = 0; i < dda.length; i++) { if (!e.data.checkAllToggle) { var txt = "requestData[" + i + "].selected"; e.setData({ [txt]: 1, }); } //总的价格,把组合商品的价格拿出来 var zh_calc_res = zh_calc.calculate_zh(dda, i, this); tfeel += zh_calc_res.tfeel; offline_price += zh_calc_res.offline_price; offline_num += zh_calc_res.offline_num; //总的价格,把阶梯促销的商品的价格拿出来 var ladder_calc_res=ladder_calc.calculate_ladder(dda,i,this); tfeel+=ladder_calc_res.tfeel; offline_price+=ladder_calc_res.offline_price; offline_num+=ladder_calc_res.offline_num; //当有线下取价的时候 if (offline_price) { var txt1 = "requestData[" + i + "].offline_price"; var txt2 = "requestData[" + i + "].offline_num"; th.setData({ [txt1]: offline_price.toFixed(2), [txt2]: offline_num, }); } else { if (dda[i].offline_price > 0) { var txt1 = "requestData[" + i + "].offline_price"; var txt2 = "requestData[" + i + "].offline_num"; th.setData({ [txt1]: 0, [txt2]: 0 }); } } } e.setData({ checkAllToggle: !e.data.checkAllToggle, total_fee: tfeel.toFixed(2), total_num: t_num, }); for (var i in e.data.requestData) { e.check_prom_activity(i) } } } if (sdda && sdda.length > 0) { for (var i = 0; i < sdda.length; i++) { var item = sdda[i].goods; if (e.data.checkAllToggle) { var txt = "service_data[" + i + "].selected"; e.setData({ [txt]: 0, }); } var fir = 0; for (var j = 0; j < item.length; j++) { var txt = "service_data[" + i + "].goods[" + j + "].selected" e.setData({ [txt]: !e.data.checkAllToggle, }) if (!e.data.checkAllToggle) { tfeel += item[j].goods_num * item[j].money; t_num += item[j].goods_num; } } } e.setData({ checkAllToggle: !e.data.checkAllToggle, total_fee: tfeel.toFixed(2), total_num: t_num, }); } }, //------门店全选按钮,要判断是否门店的匹配方式一致--------- check_th_all_item: async function (ele) { var e = this, pitems = ele.currentTarget.dataset.pitems, item = this.data.requestData[pitems].goods, sele = this.data.requestData[pitems].selected; this.data.btn_click = 1; var garr = e.data.service_data; var isok = 1, fir = 0, iarr = item; if (!sele) { var check_is_service_selected = 0; for (var ii in garr) { for (var ij in garr[ii].goods) { if (garr[ii].goods[ij].selected) { check_is_service_selected = 1; break; } } } if (check_is_service_selected) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); return false; } } if (!sele && item.length > 0) { for (var i = 0; i < iarr.length; i++) { if (iarr[i].is_gift == 1) continue; if (iarr[i].distr_type != 0) { if (fir == 0) { fir = iarr[i].distr_type; } else { if (fir != iarr[i].distr_type && iarr[i].distr_type != 0) { isok = 0; break; } } } } } if (!isok) { wx.showModal({ title: '提示', content: '同一门店自提和物流的商品不能同时结算' }); return false; } for (var i = 0; i < item.length; i++) { var txt = "requestData[" + pitems + "].goods[" + i + "].selected"; e.setData({ [txt]: Number(!sele), }); } var txt = "requestData[" + pitems + "].selected"; e.setData({ [txt]: Number(!sele), }); await e.check_prom_activity(pitems); for (var i in e.data.requestData) { if (i != pitems) await e.check_prom_activity(i); } this.doCheckAll(); }, //---------------单选,也要判断门店的配送方式是否一致-------------- check_th_item: async function (t) { var e = this, item = t.currentTarget.dataset.item, pitems = t.currentTarget.dataset.pitems; a = this.data.requestData[pitems].goods[item]; var isok = 1, fir = 0; var iarr = e.data.requestData[pitems].goods; this.data.btn_click = 1; var garr = e.data.service_data; if (!a.selected) { var check_is_service_selected = 0; for (var ii in garr) { for (var ij in garr[ii].goods) { if (garr[ii].goods[ij].selected) { check_is_service_selected = 1; break; } } } if (check_is_service_selected) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); return false; } } //当数量大于1,且是选择的时候 if (iarr.length > 1 && !a.selected) { for (var i = 0; i < iarr.length; i++) { if (iarr[i].is_gift == 1) continue; //---当不是本身选择项目---- var sel = iarr[i].selected; if (iarr[i].distr_type != 0 && (sel || iarr[i].id == a.id)) { if (fir == 0) { fir = iarr[i].distr_type; } else { if (fir != iarr[i].distr_type && iarr[i].distr_type != 0) { isok = 0; break; } } } } } if (!isok) { wx.showModal({ title: '提示', content: '同一门店自提和物流的商品不能同时结算' }); } else { var txt = "requestData[" + pitems + "].goods[" + item + "].selected"; e.setData({ [txt]: Number(!a.selected), }); if (a.prom_type == 3) { await e.check_prom_activity(pitems); //判断商品是不是优惠活动 for (var i in e.data.requestData) { if (i != pitems) await e.check_prom_activity(i); } } this.doCheckAll(); } }, //------门店全选按钮,要判断是否门店的匹配方式一致--------- check_th_all_item_ser: async function (ele) { var e = this, pitems = ele.currentTarget.dataset.pitems, item = this.data.service_data[pitems].goods, sele = this.data.service_data[pitems].selected; this.data.btn_click = 1; var garr = e.data.requestData; var isok = 1, fir = 0, iarr = item; if (!sele) { var check_is_goods_selected = 0; for (var ii in garr) { for (var ij in garr[ii].goods) { if (garr[ii].goods[ij].selected) { check_is_goods_selected = 1; break; } } } if (check_is_goods_selected) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); return false; } } for (var i = 0; i < item.length; i++) { var txt = "service_data[" + pitems + "].goods[" + i + "].selected"; e.setData({ [txt]: Number(!sele), }); } var txt = "service_data[" + pitems + "].selected"; e.setData({ [txt]: Number(!sele), }); this.doCheckAll(); }, //---------------单选,也要判断门店的配送方式是否一致-------------- check_th_item_ser: async function (t) { var e = this, item = t.currentTarget.dataset.item, pitems = t.currentTarget.dataset.pitems; a = this.data.service_data[pitems].goods[item]; var isok = 1, fir = 0; var iarr = e.data.service_data[pitems].goods; this.data.btn_click = 1; var garr = e.data.requestData; if (!a.selected) { var check_is_goods_selected = 0; for (var ii in garr) { for (var ij in garr[ii].goods) { if (garr[ii].goods[ij].selected) { check_is_goods_selected = 1; break; } } } if (check_is_goods_selected) { wx.showModal({ title: '提示', content: '服务卡项目不能和商品一起选择' }); return false; } } var txt = "service_data[" + pitems + "].goods[" + item + "].selected"; e.setData({ [txt]: Number(!a.selected), }); this.doCheckAll(); }, //----------检查是否全选--------- doCheckAll: function () { var th = this, tfeel = 0, t_num = 0, ischeck = 1, car = this.data.requestData, car2 = this.data.service_data, all_num = 0; //-- 购物车 -- if (car && car.length > 0) { th.data.in_zhact_gdmap = {}; for (var a = 0; a < car.length; a++) { var item = car[a].goods,is_s_sele = 1; var offline_price=0; var offline_num=0; for (var c = 0; c < item.length; c++) { if (item[c].is_gift) continue; all_num += item[c].goods_num; //不管怎么样都要移出去 var obj=JSON.parse(JSON.stringify(item[c])); zh_calc.remove_zhprom(car,a,obj); ladder_calc.remove_ladder_prom(car,a,obj); if (item[c].selected == 0) { ischeck = 0; is_s_sele = 0; if (item[c].prom_type == 7) { obj.goods_num = 0; zh_calc.add_zhprom(car, a, obj); } if(item[c].prom_type==10) { obj.goods_num=0; ladder_calc.add_ladder_prom(car,a,obj); } } else { if(item[c].prom_type==7){ //先把商品放入组合计算的专用的区域 zh_calc.add_zhprom(car,a,obj); }else if(item[c].prom_type==10){ ladder_calc.add_ladder_prom(car,a,obj); } else{ tfeel += item[c].goods_num * item[c].goods_price; } t_num += item[c].goods_num; } //-- 如果这个商品是线下取价的时候 -- if (item[c].is_offline && item[c].prom_type != 7) { offline_price += (item[c].goods_price - item[c].offline_price) * item[c].goods_num; offline_num += item[c].goods_num; } } //总的价格,把组合商品的价格拿出来 var zh_calc_res=zh_calc.calculate_zh(car,a,th); //总的价格,把阶梯促销商品的价格拿出来 var ladder_calc_res=ladder_calc.calculate_ladder(car,a,th); tfeel+=zh_calc_res.tfeel; offline_price+=zh_calc_res.offline_price; offline_num+=zh_calc_res.offline_num; tfeel+=ladder_calc_res.tfeel; offline_price+=ladder_calc_res.offline_price; offline_num+=ladder_calc_res.offline_num; var txt = "requestData[" + a + "].selected"; th.setData({ [txt]: Number(is_s_sele) }); //当有线下取价的时候 if (offline_price) { var txt1 = "requestData[" + a + "].offline_price"; var txt2 = "requestData[" + a + "].offline_num"; th.setData({ [txt1]: offline_price.toFixed(2), [txt2]: offline_num, }); } else { if (car[a].offline_price > 0) { var txt1 = "requestData[" + a + "].offline_price"; var txt2 = "requestData[" + a + "].offline_num"; th.setData({ [txt1]: 0, [txt2]: 0 }); } } } } //-- 服务卡 -- if (car2 && car2.length > 0) { for (var a = 0; a < car2.length; a++) { var c_item = car2[a]; var item = car2[a].goods, is_s_sele = 1; for (var c = 0; c < item.length; c++) { if (item[c].is_gift) continue; all_num += item[c].goods_num; if (item[c].selected == 0) { ischeck = 0; is_s_sele = 0; } else { tfeel += item[c].goods_num * item[c].money; t_num += item[c].goods_num; } } var txt = "service_data[" + a + "].selected"; th.setData({ [txt]: Number(is_s_sele) }); } } this.setData({ checkAllToggle: ischeck, total_fee: tfeel.toFixed(2), all_num: all_num, total_num: t_num }); }, //----------------------更新购物数量,加减,调用接口--------------------- postCardList: function (t, item, pitem) { var e = this, th = e, user_id = getApp().globalData.user_id; function normal_check(store_count, goodsinfo, wareIds) { //--- 看一下是不是线下库存 --- if (th.data.sales_rules == 2 && goodsinfo.prom_type != 7) { 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(); t.goods_num = store_count; } e.update_cart(t, pitem, item); } } // console.log('update'); // console.log('9995959595959',t); var e = this,th=e; var user_id = getApp().globalData.user_id; rq.get("/api/weshop/goods/get/" + oo.stoid + "/" + t.goods_id, { isShowLoading: 0, 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: { store_id: oo.stoid, user_id: user_id, goods_id: goodsinfo.goods_id, prom_type: goodsinfo.prom_type, prom_id: goodsinfo.prom_id }, }).then(res => { var buy_num_data = res.data.data; if (buy_num_data.promgoodsbuynum) { promgoodsbuynum = buy_num_data.promgoodsbuynum; var txt = "requestData[" + pitem + "].goods[" + item + "].zh_b_num"; th.setData({ [txt]: promgoodsbuynum }); } goodsbuynum = buy_num_data.goodsbuynum; }) var buyed_mum2 = t.goods_num + goodsbuynum; if (buyed_mum2 > limit && limit > 0) { wx.showModal({ title: '提示', content: '购买数量超出商品限购' }); var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; var cbuy = limit - buyed_mum2; e.setData({ [txt]: cbuy > 0 ? cbuy : 0, }); e.doCheckAll(); t.goods_num = cbuy > 0 ? cbuy : 0, e.update_cart(t, pitem, item); return false; } switch (goodsinfo.prom_type) { case 1: //读取秒杀 rq.get("/api/ms/flash_sale/getFlashSaleOne/" + oo.stoid + "/" + goodsinfo.prom_id, { isShowLoading: 0, success: function (res_d) { if (res_d.data.code == 0 && res_d.data.data) { 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(); t.goods_num = store_count; e.update_cart(t, pitem, item); 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(); t.goods_num = false_data.goods_num - false_data.buy_num; e.update_cart(t, pitem, item); 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(); t.goods_num = false_data.redisnum; e.update_cart(t, pitem, item); 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.buy_limit }); e.doCheckAll(); t.goods_num = (false_data.buy_limit - promgoodsbuynum) ? false_data.buy_limit - promgoodsbuynum : 0; e.update_cart(t, pitem, item); return false; } e.update_cart(t, pitem, item); } else { normal_check(store_count, goodsinfo, wareIds); } } }) break; case 2: getApp().request.promiseGet("/api/weshop/goods/groupBuy/getActInfo/" + os.stoid + "/" + goodsinfo.goods_id + "/" + goodsinfo.prom_id, {}).then(res => { if (res.data.code == 0 && res.data.data) { 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(); t.goods_num = store_count; e.update_cart(t, pitem, item); return false; } var gr_data = res.data.data; //--判断库存-- if (t.goods_num > gr_data.goods_num - gr_data.buy_num) { wx.showModal({ title: '提示', content: '购买数量超出活动库存' }); var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: gr_data.goods_num - gr_data.buy_num }); e.doCheckAll(); t.goods_num = gr_data.goods_num - gr_data.buy_num; e.update_cart(t, pitem, item); return false; } //--判断redis数量是否已经超出-- if (t.goods_num > gr_data.redisnum) { wx.showModal({ title: '提示', content: '购买数量超出商品库存' }); var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: gr_data.redisnum }); e.doCheckAll(); t.goods_num = gr_data.redisnum; e.update_cart(t, pitem, item); return false; } //--活动的限购是不是要判断-- if (t.goods_num + promgoodsbuynum > gr_data.buy_limit && gr_data.buy_limit > 0) { wx.showModal({ title: '提示', content: '购买数量超出团购限购' }); var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: gr_data.buy_limit }); e.doCheckAll(); t.goods_num = (gr_data.buy_limit - promgoodsbuynum) ? gr_data.buy_limit - promgoodsbuynum : 0; e.update_cart(t, pitem, item); return false; } e.update_cart(t, pitem, item); } else { normal_check(store_count, goodsinfo, wareIds); } }) break; default: normal_check(store_count, goodsinfo, wareIds); break } } }); }, //----------------------更新购物数量,加减,调用接口--------------------- postCardList_ser: function (t, item, pitem) { var e = this, th = e; var user_id = getApp().globalData.user_id; var txt = "service_data[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: t.goods_num }); e.doCheckAll(); e.update_cart_ser(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(); t.goods_num = ob.CanOutQty; } 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, pageSize: 1000 } }).then(res => { if (res.data.code == 0 && res.data.data.total > 0) { for (var i in res.data.data.pageData) lock += res.data.data.pageData[i].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(ut.ajax_ok(res)){ plist=res.data.data.pageData[0]; } }) var ob = {}; ob.code = 1; if (!plist) { ob.code = -1; ob.CanOutQty = 0; func(ob); return false; } var c_num = t.goods_num; if (t.need_downlow_num) c_num = t.need_downlow_num; if (c_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", { data: t, success: async function (ee) { var txt = "requestData[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: t.goods_num, }); await e.check_prom_activity(pitem) for (var i in e.data.requestData) { if (i != pitem) await e.check_prom_activity(i) } e.doCheckAll(); getApp().requestCardNum(e); } }); }, //--更新购物车--- update_cart_ser: function (t, pitem, item) { var e = this; getApp().request.put("/api/weshop/cartService/update", { data: t, success: async function (ee) { var txt = "service_data[" + pitem + "].goods[" + item + "].goods_num"; e.setData({ [txt]: t.goods_num, }); e.doCheckAll(); getApp().requestCardNum(e); } }); }, //-------下拉刷新--------- onPullDownRefresh: function (t) { this.getCardList(); }, //--------------去结算------------ async checkout() { if (!this.data.total_num || this.data.total_num <= 0) return false; if (!this.data.is_load) return false; if (this.data.up_dating) { wx.showLoading({ title: "计算中" }) } var garr = this.data.requestData; var check_is_goods_selected = 0; if (garr) { for (var ii in garr) { for (var ij in garr[ii].goods) { if (garr[ii].goods[ij].selected) { check_is_goods_selected = 1; break; } } } } //-- 如果是商品的结算 -- if (check_is_goods_selected) { var glist = ""; //用逗号隔开的 var map = new Map(); //使用map值键进行运算 var map_limit = 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(); 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++) { 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].goods_id] = 1; } //map 的key是不会重复,会覆盖,, var ie = { goods_id: i_arr[j].goods_id, id: i_arr[j].id, goods_price: i_arr[j].goods_price, }; //判断是不是线下取价 if (i_arr[j].is_offline) { ie.is_offline = i_arr[j].is_offline; ie.offline_price = i_arr[j].offline_price; ie.pricing_type = i_arr[j].pricing_type; } g_arr.push(ie); if (map.has(i_arr[j].goods_id + "")) { var num11 = map.get(i_arr[j].goods_id + ""); var num22 = parseInt(i_arr[j].goods_num) + parseInt(num11); map.set(i_arr[j].goods_id + "", num22); } else { map.set(i_arr[j].goods_id + "", i_arr[j].goods_num); } glist += i_arr[j].goods_id + ","; ab = 1; //--普通商品,如果有开启线下库存的功能,要调用线下库存进行计算,赠品不要进行调用线下库存--- if ((i_arr[j].prom_type == 0 || i_arr[j].prom_type == 3 || i_arr[j].prom_type == 5 || i_arr[j].need_downlow_num) && th.data.sales_rules == 2 && i_arr[j].is_gift != 1) { //--获取商品的线下商品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; } var is_ok = 1; //如果是优惠活动话,要看活动有没有过期 if (i_arr[j].prom_type == 3) { //判断有没有活动 await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromList/" + os.stoid + "/" + i_arr[j].goods_id + "/1", {}).then(res => { if (res.data.code == 0) { if (!res.data.data.promGoodsLists) { t.my_warnning(i_arr[j].goods_name + "优惠活动已经过期", 0, th); wx.hideLoading(); is_ok = 0; } } }) } if (!is_ok) { return false; } } } else { if (i_arr[j].is_gift == 1) continue; rq.put("/api/weshop/cart/update", { data: { id: i_arr[j].id, selected: 0, store_id: oo.stoid }, success: function (ee) { console.log(ee); } }); } } } if (ab == 0) { t.my_warnning("未选择商品", 0, th); wx.hideLoading(); return false; } glist = glist.substring(0, glist.length - 1); //--取一下商品的限购 以及活动的限购,redis数量-- rq.get("/api/weshop/goods/getGoodsListNum", { data: { goodsidlist: glist, store_id: oo.stoid }, async success(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 obj = map_limit.get(val.goods_id + ""); if (obj) continue; var promgoodsbuynum = 0; var goodsbuynum = 0; //--要获得商品,该用户买了多少件,同步应用-- await getApp().request.promiseGet("/api/weshop/ordergoods/getUserBuyGoodsNum", { data: { store_id: oo.stoid, user_id: 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(val.goods_id + "", ie); } 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 "购买数量不能为0"; 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 && !normal_arr[val.goods_id]) { isok = 0; gname = val.goods_name; throw "超出活动库存"; return false; } if (num > val.goods_num - val.buy_num && val.goods_num && !normal_arr[val.goods_id]) { isok = 0; gname = val.goods_name; throw "超出活动库存"; return false; } var buyed = map_limit.get(val.goods_id + ""); 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 && !normal_arr[val.goods_id]) { isok = 0; gname = val.goods_name; throw "超出活动限购"; return false; } 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) || val.prom_type == 3 || val.prom_type == 4 || val.prom_type == 5 || val.prom_type == 7 || val.prom_type == 10 || normal_arr[val.goods_id])) { if (g_arr[i].goods_price != val[card_field]) { isok = 0; gname = val.goods_name; throw "商品价格已经变化"; } } 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 "商品价格已经变化"; } } //-- 数据的更新 -- var data = { id: g_arr[i].id, selected: 1, store_id: oo.stoid }; //-- 如果有线下取价的时候 -- 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; } wx.hideLoading(); wx.navigateTo({ url: "/pages/cart/cart2/cart2" }); } } }); } else { //-- 开始服务卡的购物车购买 -- for (var i = 0; i < this.data.service_data.length; i++) { var i_arr = this.data.service_data[i].goods; for (var j = 0; j < i_arr.length; j++) { if (i_arr[j].selected) { await rq.promisePut("/api/weshop/cartService/update", { data: { id: i_arr[j].id, selected: 1, store_id: oo.stoid } }); } } } wx.hideLoading(); getApp().goto("/packageA/pages/cart2_ser/cart2_ser?is_cart=1"); } }, //结算到最后一个商品 set_last: function (ab, isok, gname) { if (isok == 0) { t.my_warnning(gname + "商品超出库存", 0, this); } else { ab ? wx.navigateTo({ url: "/pages/cart/cart2/cart2" }) : t.my_warnning("还没有选中商品", 0, this); } }, //图片失败,默认图片 bind_bnerr2: function (e) { var _errImg = e.target.dataset.errorimg; var _errurl = e.target.dataset.url; var ii = _errurl.indexOf(oo.imghost); if (ii != -1) { this.setData({ [_errImg]: oo.imghost + "/miniapp/images/default_g_img.gif", }) } }, //设置点击按钮为true或者false radio_chick: function (checked, num) { var th = this; var requestData = th.data.requestData; }, //点击编辑后的效果 edit_cart: function (e) { var type = parseFloat(e.currentTarget.dataset.type); this.setData({ is_edit: type }); }, //--多个删除购物车商品--- check_del: function () { var glist = "", slist = ''; //用逗号隔开的 var user_id = getApp().globalData.user_id; var th = this; var ab = 0; //选中 var abc = 0; // 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++) { if (i_arr[j].selected) { glist += i_arr[j].id + ","; ab = 1; } } } for (var ii = 0; ii < this.data.service_data.length; ii++) { var i_arr = this.data.service_data[ii].goods; for (var jj = 0; jj < i_arr.length; jj++) { if (i_arr[jj].selected) { slist += i_arr[jj].id + ","; abc = 1; } } } if (ab == 0 && abc == 0) { t.my_warnning("未选择商品或者服务卡", 0, th); return false; } if (ab) { glist = glist.substring(0, glist.length - 1); //要删除购物车中的商品 var url = '/api/weshop/cart/delIds/' + oo.stoid + '/' + user_id + "/" + glist; getApp().request.delete(url, { success: function (t) { // console.log('del done1111111111'); th.getCardList(); getApp().requestCardNum(th); // console.log('all================', th.data.all_num); // getApp().globalData.cartGoodsNum = } }); } if (abc) { slist = slist.substring(0, slist.length - 1); //要删除购物车中的商品 var url = '/api/weshop/cartService/delIds/' + oo.stoid + '/' + user_id + "/" + slist; getApp().request.delete(url, { success: function (t) { th.getCardList(); getApp().requestCardNum(th); console.log('all2================', th.data.all_num); } }); } }, //跳到首页 goto: function (e) { var url = '/pages/index/index/index'; getApp().goto(url); }, //---加载更多是靠这个函数---- onReachBottom: function () { if (this.data.requestData && this.data.requestData.length == 0) { var goods_list = this.selectComponent("#goods_list"); //组件的id if (goods_list) goods_list.get_list(); } }, //检查莫个门店下的商品是不是优惠活动,有的话,看要不要送礼品,同时有没有倍增 check_prom_activity: async function (cindex) { var make_up_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 }); } return false; } /*-- var map2=new Map(); //请那些是赠品,但是优惠活动并没有被选中的商品要删除,同时满足条件的要放到map2, for(var i in list.goods){ var item=list.goods[i]; if(item.is_gift){ if(map.has(item.prom_id+"")){ if(!map2.has(item.prom_id+"")){ map2.set(item.prom_id+"",i) } }else{ var url = '/api/weshop/cart/del/' + oo.stoid + '/' + item.id; list.goods.splice(i,1); getApp().request.delete(url, {}); } } }--*/ var t_prom_list = new Array(); for (let p_item of map.entries()) { var prom = null; 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; } t_prom_list.push(prom); //---读取打折的详情--- var ob = p_item[1]; var discount = null; await getApp().request.promiseGet("/api/weshop/goods/getDiscount", { data: { price: ob.price, 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 && discount['goods_id'] && discount.limit_num >= discount.bs && discount.gift_storecount >= discount.bs) { //如果这礼品超了情况下 if (no_gift_arr.indexOf(discount.gift_id) != -1) continue; var o = discount.goodsinfo; var newd = { goods_id: o.goods_id, goods_num: discount.bs, 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]; 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 || discount.limit_num < all_limit_num) { no_gift_arr.push(discount.gift_id); //--进入下一个循环 -- continue; } var url = "/api/weshop/cart/delGift?store_id=" + newd.store_id + "&user_id=" + newd.user_id + "&goods_id=" + newd.goods_id + "&is_gift=1&pick_id=" + newd.pick_id + "&prom_id=" + newd.prom_id await getApp().request.promiseDelete(url, {}) var add_data = null; await getApp().request.promisePost("/api/weshop/cart/save", { data: newd }).then(res => { 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 }); if (!t_prom_list || t_prom_list.length == 0) return false; //-- 提示凑单的,放在最后显示 -- for (let prid in t_prom_list) { var prom = t_prom_list[prid]; //-- 获取凑单提示 -- await getApp().request.promiseGet("/api/weshop/promgoodslist/list", { data: { prom_id: prom.id } }).then(res => { if (res.data.code == 0) { var list = res.data.data; for (var i in list) { var item = 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; } } } } }) } 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 }); } }, //去凑单 go_cou_dang: function (e) { var prom_id = e.currentTarget.dataset.prom_id; var url = "/pages/goods/goodsList/goodsList?prom_type=3&prom_id=" + prom_id; getApp().goto(url); }, //导航跳转 nav_goto: function (e) { var url = e.currentTarget.dataset.url; if (!url || url == '') return; if (url[0] != '/') url = '/' + url; getApp().goto(url); }, refresh_input: function () { this.data.btn_click = 0; }, imageLoad: function (e) { var imgwidth = e.detail.width; var imgheight = e.detail.height; //宽高比 var ratio = imgwidth / imgheight; //计算的高度值 var viewHeight = 715 / ratio; var hei = this.data.max_sw_height; if (hei < viewHeight) { this.setData({ max_sw_height: viewHeight }); } }, go_url(e) { var url = e.currentTarget.dataset.url; getApp().goto(url); }, //跳转到商品 go_gd:function (e) { var user_id=getApp().globalData.user_id; if(!user_id) user_id=0; var gd= e.currentTarget.dataset.gd; var good_url="/pages/goods/goodsInfo/goodsInfo?goods_id=" + gd; var url="/api/weshop/activitylist/getGoodActInfo"; var req_data={ store_id:os.stoid,goodsidlist:gd,is_detail:1,user_id:user_id }; //获取秒杀的多规格 getApp().request.promiseGet(url, {data:req_data}).then(res=>{ if(res.data.code==0 && res.data.data){ if(res.data.data.length==1){ var item=res.data.data[0]; switch (item.prom_type){ case 9: good_url= '/packageC/pages/luckyGo/luckyGo_goodsInfo/luckyGo_goodsInfo?goods_id=' + gd + '&group_id=' + item.prom_id; break; case 8: good_url="/packageC/pages/presell/goodsInfo/goodsInfo?goods_id="+gd+"&prom_id="+item.prom_id break; default: good_url="/pages/goods/goodsInfo/goodsInfo?goods_id="+gd+"&prom_id="+item.prom_id+"&prom_type=1"; break } } getApp().goto(good_url); } else { getApp().goto(good_url); } }) } });