element 手写季度组件

news/2024/10/6 3:57:59/文章来源:https://www.cnblogs.com/xiaonanxun/p/18283727

组件:

<template><div class="time_quarter"><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><z-input placeholder="请选择季度" v-model="showValue" style="width:100%;" class="elWidth" @focus="showSeason = true"><i slot="prefix" class="z-input__icon z-icon-date"></i></z-input><z-card class="box-card" v-show="showSeason" style="width:100%"><div slot="header" class="clearfix" style="text-align:center;padding:0"><button type="button" aria-label="前一年"class="z-picker-panel__icon-btn z-date-picker__prev-btn z-icon-d-arrow-left" @click="prev"></button><span role="button" class="z-date-picker__header-label">{{ year }}年</span><button type="button" aria-label="后一年" @click="next" :class="{ notallow: year == limitTime }"class="z-picker-panel__icon-btn z-date-picker__next-btn z-icon-d-arrow-right"></button></div><div class="text item" style="text-align:center;"><z-button type="text" size="medium" style="width:40%;color: #606266;float:left;"@click="selectSeason(0)">第一季度</z-button><z-button type="text" size="medium" style="float:right;width:40%;color: #606266;"@click="selectSeason(1)">第二季度</z-button></div><div class="text item" style="text-align:center;"><z-button type="text" size="medium" style="width:40%;color: #606266;float:left;"@click="selectSeason(2)">第三季度</z-button><z-button type="text" size="medium" style="float:right;width:40%;color: #606266;"@click="selectSeason(3)">第四季度</z-button></div></z-card></div>
</template>
<script>
export default {name: 'QuarterDialog',props: {valueArr: {default: () => {return ['01-03', '04-06', '07-09', '10-12'];},type: Array,},getValue: {default: () => { },type: Function,},// 传入显示的时间
    defaultValue: {default: "",type: String,},// 限制的时间
    limitTime: {type: String,default: "",require: true,},},data() {return {showSeason: false,season: "",year: new Date().getFullYear(),showValue: ''};},computed: {},created() {if (this.defaultValue) {let value = this.defaultValue;let arr = value.split("-");this.year = arr[0].slice(0, 4);var myseason = arr[1];this.showValue = `${this.year}年${this.whitchQuarter(myseason)}季度`;}console.log("whitchQuarter", this.whitchQuarter(10));},watch: {defaultValue: function (value, oldValue) {let arr = value.split("-");this.year = arr[0].slice(0, 4);var myseason = arr[1];this.showValue = `${this.year}年${this.whitchQuarter(myseason)}季度`;},},methods: {// 根据输入的月份判断是哪一个季节
    whitchQuarter(month) {let quarter = "";month = Number(month);switch (month) {case 1:case 2:case 3:quarter = "1";break;case 4:case 5:case 6:quarter = "2";break;case 7:case 8:case 9:quarter = "3";break;case 10:case 11:case 12:quarter = "4";break;default:console.error("The entered time is incorrect");}return quarter;},one() {this.showSeason = false;},prev() {this.year = this.year * 1 - 1;},next() {// 如果有时间限制的话会进行判断if (this.limitTime == "") {this.year = this.year * 1 + 1;} else if (this.limitTime != "" && this.year < this.limitTime) {this.year = this.year * 1 + 1;}},// 季度时间判定
    InitialTime(val) {let num = "";val = Number(val);switch (val) {case 1:num = "01";break;case 2:num = "04";break;case 3:num = "07";break;case 4:num = "10";break;default:console.error("时间格式有误!");}return num;},selectSeason(i) {let that = this;that.season = i + 1;let arr = that.valueArr[i].split("-");that.getValue(that.year + arr[0] + "-" + that.year + arr[1]);that.showSeason = false;this.showValue = `${this.year}年${this.season}季度`;var formatValue = `${this.year}-${this.InitialTime(this.season)}`;this.$emit("getTime", formatValue);}},
};
</script>
<style>
.notallow {cursor: not-allowed;
}.time_box {position: relative;
}.box-card {position: absolute;top: 40px;/* left: 22px; */padding: 0 3px 20px;z-index: 9999;
}.time_quarter {width: 100%;}.time_quarter .z-input--small .z-input__inner {width: 82%;
}
</style>

 

调用:

<template><div><filter-form :showClapButton="false"><z-form ref="form" label-width="40px" size="small"><z-row :gutter="10"><z-col :span="5"><z-form-item label="" label-width="10px"><z-radio-group v-model="timeType" size="large"><z-radio :label="1">日</z-radio><z-radio :label="2">月</z-radio><z-radio :label="3">季度</z-radio></z-radio-group></z-form-item></z-col><z-col :span="6"><z-form-item label="" label-width="10px"><z-date-picker v-if="timeType == 1" :auto-fill="true" v-model="value2" type="date" placeholder="选择日期"@change="changeTime"></z-date-picker><z-date-picker v-if="timeType == 2" :auto-fill="true" v-model="value2" type="month" placeholder="选择月"@change="changeTimeM"></z-date-picker><quarter-dialog v-if="timeType == 3" @getTime="changeTimeJ" :defaultValue="defaultValue"></quarter-dialog></z-form-item></z-col><z-col :span="6"><z-form-item label="" label-width="10px"><z-date-picker v-if="timeType == 1" :auto-fill="true" v-model="value2" type="date" placeholder="选择日期"@change="changeTime"></z-date-picker><z-date-picker v-if="timeType == 2" :auto-fill="true" v-model="value2" type="month" placeholder="选择月"@change="changeTimeM"></z-date-picker><quarter-dialog v-if="timeType == 3" @getTime="changeTimeJ" :defaultValue="defaultValue"></quarter-dialog></z-form-item></z-col></z-row></z-form><template v-slot:buttons><!--此处写入展开收起按钮前面的查询重置等按钮--><z-button type="primary" size="mini" @click="search('click')">查询</z-button><z-button size="mini" @click="resetForm()">重置</z-button></template></filter-form><!-- <report-card><z-pro-table ref="allTable" :options="tableOptions"></z-pro-table></report-card> --></div>
</template>
<script>
import quarterDialog from './components/QuarterDialog'
export default {name: 'evaluationMechanism',components: { quarterDialog },data() {return {timeType: 1,value2: new Date(new Date().valueOf()),defaultValue: new Date().getFullYear() + '-' + (new Date().getMonth() + 1),//季度子组件上传递当前的时间
      queryParams: {startTime: undefined,endTime: undefined}}},watch: {//监听内容
    timeType() {if (this.timeType == 1) {//this.value2 = new Date(new Date().valueOf());this.queryParams.startTime = this.getMonday("s", 0);this.queryParams.endTime = this.getMonday("e", 0);} else if (this.timeType == 2) {//this.value2 = new Date().getFullYear() + '-' + (new Date().getMonth() + 1);this.changeTimeM(this.value2);} else if (this.timeType == 3) {//季度let date = new Date();let y = date.getFullYear();let M = date.getMonth();let quarterStartDate = new Date(y, this.getQuarterStartMonth(M), 1);let starts = this.getAllDate(quarterStartDate, "yyyy-MM-dd");let end = this.getQuarterEndDate(starts);this.queryParams.startTime = starts;this.queryParams.endTime = end;} else if (this.timeType == 4) {//let date = new Date();let y = date.getFullYear();this.value2 = y.toString();this.changeTimeY(this.value2);}}},methods: {//查询async searchData() {const params = {}this.$refs[`allTable`].doQuery(params, () => { })},//获取周的开始时间和结束时间
    getMonday(type, dates) {var now = new Date();var nowTime = now.getTime();var day = now.getDay();var longTime = 24 * 60 * 60 * 1000;var n = longTime * 7 * (dates || 0);if (type == "s") {var dd = nowTime - (day - 1) * longTime + n;};if (type == "e") {var dd = nowTime + (7 - day) * longTime + n;};dd = new Date(dd);var y = dd.getFullYear();var m = dd.getMonth() + 1;var d = dd.getDate();m = m < 10 ? "0" + m : m;d = d < 10 ? "0" + d : d;var day = y + "-" + m + "-" + d;return day;},//
    changeTime(data) {let date = new Date(data);let y = date.getFullYear();let m = date.getMonth();let d = date.getDate();let week = date.getDay();let start = new Date(y, m, d);let end = new Date(y, m, d);this.queryParams.startTime = this.getCurrentTime(start, 0);this.queryParams.endTime = this.getCurrentTime(end, 0);},//
    changeTimeM(data) {this.queryParams.startTime = this.getCurrentTime(data, 0);this.queryParams.endTime = this.getCurrentTime(this.getCuurrentTimeM(data), 0);console.log(this.queryParams)},//
    changeTimeY(data) {this.queryParams.startTime = this.getCurrentTime(data, 0);this.queryParams.endTime = this.getCurrentTime(this.getCuurrentTimeY(data), 0);console.log(this.queryParams)},getCurrentTime(data, num) {let date = new Date(data)let Y = date.getFullYear()let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)let D = date.getDate() + num < 10 ? ('0' + (date.getDate() + num)) : (date.getDate() + num);date = Y + '-' + M + '-' + D;return date},getCuurrentTimeM(data) {let date = new Date(data)let Y = date.getFullYear();let M = date.getMonth();return new Date(Y, M + 1, 0).toLocaleDateString();},getCuurrentTimeY(data) {let date = new Date(data)let Y = date.getFullYear();return new Date(Y, 11, 31).toLocaleDateString();},//获得某月的天数
    getMonthDays: function (nowYear, myMonth) {var monthStartDate = new Date(nowYear, myMonth, 1);var monthEndDate = new Date(nowYear, myMonth + 1, 1);var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);return days;},//获得本季度的结束日期
    getQuarterEndDate(data) {let date = new Date(data);let nowYear = date.getFullYear();let M = date.getMonth();var quarterEndMonth = M + 2;var quarterStartDate = new Date(nowYear, quarterEndMonth, this.getMonthDays(nowYear, quarterEndMonth));return this.getAllDate(quarterStartDate, "yyyy-MM-dd");},//获得本季度的开始月份
    getQuarterStartMonth: function (nowMonth) {var quarterStartMonth = 0;if (nowMonth < 3) {quarterStartMonth = 0;}if (2 < nowMonth && nowMonth < 6) {quarterStartMonth = 3;}if (5 < nowMonth && nowMonth < 9) {quarterStartMonth = 6;}if (nowMonth > 8) {quarterStartMonth = 9;}return quarterStartMonth;},//获得日期
    getAllDate: function (date, fmt) {if (null == fmt || undefined == fmt || "" == fmt)fmt = "yyyy/MM/dd";var date = new Date(date);var o = {"M+": date.getMonth() + 1, //月份"d+": date.getDate(), //
      };if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt))fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;},changeTimeJ(data) {let start = data + "-01";this.queryParams.startTime = start + " 00:00:00";let end = this.getQuarterEndDate(start);this.queryParams.endTime = end + " 23:59:59";},resetForm() {this.$refs.kpiForm.resetFields()this.searchData()},}
}
</script>
<style scoped></style>

 

