Skip to content

Date Picker 日期选择器

日期选择器用于选择或输入日期。VISTA B 直接使用 Element Plus 的 el-date-picker,样式沿用组件库,适合筛选时间、配置有效期、设置项目节点、选择统计周期等场景。

选择某一天

通过 type="date" 选择单个日期。shortcuts 可以配置快捷选项,disabled-date 可以禁用不可选日期。

vue
<script setup>
import { ref } from 'vue'

const value = ref('')
const shortcuts = [
  { text: '今天', value: new Date() },
  {
    text: '昨天',
    value: () => {
      const date = new Date()
      date.setDate(date.getDate() - 1)
      return date
    }
  }
]

const disabledDate = (time) => {
  return time.getTime() > Date.now()
}
</script>

<template>
  <el-date-picker
    v-model="value"
    type="date"
    placeholder="选择日期"
    :shortcuts="shortcuts"
    :disabled-date="disabledDate"
    value-format="YYYY-MM-DD"
  />
</template>

其他日期单位

通过 type 可以选择年、月、周或多个日期。当前 VISTA B 常用年、月、日;周和多日期适合统计周期或批量排期。

vue
<el-date-picker v-model="year" type="year" value-format="YYYY" />
<el-date-picker v-model="month" type="month" value-format="YYYY-MM" />
<el-date-picker v-model="week" type="week" format="YYYY 第 ww 周" />
<el-date-picker v-model="dates" type="dates" value-format="YYYY-MM-DD" />

日期范围

设置 type="daterange" 后可选择一段日期。范围选择器使用 start-placeholderend-placeholderrange-separator 分别配置起止占位和分隔文本。

vue
<el-date-picker
  v-model="value"
  type="daterange"
  range-separator="至"
  start-placeholder="开始日期"
  end-placeholder="结束日期"
  value-format="YYYY-MM-DD"
/>

月份范围

设置 type="monthrange" 后可选择一段月份,适合统计周期、账期、项目阶段这类按月归档的数据。

vue
<el-date-picker
  v-model="value"
  type="monthrange"
  range-separator="至"
  start-placeholder="开始月份"
  end-placeholder="结束月份"
  value-format="YYYY-MM"
/>

年份范围

设置 type="yearrange" 后可选择一段年份,适合年度计划、年度报表、合同有效年度等场景。

vue
<el-date-picker
  v-model="value"
  type="yearrange"
  range-separator="至"
  start-placeholder="开始年份"
  end-placeholder="结束年份"
  value-format="YYYY"
/>

单个面板

范围选择器默认展示两个面板。设置 single-panel 后只展示一个面板,适合空间有限的筛选区或侧边栏。

vue
<el-date-picker
  v-model="value"
  type="daterange"
  single-panel
  range-separator="至"
  start-placeholder="开始日期"
  end-placeholder="结束日期"
/>

日期格式

format 控制输入框展示格式,value-format 控制绑定值格式。不设置 value-format 时,绑定值为 Date 对象。

vue
<el-date-picker
  v-model="value"
  type="date"
  format="YYYY/MM/DD"
  value-format="YYYY-MM-DD"
/>

默认显示日期

使用 default-value 可以控制面板打开时默认显示的日期。范围选择还可以通过 default-time 设置选中日期的默认时分秒。

vue
<script setup>
const defaultValue = new Date(2026, 4, 1)
const defaultTime = [
  new Date(2000, 1, 1, 0, 0, 0),
  new Date(2000, 1, 1, 23, 59, 59)
]
</script>

<template>
  <el-date-picker
    v-model="value"
    type="daterange"
    :default-value="defaultValue"
    :default-time="defaultTime"
    value-format="YYYY-MM-DD HH:mm:ss"
  />
</template>

自定义内容

通过默认插槽可以自定义日期单元格内容。插槽会提供当前单元格数据,可用于标记项目节点、节假日或特殊状态。

vue
<el-date-picker v-model="value" type="date">
  <template #default="{ text, dayjs }">
    <div>
      <span>{{ text }}</span>
      <span v-if="isMilestoneDate(dayjs)" class="date-dot" />
    </div>
  </template>
</el-date-picker>

自定义图标

使用 prefix-iconclear-icon 可以替换输入框前缀图标和清除图标。也可以通过 prev-monthnext-monthprev-yearnext-year 插槽自定义面板切换图标。

vue
<script setup>
import { Calendar, CircleClose } from '@element-plus/icons-vue'
</script>

<template>
  <el-date-picker
    v-model="value"
    type="date"
    :prefix-icon="Calendar"
    :clear-icon="CircleClose"
    clearable
  />
</template>

API

DatePicker 属性

属性说明类型默认值
model-value / v-model绑定值;范围选择器应为长度为 2 的数组number / string / Date / array
readonly是否只读booleanfalse
disabled是否禁用booleanfalse
size输入框尺寸large / default / small
editable文本框是否可输入booleantrue
clearable是否显示清除按钮booleantrue
placeholder非范围选择时的占位内容string
start-placeholder范围选择时开始日期的占位内容string
end-placeholder范围选择时结束日期的占位内容string
type显示类型year / years / month / months / date / dates / week / datetime / daterange / monthrange / yearrange / datetimerangedate
format显示在输入框中的格式stringYYYY-MM-DD
value-format绑定值的格式;不设置时绑定值为 Date 对象string
popper-class下拉框自定义类名string
popper-style下拉框自定义样式string / object
popper-options自定义 Popper 配置object{}
range-separator范围选择时的分隔符string-
default-value面板打开时默认显示的日期Date / array
default-time范围选择时选中日期使用的默认时分秒Date / array
id原生 input id 属性string / array
name原生 input name 属性string / array
unlink-panels范围选择器中取消两个日期面板之间的联动booleanfalse
single-panel范围选择器中只显示一个面板booleanfalse
prefix-icon自定义前缀图标string / Component
clear-icon自定义清除图标string / ComponentCircleClose
validate-event是否触发表单校验booleantrue
disabled-date判断日期是否禁用的函数(date: Date) => boolean
shortcuts快捷选项数组array[]
cell-class-name自定义日期单元格类名(date: Date) => string
teleported下拉框是否挂载到 bodybooleantrue
empty-values组件空值配置array
value-on-clear点击清空后的值string / number / boolean / Function
fallback-placements下拉框可用的备用位置array['bottom', 'top', 'right', 'left']
placement下拉框出现的位置Placementbottom
show-footer是否显示底部区域booleantrue
show-confirm是否显示确定按钮booleantrue
show-week-number是否显示周数,周选择器除外booleanfalse
automatic-dropdown输入框获得焦点时是否自动弹出面板booleantrue

DatePicker 事件

事件名说明类型
change用户确认值或点击外部后触发(value) => void
blur输入框失去焦点时触发(event: FocusEvent) => void
focus输入框获得焦点时触发(event: FocusEvent) => void
clear点击清除按钮时触发() => void
calendar-change范围选择器中日历所选日期变化时触发(value) => void
panel-change日期面板改变时触发(date, mode, view) => void
visible-change下拉框显示或隐藏时触发(visible: boolean) => void

DatePicker 插槽

插槽说明
default自定义日期单元格内容
range-separator自定义范围分隔符内容
prev-month自定义上个月图标
next-month自定义下个月图标
prev-year自定义上一年图标
next-year自定义下一年图标

DatePicker 暴露

方法名说明类型
focus使组件获取焦点() => void
blur使组件失去焦点() => void
handleOpen打开日期选择器弹窗() => void
handleClose关闭日期选择器弹窗() => void

HOMEVISTA 设计规范