// component/sku-dialog.js import utils from '../../utils/util'; const app = getApp(); Component({ options: { styleIsolation: 'shared' }, /** * 组件的属性列表 */ properties: { show:{ type:Boolean, value:false, // observer(newVal,oldVal) { // console.log(newVal,oldVal); // // let {lastMatcode,matcode} = this.data; // // if (newVal&lastMatcode==matcode) { // // // console.log('877777888...>>>',this.data); // // this.setData({ // // showHideLayer: true, // // }) // // } // if (newVal) { // this.getDetailDataRes() // } // } }, matcode:{ type:String, value:'', // observer(newVal,oldVal) { // console.log(newVal,oldVal); // this.getDetailDataRes() // } }, // type==0 可编辑影响购物车 type==1 商品详情内加入购物车 type:{ type:Number||String, value:0 }, quantity:{ type:Number||String, value:0, observer(newVal,oldVal) { console.log('dialog-quantity新旧:',newVal,oldVal); this.setData({ [`SkuMatCodeList[${0}].cartQuantity`]:newVal, // [`SkuMatCodeList[${0}].cartId`]:this.data.cartid, }) } }, cartid:{ type:String|Number, value:0, observer(newVal,oldVal) { console.log('dialog-cartid新旧:',newVal,oldVal,'---quantity:',this.data.quantity); this.setData({ [`SkuMatCodeList[${0}].cartId`]:newVal, [`SkuMatCodeList[${0}].cartQuantity`]: this.data.quantity }) } } }, /** * 组件的初始数据 */ data: { showHideLayer: false, lastMatcode:'1', isSelectedAllSku:true, Quantity:{ quantity:1 }, isFirstIn: true }, lifetimes:{ attached: function() { // 在组件实例进入页面节点树时执行 console.log('showHideLayer.....000:',this.data.showHideLayer); // app.globalData.emitter.on('openSkuLayer', (data)=>{ // console.log('监听openSkuLayer',data); // this.setData({ // show:true, // goodsItem: data.goods, // matcode:data.goods.MatCode, // }) // }) }, detached: function() { // 在组件实例被从页面节点树移除时执行 }, }, pageLifetimes: { show: function() { console.log('组件父页面被展示'); // if (!this.data.isFirstIn) { // } app.globalData.emitter.on('openSkuLayer', (data)=>{ console.log('监听openSkuLayer',data); this.setData({ show:true, goodsItem: data.goods, matcode:data.goods.MatCode, }) this.getDetailDataRes() }) }, hide: function() { // 页面被隐藏 // this.setData({ // isFirstIn:false // }) console.log('组件父页面被隐藏'); app.globalData.emitter.all.clear() // app.globalData.emitter.off('openSkuLayer', (data)=>{ // console.log('取消监听openSkuLayer',data); // }) }, }, // todo 修复选择商品属性不全时matcode传值问题 /** * 组件的方法列表 */ methods: { hideLayer(){ this.setData({ showHideLayer: false, show:false, hasQuantity:false }) }, async getDetailDataRes(){ let [errMsg,res] = await this.getDetailData(); if (errMsg) { // this.setData({ // showHideLayer: false, // lastMatcode: this.data.matcode, // [`Quantity.quantity`]:1 // }) return; } console.log(res); this.setData({ // goodsItem: res.list, SkuParameterList:res.SkuParameterList, SkuMatCodeList:res.SkuMatCodeList, quantity:(res.SkuMatCodeList.length>0&&res.SkuMatCodeList[0].cartQuantity)||0, cartid:(res.SkuMatCodeList.length>0&&res.SkuMatCodeList[0].cartId)||0, }) this.handleCurrentGoods(); this.setData({ showHideLayer: this.data.show, lastMatcode: this.data.matcode, [`Quantity.quantity`]:1 }) }, async getDetailData () { // let skus = this.data.skuIds; let skus = {} for (let index = 1; index < 11; index++) { skus[`skuId${index}`] = '' } console.log('this.data.skus ----',skus); let data = { matcode: this.data.matcode, ...skus } let [errMsg,res] = await utils.to( wx.$http.request({ url:'/shopping/getSkuParameterByMatCode.do', data }) ) return [errMsg,res]; }, handleCurrentGoods(){ /* * * 首先拿到当前商品的所有skuid [],同时也是选中的id * 处理所有商品的skuid为字符串 * 用户点击sku[i],拼接为字符串与上面的对比 * */ let SkuParameterList = this.data.SkuParameterList; let SkuMatCodeList = this.data.SkuMatCodeList; let MatCode = this.data.goodsItem.MatCode; let selectedSkuId = []; let selectedSkuName = []; let goodsSkuIdStrings = []; let goodsSkuIdList = []; let skuIdList = []; let skuSetName = []; SkuParameterList.forEach((item) => { let arr = []; item.skuList.forEach((item) => { arr.push(item.skuId) }) skuIdList.push(arr); skuSetName.push(item.skuSetName); }) SkuMatCodeList.forEach((item,index)=>{ let skuIdString = ''; let skuIdArr = []; for (let i = 1; i < 11; i++) { if (item.MatCode === MatCode && item[`skuId${i}`]){ selectedSkuId.push(item[`skuId${i}`]) selectedSkuName.push(item[`skuName${i}`]) } if (item[`skuId${i}`]){ skuIdString+=item[`skuId${i}`] skuIdArr.push(item[`skuId${i}`]) } } goodsSkuIdStrings.push(skuIdString) goodsSkuIdList.push(skuIdArr) }) this.setData({ selectedSkuId, selectedSkuName, selectedSkuNameStr: selectedSkuName.join(' '), goodsSkuIdStrings, skuIdList, goodsSkuIdList, skuSetName, skuSetNameStr:skuSetName.join(','), }) console.log('selectedSkuId',selectedSkuId); console.log('selectedSkuName',selectedSkuName); console.log('goodsSkuIdStrings',goodsSkuIdStrings); console.log('skuIdList',skuIdList); console.log('goodsSkuIdList',goodsSkuIdList); console.log('skuSetName',skuSetName); this.handleSkuIds(); console.log(' --this.data.skuIds ',this.data.skuIds); }, async selectGoodsAttr(e){ let attrIndex = e.currentTarget.dataset.i; let listIndex = e.currentTarget.dataset.index; let skuId = e.currentTarget.dataset.skuId; let skuName = e.currentTarget.dataset.skuName; let isEnabled = e.currentTarget.dataset.isEnabled; let selectedSkuId = this.data.selectedSkuId; let selectedSkuName = this.data.selectedSkuName; let length = selectedSkuId.length; console.log(e,selectedSkuId); if (!isEnabled) return; selectedSkuId[attrIndex] = skuId; selectedSkuName[attrIndex] = skuName; selectedSkuId.forEach((item,index)=>{ if (index>attrIndex){ selectedSkuId[index] = '' selectedSkuName[index] = '' } }) selectedSkuId.forEach((item)=>{ if (item==="") length--; }) this.setData({ // [`selectedSkuId[${attrIndex}]`]:skuId, selectedSkuId:selectedSkuId, // [`selectedskuName[${attrIndex}]`]:skuName, // [`selectedskuName[${attrIndex}]`]:skuName, selectedSkuNameStr: selectedSkuName.join(' '), selectedSkuIdLength: length, hasQuantity:false }) console.log(selectedSkuId,selectedSkuName,this.data.selectedSkuIdLength); // console.log(await this.getSkuParameterByMatCode()); let [errMsg,spRes] = await this.getSkuParameterByMatCode(); if (errMsg) { return; } console.log(spRes); if (length0&&spRes.SkuMatCodeList[0].cartQuantity)||0, cartid:(spRes.SkuMatCodeList.length>0&&spRes.SkuMatCodeList[0].cartId)||0, CouponList:spRes.CouponList, goodsItem:spRes.list, groupBuyingList:spRes.groupBuyingList, isSelectedAllSku:true, }) // matcode = spRes.list.MatCode } }, async getSkuParameterByMatCode(){ this.handleSkuIds(); let data = this.data.skuIds; console.log('----请求skuid: ',data); let [errMsg,res] = await utils.to( wx.$http.request({ url:'/shopping/getSkuParameterByMatCode.do', data }) ) return [errMsg,res]; }, handleSkuIds(){ let data = {}; let selectedSkuId = this.data.selectedSkuId; let selectedSkuIdLength = this.data.selectedSkuIdLength; for (let i = 1; i < 11; i++) { if (selectedSkuId[i-1]){ data[`skuId${i}`] = selectedSkuId[i-1] } else { data[`skuId${i}`] = '' } } if (selectedSkuIdLength>>>传入的matcode:',this.data.matcode); // if (title===this.data.matcode) { // } this.triggerEvent("changeCartQuantity",{ quantity:res.data.CartQuantitySumForMatCode, matcode:title }) setTimeout(()=>{ this.hideLayer(); },500) }, fail: function(errmsg) { utils.requestFail(errmsg,'/shopping/cart.do'); } }) // this.hideLayer(); wx.showLoading({ title: '加载中', }) }, addCartItem(event){ if (!this.data.isSelectedAllSku) { wx.showToast({ title: '请选择正确的分类', icon:'none' }) return }; // console.log('addCartItem',event,this.data.skuIds); this.triggerEvent('addCartItem',{ data:event.currentTarget.dataset, skuIds:this.data.skuIds }) console.log('------cartid',this.data.cartid,'>>>quantity',this.data.quantity); // this.setData({ // [`SkuMatCodeList[${0}].cartQuantity`]: 1 // }) }, sendCartItemChange(event){ console.log('sendCartItemChange',event); let {cartId, quantity,matcode} = event.detail; this.triggerEvent('sendCartItemChange', {cartId, quantity,matcode}); console.log('------cartid',this.data.cartid,'>>>quantity',this.data.quantity); // this.setData({ // [`SkuMatCodeList[${0}].cartQuantity`]: quantity // }) }, deleteCartItemByCartId(event){ console.log('deleteCartItemByCartId',event); let {cartId,matcode} = event.detail; this.triggerEvent('deleteCartItem',{cartId,matcode}); console.log('------cartid',this.data.cartid,'>>>quantity',this.data.quantity); // this.setData({ // [`SkuMatCodeList[${0}].cartQuantity`]: 0 // }) } } })