wot-design-uni
Version:
一个基于Vue3+TS开发的uni-app组件库,提供70+高质量组件,支持暗黑模式、国际化和自定义主题。
106 lines (99 loc) • 4.56 kB
text/typescript
import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props'
import type { FormItemRule } from '../wd-form/types'
export type SelectPickerType = 'checkbox' | 'radio'
export const selectPickerProps = {
...baseProps,
/** 选择器左侧文案 */
label: String,
/** 设置左侧标题宽度 */
labelWidth: makeStringProp('33%'),
/** 禁用 */
disabled: makeBooleanProp(false),
/** 只读 */
readonly: Boolean,
/** 选择器占位符 */
placeholder: String,
/** 弹出层标题 */
title: String,
/** 选择器的值靠右展示 */
alignRight: makeBooleanProp(false),
/** 是否为错误状态,错误状态时右侧内容为红色 */
error: makeBooleanProp(false),
/** 必填样式 */
required: makeBooleanProp(false),
/** 使用 label 插槽时设置该选项 */
useLabelSlot: makeBooleanProp(false),
/** 使用默认插槽时设置该选项 */
useDefaultSlot: makeBooleanProp(false),
/** 设置选择器大小 */
size: String,
/** 选中的颜色(单/复选框) */
checkedColor: String,
/** 最小选中的数量(仅在复选框类型下生效,`type`类型为`checkbox`) */
min: makeNumberProp(0),
/** 最大选中的数量,0 为无限数量,默认为 0(仅在复选框类型下生效,`type`类型为`checkbox`) */
max: makeNumberProp(0),
/** 设置 picker 内部的选项组尺寸大小 (单/复选框) */
selectSize: String,
/** 加载中 */
loading: makeBooleanProp(false),
/** 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 */
loadingColor: makeStringProp('#4D80F0'),
/** 点击遮罩是否关闭 */
closeOnClickModal: makeBooleanProp(true),
/** 选中项,`type`类型为`checkbox`时,类型为 array;`type`为`radio` 时 ,类型为 number / boolean / string */
modelValue: makeRequiredProp([String, Number, Boolean, Array] as PropType<string | number | boolean | (string | number | boolean)[]>),
/** 选择器数据,一维数组 */
columns: makeArrayProp<Record<string, any>>(),
/** 单复选选择器类型 */
type: makeStringProp<SelectPickerType>('checkbox'),
/** 选项对象中,value 对应的 key */
valueKey: makeStringProp('value'),
/** 选项对象中,展示的文本对应的 key */
labelKey: makeStringProp('label'),
/** 确认按钮文案 */
confirmButtonText: String,
/** 自定义展示文案的格式化函数,返回一个字符串 */
displayFormat: Function as PropType<SelectPickerDisplayFormat>,
/** 确定前校验函数,接收 (value, resolve) 参数,通过 resolve 继续执行 picker,resolve 接收 1 个 boolean 参数 */
beforeConfirm: Function as PropType<SelectPickerBeforeConfirm>,
/** 弹窗层级 */
zIndex: makeNumberProp(15),
/** 弹出面板是否设置底部安全距离(iphone X 类型的机型) */
safeAreaInsetBottom: makeBooleanProp(true),
/** 可搜索(目前只支持本地搜索) */
filterable: makeBooleanProp(false),
/** 搜索框占位符 */
filterPlaceholder: String,
/** 是否超出隐藏 */
ellipsis: makeBooleanProp(false),
/** 重新打开是否滚动到选中项 */
scrollIntoView: makeBooleanProp(true),
/** 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 */
prop: String,
/** 表单验证规则,结合`wd-form`组件使用 */
rules: makeArrayProp<FormItemRule>(),
/** 自定义内容样式类 */
customContentClass: makeStringProp(''),
/** 自定义标签样式类 */
customLabelClass: makeStringProp(''),
/** 自定义值样式类 */
customValueClass: makeStringProp(''),
/** 是否显示确认按钮(radio类型生效),默认值为:true */
showConfirm: makeBooleanProp(true),
/**
* 显示清空按钮
*/
clearable: makeBooleanProp(false)
}
export type SelectPickerProps = ExtractPropTypes<typeof selectPickerProps>
export type SelectPickerDisplayFormat = (items: string | number | boolean | (string | number | boolean)[], columns: Record<string, any>[]) => string
export type SelectPickerBeforeConfirm = (value: string | number | boolean | (string | number | boolean)[], resolve: (isPass: boolean) => void) => void
export type SelectPickerExpose = {
// 打开picker弹框
open: () => void
// 关闭picker弹框
close: () => void
}
export type SelectPickerInstance = ComponentPublicInstance<SelectPickerExpose, SelectPickerProps>