【Vue】el-date-picker日期范围组件(本周、本月、上周)

news2024/12/22 19:36:15

系列文章

【Vue】vue增加导航标签
本文链接:https://blog.csdn.net/youcheng_ge/article/details/134965353

【Vue】Element开发笔记
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133947977

【Vue】vue,在Windows IIS平台部署
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133859117

【Vue】vue2与WebApi跨域CORS问题
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959

【Vue】nvm安装教程(解决npm下依赖包版本冲突)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132896207

【Vue】vue开发环境搭建教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132689006

【Vue】日期格式化(全局)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/135017332

【Vue】elementUI表格,导出Excel
本文链接:https://blog.csdn.net/youcheng_ge/article/details/135018489


文章目录

  • 系列文章
  • 前言
  • 一、技术介绍
  • 二、项目源码
    • 2.1 创建日期子组件
    • 2.2 父组件使用
    • 2.3 子组件回调父组件方法
    • 2.4 数据查询
  • 三、效果展示
  • 四、资源链接


前言

本专栏为【Vue】,主要介绍Vue知识点。对于刚刚进入计算机世界的大学生来说,这里普及一个知识:HTML已经不仅仅只能开发 Web,也可以开发 AndroidiOS ,所以本文也会介绍 移动端开发。
我个人将安卓开发,分为两大方向:

①原生开发
使用安卓开发工具包(Android SDK)和Java编程语言来开发App的方式。原生开发允许开发者充分利用安卓平台的功能和特性,以及庞大的安卓开发社区资源。但是缺点就是对入门的门槛高,测试繁琐需要适配不同屏幕,对开发人员技术要求高。

②混合开发(加壳方式)
使用Web技术(网页三剑客HTML、CSS和JavaScript)开发App的方式。混合开发具有较高的开发效率和跨平台的优势,由于使用Web技术 界面渲染、不同屏幕适配(使用栅格技术)效果好。但是缺点就是对底层硬件调用库尚不完善,不过在不断完善中,常用的相机、相册、GPS、存储调用是没有问题的。

Vue是前端开发中的一个分支,学习Vue之前不可以速成,得先学会网页三剑客(HTML、CSS和JavaScript),因为Vue中依旧会使用到这些技术,Vue它不够是一种新的编程思想 组件化开发MVVM(数据双向绑定)

在这里插入图片描述

一、技术介绍

本文基于elementUI el-date-picker 组件,进行二次封装,做成了子组件,可以在自己的项目报表中使用。
为什么这样做?那是因为我在使用 change事件时,效果不理想,无法触发在值改变后,向父组件传输参数。
在这里插入图片描述

这里用到以下技术:

1、父组件向子组件传参
2、子组件向父组件传参
3、watch监听,参数变化

二、项目源码

2.1 创建日期子组件

为了和官网区分,我们自己的名字为 DatePickerCustom。

位置:src\components\DatePickerCustom\index.vue

<!-- 
 @desc 造轮子
 @author gyc
 @date 2023-12-18
 @note 日期范围通用组件
 -->
<template>
    <div class="content">
        <el-date-picker v-model="retvalue" type="daterange" align="right" unlink-panels range-separator="至"
            start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" :picker-options="pickerOptions">
        </el-date-picker>
    </div>
</template>


