vue中 日期选择--本日、本周、本月、本年选择器实现(基于elementui)

news2024/11/28 5:44:13

效果图:

由于项目需要图标统计展示,需要日期美观化选择如上图所示,代码如下:

<template>
    <div class="el-page body">
        <el-row>
           <el-col class="statistic-analysis-report-style" :span="9">
               <div style="position: relative;">
                <div class="chart-date-picker">
                    <span class="commom-font-size">每日上报统计</span>
                    <el-radio-group v-model="reportDateType" size="mini" @change="handleChangeReport('0')" class="all-time-position">
                        <el-radio-button label="date">本日</el-radio-button>
                        <el-radio-button label="week">本周</el-radio-button>
                        <el-radio-button label="month">本月</el-radio-button>
                        <!-- <el-radio-button label="year">本年</el-radio-button> -->
                    </el-radio-group>
                    <el-date-picker ref="reoprtDatePicker" :clearable="true" v-model="reportDate" size="mini" :picker-options="pickerOptions" :key="reportDateType" :type="reportDateType" 
                    :format="reportDateType==='week'?'yyyy 第 WW 周':null" :placeholder="reportDateType==='date'?'选择日':reportDateType==='week'?'选择周':reportDateType==='month'?'选择月'
                    :reportDateType==='year'?'选择年':''"  
                    class="statistic-analysis-report-spot-time-select" @change="handleChangeReport()"></el-date-picker>
                </div>
                <el-divider></el-divider>
                <div ref="chartbox" class="chartBoxClass"></div>
               </div>
           </el-col>
 
        </el-row>
        
    </div>
</template>
   
