更新记录

1.0.2(2025-08-01) 下载此版本

1、在原支持数据源上增加支持全数据列表

2、添加树形id、pid、hasChild,更方便小伙伴使用

3、完善示例

4、修复数据变化页面未正确显示bug

1.0.1(2025-06-30) 下载此版本

修改源数据类型bug

调整组件样式

1.0.0(2025-06-30) 下载此版本

1、区划选择,支持树形静态数据、层级动态数据

2、支持树形子项字段、区划名字段、区划编号字段重定义

3、回传常用数据,方便小伙伴使用

查看更多

平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

uni-app x

Chrome Safari Android iOS 鸿蒙 微信小程序
5.0 12 -

其他

多语言 暗黑模式 宽屏模式
× ×

写在最前面

小伙伴在使用过程中遇到任何问题或发现功能不足的地方,欢迎随时留言反馈,您的宝贵意见将帮助我持续完善插件功能,在此衷心感谢您的支持与帮助!

sjx-area-select

该组件为uni_modules组件,下载导入后可以全局直接使用,无需在页面中引入、声明组件

Props

字段 类型 默认值 可选值 功能描述 更新时间
dataType Number 0 0|1|2 数据源类型:0-树形;1--列表;2--列表(懒加载) 2025-07-27
areaArr Array [] ~ 源数据 2025-06-30
requestData Array [] ~ 动态加载下一级数据时,下一级数据 2025-06-30
childsName String 'childs' ~ 树形结构子项字段 2025-06-30
areaName String 'areaName' ~ 区划名字段 2025-06-30
areaNumber String 'areaNumber' ~ 区划编号字段 2025-06-30
id String id ~ 源数据中id字段名 2025-07-27
pid String pid ~ 源数据中pid字段名 2025-07-27
hasChild String hasChild ~ 源数据中hasChild字段名,dataType为2时使用 2025-07-27

Events

内置点击tabs重新选择区划

事件名 默认值 功能描述 更新时间
areaClick ~ 区划点击事件,回传点击区划对象、当前区划名、当前区划编号、全区划名数组、是否是最后一项 2025-06-30

代码演示

页面代码

<template>
    <view style="padding: 10px;">
        <view class="show">{{areaName?`当前选择的区域名:${areaName};区划代码:${areaNumber};区域全名:${areaFullName}`:'请点击按钮选择区域'}}
        </view>
        <view class="item">
            <button type="primary" size="mini" @click="selectArea">动态选择区域</button>
            <view class="ensure" v-if="isShow"> <text>点击确定,选择当前区划</text> <button type="warn" size="mini"
                    @click="isShow=false">确定</button></view>
            <!-- dataType:2 懒加载数据 -->
            <sjx-area-select style="min-height: 100px;" v-if="isShow" :areaArr="firstArea" @areaClick='getArea'
                areaName="name" areaNumber="code" :dataType="2" :requestData="requestData" hasChild="hasChildss"
                id='temid'></sjx-area-select>
        </view>
        <view class="item">
            <button type="primary" size="mini" @click="selectAreaTree" style="margin-top: 10px;">静态选择区域</button>
            <view class="ensure" v-if="isShowStatic"> <text>点击确定,选择当前区划</text> <button type="warn" size="mini"
                    @click="isShowStatic=false">确定</button></view>
            <sjx-area-select v-if="isShowStatic" :areaArr="areaArr" @areaClick='getAreaTree' areaName="name"
                areaNumber="code" childsName="children"></sjx-area-select>
        </view>
        <view class="item">
            <button type="primary" size="mini" @click="selectAreaAllTree" style="margin-top: 10px;">静态全数据选择区域</button>
            <view class="ensure" v-if="isShowAll"> <text>点击确定,选择当前区划</text> <button type="warn" size="mini"
                    @click="isShowAll=false">确定</button></view>
            <sjx-area-select v-if="isShowAll" :areaArr="areaAllArr" :dataType="1" @areaClick='getAreaAllTree'
                areaName="name" areaNumber="code"></sjx-area-select>
        </view>
    </view>
</template>

动态选择区域

selectArea() {
    this.getFirstArea()
},
getFirstArea() {
    uni.showLoading({
        title: '加载中。。。'
    })
    setTimeout(() => {
        this.firstArea = []
        this.firstArea.push({
            temid: 1,
            name: '河南省',
            code: '410000',
            hasChildss: true
        })
        this.isShow = true
        uni.hideLoading()
    }, 1000)
}
/* item--当前项;areaName--当前区划名;areaNameArr--全区全名称数组;areaNumber--当前区划代码;isLeaf--是否是最后一级 */
getArea(item, areaName, areaNameArr, areaNumber, isLeaf) {
    this.areaName = areaName
    this.areaNumber = areaNumber
    this.areaFullName = areaNameArr.join('')
    if (item.childs && item.childs.length > 0) {
        return
    }
    if (isLeaf) {
        this.requestData = []
        this.isShow = false
    } else {
        /* 模拟接口请求 */
        setTimeout(() => {
            if (item.temid == 1) {
                this.requestData = [{
                    temid: 2,
                    name: '郑州市',
                    code: '410100',
                    hasChildss: true
                }, {
                    temid: 3,
                    name: '洛阳市',
                    code: '410300',
                    hasChildss: true
                }, {
                    temid: 4,
                    name: '平顶山市',
                    code: '410400',
                    hasChildss: false
                }]
            } else if (item.temid == 2) {
                this.requestData = [{
                    temid: 5,
                    name: '市辖区',
                    code: '410101',
                    hasChildss: false
                }, {
                    temid: 6,
                    name: '中原区',
                    code: '410102',
                    hasChildss: false
                }, {
                    temid: 7,
                    name: '二七区',
                    code: '410103',
                    hasChildss: false
                }]
            } else if (item.temid == 3) {
                this.requestData = [{
                    temid: 8,
                    name: '市辖区',
                    code: '410301',
                    hasChildss: false
                }, {
                    temid: 9,
                    name: '老城区',
                    code: '410302',
                    hasChildss: false
                }, {
                    temid: 10,
                    name: '西工区',
                    code: '410303',
                    hasChildss: false
                }]
            } else {
                this.requestData = []
                this.isShow = false
            }
        }, 1000)
    }
}

静态选择区域

selectAreaTree() {
    this.isShowStatic = true
},
/* item--当前项;areaName--当前区划名;areaNameArr--全区全名称数组;areaNumber--当前区划代码;isLeaf--是否是最后一级 */
getAreaTree(item, areaName, areaNameArr, areaNumber, isLeaf) {
    this.areaName = areaName
    this.areaNumber = areaNumber
    this.areaFullName = areaNameArr.join('')
    this.isShowStatic = !isLeaf
}

静态全数据选择区域

selectAreaAllTree() {
    this.isShowAll = true
},
getAreaAllTree(item, areaName, areaNameArr, areaNumber, isLeaf) {
    this.areaName = areaName
    this.areaNumber = areaNumber
    this.areaFullName = areaNameArr.join('')
    this.isShowAll = !isLeaf
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议