季度到季度的组件选择

news2024/11/27 15:54:08

在这里插入图片描述

组件:
<template>
  <div class="quarter">
    <div class="input-wrap" id="closeId" @mouseover="handler" @click.stop="btn" :style="{color:colorItem}"><i class="el-icon-date"></i>{{seasonValue}}<i class="el-icon-circle-close" :style="{display:displayShow}" @click.stop="close"></i></div>
    <div v-show="showSeason" ref="shows" class="selectPop">
      <div v-for="(item, index) in timeList" :key="index" style="width: 47%; height: 140px;">
        <template>
          <div class="card-header">
            <el-row style="width: 100%; height: 100%;">
              <el-col :span="6" style="height: 100%; text-align:left">
                <div class="el-icon-d-arrow-left" v-show="prevShow(index)" @click="prev(item)" style="width: 16px;cursor: pointer; "></div>
              </el-col>
              <el-col :span="12">
                <div class="text-year" style="text-align:center">{{ item.year }}</div>
              </el-col>
              <el-col :span="6" style="height: 100%; text-align:right">
                <div class="el-icon-d-arrow-right" v-show="nextShow(index)" @click="next(item)" style="width: 16px;cursor: pointer; "></div>
              </el-col>
            </el-row>
          </div>
        </template>
        <div class="text-item" style="text-align:center;">
          <el-button type="text" size="medium" class="no-choose" :class="{choose: item.QOneSelect}" style="cursor: pointer;width:46%; float:left;" @click="selectSeason(index, 1, '第一季度')">第一季度</el-button>
          <el-button type="text" size="medium" class="no-choose" :class="{choose: item.QTwoSelect}" style="cursor: pointer;float:right;width:46%;" @click="selectSeason(index, 2, '第二季度')">第二季度</el-button>
        </div>
        <div class="text-item" style="text-align:center;">
          <el-button type="text" size="medium" class="no-choose" :class="{choose: item.QThreeSelect}" style="cursor: pointer;width:46%;float:left;" @click="selectSeason(index, 3, '第三季度')">第三季度</el-button>
          <el-button type="text" size="medium" class="no-choose" :class="{choose: item.QFourSelect}" style="cursor: pointer;float:right;width:46%;" @click="selectSeason(index, 4, '第四季度')">第四季度</el-button>
          <!--  -->
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  computed: {
    prevShow() {
      return (data) => {
        //右边部分年份左箭头显示判断
        if (data === 1 && this.timeList[1].year - this.timeList[0].year === 1) {
          return false;
        } else {
          return true;
        }
      };
    },
    nextShow() {
      return (data) => {
        //左边部分年份右箭头显示判断
        if (data === 0 && this.timeList[1].year - this.timeList[0].year === 1) {
          return false;
        } else {
          return true;
        }
      };
    },
  },
  data() {
    return {
      showSeason: false, //是否显示选择季度面板
      year: new Date().getFullYear(), //默认当前年
      seasonValue: "请选择季", //input中显示的内容
      time: {
        stTime: "",
        edTime: "",
      },
      colorItem: "#c0c4cc",
      displayShow: "none",
      timeList: [
        {
          year: new Date().getFullYear() - 1,
          QOneSelect: false,
          QTwoSelect: false,
          QThreeSelect: false,
          QFourSelect: false,
        },
        {
          year: new Date().getFullYear(),
          QOneSelect: false,
          QTwoSelect: false,
          QThreeSelect: false,
          QFourSelect: false,
        },
      ],
      selectNum: 0, //计数器
      firstSelect: "", //第一次选中的值拼接
      firstSelectQuarter: "", //第一次选中的季度
      firstIndex: "", //第一次选中的是数组中的哪一个
      secondSelect: "", //第二次选中的值拼接
      secondSelectQuarter: "", //第二次选中的季度
      secondIndex: "", //第二次选中的是数组中的哪一个
    };
  },
  created() {
    // 点击页面的任何一个地方,都隐藏提示
    this.text();
  },
  watch: {
    //方法1
    seasonValue(newVal, oldVal) {
      //  color: #606266;
      if (newVal == "请选择季") {
        this.colorItem = "#c0c4cc";
      } else {
        this.colorItem = "#606266";
      }
    },
  },
  methods: {
    handler() {
      if (this.seasonValue == "请选择季") {
        this.displayShow = "none";
      } else {
        this.displayShow = "block";
      }
    },
    text() {
      document.addEventListener("click", (e) => {
        if (this.$refs.shows) {
          let self = this.$refs.shows.contains(e.target);
          if (!self) {
            this.showSeason = false;
          }
        }
      });
    },
    btn() {
      this.showSeason = !this.showSeason;
      //再次打开的时候回显上次选中的 必须是之前选过而非首次打开
      if (this.showSeason && this.firstSelectQuarter && this.secondSelectQuarter) {
        const nameOne = this.transQuarter(this.firstSelectQuarter);
        this.timeList[this.firstIndex][nameOne] = true;
        const nameTwo = this.transQuarter(this.secondSelectQuarter);
        this.timeList[this.secondIndex][nameTwo] = true;
      }
    },
    close() {
      this.seasonValue = "请选择";
      this.showSeason = false;
    },
    //年向前
    prev(obj) {
      obj.year -= 1;
      // this.year = +this.year - 1;
    },
    //年向后
    next(obj) {
      obj.year += 1;
      // this.year = +this.year + 1;
    },
    //选择季度处罚
    selectSeason(index, quarterNum, quarterString) {
      //每选中一次计数器加一 计数器是2的时候重置计数器
      this.selectNum += 1; 
      //非首次打开 会回显上次选中的结果再次选中会清空上次选中
      this.timeList.forEach(item => {
        item.QOneSelect = false
        item.QTwoSelect = false
        item.QThreeSelect = false
        item.QFourSelect = false
      })
      //将选中的季度项改变颜色
      const attName = this.transQuarter(quarterNum);
      this.timeList[index][attName] = true;
      //选中赋值
      const selectValue = this.timeList[index].year.toString() + quarterString;
      const selectQuarter = quarterNum;
      const selectIndex = index;
      if (this.selectNum === 1) {
        //打开选择框选中第一个季度项赋值
        this.firstSelect = selectValue;
        this.firstSelectQuarter = selectQuarter;
        this.firstIndex = selectIndex;
      } else {
        //打开选择框选中第二个季度项赋值
        this.secondSelect = selectValue;
        this.secondSelectQuarter = selectQuarter;
        this.secondIndex = selectIndex;
      }
      //当计数器为2时,说明已经选中了两个季度,比较两次选中的值 进行赋值
      if (this.selectNum === 2) {
        //索引小的为选择框左边  索引大的为选择框右边
        if (this.firstIndex < this.secondIndex) {
          //从左往右选直接拼接
          this.seasonValue = this.firstSelect + " - " + this.secondSelect;
        } else if (this.firstIndex > this.secondIndex) {
          //从右往左选反过来拼接
          this.seasonValue = this.secondSelect + " - " + this.firstSelect;
        } else {
          //索引一样说明两次选的是同一边 须比较两次选的季度值的大小
          if (this.firstSelectQuarter < this.secondSelectQuarter) {
            this.seasonValue = this.firstSelect + " - " + this.secondSelect;
          } else {
            this.seasonValue = this.secondSelect + " - " + this.firstSelect;
          }
        }
        //选择结束,关闭弹窗以及计数器重置处理
        this.selectEnd();
      }

      // this.seasonValue = this.year.toString() + "-" + quarter.toString();
      // this.showSeason = false;
      // switch (quarter) {
      //   case "第一季度":
      //     this.time.stTime = this.year.toString() + "-01-01" + " " + "00:00:00";
      //     this.time.edTime = this.year.toString() + "-03-31" + " " + "23:59:59";
      //     break;
      //   case "第二季度":
      //     this.time.stTime = this.year.toString() + "-04-01" + " " + "00:00:00";
      //     this.time.edTime = this.year.toString() + "-06-30" + " " + "23:59:59";
      //     break;
      //   case "第三季度":
      //     this.time.stTime = this.year.toString() + "-07-01" + " " + "00:00:00";
      //     this.time.edTime = this.year.toString() + "-09-30" + " " + "23:59:59";
      //     break;
      //   case "第四季度":
      //     this.time.stTime = this.year.toString() + "-10-01" + " " + "00:00:00";
      //     this.time.edTime = this.year.toString() + "-12-31" + " " + "23:59:59";
      //     break;
      // }
      // this.$emit("getQuarter", this.time); //传值给父组件
    },
    selectEnd() {
      this.showSeason = false;
      this.selectNum = 0;
      // this.timeList.forEach(item => {
      //   item.QOneSelect = false
      //   item.QTwoSelect = false
      //   item.QThreeSelect = false
      //   item.QFourSelect = false
      // })
    },
    transQuarter(quarterNum) {
      let name = "";
      switch (quarterNum) {
        case 1:
          name = "QOneSelect";
          break;
        case 2:
          name = "QTwoSelect";
          break;
        case 3:
          name = "QThreeSelect";
          break;
        case 4:
          name = "QFourSelect";
          break;
      }
      return name;
    },
  },
};
</script>
<style lang="scss" scoped>
.quarter {
  position: relative;
  .input-wrap {
    width: 260px;
    height: 36px;
    border: 1px solid #dcdfe6;
    border-radius: 4px;
    color: #606266;
    position: relative;
    .el-icon-date {
      color: #c0c4cc;
      margin-left: 10px;
      margin-right: 8px;
    }
    .el-icon-circle-close {
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      right: 10px;
      color: #c0c4cc;
      display: none;
      cursor: pointer;
    }
  }
  .no-choose {
    color: #606266;
  }
  .choose {
    color: #409eff;
  }
  .selectPop {
    display: flex;
    justify-content: space-between;
    width: 400px;
    position: absolute;
    background: #fff;
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
    border: 1px solid #dfe4ed;
    border-radius: 4px;
    color: #606266;
    padding: 8px 15px 15px 15px;
    top: 52px;
    z-index: 10;
    .card-header {
      width: 100%;
      height: 40px;
      border-bottom: 1px solid #e6ebf5;
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 10px;
      .text-year {
        font-size: 16px;
      }
    }

    &::before {
      content: "";
      border-bottom: 10px solid #dfe4ed;
      border-left: 8px solid transparent;
      border-right: 8px solid transparent;
      position: absolute;
      left: 13%;
      -webkit-transform: translateX(-50%);
      transform: translateX(-50%);
      top: -8px;
      border-radius: 5px;
    }
    &::after {
      content: "";
      border-bottom: 8px solid #fff;
      border-left: 8px solid transparent;
      border-right: 8px solid transparent;
      position: absolute;
      left: 13%;
      -webkit-transform: translateX(-50%);
      transform: translateX(-50%);
      top: -6px;
      border-radius: 5px;
    }
  }
}
</style>

