更新记录

1.0(2024-11-14)

  1. 支持省市区县级联选择器,可配置是否显示县级数据 2.支持单选、多选 3.支持省市区县异步加载 4.支持一次性数据加载

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.7.11 ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

在线预览地址

地址: https://lusz.top/area/

功能介绍

  1. 支持省市区县级联选择器,可配置是否显示县级数据 2.支持单选、多选 3.支持省市区县异步加载 4.支持一次性数据加载 5.数据量多不卡顿

    使用示例

<areaTree ref="tree" :multiple="true" :async-load="true" :getAreaData="getAreaData"  :hasTown="true" ></areaTree>

参数说明

参数 类型 是否必填 默认值 说明
multiple Boolean true 是否开启多选
asyncLoad Boolean false 是否开启异步加载
scrollHeight string 列表滚动的高度,一般是弹窗选择时需要传这个
hasTown Boolean true 是否开启县级数据
getAreaData function - 获取数据方法,方法需return或promise.resolve一组数据 ,详情看下面介绍

选中值数据字段说明

let values = [{
    cityId,
    cityName,
    provinceId,
    provinceName,
    countyId,
    countyName,
    townId: item.id,
    townName: item.name
}]
参数 类型 说明
provinceId Number 选中省ID(回显必传)
provinceName string 省名称
cityId Number 选中市ID(回显必传)
cityName string 市名称
countyId Number 选中区ID(回显必传)
countyName string 区名称
townId Number 选中镇ID(回显必传)
townName string 镇名称

必传getAreaData方法说明

getAreaData事件callback参数 参数 类型 说明
provinceCode Number 筛选的省ID
cityCode Number 筛选的市ID
countyCode Number 筛选的区ID
all Number 1是代表查询全部数据,0代表只差一级数据
hasTown Number 是否查县级数据

需返回一个Promise或者return一个值,如省列表,市列表

getAreaData(data){
    return new Promise((resolve) => {
        uni.request({
            url: ',
            method: 'GET',
            data,
            success: (res) => {
                resolve(res.data)
            }
        })
    })
}

接口数据格式要求

    [
        {
            name: '一级',
            id: '1',
            children:[]
        }
    ]

获取选中的值

    let value = this.$refs.tree.checkValue

回显选中的值

    this.$refs.tree.setValue(values)

将继续持续维护和开发,如需定制开发可联系我v:122720267

完整示例代码说明:

<template>
    <view>
        <areaTree ref="tree" :multiple="!!Number(selecType)" :async-load="!!Number(sync)" 
            :getAreaData="getAreaData"  :hasTown="!!Number(hasTown)" ></areaTree>
        <view class="fixed-bottom">
            <view class="clear" @click="clears">
                清除
            </view>
            <view class="confirm" @click="confirm">
                确定选择
            </view>
        </view>
    </view>
</template>

<script>
    import areaTree from '@/components/xiaolu-area-tree/index.vue'
    import {getApi} from '../api.js'
    export default {
        components: {
            areaTree
        },
        data() {
            return {
                values: [],
                selecType: 1,
                sync: 0,
                hasTown:0
            };
        },
        onLoad({values}) {
            this.$nextTick(() => {
                this.$refs.tree.setValue(values)
            })
        },
        methods: {
            clears() {
                this.values = []
                this.$refs.tree.values = []
            },
            getAreaData(query) {
                return new Promise((resolve) => {
                    uni.request({
                        url: '',
                        method: 'GET',
                        data:query,
                        success: (res) => {
                            resolve(res.data)
                        }
                    })
                })
            },
        }
    }
</script>

完整示例代码说明(弹窗模式):

  1. 在页面引用组件,并注册
import areaTree from '@/components/xiaolu-area-tree/index.vue'

添加组件使用

<template>
    <view class="content">
        <uniPopup background-color="#fff" ref="popup" type="bottom">
            <view class="center">
                选择地区
            </view>
            <view>
                <areaTree v-if="show" :hasTown="hasTown" :getAreaData="getAreaData" scrollHeight="60vh" ref="tree">
                </areaTree>
            </view>
            <view class="fixed-bottom">
                <view class="clear" @click="clears">
                    清除
                </view>
                <view class="confirm" @click="confirm">
                    确定选择
                </view>
            </view>
        </uniPopup>
    </view>
</template>

<script>
    import areaTree from '@/components/xiaolu-area-tree/index.vue'
    import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue';
    import { getApi } from '../api.js'
    export default {
        components: {
            areaTree,
            uniPopup
        },
        data() {
            return {
                values: [],
                hasTown: false,
                show:false
            };
        },
        methods: {
            getAreaData() {
                return getApi({all:1,hasTown:0})
            },
            showTree() {
                this.show = true
                this.$refs.popup.open('bottom')
            },
            clears() {
                this.values = []
                this.$refs.tree.values = []
            },
            confirm() {
                this.show = false;
                console.log(this.$refs.tree.values, this.$refs.tree.isAll ? '全部' : '')
                this.values = this.$refs.tree.values
                this.$refs.popup.close()
            }
        }
    }
</script>

隐私、权限声明

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

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

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

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问