更新记录
V1.2(2026-03-26) 下载此版本
- 修改组件名称,采用小驼峰模式
- 增加边框和内边距是否显示的配置项
- 优化默认地址的设置,已支持仅传递省市区名称,且兼容仅传递名称和传递code+name的模式
- 修复同页面多次复用组件导致默认地址显示没有切换的问题
V1.0(2026-03-26) 下载此版本
1.0.0(2026-03-26)
插件初始化
平台兼容性
uni-app(3.7.3)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | × | √ | √ | √ | - | - | - | - | - | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
基于国家官方数据的动态省市区三级联动选择器,支持按需加载、直辖市自动处理,适用于 uni-app 项目(Vue 3 + setup 语法)。
安装与引入
1. 组件文件
将组件代码下载导入项目的 components 目录(或任意你习惯的位置)。
2. 在页面中引入
<script setup>
import moycL3addressGov from '@/components/moycL3addressGov.vue'
</script>
基本用法
<template>
<view>
<moycL3addressGov
:level="3"
:defaultValue="defaultAddress"
@confirm="handleConfirm"
placeholder="请选择省市区"
/>
</view>
</template>
<script setup>
import { ref } from 'vue'
import moycL3addressGov from '@/components/moycL3addressGov.vue'
const defaultAddress = ref([
{ code: '440000000000', name: '广东省' },
{ code: '440100000000', name: '广州市' },
{ code: '440105000000', name: '海珠区' }
])
// 或者 const defaultAddress = ref(['陕西省','西安市','莲湖区']) 这样[省,市,区]仅传递name
const handleConfirm = (address) => {
console.log('选中的地址:', address)
}
</script>
Props 属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| level | Number | 3 | 选择层级:1-省,2-省市,3-省市区 |
| defaultValue | Array | [] | 默认选中值,格式为 [{code, name}, ...],长度需与 level 一致 |
| placeholder | String | "请选择地址" | 未选中时的提示文本 |
| pickerHeight | String | "400rpx" | 选择器面板高度(uni-app 推荐 rpx 单位) |
| showBorder | Boolean | true | 是否显示边框 |
| showPadding | Boolean | true | 是否内边距 |
defaultValue 示例
// 省模式
defaultValue: [{ code: '440000000000', name: '广东省' }]
// 省市模式
defaultValue: [
{ code: '440000000000', name: '广东省' },
{ code: '440100000000', name: '广州市' }
]
// 省市区模式
defaultValue: [
{ code: '440000000000', name: '广东省' },
{ code: '440100000000', name: '广州市' },
{ code: '440105000000', name: '海珠区' }
]
// 也支持仅传递名称
const defaultAddress = ref(['陕西省','西安市','莲湖区'])
Events 事件
| 事件名 | 参数 | 说明 |
|---|---|---|
| confirm | address: Array | 点击"确定"按钮时触发,返回当前选中的地址数组 |
| change | address: Array | 选择器值变化时触发(与 confirm 返回格式相同) |
address 返回格式
[
{ code: '440000000000', name: '广东省' },
{ code: '440100000000', name: '广州市' },
{ code: '440105000000', name: '海珠区' }
]
完整示例
<template>
<view class="demo-container">
<moycL3addressGov
:level="3"
@confirm="onAddressConfirm"
@change="onAddressChange"
/>
<view class="result" v-if="selected">
<text>已选地址:{{ selectedText }}</text>
</view>
</view>
</template>
<script setup>
import { ref, computed } from 'vue'
import moycL3addressGov from '@/components/moycL3addressGov.vue'
const selected = ref([])
const selectedText = computed(() => {
return selected.value.map(item => item.name).join('/')
})
const onAddressConfirm = (address) => {
selected.value = address
console.log('确认的地址:', address)
}
const onAddressChange = (address) => {
console.log('地址变化:', address)
}
</script>
注意事项
微信小程序域名配置 若项目为微信小程序,需在 微信公众平台 -> 开发 -> 开发设置 -> 服务器域名 中添加合法请求域名: https://dmfw.mca.gov.cn
H5 跨域问题
国家接口未配置 CORS,H5 环境下会触发跨域错误。解决方案:
使用 uni-app 的 uniCloud 云函数转发请求
配置本地代理(开发环境)或使用 nginx 反向代理
接口依赖
组件依赖国家接口,请确保网络通畅。接口返回数据中,直辖市的 children 直接为区县(level=3),组件已做自动适配。
数据更新
国家数据会随国家行政区划调整更新,接口数据实时,无需手动维护。
性能优化
组件采用按需加载,仅请求必要数据,减轻小程序包体积和网络开销。
常见问题
Q:为什么直辖市只显示省和区,没有市?
A:直辖市的行政区划中不存在“市”这一级,组件已自动处理,跳过市级选择,直接展示区县。
Q:如何获取完整的地区代码(如用于提交表单)?
A:confirm 事件返回的对象中包含 code 字段(12位行政区划代码),可直接用于后端存储。
Q:可以支持乡镇/街道级吗?
A:目前接口支持四级查询(maxLevel 参数),可根据需要扩展组件,增加第四列。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 3
赞赏 0
下载 11612657
赞赏 1885
赞赏
京公网安备:11010802035340号