vue季度选择器(antd2.0 版本无此控件,单独写一个)

news2025/3/9 10:09:04

vue季度选择器

  • 效果显示

效果显示

在这里插入图片描述

<template>
  <div>
    <a-popover
      placement="bottom"
      overlayClassName="season-picker"
      trigger="click"
      v-model="showSeason"
    >
      <template #content>
        <div class="season-picker-box">
          <div class="season-picker-box_header">
            <a-icon
              title="前一年"
              class="season-picker-box_header-left"
              type="double-left"
              @click="prev"
            ></a-icon>
            <span
              role="button"
              class="season-picker-box_header-label"
              >{{ year }}年</span
            >

            <a-icon
              type="double-right"
              title="后一年"
              @click="next"
              class="season-picker-box_header-right"
            ></a-icon>
          </div>

          <div class="season-picker_content">
            <table class="el-month-table">
              <tr>
                <td>
                  <div>
                    <a
                      :class="{ choose: seasonValue[0] === year && seasonValue[1] === 1 }"
                      class="cell"
                      @click="selectSeason(1)"
                      >一季度</a
                    >
                  </div>
                </td>
                <td>
                  <div>
                    <a
                      :class="{ choose: seasonValue[0] === year && seasonValue[1] === 2 }"
                      class="cell"
                      @click="selectSeason(2)"
                      >二季度</a
                    >
                  </div>
                </td>
              </tr>
              <tr>
                <td>
                  <div>
                    <a
                      :class="{ choose: seasonValue[0] === year && seasonValue[1] === 3 }"
                      class="cell"
                      @click="selectSeason(3)"
                      >三季度</a
                    >
                  </div>
                </td>
                <td>
                  <div>
                    <a
                      :class="{ choose: seasonValue[0] === year && seasonValue[1] === 4 }"
                      class="cell"
                      @click="selectSeason(4)"
                      >四季度</a
                    >
                  </div>
                </td>
              </tr>
            </table>
          </div>
        </div>
      </template>
      <a-input
        v-model="strValue"
        readOnly
      />
    </a-popover>
  </div>
</template>

<script>
const CNNUM = ["一", "二", "三", "四"];
const CHOOSEMONTH = [
  ["01", "02", "03"],
  ["04", "05", "06"],
  ["07", "08", "09"],
  ["10", "11", "12"],
];
// 季度选择器 antd当前版本没有 所以写一个
export default {
  name: "quarterPicker",
  model: {
    prop: "value",
    event: "change",
  },
  props: {
    value: {
      type: Array,
      default: () => [],
    },
    defaultValue: {
      type: Array,
      default: () => [],
    },
  },
  watch: {
    defaultValue: {
      handler(newVal) {
      // ['2024-07', '2024-09']
        if (newVal && newVal.length) {
          this.dealDate(newVal);
        }
      },
      deep: true,
      immediate: true,
    },
    value(newVal) {
     // ['2024-07', '2024-09']
      if (newVal && newVal.length) {
        this.dealDate(newVal, true);
      }
    },
  },

  data() {
    return {
      showSeason: false,
      year: new Date().getFullYear(),
      strValue: "",
      seasonValue: ["", ""],
    };
  },

  methods: {
    dealDate(date, isValue) {
      this.year = Number(date[0].split("-")[0]);
      const month = date[0].split("-")[1];
      CHOOSEMONTH.forEach((item, index) => {
        if (item.indexOf(month) !== -1) {
          this.selectSeason(index + 1, isValue);
        }
      });
    },
    prev() {
      this.year = this.year * 1 - 1;
    },
    next() {
      this.year = this.year * 1 + 1;
    },
    selectSeason(i, isValue = false) {
      this.strValue = `${this.year}-${CNNUM[i - 1]}季度`;
      if (!isValue) {
      // 传入该季度的开始月份和结束月份
        this.$emit("change", [
          `${this.year}-${CHOOSEMONTH[i - 1][0]}`,
          `${this.year}-${CHOOSEMONTH[i - 1][2]}`,
        ]);
      }
      this.seasonValue = [this.year, i];
      this.showSeason = false;
    },
  },
};
</script>


<style lang="less" scoped>
.season-picker {
  margin: 0;
  padding: 0;
  color: #000000d9;
  font-size: 14px;
  .ant-popover-inner-content {
    overflow: hidden;
    vertical-align: top;
    background: #fff;
    border-radius: 2px;
    box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d;
    transition: margin 0.3s;
    width: 200px;
    color: #000000d9;
    padding: 0 8px !important;
    .ant-popover-arrow {
      display: none !important;
    }
  }
  &-box {
    &_header {
      display: flex;
      height: 34px;
      line-height: 28px;
      color: #000000d9;
      box-sizing: border-box;
      border-bottom: 1px solid #f0f0f0;
      justify-content: space-between;
      margin-bottom: 15px;
      &-left,
      &-right {
        line-height: 28px;
        color: #00000040;
        &:hover {
          color: #000000d9;
        }
      }
    }
    .el-month-table {
      width: 100%;
    }
    .el-month-table td div {
      margin: 10px;
      font-size: 14px;
      .cell {
        font-size: 12px;
        color: #333333;
        padding: 8px;
        &:hover {
          color: #40a9ff;
          background: #e6f7ff;
          cursor: pointer;
        }
      }
    }
    .choose {
      color: #fff !important;
      background: #1890ff !important;
    }
  }
}
</style>

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

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

