<div v-loading="loading">
<el-tabs
v-model="selsctKeyX[areaData[0].levelx].code"
@tab-click="(e) => handleClick(e, areaData[0].levelx)"
:key="key"
:namex="selsctKeyX[areaData[0].levelx].code"
>
<el-tab-pane
v-for="item in areaData"
:label="item.name"
:name="item.code"
:key="item.code"
>
<div v-if="item.areaList && item.areaList.length">
<List
:areaData="[
{ code: '', levelx: item.areaList[0].levelx, name: '全部' },
...item.areaList
]"
></List>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
name: 'List',
props: {
areaData: {
type: Array,
default: () => []
}
},
created() {
const t = JSON.parse(JSON.stringify(this.$store.state.selsctKey))
if (Array.isArray(this.areaData) && this.areaData.length) {
if (!t[this.areaData[0].levelx]) {
t[this.areaData[0].levelx] = {
name: '',
code: ''
}
}
}
this.selsctKeyX = t
this.$store.commit('saveSelsctKey', t)
},
watch: {
// loading: {
// handler(newvalue, oldvalue) {
// // console.log('newvalue', newvalue)
// },
// deep: true
// }
},
data() {
return {
selsctKeyX: JSON.parse(JSON.stringify(this.$store.state.selsctKey)),
selsctKey: [],
tempx: {},
key: 1,
loading: false
}
},
methods: {
handleClick(e, level) {
this.loading = true
const { label, name } = e
if (name) {
this.tempx = {
...this.selsctKeyX,
[level]: { code: name, name: label }
}
this.loop(level)
} else {
const flag = level === 0
if (flag) {
let t = {
0: {
name: '',
code: ''
}
}
this.tempx = t
this.$store.commit('saveSelsctKey', t)
this.selsctKeyX = t
} else {
let length = Object.keys(
JSON.parse(JSON.stringify(this.tempx))
).length
if (length - 1 === level) {
this.loop(level - 1)
}
}
}
this.$store.commit('saveSelsctKey', this.tempx)
this.key = Math.random()
console.log('this.tempx', JSON.stringify(this.tempx))
let keys = Object.values(this.tempx)
console.log(keys)
let params = {
key: keys.map((item) => item.code).join('/'),
name: keys.map((item) => item.name).join('/')
}
console.log('params', params)
// let obj = {
// 1: {
// name: '北京市',
// code: '110000'
// },
// 2: '110000'
// }
// 1、 110000/110001
// 2、北京市/什么辖区
setTimeout(() => {
this.loading = false
}, 500)
},
loop(level) {
let old = JSON.parse(JSON.stringify(this.tempx))
let keys = Object.keys(old) // 0 1 2
let val = keys.filter((item, index) => index <= level) // 0 1
let objx = {}
for (const key in old) {
const item = old[key]
if (val.includes(key)) {
objx[key] = item
}
}
this.tempx = objx
this.key = Math.random()
}
}
}
</script>
<style></style>