更新记录

1.0.2(2025-03-10) 下载此版本

修复一些样式问题 添加回显时选中对应选项的样式

1.0.1(2025-03-10) 下载此版本

修复一些样式问题 添加回显时选中对应选项的样式

1.0.0(2025-03-08) 下载此版本

此版本不支持Uniapp X 使用Vue3编写 Vue2不确定是否支持 请自行测试

查看更多

平台兼容性

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

本组件依赖uni-popup / uni-icons 如有需要请自行替换

组件只支持异步加载 不支持JSON文件 主要使用场景为地区选择器,也可用于其他类型的上下级选择器

Props

名称 类型 说明 默认值
title string 选择器标题 请选择
labelKey string 数据label键 label
valueKey string 数据value键 value
activeColor string 激活选中的颜色 #3c9cff
load Function 查询下级数据的钩子,没有下级数据请返回undefind,将触发change回调 -
defaultLoad Function 默认数据回显钩子,自定义加载数据后return返回给组件 -

Event

事件名 说明 回调参数
close 点击蒙版关闭或点击关闭按钮关闭时触发
change 选择完成后触发 [any]:已选择的全部数据

示例

<template>
    <view style="padding: 20px">
        <xsd-areapicker :load="areaLoad" labelKey="name" valueKey="id" activeColor="#A7F000" :defaultLoad="defaultLoad" @change="areaChange">
            <view style="border: 1px solid #ddd; padding: 20rpx;">
                {{ changeLabel || '请选择' }}
            </view>
        </xsd-areapicker>
        <view>
            已选择的数据Label1:<br>{{ changeLabel }}
        </view>
        <view>
            已选择的数据Value1:<br>{{ changeValue }}
        </view>

        <xsd-areapicker :load="areaLoad" labelKey="name" valueKey="id" activeColor="#000000" @change="areaChange1">
            <view style="border: 1px solid #ddd; padding: 20rpx;">
                {{ changeLabel1 || '请选择' }}
            </view>
        </xsd-areapicker>
        <view>
            已选择的数据Label1:<br>{{ changeLabel1 }}
        </view>
        <view>
            已选择的数据Value1:<br>{{ changeValue1 }}
        </view>
    </view>
</template>

<script lang="ts" setup>
    import { ref } from 'vue';

    const changeLabel = ref('辽宁省1大连市1区县1街道1五级1');
    const changeValue = ref<string[]>(['1', '11', '111', '1111', '11111']);

    const changeLabel1 = ref('');
    const changeValue1 = ref<string[]>([]);

    type DataType = {
        id : string;
        name : string;
    }

    const loadApi = async (e ?: DataType) => {
        return new Promise((reslove) => {
            setTimeout(() => {
                console.log(e);
                if (!e) {
                    reslove({
                        key: '请选择省份/地区',
                        list: [{ id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }, { id: '1', name: '辽宁省1' }, { id: '2', name: '辽宁省2' }, { id: '3', name: '辽宁省3' }, { id: '4', name: '辽宁省4' }, { id: '5', name: '辽宁省5' }]
                    })
                    return;
                }

                if (e!.id.length === 1) {
                    reslove({
                        key: '请选择城市',
                        list: [{ id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }, { id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }, { id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }, { id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }, { id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }, { id: '11', name: '大连市1' }, { id: '12', name: '大连市2' }, { id: '13', name: '大连市3' }, { id: '14', name: '大连市4' }, { id: '15', name: '大连市5' }]
                    })
                    return;
                }

                if (e!.id.length === 2) {
                    reslove({
                        key: '请选择区县',
                        list: [{ id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }, { id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }, { id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }, { id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }, { id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }, { id: '111', name: '区县1' }, { id: '112', name: '区县2' }, { id: '113', name: '区县3' }, { id: '114', name: '区县4' }, { id: '115', name: '区县5' }]
                    })
                    return;
                }

                if (e!.id.length === 3) {
                    reslove({
                        key: '请选择街道',
                        list: [{ id: '1111', name: '街道1' }, { id: '1112', name: '街道2' }, { id: '1113', name: '街道3' }, { id: '1114', name: '街道4' }, { id: '1115', name: '街道5' }, { id: '1111', name: '街道1' }, { id: '1112', name: '街道2' }, { id: '1113', name: '街道3' }, { id: '1114', name: '街道4' }, { id: '1115', name: '街道5' }, { id: '1111', name: '街道1' }, { id: '1112', name: '街道2' }, { id: '1113', name: '街道3' }, { id: '1114', name: '街道4' }, { id: '1115', name: '街道5' }, { id: '1111', name: '街道1' }, { id: '1112', name: '街道2' }, { id: '1113', name: '街道3' }, { id: '1114', name: '街道4' }, { id: '1115', name: '街道5' }, { id: '1111', name: '街道1' }, { id: '1112', name: '街道2' }, { id: '1113', name: '街道3' }, { id: '1114', name: '街道4' }, { id: '1115', name: '街道5' }]
                    })
                    return;
                }

                if (e!.id.length === 4) {
                    reslove({
                        key: '请选择五级',
                        list: [{ id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }, { id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }, { id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }, { id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }, { id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }, { id: '11111', name: '五级1' }, { id: '11112', name: '五级2' }, { id: '11113', name: '五级3' }, { id: '11114', name: '五级4' }, { id: '11115', name: '五级5' }]
                    })
                    return;
                }

                //  没有下级数据了
                reslove(undefined);
            }, 100);
        })
    }

    const areaLoad = async (e ?: DataType) => {
        return await loadApi(e);
    }

    const areaChange = (e : DataType[]) => {
        changeValue.value = [];
        changeLabel.value = "";
        e.forEach(a => {
            changeValue.value.push(a.id);
            changeLabel.value = changeLabel.value += a.name;
        })
    }

    const areaChange1 = (e : DataType[]) => {
        changeValue1.value = [];
        changeLabel1.value = "";
        e.forEach(a => {
            changeValue1.value.push(a.id);
            changeLabel1.value = changeLabel.value += a.name;
        })
    }

    const defaultLoad = () => {
        return [{ id: '1', name: '辽宁省1' }, { id: '11', name: '大连市1' }, { id: '111', name: '区县1' }, { id: '1111', name: '街道1' }, { id: '11111', name: '五级1' }];
    }
</script>

<style>

</style>

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。

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