vue2 组件封装 el-date-picker 日期

news/2025/10/29 17:11:26/文章来源:https://www.cnblogs.com/congxueda/p/19174944

vue2 组件封装 el-date-picker 日期

 

基本使用都满足

 

包括常用的:

     时间格式 :type [date,datetime,daterange ....]

     快捷方式 :日期左侧:如 今天,昨天,一个月前日期

    日期禁用:禁用日期段

    其它相关属性

 

custom-date-picker 组件内容
<!--1、isShortcut <boolean> 是否显示快捷方式.默认 true显示 ,false 不显示
--><template><div class="custom-date-picker"><el-date-pickerv-model="dateValue":type="type":format="format":value-format="valueFormat":placeholder="placeholder":disabled="disabled":clearable="clearable":readonly="readonly":picker-options="pickerOptions":range-separator="rangeSeparator":start-placeholder="startPlaceholder":end-placeholder="endPlaceholder"@change="handleChange"@blur="handleBlur"@focus="handleFocus"></el-date-picker></div>
</template><script>
export default {name: "CustomDatePicker",props: {// 绑定值(v-model)
    value: {type: [String, Number, Date, Array], // 单日期为String/Date,范围选择为Arraydefault: null,},// 日期类型:date/datetime/date-range/datetime-range等
    type: {type: String,default: "date",},// style: {//   type: Object,//   default: () => {},// },// 显示格式(如 'yyyy-MM-dd')
    format: {type: String,default() {// 根据类型默认格式return this.type.includes("datetime")? "yyyy-MM-dd HH:mm:ss": "yyyy-MM-dd";},},// 绑定值格式(传给后端的格式)
    valueFormat: {type: String,default() {return this.type.includes("datetime")? "yyyy-MM-dd HH:mm:ss": "yyyy-MM-dd";},},// 占位符
    placeholder: {type: String,default: "请选择日期",},// 范围选择时的开始占位符
    startPlaceholder: {type: String,default: "开始日期",},// 范围选择时的结束占位符
    endPlaceholder: {type: String,default: "结束日期",},// 范围选择分隔符
    rangeSeparator: {type: String,default: "",},// 是否禁用
    disabled: {type: Boolean,default: false,},// 是否可清空
    clearable: {type: Boolean,default: true,},// 是否只读readonly: {type: Boolean,default: false,},// 禁用日期的回调函数(如禁用过去日期:(time) => time < Date.now() - 8.64e7)
    disabledDate: {type: Function,default: () => false, // 默认返回 false(所有日期都可选择)
    },// 默认显示。快捷类型 1、显示;0不显示
    isShortcut: {type: [String, Number, Boolean],default: true,},// 错误提示信息(配合表单校验)
    errorMsg: {type: String,default: "",},},data() {return {dateValue: this.value, // 内部绑定值pickerOptions: null,pickerOptionsDate: {shortcuts: [{text: "今天",onClick(picker) {picker.$emit("pick", new Date());},},{text: "一周前",onClick(picker) {const date = new Date();date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);picker.$emit("pick", date);},},{text: "一个月前",onClick(picker) {const date = new Date();date.setTime(date.getTime() - 3600 * 1000 * 24 * 30);picker.$emit("pick", date);},},],disabledDate: this.disabledDate,// disabledDate(time) {//   return time.getTime() > Date.now() - 8.64e6 // 只能选择今天及今天之前的日期// }
      },pickerOptionsRange: {shortcuts: [{text: "今天",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime());picker.$emit("pick", [start, end]);},},{text: "最近三天",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);picker.$emit("pick", [start, end]);},},{text: "最近一周",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit("pick", [start, end]);},},{text: "最近一个月",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);picker.$emit("pick", [start, end]);},},{text: "最近三个月",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);picker.$emit("pick", [start, end]);},},{text: "最近半年",onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);picker.$emit("pick", [start, end]);},},],disabledDate: this.disabledDate,// disabledDate(time) {//   return time.getTime() > Date.now() - 8.64e6 // 只能选择今天及今天之前的日期// }
      },};},mounted() {this.initType(this.type);},// computed
  watch: {// 监听外部value变化,同步到内部
    value: {handler(val) {this.dateValue = val;},immediate: true,deep: true, // 范围选择时需要深度监听
    },// 内部值变化,同步到外部(v-model)
    dateValue(val) {this.$emit("input", val);},},methods: {initType(type) {// 快捷方式 true显示; false 不显示if (this.isShortcut) {if (type === "daterange") {this.pickerOptions = this.pickerOptionsRange;} else {this.pickerOptions = this.pickerOptionsDate;}} else {// 是否有禁用时间段if (this.disabledDate) {this.pickerOptions = {disabledDate: this.disabledDate,};} else {this.pickerOptions = null;}}},// 日期变化时触发
    handleChange(val) {this.$emit("change", val);},// 失焦事件
    handleBlur(e) {this.$emit("blur", e);},// 聚焦事件
    handleFocus(e) {this.$emit("focus", e);},// 手动清空(可外部调用)
    clear() {this.dateValue = null;},},
};
</script><style lang="scss" scoped>
.custom-date-picker {.el-date-editor--date {width: 100% !important;}.el-date-editor--daterange {width: 100% !important;padding-left: 6px;padding-right: 0;::v-deep .el-range-separator {padding: 0 3px;}::v-deep .el-range__close-icon {width: 20px;}}
}
</style>

 

 
import DatePickerTime from "./DatePicker/CustomDatePicker.vue";

 