<script>
export default {
    name: 'DatePickerCustom',
    // 接收父组件传递的值
    props: {
        datetype: {
            type: String,
            required: false,
            default: '本月'
        }
    },
    data() {
        return {

            pickerOptions: {
                shortcuts: [
                    {
                        text: "本周",
                        onClick(picker) {
                            // 获取今天
                            const end = new Date();
                            // 获取当前周的第一天
                            const start = new Date(
                                end.getFullYear(),
                                end.getMonth(),
                                end.getDate() - ((end.getDay() + 6) % 7)
                            );
                            start.setTime(start.getTime());
                            picker.$emit("pick", [start, end]);
                        }
                    }, {
                        text: "本月",
                        onClick(picker) {
                            const end = new Date();
                            // 获取当前月的第一天
                            const start = new Date(end.getFullYear(), end.getMonth(), 1);
                            start.setTime(start.getTime());
                            picker.$emit("pick", [start, end]);
                        }
                    }, {
                        text: "上周",
                        onClick(picker) {
                            const dataValue = new Date();
                            const year = dataValue.getFullYear();
                            const month = dataValue.getMonth() + 1;
                            const day = dataValue.getDate();
                            var thisWeekStart; //本周周一的时间
                            if (dataValue.getDay() == 0) {
                                //周天的情况;
                                thisWeekStart =
                                    new Date(year + "/" + month + "/" + day).getTime() -
                                    (dataValue.getDay() + 6) * 86400000;
                            } else {
                                thisWeekStart =
                                    new Date(year + "/" + month + "/" + day).getTime() -
                                    (dataValue.getDay() - 1) * 86400000;
                            }
                            const prevWeekStart = thisWeekStart - 7 * 86400000; //上周周一的时间
                            const prevWeekEnd = thisWeekStart - 1 * 86400000; //上周周日的时间
                            const start = new Date(prevWeekStart); //开始时间
                            const end = new Date(prevWeekEnd); //结束时间
                            picker.$emit("pick", [start, end]);
                        }
                    }, {
                        text: "上月",
                        onClick(picker) {
                            const oDate = new Date();
                            var year = oDate.getFullYear();
                            var month = oDate.getMonth();
                            var start, end;
                            if (month == 0) {
                                year--;
                                start = new Date(year, 11, 1);
                                end = new Date(year, 11, 31);
                            } else {
                                start = new Date(year, month - 1, 1);
                                end = new Date(year, month, 0);
                            }

                            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]);
                        }
                    }
                ]
            },
            //日期值
            retvalue: '',
        };
    },
    watch: {
        retvalue: {
            handler(newVal) {
                if (newVal) {
                    // $emit() 向外触发父组件中方法
                    this.$emit("changeDate", this.retvalue)
                }
            }
        },
    },
    mounted() {

        // switch (this.datetype) {
        //     case "本周":
        //     var start;
        //     var end;
        //     var year, month, day;

        //         end = new Date();
        //         start = new Date(
        //             end.getFullYear(),
        //             end.getMonth(),
        //             end.getDate() - ((end.getDay() + 6) % 7)
        //         );
        //         start.setTime(start.getTime());
        //         picker.$emit("pick", [start, end]);
        //         break;

        //     case "本月":
        //         end = new Date();
        //         start = new Date(end.getFullYear(), end.getMonth(), 1);
        //         start.setTime(start.getTime());
        //         picker.$emit("pick", [start, end]);
        //         break;

        //     case "上周":
        //         const dataValue = new Date();
        //         year = dataValue.getFullYear();
        //         month = dataValue.getMonth() + 1;
        //         day = dataValue.getDate();
        //         var thisWeekStart; //本周周一的时间
        //         if (dataValue.getDay() == 0) {
        //             //周天的情况;
        //             thisWeekStart =
        //                 new Date(year + "/" + month + "/" + day).getTime() -
        //                 (dataValue.getDay() + 6) * 86400000;
        //         } else {
        //             thisWeekStart =
        //                 new Date(year + "/" + month + "/" + day).getTime() -
        //                 (dataValue.getDay() - 1) * 86400000;
        //         }
        //         const prevWeekStart = thisWeekStart - 7 * 86400000; //上周周一的时间
        //         const prevWeekEnd = thisWeekStart - 1 * 86400000; //上周周日的时间
        //         start = new Date(prevWeekStart); //开始时间
        //         end = new Date(prevWeekEnd); //结束时间
        //         picker.$emit("pick", [start, end]);
        //         break;

        //     case "上月":
        //         const oDate = new Date();
        //         year = oDate.getFullYear();
        //         month = oDate.getMonth();
        //         if (month == 0) {
        //             year--;
        //             start = new Date(year, 11, 1);
        //             end = new Date(year, 11, 31);
        //         } else {
        //             start = new Date(year, month - 1, 1);
        //             end = new Date(year, month, 0);
        //         }

        //         picker.$emit("pick", [start, end]);
        //         break;

        //     case "最近一周":
        //         end = new Date();
        //         start = new Date();
        //         start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
        //         picker.$emit("pick", [start, end]);
        //         break;

        //     case "最近一个月":
        //         end = new Date();
        //         start = new Date();
        //         start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
        //         picker.$emit("pick", [start, end]);
        //         break;

        //     default:
        //         break;
        // }
    },
    methods: {
        // handleChange() {
        //     alert("1:"+this.retvalue);
        //     // $emit() 向外触发父组件中方法
        //     this.$emit("getList1", this.retvalue)
        // }
    }
}