使用:
 <QuarterRange @getQuarter="getQuarter"></QuarterRange>
 
//获取季度子组件传回的数据
getQuarter(val) {
  console.log("季节:", val);
},

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

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

相关文章

React Native文本添加下划线

import { StyleSheet } from react-nativeconst styles StyleSheet.create({mExchangeCopyText: {fontWeight: bold, color: #1677ff, textDecorationLine: underline} })export default styles

无涯教程-Perl - return函数

描述 此函数在子例程,块或do函数的末尾返回EXPR。 EXPR可以是标量,数组或哈希值&#xff1b;context将在执行时选择。如果没有给出EXPR,则在列表context中返回一个空列表,在标量context中返回undef,在空context中不返回任何内容。 语法 以下是此函数的简单语法- return EXP…

程序设计语言基础知识

1.1程序设计语言的基本概念 1、低级语言与高级语言&#xff1a; 低级语言&#xff1a;汇编语言 高级语言&#xff1a;常见的有Java、C、C、PHP、Python、Delphi等 2、翻译形式&#xff1a;汇编、解释、编译 3、程序设计语言的定义&#xff1a;语法、语义、语用 4、程序设计语言…

汽配企业WMS系统:提升作业效率与过程管控

随着汽配企业竞争的加剧和业务模式的复杂化&#xff0c;许多企业意识到提高仓库作业效率和成本控制能力是企业成功的关键。因此&#xff0c;越来越多的企业选择引入WMS仓储管理系统。然而&#xff0c;汽配企业产品复杂&#xff0c;且从业的人员大部分是老一辈人员&#xff0c;内…

ROS2学习(二)工作空间,节点

工作空间介绍 workspace 是存放整个项目的大目录。 其中包含&#xff1a; src&#xff1a;源码。 build&#xff1a;编译文件。 install&#xff1a;安装空间&#xff0c;存放编译成功后的目标文件。 log&#xff1a;日志。 我们新建一个工作空间目录&#xff0c;其中包…

15W网络有源音箱 校园广播音箱 poe广播音箱

SV-7042T 15W网络有源音箱 校园广播音箱 poe广播音箱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源…

Cenos7 搭建Minio最新版集群部署服务器(一)

------> 道 | 法 | 术 | 器 | 势 <------ 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) 附录查看安装的Minio版本: [rootwww…

计算机竞赛 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

清华团队领衔打造,首个AI agent系统性基准测试网站问世AgentBench.com.cn

AI 智能体,或自主智能代理,不仅是诸如贾维斯等科幻电影中的人类超级助手,也一直是现实世界中 AI 领域的研究热点。尤其是以 GPT-4 为代表的 AI 大模型的出现,将 AI 智能体的概念推向了科技的最前沿。 在此前爆火的斯坦福“虚拟小镇”中,25 个 AI 智能体在虚拟小镇自由生长…

轧钢传动控制系统液压比例阀控制器

轧钢传动控制系统是用于控制轧钢机械的电气系统&#xff0c;包括调速和控制系统两部分。 调速系统主要用来平滑调节转速&#xff0c;其核心部件是直流电动机调速单元。控制系统主要用于调节和稳定轧机的工作状态&#xff0c;使轧制过程始终处于最佳工作状态&#xff0c;其核心…

高忆管理:爆仓是什么意思?

爆仓是指在金融商场中&#xff0c;持有的某种资产价格大幅下跌&#xff0c;导致出资者的保证金不足以支持持仓&#xff0c;被逼平仓的现象。在股票、期货、外汇等商场中均或许呈现爆仓现象。在本文中&#xff0c;咱们将从多个视点分析爆仓的含义、原因和影响。 一、爆仓的含义 …

用于网页抓取的最佳 Python 库

探索一系列用于网页抓取的强大 Python 库&#xff0c;包括用于 HTTP 请求、解析 HTML/XML 和自动浏览的库。 网络抓取已成为当今数据驱动世界中不可或缺的工具。Python 是最流行的抓取语言之一&#xff0c;拥有一个由强大的库和框架组成的庞大生态系统。在本文中&#xff0c;我…

W5100S-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5100S-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram …

pdf怎么压缩?一分钟学会文件压缩方法

PDF文件过大一般主要原因就是内嵌大文件、重复的资源或者图片比较多&#xff0c;随之而来的问题就是占用存储空间、被平台限制发送等等&#xff0c;这时候我们可以通过压缩的方法缩小PDF文件大小&#xff0c;下面就一起来看看具体的操作方法吧。 方法一&#xff1a;嗨格式压缩大…

Linux_5_Shell脚本编程

目录 1 基础1.1 程序组成1.2 程序编程风格1.3 编程语言1.4 编程逻辑处理方式 2 shell 脚本语言的基本结构2.1 shell脚本的用途2.2 shell脚本基本结构2.3 创建shell脚本过程2.4 脚本注释规范2.5 第一个脚本2.6 脚本调试2.7 变量2.7.1 变量2.7.2 变量类型2.7.3 编程语言分类2.7.4…

详谈数据库InnoDB引擎与MyISAM引擎

1. 简单了解什么是存储引擎? 相信很多人在听到存储引擎这个名字的时候可能会有些疑惑&#xff0c;听着名字就觉得有些难&#xff0c;导致很多人没有兴趣了解它&#xff0c;那么它这究竟是个什么东西&#xff1f; 我来说明一个场景&#xff0c;大家就能大概明白它是做什么用的…

【kubernetes】在k8s集群环境上,部署kubesphere

部署kubesphere 学习于尚硅谷kubesphere课程 前置环境配置-部署默认存储类型 这里使用nfs #所有节点安装 yum install -y nfs-utils# 在master节点执行以下命令 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports # 执行以下命令&#xff…

mybatis(下)

注解方式 常用注解标签 Insert&#xff1a;插入 sql , 和 xml insert sql 语法完全一样 Select &#xff1a;查询 sql, 和 xml select sql 语法完全一样 Update &#xff1a;更新 sql, 和 xml update sql 语法完全一样 Delete &#xff1a;删除 sql, 和 xml delete sql 语法完…

【深入理解ES6】字符串和正则表达式

概念 字符串&#xff08;String&#xff09;是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol&#xff08;es6新增&#xff09;。 更好的Unicode支持 1. UTF-16码位 字符串里的字符有两种&#xff1a; 前 个码位均以16位的编码单元…

Excel表格制作,快速提升效率好方法!

“作为一个刚开始工作的职场新人&#xff0c;每天要做各种不同的表格&#xff0c;真的让我很崩溃&#xff0c;感觉我对这些表格制作一点都不了解&#xff0c;Excel表格制作有什么比较好的方法吗&#xff1f;” Excel作为一款广泛应用于各个领域的管理和分析工作&#xff0c;给我…