原谅我找不到原作者了,如果看到我写的一样,抱歉

<template>
  <div class="time_quarter">
    <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>
    <z-input placeholder="请选择季度" v-model="showValue" style="width:100%;" class="elWidth" @focus="showSeason = true">
      <i slot="prefix" class="z-input__icon z-icon-date"></i>
    </z-input>
    <z-card class="box-card" v-show="showSeason" style="width:100%">
      <div slot="header" class="clearfix" style="text-align:center;padding:0">
        <button type="button" aria-label="前一年"
          class="z-picker-panel__icon-btn z-date-picker__prev-btn z-icon-d-arrow-left" @click="prev"></button>
        <span role="button" class="z-date-picker__header-label">{{ year }}年</span>
        <button type="button" aria-label="后一年" @click="next" :class="{ notallow: year == limitTime }"
          class="z-picker-panel__icon-btn z-date-picker__next-btn z-icon-d-arrow-right"></button>
      </div>
      <div class="text item" style="text-align:center;">
        <z-button type="text" size="medium" style="width:40%;color: #606266;float:left;"
          @click="selectSeason(0)">第一季度</z-button>
        <z-button type="text" size="medium" style="float:right;width:40%;color: #606266;"
          @click="selectSeason(1)">第二季度</z-button>
      </div>
      <div class="text item" style="text-align:center;">
        <z-button type="text" size="medium" style="width:40%;color: #606266;float:left;"
          @click="selectSeason(2)">第三季度</z-button>
        <z-button type="text" size="medium" style="float:right;width:40%;color: #606266;"
          @click="selectSeason(3)">第四季度</z-button>
      </div>
    </z-card>
  </div>
