Appearance
引入组件
局部引入
ts
// parent.vue
const FPicker = defineAsyncComponent(() => import('@/components/formaui/f-picker/f-picker.vue'))基础用法
通过
v-model控制显隐,items使用label/value/children结构。
html
<f-button width="200rpx" margin="24rpx auto" @click="show = true">单列选择</f-button>
<f-picker v-model="show" :layer="1" :items="items" title="请选择" is-radius @change="onChange" @cancel="onCancel" />ts
import { ref } from 'vue'
import type { FPickerChangeDetail, FPickerItem } from '@/components/formaui/f-picker/types'
const show = ref(false)
const items = ref<FPickerItem[]>([
{ label: '中国', value: 'CN' },
{ label: '美国', value: 'US' },
{ label: '日本', value: 'JP' }
])
const onChange = (detail: FPickerChangeDetail) => {
uni.showToast({ title: detail.result, icon: 'none' })
}
const onCancel = () => {
uni.showToast({ title: '取消选择', icon: 'none' })
}多级联动
layer属性:数据层级(默认1),可传入[1、2、3]
html
<f-picker v-model="show" :layer="2" :items="cityItems" title="请选择省市" @change="onChange" />ts
const cityItems: FPickerItem[] = [
{
label: '广东省',
value: 'gd',
children: [
{ label: '广州市', value: 'gz' },
{ label: '深圳市', value: 'sz' }
]
},
{
label: '浙江省',
value: 'zj',
children: [
{ label: '杭州市', value: 'hz' },
{ label: '宁波市', value: 'nb' }
]
}
]三列示例:
html
<f-picker v-model="show" :layer="3" :items="districtItems" title="请选择省市区" @change="onChange" />设置默认值
defaultLabels属性:按label匹配的默认选中文本集合
html
<f-picker v-model="show" :layer="2" :items="cityItems" :default-labels="['浙江省', '宁波市']" @change="onChange" />圆角与样式
isRadius属性:顶部圆角(默认false)
html
<f-picker v-model="show" :items="items" is-radius />
confirmColor/cancelColor/title等头部样式
html
<f-picker
v-model="show"
:items="items"
title="请选择"
confirm-color="#16479D"
cancel-color="#8d94a6"
title-size="34rpx" />插槽
| 名称 | 说明 |
|---|---|
| - | - |
属性
| 名称 | 类型 | 说明 | 默认值 |
|---|---|---|---|
v-model | boolean | 是否显示 | false |
layer | number | string | 数据层级,可传入[1、2、3] | 1 |
items | FPickerItem[] | 选项数据 | [] |
defaultLabels | string[] | 默认选中项文本集合(按 label) | [] |
maskStyle | string | picker-view 蒙层样式 | - |
isRadius | boolean | 是否圆角 | false |
headerBgColor | string | 头部背景色 | #FFFFFF |
title | string | 标题 | - |
titleSize | string | 标题字体大小 | 34rpx |
titleColor | string | 标题字体颜色 | #0b1d4a |
confirmText | string | 确定按钮文字 | 确定 |
confirmColor | string | 确定按钮颜色 | 主题主色 |
cancelText | string | 取消按钮文字 | 取消 |
cancelColor | string | 取消按钮颜色 | #8d94a6 |
btnSize | string | 按钮字体大小 | 28rpx |
isBold | boolean | 按钮是否加粗 | false |
bgColor | string | 内容区背景色 | #FFFFFF |
color | string | 选项文字颜色 | #0b1d4a |
fontSize | string | 选项文字大小 | 16px |
closeOnClickMask | boolean | 点击遮罩是否关闭 | true |
params | number | string | 自定义参数,事件回调带回 | 0 |
zIndex | number | z-index | 998 |
FPickerItem
| 名称 | 类型 | 说明 | 默认值 |
|---|---|---|---|
label | string | 显示文本 | - |
value | string | number | 选项值 | - |
children | FPickerItem[] | 子级选项(多级联动) | - |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
change | 点击确定时触发 | { labels, values, index, result, params }(见下方) |
cancel | 取消或点击遮罩关闭时触发 | { params } |
pickstart | 开始滚动时触发 | { params } |
pickend | 滚动结束时触发(微信小程序) | { params } |
change 回调字段
| 字段 | 类型 | 说明 |
|---|---|---|
labels | string | string[] | 选中文本;单列为 string,多列为数组 |
values | string | number | (string | number)[] | 选中值;单列为单值,多列为数组 |
index | number[] | 各列选中索引 |
result | string | 文本拼接结果 |
params | number | string | 自定义参数 |
方法
| 方法名 | 说明 | 传入参数 |
|---|---|---|
open | 打开选择器(可选) | - |
close | 关闭选择器(可选) | - |
可通过 ref 调用 open / close,也可直接使用 v-model。
