UNPKG

wot-design-uni

Version:

一个基于Vue3+TS开发的uni-app组件库,提供70+高质量组件,支持暗黑模式、国际化和自定义主题。

124 lines (112 loc) 4.08 kB
import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' import { baseProps, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' export type DateTimeType = 'date' | 'year-month' | 'time' | 'datetime' | 'year' /** * @description 根据传入的值和类型,获取当前的选项数组,便于传入 pickerView * @param value * @param type picker类型 * @return {Array} pickerValue */ export function getPickerValue(value: string | number, type: DateTimeType) { const values: number[] = [] const date = new Date(value) if (type === 'time') { const pair = String(value).split(':') values.push(parseInt(pair[0]), parseInt(pair[1])) } else { values.push(date.getFullYear(), date.getMonth() + 1) if (type === 'date') { values.push(date.getDate()) } else if (type === 'datetime') { values.push(date.getDate(), date.getHours(), date.getMinutes()) } } return values } export const datetimePickerViewProps = { ...baseProps, /** * 选中项,当 type 为 time 时,类型为字符串,否则为 时间戳 */ modelValue: makeRequiredProp([String, Number]), /** * 加载中 */ loading: makeBooleanProp(false), /** * 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 */ loadingColor: makeStringProp('#4D80F0'), /** * picker内部滚筒高 */ columnsHeight: makeNumberProp(217), valueKey: makeStringProp('value'), labelKey: makeStringProp('label'), /** * 选择器类型,可选值:date / year-month / time */ type: makeStringProp<DateTimeType>('datetime'), /** * 自定义过滤选项的函数,返回列的选项数组 */ filter: Function as PropType<DatetimePickerViewFilter>, /** * 自定义弹出层选项文案的格式化函数,返回一个字符串 */ formatter: Function as PropType<DatetimePickerViewFormatter>, /** * 自定义列的格式化函数 */ columnFormatter: Function as PropType<DatetimePickerViewColumnFormatter>, /** * 最小日期 */ minDate: makeNumberProp(new Date(new Date().getFullYear() - 10, 0, 1).getTime()), /** * 最大日期 */ maxDate: makeNumberProp(new Date(new Date().getFullYear() + 10, 11, 31).getTime()), /** * 最小小时,time类型时生效 */ minHour: makeNumberProp(0), /** * 最大小时,time类型时生效 */ maxHour: makeNumberProp(23), /** * 最小分钟,time类型时生效 */ minMinute: makeNumberProp(0), /** * 最大分钟,time类型时生效 */ maxMinute: makeNumberProp(59), /** * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 */ immediateChange: makeBooleanProp(false), startSymbol: makeBooleanProp(false) } export type DatetimePickerViewColumnType = 'year' | 'month' | 'date' | 'hour' | 'minute' export type DatetimePickerViewOption = { label: string value: number } export type DatetimePickerViewFilter = (type: DatetimePickerViewColumnType, values: number[]) => number[] export type DatetimePickerViewFormatter = (type: string, value: string) => string export type DatetimePickerViewColumnFormatter = (picker: DatetimePickerViewInstance) => DatetimePickerViewOption[][] export type DatetimePickerViewProps = ExtractPropTypes<typeof datetimePickerViewProps> export type DatetimePickerViewExpose = { updateColumns: () => DatetimePickerViewOption[][] setColumns: (columnList: DatetimePickerViewOption[][]) => void getSelects: () => Record<string, any> | Record<string, any>[] | undefined correctValue: (value: string | number) => string | number getPickerValue: (value: string | number, type: DateTimeType) => number[] getOriginColumns: () => { type: DatetimePickerViewColumnType values: number[] }[] } export type DatetimePickerViewInstance = ComponentPublicInstance<DatetimePickerViewProps, DatetimePickerViewExpose>