基于uView组件库的二次封装多功能下拉组件

github地址:https://github.com/1205093639/uView-select

放入项目中的components中使用 demo : <mySelect :list="下拉列表" v-model="绑定值" type="action"></mySelect>

效果图

action操作菜单

在这里插入图片描述

picker滚动选择框

在这里插入图片描述

checkbox多选

在这里插入图片描述

search搜索选择框

在这里插入图片描述

scan扫码验证框

在这里插入图片描述

属性事件

属性 说明
disabled 是否禁用
scanAbled 是否能够扫码
clearabled 是否可以清空
getFirst 是否得到数据后自动选取第一条
placeholder 占位文字
apiName 获取搜索框数据或者验证扫码的方法名
labelName 展示的值对应字段名
valueName 唯一值对应字段名
titleName 额外值值对应字段名
type action:操作菜单 picker:滚动选择框 checkbox:多选 search:搜索选择框 scan:扫码验证框
list 选项数组
value 对应item
otherData 接口需要的其他数据
事件 说明
confirm 清空和确认选择事件
clear 清空事件
open 打开事件
close 关闭事件

源码

记得searchPopup组件也需要引入 基于uView组件库

<template>
    <div class='mySelect'>
        <u-input :placeholder="placeholder" :value="Array.isArray(value[labelName])?value[labelName].toString():value[labelName] " :disabled="disabled" suffixIcon="arrow-down" readonly @click.native="showTpye">
            <u-icon slot="suffix" name="arrow-down"></u-icon>
            <u-icon slot="prefix" v-show="value[labelName]&&!disabled&&clearabled&&type!=='checkbox'" name="close-circle" @click.stop.native="clear"></u-icon>
        </u-input>
        <!-- 操作菜单 -->
        <u-action-sheet @select="actionConfirm" :actions="list" cancelText='取消' :show="actionShow" closeOnClickOverlay @close="actionShow=false" :round="10"></u-action-sheet>
        <!-- 滚动选择框 -->
        <u-picker :defaultIndex="[list.findIndex(e=>e[valueName]==value[valueName])==-1?0:list.findIndex(e=>e[valueName]==value[valueName])]" @confirm="pickerConfirm" :show="pickerShow" :keyName="labelName" closeOnClickOverlay @close="pickerShow=false" @cancel="pickerShow=false" :columns="[list]"></u-picker>
        <!-- 多选 -->
        <u-popup :show="checkboxShow" @close="checkboxShow=false" :round="10" closeOnClickOverlay>
            <div class="checkbox">
                <u-checkbox-group size='27' borderBottom iconSize='18' iconPlacement='right' v-model="checkedList" placement="column">
                    <u-checkbox :customStyle="{marginBottom: '8px'}" :checked="checkedList.some(e=>e[labelName]==item[labelName])" v-for="(item, index) in list" :key="index" :label="item[labelName]" :name="item">
                    </u-checkbox>
                </u-checkbox-group>
                <div class="btnList">
                    <u-button class="btn" type="primary" color="#909399" text="清空选择" @click="checkedList=[]"></u-button>
                    <u-button type="primary" color="#0ab99c" text="确定" @click="checkboxConfirm"></u-button>
                </div>
            <<
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 uview-ui 多列选择器组件进行二次封装的示例: ``` <template> <view> <u-popup v-model="showPicker" position="bottom" :overlay="true"> <view> <u-picker-view :value="selectedValues" @change="onPickerChange"> <u-picker-view-column v-for="(column, index) in columns" :key="index"> <view v-for="(item, i) in column" :key="i"> <u-checkbox v-model="item.checked"> {{ item.label }} </u-checkbox> </view> </u-picker-view-column> </u-picker-view> <u-button type="primary" @click="confirm">确定</u-button> </view> </u-popup> <u-input :value="selectedLabels.join(',')" @click="showPicker = true" disabled></u-input> </view> </template> <script> export default { props: { columns: { type: Array, default: () => [] } }, data() { return { showPicker: false, selectedValues: [], selectedLabels: [] } }, mounted() { this.initSelectedValues() }, methods: { initSelectedValues() { this.selectedValues = this.columns.map(column => { return column.findIndex(item => item.checked) }) this.updateSelectedLabels() }, onPickerChange(e) { this.selectedValues = e.detail.value this.updateSelectedLabels() }, updateSelectedLabels() { this.selectedLabels = this.selectedValues.map((value, index) => { return this.columns[index][value].label }) }, confirm() { this.showPicker = false this.$emit('change', this.selectedLabels) } } } </script> ``` 在这个示例中,我们使用了 u-popup、u-picker-view、u-picker-view-column 和 u-checkbox 组件来构建一个多列联动多选选择器。它接收一个 columns 数组作为参数,每个元素代表一列数据,每个元素包含 label 和 checked 两个属性,分别表示选项的文本和是否被选中。通过 u-checkbox 组件来实现多选功能。 组件内部使用了 selectedValues 数组来存储每列选中的值的索引,使用 selectedLabels 数组来存储每列选中的值的文本。在初始化和选择变化时,通过 updateSelectedLabels 方法来更新 selectedLabels 数组。在点击确定按钮时,通过 emit 方法将选中的值传递给父组件。 这是一个简单的示例,你可以根据自己的业务需求进行修改和扩展。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值