相关文章

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

利用GeoWave导入矢量数据到HBase/Accumulo数据库

前言 最近在做有关地理时空大数据的实验&#xff0c;本文将介绍如何利用geowave框架&#xff0c;将矢量数据导入到HBase或Accumulo等NoSQL数据库中。 软件版本&#xff1a; Hadoop: 2.10.2 Zookeeper: 3.6.4 geowave: 1.2.0 Accumulo&#xff1a;1.9.3 HBase: 1.4.0 Ja…

常回家看看之Tcache Stashing Unlink Attack

前言&#xff1a; 在开始了解这个攻击手法的前提&#xff0c;需要先了解一个函数也就是calloc函数&#xff0c;众所周知&#xff0c;当libc版本大于等于2.27的时候会引入tcachebin&#xff0c;而Tcache Stashing Unlink Attack就是发生在2.27版本以上&#xff0c;那么这个和ca…

心情追忆- SEO优化提升用户发现率

之前&#xff0c;我独自一人开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端&#xff08;小程序&#xff09;开发、后端搭建到最终部署。经过一个月的努力&#xff0c;通过群聊分享等方式&#xff0c;用…

深入探索:createThread与cancelThread的用法及实例

在多线程编程领域,线程的创建与管理是核心技能之一。本文将详细介绍两个关键函数:createThread(用于创建新线程)和cancelThread(用于取消已存在的线程),并通过具体实例展示它们的用法。需要注意的是,不同的编程语言和线程库可能有不同的API设计,但基本概念是相通的。本…

Cherno C++学习笔记 P36 初始化类成员

这一篇文章我们主要讲一下如何初始化类成员&#xff0c;并给出一个初始化类成员的小技巧。我们都知道&#xff0c;我们会使用构造函数来初始化我们的类成员变量。 首先我们来举一个简单的小例子&#xff0c;展现一下构造函数的功能&#xff1a; #include<iostream> #in…

快速解决git@github.com: Permission denied (publickey)

在使用github进行项目克隆的时候&#xff0c;有些时候会出现“gitgithub.com: Permission denied (publickey)”的错误。这个问题大部分是由于新设备本地密钥未加入gitbub列表中&#xff0c;我们可以通过加入新机器身份验证解决问题。 一、问题现象 二、问题解决 2.1&#xf…

移动端h5自适应rem适配最佳方案

网页开发中&#xff0c;我们常用的单位有如下几个&#xff1a; px&#xff1a;像素固定&#xff0c;无法适配各分辨率的移动设备em: 该单位受父容器影响&#xff0c;大小为父元素的倍数rem: 因为html根元素大小为16px&#xff0c;所以默认 1rem 16px&#xff0c;rem只受根元素…

C语言程序设计P5-5【应用函数进行程序设计 | 第五节】—知识要点:变量的作用域和生存期

知识要点&#xff1a;变量的作用域和生存期 视频&#xff1a; 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 有一个一维数组&#xff0c;内放 10 个学生成绩&#xff0c;写一个函数&#xff0c;求出平均分、最高分和最低分。 任务要求用一个函数来完…

Jenkins与SonarQube持续集成搭建及坑位详解

Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh&#xff0c;所以不用安装&#xff0c;10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…

[搜广推]王树森推荐算法——基于物体的协同过滤

基于物体的协同过滤 ItemCF 基于物体的协同过滤&#xff08;Item-Based Collaborative Filtering&#xff0c;简称ItemCF&#xff09;是一种经典的推荐系统算法 基本思想 量化用户对物品的兴趣&#xff0c;通过分析用户的行为来找到与目标物品相似的其他物品&#xff0c;然后…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

linux - 存储管理

1.了解硬件 -- 磁盘 硬盘有机械硬盘(HDD)和固态硬盘(SDD) 接下来&#xff0c;主要以机械磁盘为例(更具代表性&#xff0c;在linux系统层面&#xff0c;无论是机械磁盘还是固态硬盘&#xff0c;文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块) 1.盘片&#x…

打造高效的HIS与DAT文件解析工具

在工业数据采集和存储中&#xff0c;HIS 和 DAT 文件是非常常见的二进制数据格式。然而&#xff0c;解析这些固定块大小的二进制文件并将其转换为易读的 CSV 格式并非易事。本文将深入讲解如何使用 Python 和 PyQt5 打造一款图形化工具&#xff0c;轻松解析和转换这些文件&…

设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.装饰器模式1.1概念1.2作用1.3应用场景1.4特点1.5类与对象关系1.6实现 2责任链模式2.1概念2.2作用2.3应用场景2.4特点2.5类与对象关系2.6实现 3.对比总结 前言…

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff1b;当然&#xff0c;我们只要满足进程不同就行&#xff0c;所以即便是同一个主机&#xff0c;只要是不同进程&#xff0c;基于网络来传…

题海拾贝:力扣 141.环形链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

SEC_ASA 第二天作业

拓扑 按照拓扑图配置 NTP&#xff0c;Server端为 Outside路由器&#xff0c;Client端为 ASA&#xff0c;两个设备的 NTP传输使用MD5做校验。&#xff08;安全 V4 LAB考点&#xff09; 提示&#xff1a;Outside路由器作为 Server端要配置好正确的时间和时区&#xff0c;ASA防…