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============ }, });