1.基于elementui开发的季度选择组件

2.调用

<el-quarter-picker v-model="start_time" :size="size"></el-quarter-picker>

3.代码

  • 通过el-popover进行弹出选择
<template>
<div class="el-quarter-picker-wrap">
<el-popover placement="bottom-start" title="" trigger="manual" content="" width="235"
v-model="showCard">
<el-input slot="reference" v-model="showText" placeholder="请选择季度" :size="size" clearable prefix-icon="el-icon-date" readonly
@click.stop.native="showCard = true"
></el-input>
<div>
<!-- 年份切换 -->
<div style="display: flex;align-items: center;justify-content: space-between;">
<div>
<el-button icon="el-icon-arrow-left" type="text" style="color:#303133;" @click="onChange('prev')"></el-button>
</div>
<div style="font-size: 16px;">{{showYear}}</div>
<div>
<el-button icon="el-icon-arrow-right" type="text" style="color:#303133;" @click="onChange('next')"></el-button>
</div>
</div> <!-- 季度列表 -->
<div style="display: flex;align-items: center;justify-content: space-between;flex-wrap: wrap;">
<div style="width:50%;text-align: center;margin-bottom: 5px;">
<el-link :type="isActive(showYear,1)? 'primary':''" :underline="false" @click="selectEvent(1)">第一季度</el-link>
</div>
<div style="width:50%;text-align: center;margin-bottom: 5px;">
<el-link :type="isActive(showYear,2)? 'primary':''" :underline="false" @click="selectEvent(2)">第二季度</el-link>
</div>
<div style="width:50%;text-align: center;margin-bottom: 5px;">
<el-link :type="isActive(showYear,3)? 'primary':''" :underline="false" @click="selectEvent(3)">第三季度</el-link>
</div>
<div style="width:50%;text-align: center;margin-bottom: 5px;">
<el-link :type="isActive(showYear,4)? 'primary':''" :underline="false" @click="selectEvent(4)">第四季度</el-link>
</div>
</div>
</div>
</el-popover>
</div>
</template> <script>
//季度选择器:
module.exports = {
data() {
return {
showCard: false, showTime: new Date(), //展示的时间 完整
showYear: "", //当前时间 年 selectTime: "",//选中的当前时间
}
},
props: {
size: {
type: String,
default: "small"
},
value:{
type: [String,Number],
default: "" ,//2022-08-23
}
},
model:{
prop:"value",//定义v-model的值传递给那个prop属性
event:"change",//定义此事件触发时,自动更新父组件v-model对应的数据
},
watch:{
value:{
immediate:true,
handler:function(val){
if(!val){
this.selectTime = "" //当前时间
}else{
//解析传入的时间
this.selectTime = new Date(val)
//定位到当前年份
this.showTime = new Date(val)
this.showYear = this.showTime.getFullYear()
}
}
}
},
created(){
this.showYear = this.showTime.getFullYear()
},
mounted(){
//监听全局按钮的点击
var that = this
document.body.addEventListener('click',function(){
//console.log('点击了body')
that.showCard = false
})
},
methods:{
//点击前后切换年份
onChange(type = ''){
if(type == 'next'){
//时间往前后一年
this.showTime.setFullYear(this.showTime.getFullYear()+1)
}else if(type == 'prev'){
//时间往前推一年
this.showTime.setFullYear(this.showTime.getFullYear()-1)
} //更新展示的时间
this.showYear = this.showTime.getFullYear()
},
//选中季度事件
selectEvent(quarter_num = 1){
//创建一个时间
var time = new Date()
//设定年份
time.setFullYear(this.showYear)
//设定月份 根据季度进行设置
if(quarter_num == 1){
//第一季度设为1月
time.setMonth(0)
}else if(quarter_num == 2){
//第二季度设为4月
time.setMonth(3)
}else if(quarter_num == 3){
//第三季度设为7月
time.setMonth(6)
}else{
//第四季度设为10月
time.setMonth(9)
}
//设定日期和时分秒
time.setDate(1)
time.setHours(0)
time.setMinutes(0)
time.setSeconds(0) //隐藏
this.showCard = false //更新当前时间
this.selectTime = time var date_text = this.transformDateMethod(this.selectTime,format='YY-MM-DD') //通知父组件 返回时间戳
this.$emit('change',date_text)
},
//判断选中的时间和展示的时间是否匹配
isActive(showYear,quarter_num){
// 如果没有选中时间 直接return false
if(!this.selectTime){
return false
} //当前年份
var select_year = this.selectTime.getFullYear() //判断当前季度
var select_quarter_num = ""
var select_month = this.selectTime.getMonth() + 1
if(select_month >= 1 && select_month <= 3){
select_quarter_num = 1
}else if(select_month >= 4 && select_month <= 6){
select_quarter_num = 2
}else if(select_month >= 7 && select_month <= 9){
select_quarter_num = 3
}else{
select_quarter_num = 4
} //如果年份 季度一致 则直接返回true
if(select_year == showYear && select_quarter_num == quarter_num){
return true
}else{
return false
}
},
transformDateMethod(dateobj,format=''){
var year = dateobj.getFullYear()
var month = dateobj.getMonth()+1
var date = dateobj.getDate()
var hours = dateobj.getHours()
var minutes = dateobj.getMinutes()
var seconds = dateobj.getSeconds()
var day = dateobj.getDay()
var day_str = ''
switch(day){
case 0: day_str = '星期日';break;
case 1: day_str = '星期一';break;
case 2: day_str = '星期二';break;
case 3: day_str = '星期三';break;
case 4: day_str = '星期四';break;
case 5: day_str = '星期五';break;
case 6: day_str = '星期六';break;
default: break;
}
if(month < 10){
month = '0'+ month
}
if(date < 10){
date = '0'+ date
}
if(hours < 10){
hours = '0'+ hours
}
if(minutes < 10){
minutes = '0'+ minutes
}
if(seconds < 10){
seconds = '0'+ seconds
}
if(format == ''){
return `${year}年${month}月${date}日 ${hours}:${minutes}:${seconds} ${day_str}`
}else{
//替换年月日时分秒
format = format.replace('YY',year)
format = format.replace('MM',month)
format = format.replace('DD',date)
format = format.replace('hh',hours)
format = format.replace('mm',minutes)
format = format.replace('ss',seconds)
format = format.replace('Day',day_str)
return format
}
}
},
computed:{
//展示选中的时间
showText(){
if(!this.selectTime){
return ""
} var quarter_text = ""
var month = this.selectTime.getMonth()+1
if(month >= 1 && month <= 3){
quarter_text = "第一季度"
}else if(month >= 4 && month <= 6){
quarter_text = "第二季度"
}else if(month >= 7 && month <= 9){
quarter_text = "第三季度"
}else{
quarter_text = "第四季度"
} return `${this.selectTime.getFullYear()}年 ${quarter_text}`
}
}
}
</script> <style scoped> </style>