</template>
<script>
export default {
  name: 'QuarterDialog',
  props: {
    valueArr: {
      default: () => {
        return ['01-03', '04-06', '07-09', '10-12'];
      },
      type: Array,
    },
    getValue: {
      default: () => { },
      type: Function,
    },
    // 传入显示的时间
    defaultValue: {
      default: "",
      type: String,
    },
    // 限制的时间
    limitTime: {
      type: String,
      default: "",
      require: true,
    },
  },
  data() {
    return {
      showSeason: false,
      season: "",
      year: new Date().getFullYear(),
      showValue: ''
    };
  },
  computed: {},
  created() {
    if (this.defaultValue) {
      let value = this.defaultValue;
      let arr = value.split("-");
      this.year = arr[0].slice(0, 4);

      var myseason = arr[1];
      this.showValue = `${this.year}${this.whitchQuarter(myseason)}季度`;
    }
    console.log("whitchQuarter", this.whitchQuarter(10));
  },
  watch: {
    defaultValue: function (value, oldValue) {
      let arr = value.split("-");
      this.year = arr[0].slice(0, 4);
      var myseason = arr[1];
      this.showValue = `${this.year}${this.whitchQuarter(myseason)}季度`;
    },
  },
  methods: {
    // 根据输入的月份判断是哪一个季节
    whitchQuarter(month) {
      let quarter = "";
      month = Number(month);
      switch (month) {
        case 1:
        case 2:
        case 3:
          quarter = "1";
          break;
        case 4:
        case 5:
        case 6:
          quarter = "2";
          break;
        case 7:
        case 8:
        case 9:
          quarter = "3";
          break;
        case 10:
        case 11:
        case 12:
          quarter = "4";
          break;
        default:
          console.error("The entered time is incorrect");
      }
      return quarter;
    },
    one() {
      this.showSeason = false;
    },
    prev() {
      this.year = this.year * 1 - 1;
    },
    next() {
      // 如果有时间限制的话会进行判断
      if (this.limitTime == "") {
        this.year = this.year * 1 + 1;
      } else if (this.limitTime != "" && this.year < this.limitTime) {
        this.year = this.year * 1 + 1;
      }
    },
    // 季度时间判定
    InitialTime(val) {
      let num = "";
      val = Number(val);
      switch (val) {
        case 1:
          num = "01";
          break;
        case 2:
          num = "04";
          break;
        case 3:
          num = "07";
          break;
        case 4:
          num = "10";
          break;
        default:
          console.error("时间格式有误!");
      }
      return num;
    },

    selectSeason(i) {
      let that = this;
      that.season = i + 1;
      let arr = that.valueArr[i].split("-");
      that.getValue(that.year + arr[0] + "-" + that.year + arr[1]);
      that.showSeason = false;
      this.showValue = `${this.year}${this.season}季度`;
      var formatValue = `${this.year}-${this.InitialTime(this.season)}`;
      this.$emit("getTime", formatValue);
    }
  },
};
</script>
<style>
.notallow {
  cursor: not-allowed;
}

