CalendarPicker 日历选择器
CalendarPicker 单独使用时,仅仅是一个弹出框。
CalendarPicker 作为 FormItem 的子元素时,会成为表单项,并使 FormItem 成为可点击状态。
示例
基础用法
<script lang="ts">
let visible = $state<boolean[]>([false, false, false, false, false])
let form = $state<{ date?: Date; range?: [begin?: Date, end?: Date] }>({
date: new Date(),
range: [],
})
</script>
<Button onclick={() => (visible[0] = true)}>选择日期</Button>
<Button onclick={() => (visible[1] = true)}>选择范围</Button>
<CalendarPicker
header="请选择"
bind:visible={visible[0]}
bind:value={form.date}
clearable
/>
<CalendarPicker
bind:visible={visible[1]}
bind:value={form.range}
mode="range"
clearable
/>
限制范围
<Button onclick={() => (visible[2] = true)}>限制范围</Button>
<CalendarPicker
header="请选择"
bind:visible={visible[2]}
bind:value={form.date}
min={dayjs().add(-1, 'year').toDate()}
max={dayjs().add(1, 'year').toDate()}
clearable
/>
表单-水平布局
<Form header="表单-水平布局" bind:data={form} layout="horizontal">
<FormItem label="出生日期" field="date" required>
<CalendarPicker header="请选择" bind:value={form.date} clearable />
</FormItem>
<FormItem label="日期范围" field="range" required>
<CalendarPicker
header="请选择"
bind:value={form.range}
mode="range"
clearable
/>
</FormItem>
</Form>
表单-垂直布局
<Form header="表单-垂直布局" bind:data={form} layout="vertical">
<FormItem label="出生日期" field="date" required>
<CalendarPicker header="请选择" bind:value={form.date} clearable />
</FormItem>
<FormItem label="日期范围" field="range" required>
<CalendarPicker
header="请选择"
bind:value={form.range}
mode="range"
clearable
/>
</FormItem>
</Form>
只读
<Form header="只读" layout="horizontal">
<FormItem label="出生日期">
<CalendarPicker header="请选择" bind:value={form.date} clearable readonly />
</FormItem>
</Form>
禁用
<Form header="禁用" layout="vertical">
<FormItem label="出生日期">
<CalendarPicker header="请选择" bind:value={form.date} clearable disabled />
</FormItem>
</Form>
CalendarPicker
属性
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
visible | 是否显示 | boolean | $bindable(false) |
value | 选中的日期 | [CalendarValue](#calendar-value-type) | $bindable() |
mode | 选择模式 | 'single' | 'range' | 'single' |
max | 最大值 | Date | undefined |
min | 最小值 | Date | undefined |
weekStartsOn | 每周以周几作为第一天 | 'sunday' | 'monday' | 'sunday' |
header | 自定义头部 | string | Snippet | undefined |
calendarHeader | 自定义 Calendar 头部 | [CalendarHeader](#calendar-header-type) | undefined |
cell | 自定义日期单元格 | Snippet<[date: Date]> | undefined |
clearable | 是否显示清除按钮 | boolean | false |
noMask | 不展示遮罩 | boolean | false |
keepOpenOnClickMask | 阻止点击遮罩关闭 | boolean | false |
类型定义
CalendarValue
/** mode = 'single' */
type CalendarSingleValue = Date | undefined
/** mode = 'range' */
type CalendarRangeValue = [begin?: Date, end?: Date]
/** CalendarValue */
type CalendarValue = CalendarSingleValue | CalendarRangeValue
CalendarHeader
// CalendarHeader
Snippet<
[
/** 年 */
year: number,
/** 月 */
month: number,
/** 增加 */
add: (value: number, unit: 'year' | 'month') => void,
/** 判定按钮是否禁用 */
isDisabled: (
button: 'prev-year' | 'prev-month' | 'next-month' | 'next-year'
) => boolean,
]
>
配合 FormItem
当此组件作为 FormItem 组件的子元素时,以下属性生效。
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
display | 自定义内容显示 | Snippet<[value: [CalendarValue](#calendar-value-type)]> | undefined |
placeholder | 占位文本 | string | '请选择' |
readonly | 是否只读 | boolean | false |
disabled | 是否禁用 | boolean | false |
事件
事件 | 说明 | 类型 |
---|---|---|
onChange | 变更事件 | (value: [CalendarValue](#calendar-value-type)) => void |
onCancel | 取消事件 | () => void |