</script>

2.2 父组件使用

<el-form-item label="领用时间" prop="领用时间">
	 <date-picker-custom :datetype="'本周'" @changeDate="changeDate">
	 </date-picker-custom>
</el-form-item>

在这里插入图片描述

2.3 子组件回调父组件方法

/**
 * 接收子传父的数据
 */
 changeDate(val) {
  this.queryParams.领用时间 = val
},

这里注意一下,日期范围是一个数组就行了,它有两个值(开始日期、结束日期),其它没什么难度。
在这里插入图片描述

2.4 数据查询

我这里日期范围,主要是数据筛选用,做数据报表的。我就不贴代码了,每个人使用的目标不一样,根据自己需要来。
在这里插入图片描述

三、效果展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、资源链接

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

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

相关文章

proxysql读写分离组件部署

一、前言 在mysql一主两从架构的前提下&#xff0c;引入读写分离组件&#xff0c;可以极大的提高mysql性能&#xff0c;proxysql可以在高可用mysql架构发生主从故障时&#xff0c;进行自动的主从读写节点切换&#xff0c;即当mysql其他从节点当选新的主节点时&#xff0c;proxy…

使用yolov8和moviepy自动截取视频中人出现的片段

前言 这么长时间没写博客&#xff0c;其实主要是忙于一个行为实时检测大型项目的开发&#xff0c;最近闲下来就写这篇当年末总结了。这篇文章的起因还是某个业务需求&#xff0c;要求分析视频中有人的部分&#xff0c;没人的部分需要去掉&#xff0c;同时行为检测的数据集如果…

沉浸式数字文旅黑科技!用AI数字人升级景区体验

这年头文旅界也太卷了&#xff01; 在国家文化数字化战略的深入实施下&#xff0c;各地方文旅纷纷打造新型消费场景&#xff0c;以数字文旅提升消费产品的互动性和社交性&#xff0c;增强用户沉浸式体验。 其中&#xff0c;数字人乘着AI大语言模型的东风&#xff0c;被文旅品牌…

SAP 特殊采购类80简介

前面我们已经测试特殊采购类40、70,我们今天测试一下特殊采购类80。 特殊采购类80:在替代工厂生产,在成品层维护特殊采购类,需求和收货在计划工厂完成,成品生产和组件采购在生产工厂完成。 80采购类也是我们在SAP系统中实现跨工厂需求传递的一种方式。它具有传递方式简单、…

破局:国内母婴市场“红利减退”,母婴店如何拓客引流裂变?

破局&#xff1a;国内母婴市场“红利减退”&#xff0c;母婴店如何拓客引流裂变&#xff1f; 背景&#xff1a;中国母婴市场近年来人口出生率一直在恒定范围值&#xff0c;国家也在鼓励优生、多生政策&#xff0c;并且随着互联网的高速发展&#xff0c;人均可支配收入也在增加&…

XC6617 双路输出电容式触摸感应加PWM调光芯片 适用于触摸台灯、触摸调光LED灯

XC6617是一款单路输入双路输出电容式触摸感应PWM调光IC XC6617可在有介质(如玻璃、亚克力、塑料、陶瓷等)隔离保护的情况下实现触摸功能&#xff0c;安全性高。XC6617内置稳压源、上电复位/低压复位及环境自适应算法等多种措施&#xff0c;抗干扰性能优秀。 应用范围:…

程序员应用开发的神器——低代码

一、火热的低代码 低代码的热潮至今未消停&#xff0c;从阿里钉钉跨平台协作方式&#xff0c;再到飞书上的审批流程&#xff0c;以及目前我们接触到的表单审批、投票的模板&#xff0c;这些都是关于低代码的实现方式。 据Gartner最新报告显示&#xff0c;到2023年&#xff0c;超…

微信小程序隐藏返回首页按钮

