<template>
<div
class="el-picker-panel el-date-range-picker"
:class="[{
'has-sidebar': $slots.sidebar || hasShortcuts,
'has-time': showTime
}]"
>
<div class="el-picker-panel__body-wrapper">
<slot name="sidebar" class="el-picker-panel__sidebar"></slot>
<div v-if="hasShortcuts" class="el-picker-panel__sidebar">
<button
v-for="(shortcut, key) in shortcuts"
:key="key"
type="button"
class="el-picker-panel__shortcut"
@click="handleShortcutClick(shortcut)"
>
{{ shortcut.text }}
</button>
</div>
<div class="el-picker-panel__body">
<div v-if="showTime" class="el-date-range-picker__time-header">
<span class="el-date-range-picker__editors-wrap">
<span class="el-date-range-picker__time-picker-wrap">
<el-input
size="small"
:disabled="rangeState.selecting"
:placeholder="t('el.datepicker.startDate')"
class="el-date-range-picker__editor"
:model-value="minVisibleDate"
@input="val => handleDateInput(val, 'min')"
@change="val => handleDateChange(val, 'min')"
/>
</span>
<span v-clickoutside="handleMinTimeClose" class="el-date-range-picker__time-picker-wrap">
<el-input
size="small"
class="el-date-range-picker__editor"
:disabled="rangeState.selecting"
:placeholder="t('el.datepicker.startTime')"
:model-value="minVisibleTime"
@focus="minTimePickerVisible = true"
@input="val => handleTimeInput(val, 'min')"
@change="val => handleTimeChange(val, 'min')"
/>
<time-pick-panel
:visible="minTimePickerVisible"
:format="timeFormat"
datetime-role="start"
:time-arrow-control="arrowControl"
:parsed-value="leftDate"
@pick="handleMinTimePick"
/>
</span>
</span>
<span class="el-icon-arrow-right"></span>
<span class="el-date-range-picker__editors-wrap is-right">
<span class="el-date-range-picker__time-picker-wrap">
<el-input
size="small"
class="el-date-range-picker__editor"
:disabled="rangeState.selecting"
:placeholder="t('el.datepicker.endDate')"
:model-value="maxVisibleDate"
:readonly="!minDate"
@input="val => handleDateInput(val, 'max')"
@change="val => handleDateChange(val, 'max')"
/>
</span>
<span v-clickoutside="handleMaxTimeClose" class="el-date-range-picker__time-picker-wrap">
<el-input
size="small"
class="el-date-range-picker__editor"
:disabled="rangeState.selecting"
:placeholder="t('el.datepicker.endTime')"
:model-value="maxVisibleTime"
:readonly="!minDate"
@focus="minDate && (maxTimePickerVisible = true)"
@input="val => handleTimeInput(val, 'max')"
@change="val => handleTimeChange(val, 'max')"
/>
<time-pick-panel
datetime-role="end"
:visible="maxTimePickerVisible"
:format="timeFormat"
:time-arrow-control="arrowControl"
:parsed-value="rightDate"
@pick="handleMaxTimePick"
/>
</span>
</span>
</div>
<div class="el-picker-panel__content el-date-range-picker__content is-left">
<div class="el-date-range-picker__header">
<button
type="button"
class="el-picker-panel__icon-btn el-icon-d-arrow-left"
@click="leftPrevYear"
></button>
<button
type="button"
class="el-picker-panel__icon-btn el-icon-arrow-left"
@click="leftPrevMonth"
></button>
<button
v-if="unlinkPanels"
type="button"
:disabled="!enableYearArrow"
:class="{ 'is-disabled': !enableYearArrow }"
class="el-picker-panel__icon-btn el-icon-d-arrow-right"
@click="leftNextYear"
></button>
<button
v-if="unlinkPanels"
type="button"
:disabled="!enableMonthArrow"
:class="{ 'is-disabled': !enableMonthArrow }"
class="el-picker-panel__icon-btn el-icon-arrow-right"
@click="leftNextMonth"
></button>
<div>{{ leftLabel }}</div>
</div>
<date-table
selection-mode="range"
:date="leftDate"
:min-date="minDate"
:max-date="maxDate"
:range-state="rangeState"
:disabled-date="disabledDate"
:cell-class-name="cellClassName"
@changerange="handleChangeRange"
@pick="handleRangePick"
@select="onSelect"
/>
</div>
<div class="el-picker-panel__content el-date-range-picker__content is-right">
<div class="el-date-range-picker__header">
<button
v-if="unlinkPanels"
type="button"
:disabled="!enableYearArrow"
:class="{ 'is-disabled': !enableYearArrow }"
class="el-picker-panel__icon-btn el-icon-d-arrow-left"
@click="rightPrevYear"
></button>
<button
v-if="unlinkPanels"
type="button"
:disabled="!enableMonthArrow"
:class="{ 'is-disabled': !enableMonthArrow }"
class="el-picker-panel__icon-btn el-icon-arrow-left"
@click="rightPrevMonth"
></button>
<button
type="button"
class="el-picker-panel__icon-btn el-icon-d-arrow-right"
@click="rightNextYear"
></button>
<button
type="button"
class="el-picker-panel__icon-btn el-icon-arrow-right"
@click="rightNextMonth"
></button>
<div>{{ rightLabel }}</div>
</div>
<date-table
selection-mode="range"
:date="rightDate"
:min-date="minDate"
:max-date="maxDate"
:range-state="rangeState"
:disabled-date="disabledDate"
:cell-class-name="cellClassName"
@changerange="handleChangeRange"
@pick="handleRangePick"
@select="onSelect"
/>
</div>
</div>
</div>
<div v-if="showTime" class="el-picker-panel__footer">
<el-button
size="mini"
type="text"
class="el-picker-panel__link-btn"
@click="handleClear"
>
{{ t('el.datepicker.clear') }}
</el-button>
<el-button
plain
size="mini"
class="el-picker-panel__link-btn"
:disabled="btnDisabled"
@click="handleConfirm(false)"
>
{{ t('el.datepicker.confirm') }}
</el-button>
</div>
</div>
</template>
<script lang="ts">
import {
defineComponent,
computed,
ref,
PropType,
inject,
watch,
} from 'vue'
import { t } from '@element-plus/locale'
import {
extractDateFormat,
extractTimeFormat,
} from '@element-plus/time-picker'
import { TimePickPanel } from '@element-plus/time-picker'
import { ClickOutside } from '@element-plus/directives'
import dayjs, { Dayjs } from 'dayjs'
import DateTable from './basic-date-table.vue'
import ElInput from '@element-plus/input'
import ElButton
element-plus-1.0.2-beta.42.zip
需积分: 0 122 浏览量
更新于2024-08-24
收藏 2.77MB ZIP 举报
一个 Vue.js 3 UI 库

a3737337
- 粉丝: 0
最新资源
- 深入理解计算机系统第二版完整习题解答与实验指导-CSAPP2e所有章节课后习题详细解析-包含数据表示程序结构处理器架构系统级编程等核心内容-提供C语言汇编代码实现与优化技巧.zip
- java毕业设计,图书管理系统
- 容器开发实战:Docker与Kubernetes应用全解析
- 基于Java+Springboot+Vue开发的新闻管理系统,毕业设计/课程设计
- 基于java SSM框架的医院体检预约管理系统
- 基于Java + Swing + MySQL的学生选课及成绩管理系统(Java课程设计)
- 配电网馈线自动化-PPT课件.pptx
- 组合数学机械化通用程序库软件用户手册.doc
- 云南大学软件学院软件工程领域工程硕士研究生培养方案.doc
- 计算机系统软硬件安装分区格式化(讲)概要.ppt
- 自动化学科概论学生版PPT课件.ppt
- 电子商务网站开发小型网上书店课程设计JSP含完整源代码模板.doc
- 网络综合布线-实训报告[最终版].pdf
- 计算机应用技术专业人才培养方案.doc
- 项目管理计划模板标准.doc
- 生物选修三基因工程应用和植物细胞工程测试题附答案.doc