element-ui季度选择组件的更多相关文章

  1. vue问题三:element ui的upload组件上传图片成功和移除事件

    element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...

  2. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

  3. 关于Element UI中select组件中遇到的问题

    问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...

  4. Vue+element UI实现分页组件

    介绍 这是一个是基于element-UI的分页组件基础上,进行了二次封装的分页组件,在展示数据时,该分页组件采用了每显示一页数据,只请求当前页面的数据的请求策略,从而避免了一次性将数据全部请求所造成的 ...

  5. element ui 弹出组件的遮罩层在弹出层的上面的解决方法

    <el-dialog title="收货地址" :visible.sync="dialogFormVisible" :modal-append-to-bo ...

  6. 封装一个优雅的element ui表格组件

    现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...

  7. element ui step组件在另一侧加时间轴显示

    这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...

  8. Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能

    业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...

  9. element UI排坑记(一):判断tabs组件是否切换

    之所以将这个问题列在排坑记之中,是因为官方组件的一个属性颇有些隐蔽,这个问题曾经折腾了本人较多时间,始终思维固着,且使用搜索引擎也不容易搜索到答案,故记之.然而实际解决却是相当简单的. 一.问题描述 ...

  10. 使用 Element UI Select 组件的 value-key 属性,让绑定值可以为一个对象

    EsunR 2019-11-07 12:14:42  12264  收藏 6 分类专栏: Vue 文章标签: element-ui 版权 当我们使用 Elemet UI 的选择组件进行多选时,Sele ...

随机推荐

  1. JavaScript – ES Module

    前言 关于 JavaScript Modular 的多种版本和历史看这篇. 参考: 阮一峰 – Module 的语法 阮一峰 – Module 的加载实现 Export 语法 逐个 export 在想 ...

  2. Let's Encrypt Free SSL – win-acme

    前言 之前有介绍过用 Certify The Web 来做 Let's Encrypt SSL, 但是最近常看到它的 License 提示, 有种随时随地要收费的感觉 于是找了一个替代品 win-ac ...

  3. 全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数

    全网最适合入门的面向对象编程教程:48 Python 函数方法与接口-位置参数.默认参数.可变参数和关键字参数 摘要: 在 Python 中,函数可以接受多种不同类型的参数,包括位置参数.默认参数.可 ...

  4. C# ASP.NET Core Web API 框架 实现向手机发送验证码短信

    本文章主要是在C# ASP.NET Core Web API框架实现向手机发送验证码短信功能.这里我选择是一个互亿无线短信验证码平台,其实像阿里云,腾讯云上面也可以. 首先我们先去 互亿无线 http ...

  5. 论文解读《MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots》

    导言 ​ 在参加东南大学网络安全学院夏令营的契机下,我第一次接触大模型安全领域.L老师是网络安全领域的一位大牛,在和L老师交流期间,被告知需要准备一次paper presentation介绍四大会中感 ...

  6. 进程切换分析(2):TLB处理

    一.前言 进程切换是一个复杂的过程,本文不准备详细描述整个进程切换的方方面面,而是关注进程切换中一个小小的知识点:TLB的处理.为了能够讲清楚这个问题,我们在第二章描述在单CPU场景下一些和TLB相关 ...

  7. 2022年12月中国数据库排行榜:OceanBase立足创新登榜首,华为腾讯排名上升树雄心

    不经一番寒彻骨,怎得梅花扑鼻香. 2022年12月的 墨天轮中国数据库流行度排行榜 火热出炉,本月共有249个数据库参与排名,相比上月新增3个数据库.本月排行榜前十用一句话可以概括为:榜单前十一片红, ...

  8. excel导出功能的实现流程说⼀下?

    导出的话,我们因为到处的数据量不⼤,所以直接采取的时候前端主导的⽅案,参考的现成⽅案实现的 导出 ⼤概得流程就是 1. 调⽤后端接⼝得到要导出的数据 2. 把数据简单处理⼀下转化成导出插件需要的格式 ...

  9. 7.flask 源码解析:session

    目录 一.flask 源码解析:session 1.1 session 简介 1.2 解析 1.2.1 请求过程 1.2.2 session 对象 1.2.3 签名算法 1.2.4 应答过程 1.3 ...

  10. 云原生周刊:Cilium v1.16.0 发布|20240729

    开源项目 Cyclops Cyclops 是一个开源的开发工具,通过易于使用的用户界面简化了 Kubernetes,使其更易上手.不再需要使用 YAML 创建和配置 Kubernetes 清单,可以使 ...