更新记录

V2.0.0(2025-08-13)

新增了多选,修复搜索时下拉选项重叠错位的问题


平台兼容性

uni-app(4.07)

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

uni-app x(4.07)

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

其他

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

README ‑ laybot-selects
支持单选、多选、本地搜索、虚拟滚动的下拉选择组件(uni-modules 版)


一、安装

HBuilderX 3.6+

  1. 打开“插件市场”→ 搜索“laybot-selects”→ 一键导入
    (自动落到 uni_modules/laybot-selects/…

npm / cli

# 在项目根目录
npm i laybot-selects-uniapp --save
# or
pnpm add laybot-selects-uniapp

安装后确保目录结构为

uni_modules/
└─ laybot-selects/
   └─ components/laybot-selects/laybot-selects.vue

二、快速上手

<template>
  <view class="demo">
    <!-- 单选(默认) -->
    <laybot-selects
      v-model="city"
      :list="cityList"
      placeholder="请选择城市" />

    <!-- 多选 + 本地过滤 -->
    <laybot-selects
      v-model="hobby"
      multiple
      enable-local-filter
      :list="hobbyList"
      placeholder="选择爱好"
      @confirm="handleConfirm" />
  </view>
</template>

<script setup>
import larrySelects from '@/uni_modules/laybot-selects/components/laybot-selects/laybot-selects.vue'

const city  = ref('')
const hobby = ref([])

const cityList = [
  { value: 'bj', label: '北京' },
  { value: 'sh', label: '上海' },
  // …
]

const hobbyList = [
  { value: 1, label: '篮球' },
  { value: 2, label: '跑步' },
  { value: 3, label: '旅游' },
]

const handleConfirm = list => {
  console.log('选择结果', list)
}
</script>

三、Props

参数 说明 类型 / 默认
modelValue / v-model 绑定的值(单选:字符串/数字,多选:数组)
list 选项数组 Array\<{ value,label,… }>
valueKey value 字段名 String 'value'
labelKey label 字段名 String 'label'
multiple 开启多选 Boolean false
showSearch 是否显示搜索框 Boolean true
enableLocalFilter 组件内部用 includes 做本地过滤 Boolean false
showSearchBtn 搜索按钮模式(自行触发 @search) Boolean false
placeholder 输入框占位符 String
searchPlaceholder 搜索框占位符 String
selectColor 勾选时图标颜色 String #0081ff
disabled 禁用 Boolean
height 外部输入框高度,例如 '38px' String
textAlign 外部输入框文字对齐 'left'/'center' String

更多样式相关 prop 参见 component.json 注释。


四、Events

事件名 触发时机 回调参数
update:modelValue 选中 / 取消选中 / 重置 / 确认 新 value
change 单选时每次点击即关闭并触发 选中 item
confirm 多选点击“确定” 选中 item 数组
search 输入框内容变化 / 点击搜索按钮 关键词
openDeepScroll 弹窗打开
closeDeepScroll 弹窗关闭

五、Slots

暂无。所有可定制项均通过 props 样式或覆盖 CSS 变量实现。

六、样式定制

组件内部使用 SCSS 变量,可全局覆盖:

$primary : #0081ff;   // 选中主色
$text    : #333333;   // 文本色
$border  : #e6e6e6;   // 描边色

在项目 uni.scss / App.vue 顶部重新声明同名变量即可。

另外,可通过 inputStyle prop 精准传入外部输入框样式,
:input-style="{ background:'#fafafa',border:'1px solid #eee' }"

七、API & 方法

组件无公开实例方法,所有交互通过 props 与事件完成。
若需主动清空,可在父组件直接修改 v-model 绑定值为 ''[]

八、常见问题

Q1. 列表数据很多会卡吗?
A:内部使用虚拟滚动(仅渲染可视区),测试 5,000 条依旧流畅。

Q2. 如何实现远程搜索?
A:把 enable-local-filter 设为 false,监听 @search, 在回调里发请求 → 更新 list 即可。

Q3. v-model 需要数组还是字符串?
A:multiple=false → 字符串/数字;multiple → 数组。

九、更新日志

详见 uni_modules/laybot-selects/changelog.md

十、许可证

MIT © 2025 Larry

隐私、权限声明

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

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

插件不采集任何数据

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

暂无用户评论。