var app = getApp(); Component({ // 目前组件,只接受时间戳,其他的没有做 // 现在的时间,和结束时间,都必须从后台获取,因为客户端时间不一致 properties: { goodsInfo: { type: Object }, cartList:{ type:Object } }, data: { language: '', // 规格 ------- optionsId: 0, //选择后的 规格ID cartid:0, //选择后的 购物车ID goodsCount: 1, optionsMaxCount: 1, popupSpecs1: false, popupSpecs2: false, //无规格选择商品数量 popThumb: "", popStock: 0, popPrice: 0, specsManage: [], //选择池 用于排序 goodsDescription: "", popupModeshow: true, //动态模糊框 // 规格end skuImages: [], showSkuImages: false, activeSkuIndex: 0, activeSkuIndex_1: '',//用于关闭时保存点击预览前的序号,在预览关闭时重新设置预览起始位置 activeSkuIndex_2: '', }, lifetimes: { attached: function() { // 在组件实例进入页面节点树时执行 let language = wx.getStorageSync('langIndex'); this.setData({ 'language': language.en, specsManage: [], optionsId: 0, popupSpecs1: true }); this.initPopView(); }, detached: function() { // 在组件实例被从页面节点树移除时执行 }, }, methods: { //提交确认 submitAction() { if (this.data.goodsInfo.has_option == 1 && !this.data.optionsId) { wx.showToast({ icon: 'none', title: '规格id不可为空,请选择规格!', duration: 1500 }); return; } //点击关闭 clicktype为1:确认按钮 ,为0:关闭弹窗操作 this.triggerEvent('closeSpecsPopup',{optionsId: this.data.optionsId,cartid:this.data.cartid,goodsId:this.data.goodsInfo.id, goodsCount: this.data.goodsCount, clicktype: 1}); }, //关闭popupSpecs popupSpecsbtn() { this.setData({ popupSpecs1: false, popupModeshow: true }); this.triggerEvent('closeSpecsPopup',{clicktype: 0}); }, //初始化弹窗view initPopView() { if (this.data.goodsInfo.has_option == 1) { this.setData({ popPrice: this.data.goodsInfo.min_price + "-" + this.data.goodsInfo.max_price, //设置默认价格 popThumb: this.data.goodsInfo.thumb, //设置默认图片 popStock: this.data.goodsInfo.stock, //设置默认库存 goodsDescription: "选择" }); for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) { this.setData({ goodsDescription: this.data.goodsDescription + " " + this.data.goodsInfo.has_many_specs[i].title }); } let _optionArr = []; this.data.goodsInfo.has_many_options.forEach((val, index) => { let _thumb = val.thumb !='' ? val.thumb : this.data.goodsInfo.thumb; _optionArr.push(_thumb); }); this.setData({ skuImages: _optionArr }); if (!this.data.optionsId) { // 默认选择第一个 for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) { this.data.goodsInfo.has_many_specs[i].description = this.data.goodsInfo.has_many_specs[i].specitem[0].id; this.selectSpecs(this.data.goodsInfo.has_many_specs[i].specitem[0], 'first', i); } } } else { console.log("单规格",this.data.goodsInfo); let __optionArr2 = []; __optionArr2.push(this.data.goodsInfo.thumb); this.setData({ popThumb: this.data.goodsInfo.thumb, //设置默认图片 popStock: this.data.goodsInfo.stock, //设置默认库存 popPrice: this.data.goodsInfo.price, //设置默认价格 goodsDescription: '', optionsMaxCount: this.data.goodsInfo.stock, skuImages: __optionArr2 }); let {cartList,goodsInfo} = this.data; if (cartList && cartList.length > 0) { for (let i = 0; i < cartList.length; i++) { if (cartList[i].goods_id === goodsInfo.id) { this.setData({ goodsCount: cartList[i].total, cartid:cartList[i].id }); break; }else { this.data.cartid=0; } } } } }, // 输入数量 inputGoodsNum: function(e) { var num = parseInt(e.detail.value); var lastgoodsCount = this.data.goodsCount; if (e.detail.keyCode == 8) { if (app._isTextEmpty(e.detail.value)) { this.setData({ goodsCount: '' }); return; } } if (num) { this.setData({ goodsCount: num }); } else { this.setData({ goodsCount: lastgoodsCount }); } }, //减少 reduceGoods() { let lastgoodsCount = this.data.goodsCount; if (this.data.goodsCount == 1 || this.data.goodsCount == 0) { return; } this.setData({ goodsCount: lastgoodsCount - 1 }); }, //增加 addGoods() { let lastgoodsCount = this.data.goodsCount; let specsManage = this.data.specsManage; let optionsMaxCount = this.data.optionsMaxCount; console.log("增加"); if (specsManage.length == this.data.goodsInfo.has_many_specs.length && this.data.goodsCount == optionsMaxCount) { console.log("数量超出范围"); wx.showToast({ icon: 'none', title: '数量超出范围', duration: 1500 }); console.log("max=" + this.data.goodsCount); return; } this.setData({ goodsCount: lastgoodsCount + 1 }); }, //界面选择规格触发事件 selectSpecs(e, str, i) { let data = {}; let specsIdex = 0; if (str == 'first') { specsIdex = i; data = e; } else if(str =="sku_swiper"){ data = e; } else { specsIdex = e.currentTarget.dataset.specsidex; data = e.currentTarget.dataset.specitem; } console.log(data); if (data.c) { return false; } this.setData({ ["goodsInfo.has_many_specs[" + specsIdex + "].description"]: data.id }); // let specid = data.specid; //对其他数据筛选 不筛选同级 //处理选择池 this.manageSpecs(data); //处理规格组合选择状态 this.setGoodsSpecs(data); //设置选择规格后的 价格、照片、库存 this.setGoodsSpecsChangeInfo(); //判断当前购买总量与库存的关系 this.getMaxCount(); }, //处理选择池 manageSpecs(data) { let specsObject = new Object(); let specsManage = this.data.specsManage; specsObject.id = data.id; specsObject.specid = data.specid; specsObject.title = data.title; if (specsManage.length > 0) { for (let i = 0; i < specsManage.length; i++) { if (specsManage[i].specid == specsObject.specid) { specsManage.splice(i, 1); } } specsManage.push(specsObject); } else { specsManage.push(specsObject); } //排序 if (specsManage.length == this.data.goodsInfo.has_many_specs.length) { var newSpecsManage = []; for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) { for (let j = 0; j < specsManage.length; j++) { if (this.data.goodsInfo.has_many_specs[i].id == specsManage[j].specid) { newSpecsManage.push(specsManage[j]); break; } } } specsManage = newSpecsManage; } this.setData({ specsManage: specsManage }); this.setGoodsDescription(); }, //处理goodsDescription 数据 setGoodsDescription() { let description = ""; let specsManage = this.data.specsManage; //相等代表全选了 体现语句 if (specsManage.length == this.data.goodsInfo.has_many_specs.length) { description = "已选择 "; for (let i = 0; i < specsManage.length; i++) { description += specsManage[i].title + " "; } this.setData({ goodsDescription: description }); } else { description = "请选择 "; for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) { for (let j = 0; j < specsManage.length; j++) { if (this.data.goodsInfo.has_many_specs[i].id != specsManage[j].specid) { description += this.data.goodsInfo.has_many_specs[i].title + " "; break; } } } this.setData({ goodsDescription: description }); } }, //处理规格组合选择状态 过滤数据 setGoodsSpecs(specs) { // let goodsInfo = this.data.goodsInfo; for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) { if (specs.specid != this.data.goodsInfo.has_many_specs[i].id) { // let specitem = this.setGoodsSpecsStatus(this.data.goodsInfo.has_many_specs[i].specitem, specs.id); // this.setData({ // ["goodsInfo.has_many_specs[" + i + "].specitem"]: specitem // }) } } }, //处理规格组合选择状态 处理状态 specitem 组合数组(未选中的) id当前选中的ID 根据ID 组合算是否有当前组合 setGoodsSpecsStatus(specitem, id) { let options = []; //数据池 for (let i = 0; i < this.data.goodsInfo.has_many_options.length; i++) { let _specs = this.data.goodsInfo.has_many_options[i].specs.split("_"); //console.log(_specs); //判断是否包含 for (let j = 0; j < _specs.length; j++) { if (_specs[j] == id) { options.push(this.data.goodsInfo.has_many_options[i]); return; } } } //关键处理方式 后期要优化 效率低 for (let m = 0; m < options.length; m++) { let _specs = options[m].specs.split("_"); for (let y = 0; y < _specs.length; y++) { if (_specs[y] != id && options[m].stock == 0) { for (let n = 0; n < specitem.length; n++) { if (_specs[y] == specitem[n].id) { specitem[n].c = true; } } } else if (_specs[y] != id && options[m].stock > 0) { for (let n = 0; n < specitem.length; n++) { if (_specs[y] == specitem[n].id) { specitem[n].c = false; } } } } } return specitem; }, //设置选择规格后的 价格、照片、库存 setGoodsSpecsChangeInfo() { let specsManage = this.data.specsManage; //根据ID 排序 specsManage.sort(); specsManage.sort(function(a, b) { return a.id - b.id; }); if (specsManage.length == this.data.goodsInfo.has_many_specs.length) { let goodsSpecs = ""; for (let j = 0; j < specsManage.length; j++) { goodsSpecs += specsManage[j].id + "_"; } goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_" for (let i = 0; i < this.data.goodsInfo.has_many_options.length; i++) { if (goodsSpecs == this.setGoodsSpecsBySort(this.data.goodsInfo.has_many_options[i].specs)) { this.setData({ activeSkuIndex:i, popPrice: this.data.goodsInfo.has_many_options[i].product_price, //设置价格 popThumb: app._isTextEmpty(this.data.goodsInfo.has_many_options[i].thumb) ? this.data.goodsInfo.thumb : this .data.goodsInfo.has_many_options[i].thumb, //设置图片 popStock: this.data.goodsInfo.has_many_options[i].stock, //设置库存 optionsId: this.data.goodsInfo.has_many_options[i].id //设置规格ID,用于生成订单 }); this.data.optionsMaxCount = this.data.goodsInfo.has_many_options[i].stock; //库存最大数 用于切换更改买家购买数量 if (this.data.optionsMaxCount > 0) { this.setData({ goodsCount: 1 }); } break; } } } this.setData({ specsManage: specsManage }); }, //处理商品goodsSpecs 并排序 新方法 setGoodsSpecsBySort(specs) { let _specs = specs.split("_"); //先变成数组 //_specs.sort();//排序 _specs.sort(function(a, b) { return a - b; }); // 在组装回去 let goodsSpecs = ""; for (let j = 0; j < _specs.length; j++) { goodsSpecs += _specs[j] + "_"; } goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_" return goodsSpecs; }, //判断当前购买总量与库存的关系 getMaxCount() { let specsManage = this.data.specsManage; let optionsMaxCount = this.data.optionsMaxCount; console.log(specsManage,optionsMaxCount,this.data.optionsId); if (specsManage.length == this.data.goodsInfo.has_many_specs.length) { if (optionsMaxCount == 0) //库存不足 { this.setData({ goodsCount: 0 }); } if (this.data.goodsCount > optionsMaxCount) { this.setData({ goodsCount: optionsMaxCount }); } } let {cartList,goodsInfo,optionsId} = this.data; console.log("666",cartList); if (cartList && cartList.length > 0) { for (let i = 0; i < cartList.length; i++) { if (cartList[i].goods_id === goodsInfo.id && cartList[i].option_id === optionsId) { console.log(cartList[i]); this.setData({ goodsCount: cartList[i].total, cartid:cartList[i].id }); break; }else { this.data.cartid=0; } } } }, //============ 处理规格图片点击放大 start============ showSkuImages_Methob() { this.setData({ popupSpecs1: false, popupSpecs2: false, popupModeshow: true, showSkuImages: true }); if (this.data.goodsInfo.has_option != 1) { return; } this.setData({ activeSkuIndex_1: this.data.goodsInfo.has_many_options[this.data.activeSkuIndex].specs }); }, onChangeSkuImagesIndex(e) { let _index = e.detail.current; this.setData({ activeSkuIndex: _index }); if (this.data.goodsInfo.has_option != 1) { return; } this.setData({ activeSkuIndex_2: this.data.goodsInfo.has_many_options[_index].specs }); }, onCloseSkuImages() { if (this.data.goodsInfo.has_option != 1) { this.setData({ popupSpecs2: true, popupModeshow: false, showSkuImages: false }); return; } let that = this; let _lastOption = that.data.activeSkuIndex_1.split("_"); let goodsInfo = that.data.goodsInfo; let _activeSkuIndex = that.data.activeSkuIndex; if (that.data.activeSkuIndex_1 != that.data.goodsInfo.has_many_options[_activeSkuIndex].specs) { let _activeOption = that.data.activeSkuIndex_2.split("_");//如果没有滑动直接取值是取不到报错的 for (let i = 0; i < _lastOption.length; i++) { if (_lastOption[i] != _activeOption[i]) { let _specs = Number(_activeOption[i]); for (let ind = 0; ind < that.data.goodsInfo.has_many_specs.length; ind++) { for (let index = 0; index < that.data.goodsInfo.has_many_specs[ind].specitem.length; index++) { if (that.data.goodsInfo.has_many_specs[ind].specitem[index].id == _specs) { goodsInfo.has_many_specs[ind].description = that.data.goodsInfo.has_many_specs[ind].specitem[index].id; // that.selectSpecs(that.data.goodsInfo.has_many_specs[ind].specitem[index],"sku_swiper") } } } } } } console.log(that.data.activeSkuIndex_1,"that.data.activeSkuIndex_1"); this.setData({ goodsInfo: goodsInfo, showSkuImages: false, popupSpecs1: true, popupModeshow: false, popPrice: this.data.goodsInfo.has_many_options[_activeSkuIndex].product_price, //设置价格 popThumb: app._isTextEmpty(this.data.goodsInfo.has_many_options[_activeSkuIndex].thumb) ? this.data.goodsInfo.thumb : this .data.goodsInfo.has_many_options[_activeSkuIndex].thumb, //设置图片 popStock: this.data.goodsInfo.has_many_options[_activeSkuIndex].stock, //设置库存 optionsId: this.data.goodsInfo.has_many_options[_activeSkuIndex].id //设置规格ID,用于生成订单 }); }, //============ 处理规格图片点击放大 end============ } });