vue2中年份季度选择器(需要安装element)

news2025/1/11 12:48:10

调用

    <!--父组件调用-->
    <QuarterCom v-model="quart" clearable default-current/>

组件代码

<template>
  <div>
    <span style="margin-right: 10px">{{ label }}</span>
    <mark
        style="position:fixed;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0);z-index:999;"
        v-show="showSeason"
        @click.stop="showSeason=false"
    ></mark>
    <el-input placeholder="请选择季度" :size="size" v-model="showValue" prefix-icon="el-icon-date"
              :style="{width}" @focus="showSeason=true" readonly :clearable="true">
      <i slot="suffix" class="el-input__icon el-icon-close pointer hover_blue" v-if="showValue && clearable" @click="clearAll"></i>
    </el-input>
    <el-card
        class="box-card"
        v-show="showSeason"
    >
      <div slot="header" class="clearfix" style="text-align:center;padding:0">
        <button
            type="button"
            aria-label="前一年"
            class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left pointer"
            @click="editYear()"
        ></button>
<!--        <span role="button" class="el-date-picker__header-label">{{year}}年</span>-->
        <el-date-picker
            size="mini"
            type="year"
            v-model="year"
            format="yyyy"
            placeholder="选择年">
        </el-date-picker>
        <button
            type="button"
            aria-label="后一年"
            @click="editYear(1)"
            class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right pointer"
        ></button>
      </div>
      <div class="season_box">
        <div
            v-for="(item, index) in list"
            :key="index"
            :class="['season_box_one', 'hover_highlight',index === quarter ? 'active_highlight' : '']"
            @click="quarter = index"
        >{{ item.label }}</div>
      </div>
    </el-card>
  </div>
</template>
<script>
/**
 * @desc:  defaultCurrent可以默认当前年,当前季度
 * @desc:  返回格式可以自行修改,默认2023年第一季度
 * @desc:  需要element组件支持
 * @desc:  @dateChange 获取年季度对象数据
 */
export default {
  name: 'QuarterDate',
  props: {
    value: String,
    // 标签
    label: {
      default: '季度',
      type: String
    },
    // medium / small / mini
    size: {
      default: 'medium',
      type: String
    },
    // medium / small / mini
    clearable: {
      default: false,
      type: Boolean
    },
    // 宽度
    width: {
      default: '190px',
      type: String
    },
    // 默认当前年当前季度
    defaultCurrent: {
      default: false,
      type: Boolean
    }
  },
  computed: {
    showText(){
      return new Date(this.year).getFullYear() + '年' + this.list[this.quarter].text
    }
  },
  data() {
    return {
      list: [
        {label: 'Q1', value: 0, text: '第一季度'},
        {label: 'Q2', value: 1, text: '第二季度'},
        {label: 'Q3', value: 2, text: '第三季度'},
        {label: 'Q4', value: 3, text: '第四季度'}
      ],
      showSeason: false,
      year: new Date(),  // 年
      quarter: 0, // 默认季节
      showValue: this.value,
    }
  },
  watch: {
    showText(nv){
      this.showValue = nv
      this.$emit('input', nv)
      this.$emit('dateChange', {
        year: new Date(this.year).getFullYear(),
        quarter: this.list[this.quarter]
      })
    },
    showValue: {
      handler(nv){
        // 双向绑定数据回显
        if(this.value !== this.showText){
          const year = Number(nv.substring(0,4))
          try {
            this.list.forEach((item, index) => {
              if(nv.includes(item.text)) {
                this.quarter = index
                throw true
              }
            })
          }catch (e) {
          }
          if( year > 1970 ) {
            this.year = new Date(year, 0, 1)
          } else if(this.defaultCurrent){
            this.year = new Date()
            this.quarter = Math.ceil((new Date().getMonth() + 1)/3)
          }
        }
      },
      immediate: true
    },
  },
  methods: {
    editYear(years = -1) {
      this.year = new Date(new Date(this.year).getFullYear() + years, 0, 1)
    },
    clearAll(){
      this.showValue = ''
    }
  }
}
</script>

<style scoped>
.box-card {
  width:322px;
  padding: 0 3px 20px;
  margin-top:10px;
  z-index:1999;
  position: absolute;
}

.season_box_one {
  color: #606266;
  width: 30px;
  height: 30px;
  line-height: 30px;
  text-align: center;
  cursor: pointer;
  border-radius: 50%;
}

.hover_highlight:hover {
  background-color: #409dfe;
  color: white !important;
}
.active_highlight {
  background-color: #409dfe;
  color: white !important;
  position: relative;
}
.active_highlight::before {
  width: 6px;
  height: 6px;
  content: '';
  background-color: #409dfe;
  border-radius: 50%;
  position: absolute;
  left: calc(50% - 3px);
  bottom: -12px;
}

.season_box {
  text-align: center;
  height: 30px;
  display: grid;
  width: 100%;
  grid-template-columns: repeat(4, 30px);
  gap: 30px;
  justify-content: center;
  align-items: center;
}

.hover_blue:hover {
  color: #409dfe;
}

.pointer {
  cursor: pointer;
}
</style>

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

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

相关文章

人工智能安全-2-非平衡数据处理(2)

5 算法层面 代价敏感&#xff1a;设置损失函数的权重&#xff0c;使得少数类判别错误的损失大于多数类判别错误的损失&#xff1b; 单类分类器方法&#xff1a;仅对少数类进行训练&#xff0c;例如运用SVM算法&#xff1b; 集成学习方法&#xff1a;即多个分类器&#xff0c;然…