页面调用。   date-picker-time

   <el-form-item label="时间1" prop="time1"><date-picker-timetype="date"v-model="ruleForm.time1"></date-picker-time></el-form-item>

 

image

 

 

 如果默认不展示快捷方式  

:is-shortcut="false"
<el-form-item label="时间1" prop="time1"><date-picker-timetype="date":is-shortcut="false"v-model="ruleForm.time1"></date-picker-time></el-form-item>

 

image

 

 

禁用日期段

   <date-picker-timetype="daterange":is-shortcut="false"v-model="ruleForm.time1":disabledDate="handleDisabledDate"></date-picker-time></el-form-item>

 

  methods: {handleDisabledDate(time) {// 禁用过去的日期return time.getTime() < new Date().setHours(0, 0, 0, 0);// 禁用未来时间//   return time.getTime() > new Date().setHours(0, 0, 0, 0);},

 

image

 

 

value-format="yyyy-MM-dd hh:mm:ss"
 
<!-- 日期时间 含有 时分秒 14位数字-->
value-format="yyyyMMddHHmmss"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我使用FHQ写了线段树2

虽然并没有任何的意义,但是我觉得很有意思,所以记录一下: #include <bits/stdc++.h> #define int long long using namespace std; const int MN=1e6+116; struct Node{int lc, rc, siz, rnd;int val, sum, a…

092_尚硅谷_for循环注意事项和细节(1)

092_尚硅谷_for循环注意事项和细节(1)1.for循环的第二种写法2.for循环的第三种写法_死循环3.for循环的第三种写法_死循环使用break终止循环

详细介绍:【网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VK36N5D 工作电压 2.2-5.5V 触摸芯片抗干扰5键触摸触控 5路触摸检测IC

VK36N5D具有5个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度,仅需极少的外部组件便可实现触摸按键的检测。 提供了5个1对1输出脚,1个触摸状态输出脚,可通过IO脚选择上电输出电平和输…

魔兽争霸3冰封王座修改器 下载安装教程(图文步骤 + 功能详解)

魔兽争霸3冰封王座修改器下载与安装教程(适配1.24e~1.26版本),完整讲解安装方法、功能用法、快捷键操作、兼容性优化与常见问题解决方案。支持Windows 10 / 11系统,安全稳定。魔兽争霸3冰封王座修改器 下载安装教程…

Softmax回归模型

这段代码是一个完整的 Softmax回归模型 实现,用于解决 Fashion-MNIST数据集的图像分类问题。简单来说,它的作用是:让计算机通过学习大量衣服、鞋子等服饰图片,学会识别新的服饰图片属于哪一类(比如T恤、裤子、运动…

Oracle的connect by level在MySQL中的华丽变身 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

handsontable实现新增删除行(双行)

handsontable实现新增删除行(双行)// 配置方法const tableSettings = computed(() => {return {...hotTableParams,nestedHeaders: false,filters: false,columnSorting: false,height: 358,rowHeaders: false,co…

2025年国产角接触球轴承厂家推荐 一文了解轴承厂家选择标准

角接触球轴承在机械设备中的应用广泛,特别是精密机床、高速电机、电主轴等运行要求高的场合,更需要质量品质好一点的角接触轴承。想要轴承用的好,就得找到合适的生产厂家,下面就来推荐下2025年值得信任的国产角接触…

vxe-table 树形表格显示连接线的方式

vxe-table 树形表格显示连接线的方式 完整连接线 通过 tree-config.showLine 来启用是否显示连接线<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </…

2025年上海衣帽间定制机构权威推荐榜单:衣帽间设计/衣帽间十大品牌/衣帽间装修源头公司精选

在上海,一个规划合理的衣帽间正成为新兴住宅的标配。数据显示,2024年中国家装行业市场规模已突破860亿元,其中定制家具份额持续增长,而衣帽间作为定制家具的重要组成部分,正受到越来越多消费者的青睐。 01 行业趋…

在Web应用开发中状态到底是什么?

在计算机科学中,“状态”(State)这个词经常出现在讨论有状态(Stateful)和无状态(Stateless)系统、服务或组件时。要理解“状态”到底是什么,我们可以从最基本的层面来解释。一、什么是“状态”? 简单来说,“…

前后端不分离的springboot应用,静态文件修改了不更新的问题

当然,还有不依赖idea的解决方案,就是静态文件通过nginx来代理,直接将js和css这些文件代理到我们的代码目录,这样我们修改了代码目录后,配置就立马生效了。这样可以不依赖idea的版本,假如你的idea怎么设置热更新都…

Cookie与缓存的区别

一、本质定义 Cookie:客户端轻量化文本存储,存用户身份、网站偏好等会话相关数据,容量约4KB。 缓存:客户端/服务器临时存储,存网页静态资源(图、JS/CSS),容量几MB到几十GB。 二、3大核心区别 1. 存储内容:Coo…

2025 年铝卷厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析铝板铝卷/铝卷板/橘皮铝卷/压花铝卷/防锈铝卷/花纹铝卷公司推荐

引言 本次 2025 年铝卷产品推荐榜,由有色金属工业协会联合行业权威检测机构共同测评制定,测评过程严格遵循《铝及铝合金轧制卷材行业质量评价标准》。测评团队从企业生产实力、产品品质、服务能力三大维度入手,涵盖…

无人机航测界的强者——Pix4Dmapper 4.5.6使用教程+图文步骤

软件介绍 Pix4Dmapper 4.5.6是一款专业的无人机航空三维建模软件。它可以将通过无人机拍摄的照片转化为三维地图、模型、点云、高精度的数字高程模型(DEM)、数字表面模型(DSM)和正射影像(DOM)等。该软件具有自动…

qml与html通信

1. 在qml显示html并通讯main.qmlimport QtQuick 2.12 import QtQuick.Window 2.12 import QtWebEngine 1.2 import QtQuick.Controls Window {id:mainWindowwidth: 640height: 480visible: truetitle: qsTr("WebE…

2025 年排烟风机厂家最新推荐榜,技术实力与市场口碑深度解析,筛选高性能低噪音优质企业屋顶/双速/离心式/防排烟风机公司推荐

引言 为助力建筑行业精准选购排烟风机,本次榜单由暖通空调工业协会联合消防设备质量监督检验中心共同测评发布。测评采用 “三维九项” 评估体系,从技术实力(耐高温性能、噪音控制、节能效率)、市场口碑(客户满意…

2025 年建筑模型公司最新推荐榜,技术实力与市场口碑深度解析含沙盘、微缩、高端模型品牌

引言 随着建筑行业数字化升级,建筑模型需求向高精度、智能化、定制化加速迭代,据建筑装饰协会 2025 年行业测评报告显示,超 68% 的高端项目对模型精度要求达 0.1mm 级,且 82% 的客户将 “技术创新能力” 列为选择合…

Session、Cookie、Token 区别

一、本质理解 1. Cookie:就是浏览器里的“小记事本”,只能存少量东西(约4KB),比如记个“身份编号”,本身不是身份,只是个装信息的小本子。 2. Session:相当于服务器里的“用户档案柜”。你登录后,服务器给你编…