修复商品选择sku时会已选择项会打乱的问题

master
wyy 3 years ago
parent 3adfd5380c
commit 863c97e20c

@ -151,14 +151,23 @@
</view> </view>
<view class="pup-sku-body"> <view class="pup-sku-body">
<view class="pup-sku-area"> <view class="pup-sku-area">
<block v-for="(value, key) in skuGroup" :key="key"> <view class="sku-box" v-if="skuList.length">
<view class="sku-kind">{{key}}</view> <block v-for="(skuGroupItem, skuGroupItemIndex) in skuGroupList" :key="skuGroupItemIndex">
<view class="sku-choose"> <view class="items sku-text" v-for="(skuLine, key) in skuGroupItem" :key="key">
<block v-for="(item, index) in value" :key="index"> <text class="sku-kind">{{key}}</text>
<text :class="'sku-choose-item ' + (wxs.array_contain(selectedProp,item)?'active':'') + ' ' + (wxs.props_contain(allProperties,selectedPropObj,key,item,propKeys)?'':'gray')" :data-ok="wxs.props_contain(allProperties,selectedPropObj,key,item,propKeys)" @tap="toChooseItem" :data-key="key" :data-val="item">{{item}}</text> <view class="con">
</block> <text
v-for="skuLineItem in skuLine"
:key="skuLineItem"
class="sku-choose-item"
:class="[selectedPropList.indexOf(key + ':' + skuLineItem) !== -1?'active':'',
isSkuLineItemNotOptional(allProperties,selectedPropObj,key,skuLineItem,propKeys)? 'dashed' : '']"
@click="toChooseItem(skuGroupItemIndex, skuLineItem, key)"
>{{skuLineItem}}</text>
</view>
</view> </view>
</block> </block>
</view>
</view> </view>
<view class="pup-sku-count"> <view class="pup-sku-count">
<view class="num-wrap"> <view class="num-wrap">
@ -282,7 +291,9 @@ export default {
}, },
littleCommPage: [], littleCommPage: [],
evaluate: -1, evaluate: -1,
isCollection: false isCollection: false,
findSku: true,
skuGroupList: []
}; };
}, },
@ -415,7 +426,6 @@ export default {
}, 1000); }, 1000);
return return
} }
//console.log(res);
var imgStrs = res.imgs; var imgStrs = res.imgs;
var imgs = imgStrs.split(","); var imgs = imgStrs.split(",");
var content = util.formatHtml(res.content); var content = util.formatHtml(res.content);
@ -429,11 +439,11 @@ export default {
// skuId: res.skuId // skuId: res.skuId
skuList: res.skuList, skuList: res.skuList,
pic: res.pic pic: res.pic
}); // });
//
//this.getCouponList(); //this.getCouponList();
// sku // sku
this.groupSkuProp(res.skuList, res.price);
this.groupSkuProp();
uni.hideLoading(); uni.hideLoading();
} }
}; };
@ -451,7 +461,6 @@ export default {
this.setData({ this.setData({
prodCommData: res prodCommData: res
}); });
console.log('评论prodCommData:', this.prodCommData)
} }
}); });
}, },
@ -536,120 +545,142 @@ export default {
}); });
}, },
//sku /**
groupSkuProp: function () { * 组装SKU
var skuList = this.skuList; */
groupSkuProp(skuList, defaultPrice) {
if (skuList.length == 1 && skuList[0].properties == "") { if (skuList.length == 1 && !skuList[0].properties) {
this.setData({ this.defaultSku = skuList[0]
defaultSku: skuList[0] this.findSku = true
});
return; return;
} }
let skuGroupList = []
let skuGroup = {}
let allProperties = []
let propKeys = []
let selectedPropObj = {}
let selectedPropObjList = []
var skuGroup = {}; var defaultSku = null;
var allProperties = [];
var propKeys = [];
for (var i = 0; i < skuList.length; i++) { for (var i = 0; i < skuList.length; i++) {
var defaultSku = this.defaultSku;
var isDefault = false; var isDefault = false;
if (!defaultSku && skuList[i].price == defaultPrice) {
if (!defaultSku && skuList[i].price == this.price) {
//SKUSKU
defaultSku = skuList[i]; defaultSku = skuList[i];
isDefault = true; isDefault = true;
this.setData({
defaultSku: defaultSku
});
} }
var properties = skuList[i].properties; //:;:;:64GB var properties = skuList[i].properties; //:;:;:64GB
allProperties.push(properties); allProperties.push(properties);
var propList = properties.split(";"); // [":",":",":64GB"] var propList = properties.split(";"); // [":",":",":64GB"]
var selectedPropObj = this.selectedPropObj;
for (var j = 0; j < propList.length; j++) { for (var j = 0; j < propList.length; j++) {
var propval = propList[j].split(":"); //["",""] var propval = propList[j].split(":"); //["",""]
var props = skuGroup[propval[0]]; // var props = skuGroup[propval[0]]; //
//sku selectedProp //sku selectedProp
if (isDefault) { if (isDefault) {
propKeys.push(propval[0]); propKeys.push(propval[0]);
selectedPropObj[propval[0]] = propval[1]; selectedPropObj[propval[0]] = propval[1];
const selectedPropObjItem = {}
selectedPropObjItem[propval[0]] = propval[1]
selectedPropObjList.push(selectedPropObjItem)
} }
if (props == undefined) { if (props == undefined) {
props = []; // props = []; //
props.push(propval[1]); // "" props.push(propval[1]); // ""
} else { } else {
if (!this.array_contain(props, propval[1])) { if (props.indexOf(propval[1]) === -1) { //""
//""
props.push(propval[1]); // "" props.push(propval[1]); // ""
} }
} }
skuGroup[propval[0]] = props; // skuGroup[propval[0]] = props; //
const propListItem = {}
propListItem[propval[0]] = props
skuGroupList.push(propListItem)
} }
this.setData({
selectedPropObj: selectedPropObj,
propKeys: propKeys
});
} }
this.defaultSku = defaultSku
this.parseSelectedObjToVals(); this.propKeys = propKeys
this.setData({ this.selectedPropObj = selectedPropObj
skuGroup: skuGroup, this.skuGroup = skuGroup
allProperties: allProperties this.selectedPropObjList = selectedPropObjList
}); this.skuGroupList = this.unique(skuGroupList)
this.allProperties = allProperties
this.parseSelectedObjToVals(skuList);
this.$forceUpdate()
}, },
// {key:val,key2:val2} [val,val2] /**
parseSelectedObjToVals: function () { * 将已选的 {key:val,key2:val2}转换成 [val,val2]
var selectedPropObj = this.selectedPropObj; */
var selectedProperties = ""; parseSelectedObjToVals: function(skuList) {
var selectedProp = []; let selectedPropObjList = this.selectedPropObjList
let selectedProperties = ""
for (var key in selectedPropObj) { let selectedPropList = []
selectedProp.push(selectedPropObj[key]); let selectedPropShowList = []
selectedProperties += key + ":" + selectedPropObj[key] + ";"; for (let i = 0; i < selectedPropObjList.length; i++) {
} const selectedPropObjItem = selectedPropObjList[i];
for (const key in selectedPropObjItem) {
selectedProperties = selectedProperties.substring(0, selectedProperties.length - 1); // console.log(selectedProperties); if (Object.hasOwnProperty.call(selectedPropObjItem, key)) {
selectedPropList.push(key + ':' + selectedPropObjItem[key])
this.setData({ selectedPropShowList.push(selectedPropObjItem[key])
selectedProp: selectedProp selectedProperties += key + ":" + selectedPropObjItem[key] + ";"
}); }
}
for (var i = 0; i < this.skuList.length; i++) { }
if (this.skuList[i].properties == selectedProperties) { selectedProperties = selectedProperties.substring(0, selectedProperties.length - 1)
this.setData({ this.selectedPropList = selectedPropList
defaultSku: this.skuList[i] this.selectedPropShowList = selectedPropShowList
}); this.selectedProperties = selectedProperties
break; this.selectedPropObjList = selectedPropObjList
var findSku = false
for (var i = 0; i < skuList.length; i++) {
if (skuList[i].properties == selectedProperties) {
findSku = true
this.defaultSku = skuList[i]
break
} }
} }
this.findSku = findSku
}, },
// /**
toChooseItem: function (e) { * 判断当前的规格值 是否可以选
var ok = e.currentTarget.dataset.ok; */
isSkuLineItemNotOptional(allProperties, selectedPropObj, key, item, propKeys) {
if (!ok) { var selectedPropObj = Object.assign({}, selectedPropObj)
return; var properties = "";
selectedPropObj[key] = item;
for (var j = 0; j < propKeys.length; j++) {
properties += propKeys[j] + ":" + selectedPropObj[propKeys[j]] + ";";
}
properties = properties.substring(0, properties.length - 1);
for (var i = 0; i < allProperties.length; i++) {
if (properties == allProperties[i]) {
return false;
} }
}
var val = e.currentTarget.dataset.val; for (var i = 0; i < allProperties.length; i++) {
var key = e.currentTarget.dataset.key; if (allProperties[i].indexOf(item) >= 0) {
var selectedPropObj = this.selectedPropObj; return true;
selectedPropObj[key] = val; }
this.setData({ }
selectedPropObj: selectedPropObj return false;
}); },
this.parseSelectedObjToVals(); /**
* 规格点击事件
*/
toChooseItem(skuGroupItemIndex ,skuLineItem, key) {
this.selectedPropObjList[skuGroupItemIndex][key] = skuLineItem
this.selectedPropObj[key] = skuLineItem;
this.parseSelectedObjToVals(this.skuList);
},
/**
* 去重
*/
unique(arr) {
const map = {}
arr.forEach(item => {
const obj = {};
Object.keys(item).sort().map(key => obj[key] = item[key])
map[JSON.stringify(obj)] = item;
})
return Object.keys(map).map(key => JSON.parse(key))
}, },
// //
array_contain: function (array, obj) { array_contain: function (array, obj) {
@ -698,7 +729,6 @@ export default {
skuId: this.defaultSku.skuId skuId: this.defaultSku.skuId
}, },
callBack: res => { callBack: res => {
//console.log(res);
this.setData({ this.setData({
totalCartNum: this.totalCartNum + this.prodNum totalCartNum: this.totalCartNum + this.prodNum
}); });
@ -766,7 +796,6 @@ export default {
data: {}, data: {},
callBack: couponIds => { callBack: couponIds => {
var couponList = this.couponList; var couponList = this.couponList;
console.log(couponList);
couponList.forEach(coupon => { couponList.forEach(coupon => {
if (couponIds && couponIds.length) { if (couponIds && couponIds.length) {
// //

Loading…
Cancel
Save