Skip to content

Picker 滚动选择

底部滚轮多列滑动选择器,支持单列选择、多列独立联动与多层级树状级联数据选择。


代码示例

1. 单列选择 (Single Column)

传入一维数组 columns 作为选择源,通过 v-model:show 控制弹出选择框。

vue
<template>
  <mu-button type="primary" block @click="show = true">选择学历</mu-button>
  
  <mu-picker
    v-model:show="show"
    title="选择最高学历"
    :columns="columns"
    @confirm="handleConfirm"
  />
</template>

<script setup>
import { ref } from 'vue'
const show = ref(false)
const columns = ['高中', '大专', '本科', '硕士', '博士']

const handleConfirm = (res) => {
  console.log('选中项:', res.items)
}
</script>

2. 多列独立选择 (Multi Column)

传入二维数组 columns 实现多列独立滚轮组合选择。

vue
<template>
  <mu-picker
    v-model:show="show"
    title="选择预约日期与时间"
    :columns="multiColumns"
    @confirm="handleConfirm"
  />
</template>

<script setup>
import { ref } from 'vue'
const show = ref(false)
const multiColumns = [
  ['周一', '周二', '周三', '周四', '周五'],
  ['上午 09:00', '下午 14:00', '晚上 19:00']
]
</script>

3. 树状级联选择 (Cascade Column)

传入包含 children 的树状结构数组,组件将自动识别并动态进行多列级联联动。

vue
<template>
  <mu-picker
    v-model:show="show"
    title="选择所在省市"
    :columns="cascadeColumns"
    @confirm="handleConfirm"
  />
</template>

<script setup>
import { ref } from 'vue'
const show = ref(false)
const cascadeColumns = [
  {
    label: '浙江省',
    children: [
      { label: '杭州市', children: [{ label: '西湖区' }, { label: '余杭区' }] },
      { label: '宁波市', children: [{ label: '海曙区' }, { label: '鄞州区' }] }
    ]
  }
]
</script>

API 属性说明 (Props)

参数名说明类型可选值默认值
v-model:show / show控制选择器底部弹窗的显示与隐藏Booleantrue | falsefalse
v-model / modelValue当前选中的 values 索引或标识数组Array-[]
columns选择器的数据源数组 (一维/二维/树状)Array-[]
title顶部工具栏居中标题String-'请选择'
labelKey自定义 label 属性名String-'label'
valueKey自定义 value 属性名String-'value'
childrenKey级联树状结构的子列表键名String-'children'

事件说明 (Events)

事件名说明回调参数
update:showv-model:show 双向绑定更新(show: boolean)
update:modelValue / update:valuev-model 双向绑定更新(value: Array)
confirm点击确定按钮时触发({ indexs, items, values })
change滚动列发生滑动变化时触发({ indexs, items, values })
cancel点击取消按钮或遮罩时触发-
close弹窗动画完全关闭后触发-

基于 MIT 协议开源发行

H5 模拟器 (picker)☀️🔄