更新记录

1.0.0(2024-12-05) 下载此版本

初始化版本


平台兼容性

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

欢迎使用 twk-multicolumn-selector 多列选择器

初心:致力于友好地解决懒加载数据的回显问题

props (组件属性)

属性 类型 默认值 是否必填 备注
pickerTitle String '' 标题
cancelText String '取消' 取消按钮文本
confirmText String '完成' 确认按钮文字
confirmText String '40vh' 自定义高度(必须带单位)
pickerType String 'defautPicker' 选择器类型(用于唯一标识选择器)
selectItem Array [] 已选择的选项(用于回显且用于生成所需数据) 示例:要有两级数据时填[{ valueKey(健一定要与下方valueKey的值一致,才能回显):'' },{ valueKey:'' }]
valueKey String '' 健(用于唯一标识每一个选项的字段名)示例:比如valueKey为name时,selectItem就要为[{name:''},{name:''}]
showKey String '' 健(用于展示的字段名称)

组件事件

事件 事件内容
@cancelModel 取消回调
@confirmModel 确认回调
@columnChange 滑动列回调

ref 事件

事件 事件内容
PickerDisplayControlFun() 控制组件显示和隐藏

使用代码示例

<template>
    <view class="content">
        <view class="title">多列选择器(懒加载)</view>
        <view class="desc">致力于友好地解决回显问题</view>
        <view class="item">
            <view class="label">地区</view>
            <view class="selector" @click="openPickerFun">
                <twk-multicolumn-selector
                    ref="ref"
                    pickerTitle="地区"
                    pickerType="地区"
                    :customHeight="customHeight"
                    :selectItem="[ areaInfo.province, areaInfo.city ]"
                    @columnChange='bindMultiPickerColumnChange'
                    valueKey='name'
                    showKey='name'
                    @confirmModel="confirmPickerFun">
                    <view class="text-default" v-if="!areaInfo.province.name && !areaInfo.city.name">请选择地区</view>
                    <view v-else>{{`${areaInfo.province.name}${areaInfo.city.name?'-'+areaInfo.city.name: ''}`}}</view>
                </twk-multicolumn-selector>
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                customHeight: '30vh', // 自定义高度
                areaInfo: {
                    province: { name: '河北省' }, // 省
                    city: { name: '邯郸市' }, // 市
                },
                purchaseAge: '请选择地区'
            }
        },
        onShow() {
            // #ifdef MP-WEIXIN
                    this.customHeight = '40vh'
            // #endif
        },
        methods: {
            // 打开选择器方法
            openPickerFun(){
                this.$refs.ref.PickerDisplayControlFun(true);
            },
            // 阿里云接口 省  http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/100000_province.json
            // 阿里云接口 市  http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/510000_city.json
            // 阿里云接口 区  http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/511800_district.json
            // 滑动列方法
            bindMultiPickerColumnChange(changeData){
                if(changeData.colIndex < 0){
                    // 获取省数据
                    uni.request({
                        url:'http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/100000_province.json',
                        method:'GET',
                        complete: (res) => {
                            changeData.resolve(res.data.rows);
                        }
                    })
                }else{
                    // 控制最多几列数据
                    if(changeData.colIndex == 1) return;
                    // 获取市数据
                    uni.request({
                        url:`http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/${changeData.selectedItem.adcode}_city.json`,
                        method:'GET',
                        complete: (res) => {
                            changeData.resolve(res.data.rows);
                            changeData.colIndex == 0 && changeData.finish();
                        }
                    })
                }
            },
            // 确定方法
            confirmPickerFun(confirmModel){
                const describeForNameMap = {
                    '地区': () => {
                        this.areaInfo.province = confirmModel.data.value[0];
                        this.areaInfo.city = confirmModel.data.value[1];
                    }
                };
                describeForNameMap[confirmModel.pickerName] ? describeForNameMap[confirmModel.pickerName]() : console.error(`未找到<${confirmModel.pickerName}>对应事件`);
            },
        }
    }
</script>

<style lang="scss" scoped>
    .content {
        padding: 40rpx;
        .title{
            font-size: 18px;
            margin-bottom: 10px;
            color: gray;
        }
        .desc{
            font-size: 13px;
            margin-bottom: 10px;
            color: gray;
        }
        .item{
            height: 50px;
            border-bottom: 1px solid #ccc;
            display: flex;
            align-items: center;
            box-sizing: border-box;
            .selector{
                padding-left: 20px;
                flex: 1;
                .text-default{
                    color: gray;
                }
            }
        }
    }
</style>

twk-multicolumn-selector将会持续更新,欢迎大家踊跃提出宝贵建议;

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。

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