<script>
import * as echarts from "echarts";
export default {
    name: 'XXXX',
    extends: Base,
    components: {
      
    },
    data() {
        return {
           
            reportDateType: "",
            reportDate: null,
            reportTime:'',
            reportChart: {},//日常上报图表
            pickerOptions: {
                disabledDate(date) {
                    return date.getTime() > Date.now(); // 禁用大于今天的日期
                    }
		    },  

        }
    },
    created() {
        this.getReportData();
    },
    watch: {
       
    },
    computed: {

       
    },
    mounted() { },
    methods: {
       
      
        /**
         * 上报
         */
        handleChangeReport(type) {
            let self=this;
            if(type=='0'){
                self.reportDate=new Date();
            }else if(type=='1'){
                
            }
            let obj = self.timeDifferenceReport(self.reportDate, self.reportDateType);
        },
        timeDifferenceReport() {
            let timeObj = {};
            let time = new Date(utils.dateFormat(this.reportDate, "yyyy-MM-dd")); // 可入参指定时间
            let year = time.getFullYear();
            let month = time.getMonth();
            let reportDate = time.getDate(); // 获取日期
            let day = time.getDay(); // 获取周几,0-6,0表示周日
            let _day = day == 0 ? 7 : day;
            switch (this.reportDateType) {
                case "date":
                timeObj = {
                    startTime: `${utils.dateFormat(this.reportDate, "yyyy-MM-dd")} 00:00:00`,
                    endTime: `${utils.dateFormat(this.reportDate, "yyyy-MM-dd")} 23:59:59`,
                };
                break;
                case "week":
                // 获取周一日期
                var startDate = new Date(year, month, reportDate - _day + 1);
                // 获取周日日期
                var endDate = new Date(
                    new Date(startDate).getTime() + 6 * 24 * 3600 * 1000
                );
                timeObj = {
                    startTime: `${utils.dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
                    endTime: `${utils.dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
                };
                break;
                case "month":
                var startDate = new Date(year, month, 1);
                var endDate = new Date(year, month + 1, 0);
                timeObj = {
                    startTime: `${utils.dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
                    endTime: `${utils.dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
                };
                break;
                case "year":
                var startDate = new Date(year, 0, 1);
                var endDate = new Date(year, 12, 0);
                timeObj = {
                    startTime: `${utils.dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
                    endTime: `${utils.dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
                };
                break;
            }
            return timeObj;
        },

        selectChange(data){

        },

        // timeSelectChange(data){

        // },
        getReportData(){
            let self=this;
            let reportNum=9;
            let reportLeftPosition=reportNum>10?(reportNum>100?(reportNum>1000?(reportNum>10000?(reportNum>100000?'43%':'43%'):'45%'):'46%'):'47%'):'48%';
            self.$nextTick(() => {
                const option = {
                //标题
                title: {
                  show: true,
                  text: '完成率',//'\n'指定换行
                //   subtext: 'Fake Data', 副标题
                  left: 'center',
                  textStyle: {//主标题样式
                    fontFamily: 'Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif',
                    fontSize: 12,
                    fontWeight: 'bold',
                    },
                },
                legend:
                {
                  // top: 'bottom',
                //   orient: 'vertical', //注释文字颜色方向为垂直
                  x:'center',
                  // y:'bottom',
                  top:'55%',
                  icon: 'circle',
                },
               
                tooltip: {
                  trigger: 'item',
                //   formatter:"{b}" //不展示value值
                     formatter(param) {
                        return param.name+param.value+'人';
                    }
                },
                //为环形图中间添加文字
                graphic:{type: "text",left: reportLeftPosition,top: "33%",style: {text: reportNum+"人",textAlign: "center",fill: "#32373C",fontSize: 14,}},
                series: [
                  {
                    type: "pie", // type设置为饼图
                    center: ['50%', '35%'], //位置
                    radius: ['25%', '41%'], //圆的环的大小
                    avoidLabelOverlap: false,
                    label: {
                      show: true, //是否展示提示
                    //   position: 'center', //提示位置
                      // formatter: "{b} : {c}"
                      formatter(param) {
                        // correct the percentage
                        return param.value+'人';
                        }
                    },
                    //鼠标悬停或点击等交互操作的样式
                    // emphasis: {
                    //   label: {
                    //     show: false,
                    //     fontSize: 14,
                    //     fontWeight: 'bold',
                    //     borderWidth:1,
                    //     borderColor:'#5470c6'
                    //   }
                    // },
                    //自定义线条和item颜色
                    labelLine: {
                        show: true
                      },
                      color:['#1890FF','#FAAD15',],
                    data: [
                  
                      {
                        value: Number(1),
                        name: "已完成上报"
                      },
                      {
                        value: Number(2),
                        name: "未完成上报"
                      },
                     
                    ]
                  }
                ]
              };
              self.reportChart = echarts.init(self.$refs.chartbox);
              self.reportChart.setOption(option);
            //   console.log( self.reportChart," self.reportChart")
            });

           
        },
       
    },
}
</script>
<style lang="scss" scoped>

//
::v-deep.chart-date-picker {
    margin: 20px;
    .all-time-position{
        margin-left: 20px;
    }
    //日常上报日期选择
    .el-input--mini .el-input__inner {
        height: 34px;
    }
    //日常上报日期选择
    .statistic-analysis-report-spot-time-select{
        // width: 140px;
        vertical-align: middle;
        margin-left: 10px;
    }
    //日期
    .el-radio-button--mini .el-radio-button__inner {
        height: 34px;
    }
    .el-radio-button__orig-radio:checked + .el-radio-button__inner {
        color: #FFFFFF;
        background-color: #BA292E;
        border-color: #BA292E;
        -webkit-box-shadow: -5px 0 0 0 #BA292E;
        box-shadow: -5px 0 0 0 #BA292E;
    }
    .el-radio-button__inner:hover {
        color: #BA292E;
    }
}
</style>

日期格式化: 

 dateFormat(date, format = 'yyyy-MM-dd hh:mm:ss') {
      if (date !== 'Invalid Date'&&date!=null) {
        var o = {
          'M+': date.getMonth() + 1, // month
          'd+': date.getDate(), // day
          'h+': date.getHours(), // hour
          'm+': date.getMinutes(), // minute
          's+': date.getSeconds(), // second
          'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
          'S': date.getMilliseconds() // millisecond
        }
        if (/(y+)/.test(format)) {
          format = format.replace(RegExp.$1,
            (date.getFullYear() + '').substr(4 - RegExp.$1.length))
        }
        for (var k in o) {
          if (new RegExp('(' + k + ')').test(format)) {
            format = format.replace(RegExp.$1,
              RegExp.$1.length === 1 ? o[k]
                : ('00' + o[k]).substr(('' + o[k]).length))
          }
        }
        return format
      }
      return ''
    }

 

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

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

相关文章

Elastic Search 6.x 版本 rollover 配置

背景 业务里有发送消息的请求&#xff0c;如短信、邮件、企信等&#xff0c;这些数据都会存储到 ES 中&#xff0c;用于数据的查询和问题排查等。每天都有几十万至几百万的数据&#xff0c;手动删除数据也比较繁琐&#xff0c;可以通过 ES 的 rollover 机制来实现根据条件自动…

PHP框架详解 - symfony框架

首先说一下为什么要写symfony框架&#xff0c;这个框架也属于PHP的一个框架&#xff0c;小编接触也是3年前&#xff0c;原因是小编接触Golang&#xff0c;发现symfony框架有PHP框架的东西也有Golang的东西&#xff0c;所以决定总结一下&#xff0c;有需要的同学可以参看小编的G…

【数据结构与算法】(7)基础数据结构之双端队列的链表实现、环形数组实现示例讲解

目录 2.6 双端队列1) 概述2) 链表实现3) 数组实现习题E01. 二叉树 Z 字层序遍历-Leetcode 103 2.6 双端队列 1) 概述 双端队列、队列、栈对比 定义特点队列一端删除&#xff08;头&#xff09;另一端添加&#xff08;尾&#xff09;First In First Out栈一端删除和添加&…

电脑上常见的绘图软件有哪些?