当用户打开的小程序最底层页面是非首页时&#xff0c;默认展示“返回首页”按钮&#xff0c;开发者可在页面onLoad或者onShow中调用 hideHomeButton 进行隐藏 onLoad(options) {wx.hideHomeButton() }, 官方文档 链接&#xff1a;wx.hideHomeButton(Object object) | 微信开放…

flowable工作流学习笔记

不同版本使用方式不一样&#xff0c;案例使用两个版本6.5.0及6.6.0,学习中6.5.0 版本是独立框架&#xff08;服务单独部署&#xff09;使用的&#xff0c; 6.6.0与springboot集成&#xff0c; 6.5.0版本如下&#xff1a; 下载flowable&#xff1a; https://github.com/flowa…

【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

一、问题描述&#xff1a; 我们的 kafka 服务在更新&#xff08;添加&#xff09; ranger 权限时&#xff0c;会有极低的概率导致 MM2 同步服务报错&#xff0c;报错内容 Not Authorized。但是查看 ranger 权限是赋予的&#xff0c;并且很早配置的权限策略也会报错。 相关组件…

有损编码——Wyner-Ziv理论

有损编码是一种在信息传输和存储中常见的编码技术&#xff0c;其主要目标是通过牺牲一定的信息质量&#xff0c;以换取更高的压缩效率。相比于无损编码&#xff0c;有损编码可以在保证一定程度的信息还原的前提下&#xff0c;使用更少的比特数来表示信息。Wyner-Ziv理论是一种重…

类的6个默认成员函数(上)

<center>Efforts of today and tomorrow.<center>今天的努力&#xff0c;明天的实力。开启本文&#xff01; 引入&#xff1a;  如果一个类中森么都没有&#xff0c;那么这个类就是空类&#xff0c;然而空类中真的是什么都没有吗&#xff1f; 其实不然&#xff0c…

第五节 操作符

第五节 操作符 目录 一&#xff0e; 操作符分类二&#xff0e; 算术操作符三&#xff0e; 移位操作符1. 二进制位2. 左移操作符3. 右移操作符 四&#xff0e; 位操作符1. 按位与2. 按位或3. 按位异或 五&#xff0e; 赋值操作符六&#xff0e; 单目操作符1. 概述2. sizeof是操作…

【Spring教程31】SSM框架整合实战:从零开始学习SSM整合配置,如何编写Mybatis SpringMVC JDBC Spring配置类

目录 1 流程分析2 整合配置2.1 步骤1&#xff1a;创建Maven的web项目2.2 步骤2:添加依赖2.3 步骤3:创建项目包结构2.4 步骤4:创建SpringConfig配置类2.5 步骤5:创建JdbcConfig配置类2.6 步骤6:创建MybatisConfig配置类2.7 步骤7:创建jdbc.properties2.8 步骤8:创建SpringMVC配置…

k8s安装配置dashboard

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

kali-捆绑应用程序

文章目录 一、安装开发环境二、开始捆绑三、开始监听 操作环境 kali windows 一、安装开发环境 ┌──(kali㉿kali)-[~] └─$ sudo -i [sudo] kali 的密码&#xff1a;┌──(root㉿kali)-[~] └─# whoami root┌──(root㉿kali)-[~] └─# apt update …

(七)STM32 NVIC 中断、优先级管理及 AFIO 时钟的开启

目录 1. 中断相关知识简介 1.1 什么是中断 1.2 什么是内中断、外中断 1.3 什么是可屏蔽中断、不可屏蔽中断 2. CM3 内核中断介绍 2.1 F103系统异常清单 2.2 F103 外部中断清单 3. NVIC 简介 3.1 NVIC 寄存器简介 3.2 NVIC 相关寄存器的介绍 4. 中断优先级 4.1 优先…

uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例

先下载ucharts H5示例源码&#xff1a; uCharts: 高性能跨平台图表库&#xff0c;支持H5、APP、小程序&#xff08;微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序&#xff09;、Vue、Taro等更多支持canvas的框架平台&#…

洛谷 P8794 [蓝桥杯 2022 国 A] 环境治理

文章目录 [蓝桥杯 2022 国 A] 环境治理题目链接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE给点思考 [蓝桥杯 2022 国 A] 环境治理 题目链接 https://www.luogu.com.cn/problem/P8794 题目描述 LQ 国拥有 n n n 个城市&#xff0c;从 0 0 …

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表