element-ui季度选择组件
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季度选择组件的更多相关文章
- vue问题三:element ui的upload组件上传图片成功和移除事件
element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...
- vue+element ui中select组件选择失效问题原因与解决方法
codejing 2020-07-10 09:13:31 652 收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...
- 关于Element UI中select组件中遇到的问题
问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...
- Vue+element UI实现分页组件
介绍 这是一个是基于element-UI的分页组件基础上,进行了二次封装的分页组件,在展示数据时,该分页组件采用了每显示一页数据,只请求当前页面的数据的请求策略,从而避免了一次性将数据全部请求所造成的 ...
- element ui 弹出组件的遮罩层在弹出层的上面的解决方法
<el-dialog title="收货地址" :visible.sync="dialogFormVisible" :modal-append-to-bo ...
- 封装一个优雅的element ui表格组件
现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...
- element ui step组件在另一侧加时间轴显示
这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- element UI排坑记(一):判断tabs组件是否切换
之所以将这个问题列在排坑记之中,是因为官方组件的一个属性颇有些隐蔽,这个问题曾经折腾了本人较多时间,始终思维固着,且使用搜索引擎也不容易搜索到答案,故记之.然而实际解决却是相当简单的. 一.问题描述 ...
- 使用 Element UI Select 组件的 value-key 属性,让绑定值可以为一个对象
EsunR 2019-11-07 12:14:42 12264 收藏 6 分类专栏: Vue 文章标签: element-ui 版权 当我们使用 Elemet UI 的选择组件进行多选时,Sele ...
随机推荐
- Transformer应用于时序任务:综述《Transformers in Time Series: A Survey》
2022年9月13日 21:28 摸鱼了一天,看看综述. 论文:Transformers in Time Series: A Survey GitHub: 阿里达摩院 2022的论文. 摘要 从两个角 ...
- Swift查看变量内存地址
withUnsafePointer 不说话,先放代码 withUnsafeBufferPointer(to: a) { point in let address = UnsafeRawPointer( ...
- Java以封装对象的方式读取CSV文件存储数据库
依赖 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <dependency& ...
- 【官宣】2024 DTC数据技术嘉年华全议程发布:汇聚行业精英,共襄年度盛宴
龙腾四海内,风云际会时.由墨天轮数据社区和中国数据库联盟(ACDU)主办的第十三届数据技术嘉年华 将于2024年4月12日至13日在北京新云南皇冠假日酒店盛大召开.本次大会的主题是"智能·云 ...
- 2021年12月墨天轮国产数据库排行榜: openGauss节节攀升拿下榜眼,GaussDB与TDSQL你争我夺各进一位
2021年12月的国产数据库流行度排行榜已在墨天轮发布,本月共有189家数据库参与排名.为使国产数据库排名更加专业与客观,本月起,排行榜加入了三方评测.生态.专利数.论文数等新的指标.其中三方测评方面 ...
- C# 中的四种整形数据
// C# 中有四种整数类型 byte short int long byte bMax = byte.MaxValue; /// 255 最大值 byte bMin = byte.MinValue; ...
- markdown.css 设置文章的样式
返回的详情文章内容是标签加内容文字,使用 markdown,css 渲染样式 : .markdown-body .octicon { display: inline-block; fill: curr ...
- ABC270-d
题目 首先贪心是行不通的,考试的时候打了贪心,挂了...... 举个反例: 10 2 3 4 贪心枚举答案为4,但若高桥先选3,最大值为6. 其实考试的时候想到了dp,但是不会打 悲 因为青木也是聪明 ...
- Win11右键默认显示更多设置
以管理员方式运行CMD,运行: reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2} ...
- 在昇腾Ascend 910B上运行Qwen2.5推理
目前在国产 AI 芯片,例如昇腾 NPU 上运行大模型是一项广泛且迫切的需求,然而当前的生态还远未成熟.从底层芯片的算力性能.计算架构的算子优化,到上层推理框架对各种模型的支持及推理加速,仍有很多需要 ...