【Java 基础篇】Java网络编程实时数据流处理

在现代计算机应用程序中&#xff0c;处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据&#xff0c;需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库&#xff0c;可以用于处理实时数据流。本文将详细介绍如何使用Java进…

Android之AMessage机制存/取原理(四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

从零学习开发一个RISC-V操作系统(三)丨嵌入式操作系统开发的常用概念和工具

本篇文章的内容 一、嵌入式操作习系统开发的常用概念和工具1.1 本地编译和交叉编译1.2 调试器GDB&#xff08;The GNU Project Debugger&#xff09;1.3 QEMU模拟器1.4 项目构造工具Make 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记&#xff0c;计划从RISC…

Gnuplot:安装与使用备忘

异常信息 问题起源于 signalp-4.1 调用 gnuplot 进行画图&#xff0c;在画图的时候提示不支持 png 格式结果&#xff1a; $ gnuplotG N U P L O TVersion 5.0 patchlevel 0 last modified 2015-01-01Copyright (C) 1986-1993, 1998, 2004, 2007-2015Thomas Williams, Coli…

服务网格的工作原理:解析服务网格的核心组件和通信模式

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

实用!Python大型Excel文件处理:快速导入、导出与批量处理

Python 是一种功能强大的编程语言&#xff0c;它提供了丰富的库和工具&#xff0c;使得处理大型 Excel 文件变得容易和高效。下面将介绍如何使用 Python 快速导入、导出和批量处理大型 Excel 文件。下面是一些建议和实践经验&#xff0c;希望能对你有所帮助。 一、Excel 文件处…

【C语言】求一个整数的二进制序列中1的个数的三种方法

方法一&#xff1a;逐位%2法 该方法的初步测试代码如下: int NumberOf1(int n) {int count 0;while (n){if (n % 2 1){count;}n n / 2;}return count; } 众所周知&#xff0c;数据在内存里以补码的形式存储&#xff0c;这是为了简化计算机的结构设计&#xff0c;同时也提…

SpringBoot集成Prometheus实现监控

SpringBoot配置Prometheus pom.xml 引入监控以及prometheus依赖 <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><dependency><groupId>org.springfram…

Excel——时间戳与标准北京时间的互相转换

一、背景 在excel中将13位毫秒级别的时间戳转换为标准的日期格式(yyyy-mm-dd hh:mm:ss.000)&#xff0c;使用如下模板 TEXT(<source_cell>/1000/8640070*36519,"yyyy-mm-dd hh:mm:ss.000") 在excel中将10位秒级别的时间戳转换为标准的日期格式(yyyy-mm-dd h…

【华为云云耀云服务器L实例评测】- 云原生实践,快捷部署人才招聘平台容器化技术方案!

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

WebGL 选中一个表面

目录 选中一个表面 示例程序&#xff08;PickFace.js&#xff09; 代码详解 示例效果 选中一个表面 ​​​​​​​WebGL 选中物体_山楂树の的博客-CSDN博客可以使用同样的方法来选中物体的某一个表面。这一节在PickObject程序的基础上编写了PickFace程序&#xff0c;后…

计算机毕业设计 基于SSM+Vue的物资存储系统(以消防物资为例)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

docker安装使用xdebug

docker安装使用xdebug 1、需要先安装PHP xdebug扩展 1.1 到https://pecl.php.net/package/xdebug下载tgz文件&#xff0c;下载当前最新稳定版本的文件。然后把这个tgz文件放到php/extensions目录下&#xff0c;记得install.sh中要替换解压的文件名&#xff1a; installExtensio…

uniapp 离线打包 plus.runtime.install 安装页面不弹起

uniapp 离线打包 plus.runtime.install 安装页面不弹起 updateVersion(webview : any, eventTitle : string, eventContent : string) {const loading plus.nativeUI.showWaiting(准备下载);var dtask plus.downloader.createDownload(eventContent,{method: GET,timeout: 5…

银行存款问题:整存零取

整存零取月息为0.63%&#xff0c;每年底取出1000&#xff0c;五年刚好取完&#xff0c;计算最初存入金额。 (本笔记适合基本熟悉一门编程语言的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程…

Ae 效果:CC Wide Time

时间/CC Wide Time Time/CC Wide Time CC Wide Time &#xff08;CC 宽泛时间&#xff09;能够将前后不同时间的帧叠加在一起&#xff0c;从而创建移动物体的运动轨迹&#xff0c;实现重影、运动模糊、光影跟随等效果。 可以配合其它的效果使得本效果有更多的可控性。 比如&…

py实验一

2、九九乘法表。 编写程序&#xff0c;输出九九乘法表。 源代码&#xff1a; for a in range(1, 10): for b in range(1, a1): print(f"{a}*{b}{a * b}", end" ") print() 列出测试数据和实验结果截图&#xff1a; 3、编写程序&#xff0…

progeny PROGENy

单细胞之富集分析-6&#xff1a;PROGENy - 简书 (jianshu.com) #request 2 .libPaths(c( "/home/data/t040413/R/x86_64-pc-linux-gnu-library/4.2","/home/data/t040413/R/yll/usr/local/lib/R/site-library", "/home/data/refdir/Rlib/", &qu…

tdesign的文件上传(微信小程序+idea的springboot)

目录 1. springboot后端 1.1 FileController.java 1.2 listener文件的ErpApplicationListener.java 1.3 【重点&#xff01;】FileServiceImpl层 1.4 IFileService 1.5 StringUtil通用类 1.6 主程序加一个监听器 1.7 application.yml文件 2. 微信小程序端 2.1 TDesign的…