data (){
return {
keys: []
}
},
methods: {
select (key) {
this.keys.push(key)
console.log(this.keys)
}
}
but print on the console and find that there is no push, added directly after overwriting the previously added
.
and check that keys is empty in vue-detools
what is the reason for this
<!--specification-->
<template>
<section>
<div v-for="(types,index) in keys" :key="index">
<div :class="specStyle">
<p :class="specTitle">{{types.keyname}}
<checker
type="radio"
:default-item-class="checkDefault"
:selected-item-class="checkSelected"
:disabled-item-class="checkDisabled"
>
<checker-item v-for="value in types.values"
:key ="value.valueid"
:value="value.valuename"
:disabled="!value.optional"
@on-item-click="select(types.keyid, value)">{{value.valuename}}</checker-item>
</checker>
</div>
</div>
</section>
</template>
<script type="text/ecmascript-6">
import { Checker, CheckerItem } from "vux"
import { sortNumber } from "@/assets/js/mUtils"
export default {
name: "specification",
props: {
keys: {
type: Array,
required: true
},
details: {
type: Array,
required: true
},
specStyle: {
type: String,
default: function () {
return this.$style.specifications
}
},
specTitle: {
type: String,
default: function () {
return this.$style["specifications-title"]
}
},
checkDefault: {
type: String,
default: function () {
return this.$style["checkbox-item"]
}
},
checkSelected: {
type: String,
default: function () {
return this.$style["checkbox-item-active"]
}
},
checkDisabled: {
type: String,
default: function () {
return this.$style["checkbox-item-disabled"]
}
}
},
data () {
return {
selectId: new Map(),
detailArr: [],
id2val: new Map(),
keyids: []
}
},
mounted () { },
methods: {
initSku () {
// id,map
this.format()
// map
// console.log(this.id2val)
/**
* key
* 1. key,
* 2. ,
* 3. idmap,,()
*/
this.keys.forEach(ele => {
ele.values.forEach(val => {
this.compare(val)
//
})
})
},
//
compare (val) {
// map,number
let id = val.valueid.toString()
if (this.id2val.has(id)) {
// id,
if (val.optional !== undefined) {
val.optional = true
} else {
this.$set(val, "optional", true)
}
} else {
// ,
if (val.optional !== undefined) {
val.optional = false
} else {
this.$set(val, "optional", false)
}
}
},
/**
*
* keyid,
* value
* */
select (keyid, value) {
this.keyids.push(keyid)
console.log(this.keyids)
/**
* 1. value
* 2. ,$emit
* 3. ,
*/
if (value.optional) {
let ids = []
/**
* map,,,
* 1. idkeyid,
* 2. ,
* 3. ,
* 4.
*/
if (this.selectId.has(keyid)) {
if (this.selectId.get(keyid) === value.valueid) {
this.selectId.delete(keyid)
} else {
this.selectId.set(keyid, value.valueid)
}
} else {
this.selectId.set(keyid, value.valueid)
}
// .value,key
// ids valueid
this.selectId.forEach((v, k) => {
ids.push(v)
})
// ,
ids = ids.sort(sortNumber).join(";")
/**
* 1. idmap
* 2. id
* 3. map,
* 4. map,
*/
if (ids) { // ,
// id
let msg = this.id2val.get(ids)
if (msg !== undefined) {
// 1.
this.$emit("msg", msg)
// 2. , msgundefined
this.check(ids, keyid)
} else {
console.log(",")
}
} else {
// ids,
this.$emit("msg", {count: 1, price: 0, tiaoid: 0})
}
}
},
check (ids, keyid) {
/**
* 1.ids,ids
*/
ids = ids.split(";")
let kArr = []
let selectAbout = []
this.id2val.forEach((v, k) => {
kArr.push(k.split(";")) //
})
for (let i = 0; i < kArr.length; iPP) {
if (this.isContained(kArr[i], ids)) {
selectAbout.push(`${kArr[i].join(";")}`)
}
}
// console.log(selectAbout)
//
this.keys.forEach(ele => {
ele.values.forEach(val => {
// console.log(val)
//
this.selectCompare(val, keyid, selectAbout)
})
})
},
selectCompare (val, keyid, selectAbout) {
/**
*
* 1. keyid,
* 2. keyid,
*/
console.log(val, keyid, selectAbout)
// selectAbout.forEach(e => {
// console.log(e)
// })
},
//
isContained (arr1, arr2) {
return arr2.every(val => arr1.includes(val))
},
//
format () {
this.detailArr = this.details
/**
* 1. valueids
* 2.
* 3. ,
* 4. ,keys,keys
*/
for (let i = 0; i < this.detailArr.length; iPP) {
/**
* 1. ids
* 2. ids
* 3. id
* 4.
* 5.
*/
let res = this.cutIds(this.detailArr[i].valueids) // id
let detail = this.detailArr[i] //
/*
* map,id,,,
*/
for (let i of res) {
if (this.id2val.has(i)) {
let val = this.id2val.get(i).count
val += detail.count
this.id2val.set(i, {
count: val,
price: detail.price,
tiaoid: detail.tiaoid
})
} else {
this.id2val.set(i, {
count: detail.count,
price: detail.price,
tiaoid: detail.tiaoid
})
}
}
}
},
// ids,
cutIds (ids) {
/**
* 1. valuesids
* 2.
*/
let idArr = ids.split(";")
// console.log(idArr)
let allKinds = new Set()
for (var a2 = []; a2.push([]) < idArr.length;) {}
var l = Math.pow(2, idArr.length) - 1
for (var i = 1; i <= l; iPP) {
var t = []
for (var s = i, k = 0; s > 0; s >>= 1, kPP) {
// eslint-disable-next-line
if (s&1 === 1)
t.push(idArr[k])
}
a2[t.length - 1].push(t.join(";"))
}
let set = a2.join(",").split(",")
set.forEach(val => {
allKinds.add(val)
})
return allKinds
}
},
computed: {},
components: {
Checker,
CheckerItem
},
watch: {
// prop
details () {
this.initSku()
}
}
}
</script>
<style module lang="scss">
.specifications {
font-size: 14px;
line-height: 28px;
text-align: left;
box-sizing: border-box;
background-color: -sharpfff;
.specifications-title {
font-weight: bold;
text-align: left;
}
.checkbox-item {
margin: 10px 15px 10px 0;
border: 1px solid -sharpccc;
padding: 10px 15px;
font-size: 12px;
line-height: 12px;
border-radius: 3px;
font-weight: bold;
}
.checkbox-item-active {
border-color: $m_pink;
background-color: -sharpfff4fa;
color: $m_pink;
}
.checkbox-item-disabled {
border-color: $f_4;
color: $f_4;
}
}
</style>