<template>
<view>
<u-button @click="tesx">11</u-button>
{{aa}}
<city v-model="aa"></city>
</view>
</template>
<script>
import city from './city.vue'
export default {
components:{city},
data() {
return {
aa:''
}
},
methods: {
tesx(){
this.aa='河北省-石家庄市-市辖区'
}
}
}
</script>
<style>
</style>
<template>
<view>
<view @tap="toOpen">
<text :style="{ color: local.length ? '#333' : '#c0c4cc' }">{{
local === "" ? "选择省/市/区" : local
}}</text>
</view>
<u-picker
@cancel="showLocal = false"
@close="showLocal = false"
:show="showLocal"
:columns="addressColumns"
@confirm="localConfirm"
title="请选择所在地"
keyName="name"
itemHeight="80"
closeOnClickOverlay
ref="uPicker"
@change="changeHandler"
:defaultIndex="defaultAddress"
immediateChange
></u-picker>
</view>
</template>
<script>
import areas from "./china.json";
export default {
props:{
value:{}
},
data() {
return {
local: "",
localCode: "",
showLocal: false,
addressColumns: [],
defaultAddress: [],
addressData: areas,
};
},
watch:{
value(val){
if(val!==this.local){
this.local=val
}
}
},
methods: {
toOpen(){
if( this.local){
this.backfill(this.local)
}
this.showLocal = true
},
changeHandler(e) {
const { columnIndex, index, indexs, picker = this.$refs.uPicker } = e;
if (columnIndex === 0) {
const children1 = this.addressData[index].areas.map((e) => {
return { name: e.name, code: e.code };
});
picker.setColumnValues(1, children1);
const children2 = this.addressData[index].areas[indexs[1]].areas.map(
(e) => {
return { name: e.name, code: e.code };
}
);
picker.setColumnValues(2, children2);
}
if (columnIndex === 1) {
const children3 = this.addressData[indexs[0]].areas[
indexs[1]
].areas.map((e) => {
return { name: e.name, code: e.code };
});
picker.setColumnValues(2, children3);
}
},
localConfirm(e) {
this.local = `${e.value[0].name}-${e.value[1].name}-${e.value[2].name}`;
this.localCode = `${e.value[0].code}-${e.value[1].code}-${e.value[2].code}`;
this.$emit('input',this.local)
this.showLocal = false;
},
backfill(temp) {
temp = temp.split("-");
let index,
index1,
index2 = 0;
let arr,
arr1,
arr2 = [];
console.log(this.addressData);
this.addressData.forEach((item, i) => {
if (item.name == temp[0]) {
index = i;
item.areas.forEach((val, ind) => {
if (val.name == temp[1]) {
index1 = ind;
val.areas.forEach((e, n) => {
if (e.name == temp[2]) {
index2 = n;
}
});
}
});
}
});
arr = this.addressData.map((e) => {
return { name: e.name, code: e.code };
});
arr1 = this.addressData[index].areas.map((e) => {
return { name: e.name, code: e.code };
});
arr2 = this.addressData[index].areas[index1].areas.map((e) => {
return { name: e.name, code: e.code };
});
this.addressColumns = [arr, arr1, arr2];
this.defaultAddress = [index, index1, index2];
},
},
mounted() {
const provinceData = areas.map((e) => {
return { name: e.name, code: e.code };
});
const cityData = areas.map((e) => {
const arr = [];
arr.push(
e.areas.map((c) => {
return { name: c.name, code: c.code };
})
);
return arr;
});
const areaData = areas.map((e) => {
const arr = [];
arr.push(
e.areas.map((c) =>
c.areas.map((d) => {
return { name: d.name, code: d.code };
})
)
);
return arr;
});
const arr = [provinceData, cityData[0][0], areaData[0][0][0]];
this.addressColumns = arr;
},
};
</script>
<style></style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探