104 lines
2.0 KiB
Vue
104 lines
2.0 KiB
Vue
<template>
|
|
<picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector">
|
|
<slot></slot>
|
|
</picker>
|
|
</template>
|
|
|
|
<script>
|
|
import AllAddress from './data.js'
|
|
let selectVal = ['','','']
|
|
|
|
export default {
|
|
data() {
|
|
return{
|
|
value: [0,0,0],
|
|
array: [],
|
|
index: 0
|
|
}
|
|
},
|
|
created() {
|
|
this.initSelect()
|
|
},
|
|
methods:{
|
|
// 初始化地址选项
|
|
initSelect() {
|
|
this.updateSourceDate() // 更新源数据
|
|
.updateAddressDate() // 更新结果数据
|
|
//.$forceUpdate() // 触发双向绑定
|
|
},
|
|
// 地址控件改变控件
|
|
columnchange(d) {
|
|
this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
|
|
.updateSourceDate() // 更新源数据
|
|
.updateAddressDate() // 更新结果数据
|
|
//.$forceUpdate() // 触发双向绑定
|
|
},
|
|
|
|
/**
|
|
* 更新源数据
|
|
* */
|
|
updateSourceDate() {
|
|
this.array = []
|
|
this.array[0] = AllAddress.map(obj => {
|
|
return {
|
|
name: obj.name
|
|
}
|
|
})
|
|
this.array[1] = AllAddress[this.value[0]].city.map(obj => {
|
|
return {
|
|
name: obj.name
|
|
}
|
|
})
|
|
this.array[2] = AllAddress[this.value[0]].city[this.value[1]].area.map(obj => {
|
|
return {
|
|
name: obj
|
|
}
|
|
})
|
|
return this
|
|
},
|
|
|
|
/**
|
|
* 更新索引
|
|
* */
|
|
updateSelectIndex(column, value){
|
|
let arr = JSON.parse(JSON.stringify(this.value))
|
|
arr[column] = value
|
|
if(column === 0 ) {
|
|
arr[1] = 0
|
|
arr[2] = 0
|
|
}
|
|
if(column === 1 ) {
|
|
arr[2] = 0
|
|
}
|
|
this.value = arr
|
|
return this
|
|
},
|
|
|
|
/**
|
|
* 更新结果数据
|
|
* */
|
|
updateAddressDate() {
|
|
selectVal[0] = this.array[0][this.value[0]].name
|
|
selectVal[1] = this.array[1][this.value[1]].name
|
|
selectVal[2] = this.array[2][this.value[2]].name
|
|
return this
|
|
},
|
|
|
|
/**
|
|
* 点击确定
|
|
* */
|
|
bindPickerChange(e) {
|
|
this.$emit('change', {
|
|
index: this.value,
|
|
data: selectVal
|
|
})
|
|
return this
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
</style>
|