当前位置: 首页 > article >正文

vue elemnt-ui自定义时间日期选择

如图
在这里插入图片描述
先写个日期组件 DateRangePicker/index.vue

<script>
import { DatePicker, DatePickerOptions } from 'element-ui'
import { calendarShortcuts } from '@/utils/shortcuts'

export default {
  name: 'DateRangePicker',
  mixins: [DatePicker],
  props: {
    type: {
      type: String,
      default: 'datetimerange'
    },
    valueFormat: {
      type: String,
      default: 'yyyy-MM-dd HH:mm:ss'
    },
    defaultTime: {
      type: Array,
      default: _ => ['00:00:00', '23:59:59']
    },
    pickerOptions: {
      type: DatePickerOptions,
      default: _ => {
        return { shortcuts: calendarShortcuts }
      }
    },
    size: {
      type: String,
      default: 'small'
    },
    rangeSeparator: {
      type: String,
      default: ':'
    },
    startPlaceholder: {
      type: String,
      default: '开始日期'
    },
    endPlaceholder: {
      type: String,
      default: '结束日期'
    }
  }
}
</script>

核心代码 shortcuts.js

import Date from './datetime.js'

export const calendarBaseShortcuts = [{
  text: '今天',
  onClick(picker) {
    const startTime = new Date(new Date().setHours(0, 0, 0))
    const endTime = new Date(new Date().setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '昨天',
  onClick(picker) {
    const startTime = new Date(new Date().daysAgo(1).setHours(0, 0, 0))
    const endTime = new Date(new Date().daysAgo(1).setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '最近一周',
  onClick(picker) { 
    const startTime = new Date(new Date().daysAgo(7).setHours(0, 0, 0))
    const endTime = new Date(new Date().setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '最近30天',
  onClick(picker) {
    const startTime = new Date(new Date().daysAgo(30).setHours(0, 0, 0))
    const endTime = new Date(new Date().setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '这个月',
  onClick(picker) {
    const startTime = new Date(new Date().monthBegin().setHours(0, 0, 0))
    const endTime = new Date(new Date().setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '本季度',
  onClick(picker) {
    const startTime = new Date(new Date().quarterBegin().setHours(0, 0, 0))
    const endTime = new Date(new Date().setHours(23, 59, 59))
    picker.$emit('pick', [startTime, endTime])
  }
}]

export const calendarMoveShortcuts = [{
  text: '‹ 往前一天 ',
  onClick(picker) {
    let startTime = new Date(new Date().daysAgo(1).setHours(0, 0, 0))
    let endTime = new Date(new Date().daysAgo(1).setHours(23, 59, 59))
    if (!picker.value) {
      picker.value = [startTime, endTime]
    }
    startTime = picker.value[0].daysAgo(1)
    endTime = picker.value[1].daysAgo(1)
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: ' 往后一天 ›',
  onClick(picker) {
    let startTime = new Date(new Date().setHours(0, 0, 0))
    let endTime = new Date(new Date().setHours(23, 59, 59))
    if (!picker.value) {
      picker.value = [startTime, endTime]
    }
    startTime = picker.value[0].daysAgo(-1)
    endTime = picker.value[1].daysAgo(-1)
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: '« 往前一周 ',
  onClick(picker) {
    let startTime = new Date(new Date().setHours(0, 0, 0))
    let endTime = new Date(new Date().setHours(23, 59, 59))
    if (!picker.value) {
      picker.value = [startTime.daysAgo(new Date().getDay()),
        endTime.daysAgo(new Date().getDay() + 1)]
    } else {
      picker.value = [picker.value[0].daysAgo(picker.value[0].getDay()),
        picker.value[1].daysAgo(picker.value[1].getDay() + 1)]
    }
    startTime = picker.value[0].daysAgo(7)
    endTime = picker.value[1]
    picker.$emit('pick', [startTime, endTime])
  }
}, {
  text: ' 往后一周 »',
  onClick(picker) {
    let startTime = new Date(new Date().setHours(0, 0, 0))
    let endTime = new Date(new Date().setHours(23, 59, 59))
    if (!picker.value) {
      picker.value = [startTime.daysAgo(new Date().getDay() - 7),
        endTime.daysAgo(new Date().getDay() - 6)]
    } else {
      picker.value = [picker.value[0].daysAgo(picker.value[0].getDay() - 7),
        picker.value[1].daysAgo(picker.value[1].getDay() - 6)]
    }
    startTime = picker.value[0]
    endTime = picker.value[1].daysAgo(-7)
    picker.$emit('pick', [startTime, endTime])
  }
}]

export const calendarShortcuts = [
  ...calendarBaseShortcuts,
  ...calendarMoveShortcuts
]

组件的使用
main.js中引入

// 时间组件
import DateRangePicker from '@/components/DateRangePicker'

Vue.component('DateRangePicker', DateRangePicker)

<date-range-picker   v-model="acceptTime" :clearable="false" :pickerOptions="pickerOptions"  style="width: 350px !important;margin-right: 10px;" class="date-item" />

好了


http://www.kler.cn/a/501146.html

相关文章:

  • Vue学习二——创建登录页面
  • FFmpeg入门
  • Qt 坐标系统和坐标变换
  • 一些计算机零碎知识随写(25年1月)-1
  • 【数据结构】第1天之Java中的数据结构
  • docker-compose方式部署单机版RocketMQ
  • Linux开发工具--vim编辑器-gcc/g++编译器-gdb调试器
  • 案例研究:UML用例图中的结账系统
  • 红队工具使用全解析:揭开网络安全神秘面纱一角
  • 微服务的CAP定理与数据一致性抉择
  • 算法练习7——拦截导弹的系统数量求解
  • GAMES101学习笔记(三):Rasterization 光栅化(三角形的离散化、抗锯齿、深度测试)
  • Dockerfile 构建java镜像并运行部署java项目
  • uniapp中rpx和upx的区别
  • Go语言中http.Transport的Keep-Alive配置与性能优化方法
  • excel前缀和(递增求和)
  • 第2章 市场走势的分类与组合
  • 基于 GEE 下载 2000-2023 年 LANDSCAN 1 km 人口栅格数据
  • 大模型笔记:KV cache
  • WPF ——开源MVVM模式框架简介
  • 【算法日记】从零开始认识动态规划(一)
  • Java高频面试之SE-11
  • 【Rust】结构体定义域实例化
  • Golang环境配置on Macbook Air M2
  • 安装 Jenkins 后无法访问用户名或密码且忘记这些凭证怎么办?
  • 蓝桥杯历届真题 #分布式队列 (Java,C++)