DatePicker 日期选择器

DatePicker 单独使用时,仅仅是一个弹出框。

DatePicker 作为 FormItem 的子元素时,会成为表单项,并使 FormItem 成为可点击状态。

示例

基础用法

<script lang="ts">
  let visible = $state<boolean[]>([false, false, false, false, false])
</script>

<Button onclick={() => (visible[0] = true)}>选择日期</Button>
<Button onclick={() => (visible[1] = true)}>选择时间</Button>
<DatePicker header="请选择" bind:visible={visible[0]} bind:value={form.date} />
<DatePicker header="请选择" bind:visible={visible[1]} precision="second" />

限制范围

<Button onclick={() => (visible[2] = true)}>限制范围</Button>
<Button onclick={() => (visible[3] = true)}>至今日</Button>
<DatePicker
  header="日期范围"
  bind:visible={visible[2]}
  min={new Date('2023-12-28')}
  max={new Date('2028-09-16')}
/>
<DatePicker header="至今日" bind:visible={visible[3]} max="tillNow" />

表单-水平布局

<script lang="ts">
  let form = $state<{ date?: Date }>({
    date: new Date(),
  })
</script>

<Form header="表单-水平布局" layout="horizontal">
  <FormItem label="出生日期" required>
    <DatePicker bind:value={form.date} clearable />
  </FormItem>
</Form>

表单-垂直布局+自定义显示

<Form header="表单-垂直布局+自定义显示" bind:data={form} layout="vertical">
  <FormItem label="出生日期" field="date" required>
    <DatePicker bind:value={form.date} header="出生日期" placeholder="年-月-日" clearable>
      {#snippet display(date?: Date)}
        <p>{date ? dayjs(date).format('YYYY年MM月DD日') : ''}</p>
      {/snippet}
    </DatePicker>
  </FormItem>
</Form>

只读

<Form header="只读" layout="horizontal">
  <FormItem label="出生日期">
    <DatePicker bind:value={form.date} readonly />
  </FormItem>
</Form>

禁用

<Form header="禁用" layout="vertical">
  <FormItem label="出生日期">
    <DatePicker bind:value={form.date} disabled />
  </FormItem>
</Form>

DatePicker

属性

属性 说明 类型 默认值
visible 弹出层是否打开 boolean $bindable(false)
value 选中日期 Date $bindable()
precision 日期精度 [DatePrecision](#date-precition-type) 'day'
max 最大值 Date | 'tillNow' 10 年后(整年)
min 最小值 Date 10 年前(整年)
header 标题 string | Snippet undefined
clearable 是否显示清除按钮 boolean false
noMask 不展示遮罩 boolean false
keepOpenOnClickMask 阻止点击遮罩关闭 boolean false

注:loader 函数可以返回 string 或 PickerItem 类型的数组。如果 loader 函数返回了 Promise,组件会执行异步加载。

类型定义

DatePrecision

/** 日期精度 */
export type DatePrecision =
  | 'year'
  | 'month'
  | 'day'
  | 'hour'
  | 'minute'
  | 'second'

配合 FormItem

当此组件作为 FormItem 组件的子元素时,以下属性生效。

属性 说明 类型 默认值
display 自定义内容显示 Snippet<[date: Date]> undefined
placeholder 占位文本 string '请选择'
readonly 是否只读 boolean false
disabled 是否禁用 boolean false

事件

事件 说明 类型
onChange 变更事件 (value: Date | undefined) => void
onCancel 取消事件 () => void