现在在电脑上绘图很流行&#xff0c;不仅可以随时更改&#xff0c;还可以提高绘图效率&#xff0c;绘图软件中有很多工具。市场上的计算机绘图软件种类繁多。包括艺术设计、工业绘图和3D绘图。那么每个绘图软件都有自己的特点。那么&#xff0c;哪个更适合计算机绘画软件呢&…

信任与创新 | 回顾通付盾的2023!

-END- 数信云&#xff0c;基于区块链与人工智能的数据安全应用与服务平台

基于SpringBoot的后端导出Excel文件

后端导出Excel&#xff0c;前端下载。 文章目录 后端导出Excel引入依赖写入响应 前端下载后端导出失败和成功返回的内容类型不同&#xff0c;因此需要分别判断。 工具类ServletUtils.javaFileUtils.javafile.js 后端导出Excel 引入依赖 poi 操作xls&#xff0c;doc…&#xff…

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)

文章目录 0. Background1. Method2. Code3. Example: 雄鹿红外图像标注3.1 选择色彩空间3.2 执行阈值3.3 执行形态学操作3.4 轮廓分析以找到边界框3.5 过滤不需要的轮廓3.6 绘制边界框3.7 以需要的格式保存Reference本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包…

Flutter开发模仿百度云盘创建文件夹功能Draggable和DragTarget的混合使用

使用LongPressDraggable和DragTarget写了个类似于百度云盘管理文件和文件夹的功能&#xff08;为了避免和列表的滑动手势冲突&#xff0c;所以采用LongPressDraggable而不是Draggable&#xff09;&#xff1a; 1、拖拽文件到文件夹中 2、拖拽两个文件可以合并成一个新的文件夹…

【linux】git和gdb调试工具

在linux下提交代码同步到gitee 1.创建一个新的仓库&#xff08;演示步骤&#xff09; 2.init 这两个步骤用于识别提交代码的身份&#xff0c;一个你的名字&#xff0c;一个你的邮箱 开启本地仓库 克隆本地仓库成功 我们将这个仓库拷到了111目录底下. 我们发现少了一个.gitig…

window 镜像---负载篇

前提&#xff1a;需要修改window的powershell执行脚本的策略 步骤&#xff1a;以管理员身份打开powershell&#xff0c;执行 Get-ExecutionPolicy查看当前执行策略&#xff0c;若返回值是Restricted&#xff0c;需执行Set-ExecutionPolicy RemoteSigned powershell 版本信息&am…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人&#xff01; 今天分享一期 MySQL集群方案&#xff1a;主从集群 也是最常用的一种 CSDN 成就一亿技术人&#xff01; 目录 使用主从复制的原因&#xff08;优点&#xff09; 主从复制的过程&#xff08;原理&#xff09; 了解两大线程&#xff08; I/O…

7min到40s:SpringBoot 启动优化实践!

目录 背景 1 耗时问题排查 1.1 观察 SpringBoot 启动 run 方法 1.2 监控 Bean 注入耗时 2 优化方案 2.1 如何解决扫描路径过多&#xff1f; 2.2 如何解决 Bean 初始化高耗时&#xff1f; 3 新的问题 3.1 SpringBoot 自动化装配&#xff0c;让人防不胜防 3.2 使用 sta…

大带宽服务器托管的特点和考虑因素

很多公司和企业对于使用大带宽服务器的需求和存储不一样&#xff0c;为了满足不同的用户需求&#xff0c;大带宽服务器托管是个不错的选择&#xff0c;小编为您整理发布大带宽服务器托管的特点和要考虑的因素。 大带宽服务器托管是一种服务器托管服务&#xff0c;其主要特点是…

GLIP:零样本学习 + 目标检测 + 视觉语言大模型

GLIP 核心思想GLIP 对比 BLIP、BLIP-2、CLIP 主要问题: 如何构建一个能够在不同任务和领域中以零样本或少样本方式无缝迁移的预训练模型&#xff1f;统一的短语定位损失语言意识的深度融合预训练数据类型的结合语义丰富数据的扩展零样本和少样本迁移学习 效果 论文&#xff1a;…

JetPackCompose之Text使用指北

Jetpack Compose系列(6) - 文本组件 对应View体系中传统的TextView&#xff0c;Jetpack Compose中用Text组件来显示文本信息。跟其他组件一样&#xff0c;它在构造函数里就包含控制文本显示样式的一些属性&#xff0c;下面是其参数及解释&#xff1a; Composable fun Text(te…

从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

一、创建项目 1、首先创建一个maven项目&#xff0c;pom文件如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

力扣面试150 只出现一次的数字Ⅱ 哈希 统计数位 DFA有穷自动机

Problem: 137. 只出现一次的数字 II 文章目录 思路&#x1f496; 哈希&#x1f496; 位数统计&#x1f496; DFA 状态机 思路 &#x1f468;‍&#x1f3eb; 参考 &#x1f496; 哈希 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) cl…

《动手学深度学习(PyTorch版)》笔记7.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…