.time_box {
  position: relative;
}

.box-card {
  position: absolute;
  top: 40px;
  /* left: 22px; */
  padding: 0 3px 20px;
  z-index: 9999;
}

.time_quarter {
  width: 100%;

}

.time_quarter .z-input--small .z-input__inner {
  width: 82%;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

曙光服务器系统蓝屏数据恢复

一、蓝屏原因分析 首先,需要分析导致曙光服务器系统蓝屏的具体原因。蓝屏通常是由于操作系统或硬件设备驱动程序遇到致命错误所致。可能的原因包括软件冲突、硬件故障(如内存条问题、硬盘故障)、驱动程序过时或不兼容等。 二、安全措施 在进行数据恢复之前,务必确保服务器的…

服务器存储金蝶数据库丢失恢复

一、检查备份情况 确认备份存在: 首先,需要确认是否有金蝶数据库的备份存在。备份是数据恢复的基础,没有备份的情况下恢复数据将非常困难。 检查备份的完整性和时效性: 验证备份文件的完整性和时效性,确保备份文件没有损坏且包含丢失数据之前的数据库状态。二、使用备份恢…

威联通NAS维修

涉及多个方面,包括硬件故障维修、数据恢复等。 一、维修内容 硬件故障维修: 针对威联通NAS出现的各种硬件故障,如电源故障、主板故障、硬盘故障等,提供检测和维修。 在维修过程中,会仔细检查每个部件,确保找到故障根源并进行修复。 数据恢复: 当威联通NAS中的数据因硬盘…

Fastapi 脚本接口规范优化

Fastapi 脚本接口规范优化 在编写Fastapi脚本提供自动化接口操作时,我们不仅要实现接口功能实用性,也要考虑接口的规范管理,这边以Fastapi官方文档作为一个切入点。 官方接口文档 默认官方接口文档如下图所示,宛如大杂烩一样 /doc接口文档 /redoc接口文档 优化方案 1、根据…

面试官:Java类是如何被加载到内存中的?

类的生命周期都有哪些阶段?类加载的过程是怎样的?面试连环callJava类是如何被加载到内存中的? Java类的生命周期都有哪些阶段? JVM加载的class文件都有哪些来源? JVM在加载class文件时,何时判断class文件的格式是否符合要求?类生命周期 一个类从被加载到虚拟机内存开始,…

招募贴 | 第四期自动驾驶OS开发初阶营报名开启

招募贴 | 第四期自动驾驶OS开发初阶营报名开启 第四期国家智能网联汽车创新中心自动驾驶OS开发初阶训练营将于2024年7月22日开营,现已开启报名,诚邀对自动驾驶底层软件开发感兴趣的学员加入,一起驶入自动驾驶的快车道,共同探索未来的无限可能。从训练营能学到什么? 训练营…

STM32L073RZT 调试SPI问题

现象描述: spi通信一次后,第二次通信spi的SR寄存器异常0xFF31(MODF, CRCERR, RXNE),通信失败。 以下为调用流程及相关代码:NFC_ID(); NFC_REG_B_TEST();//SPI 读 void SPI_Read_Data(uint8_t* w_data, uint32_t w_size, uint8_t* r_data, uint32_t r_size) {SET_SPI_CSS(G…

Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享

本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内 容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。 Spark大数据处理:技术、应用与性能优化(全)PDF下载 Spark已经在全球范围内广泛使用,无论是Intel、Yahoo…

LaTeX 编辑协作平台 Overleaf 安装和使用教程

在学术界和科技行业,LaTeX 已成为撰写高质量文档的标准工具。然而,传统的 LaTeX 使用体验常常伴随着以下挑战:学习曲线陡峭 环境配置复杂 多人协作困难 实时预览不便当然,市面上不乏很多在线 LaTeX 编辑平台,但它们大多是封闭的商业服务,无法完全满足用户对数据隐私和自主…

半个月6次面试,终于进百度HR面了

和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到了 HR 面。今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到…

使用钉钉Oauth2授权登录Odoo配置

准备工作 需要用到的模块: Odoo/auth_oauth OCA/server-auth/auth_oidc 因为钉钉的Oauth授权流程比较特殊,需要继承改造res.users上的几个方法 models\res_users.pyclass ResUsers(models.Model):_inherit = "res.users"dingtalk_userid = fields.Char(Dingtalk Us…

推荐一款Win11主题WPF UI框架

最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计,为用户带来全新的视觉体验。最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的…