elementui半年选择组件
1.基于elementui开发的半年选择组件

2.调用
<el-halfyear-picker v-model="date" :size="size"></el-halfyear-picker>
3.代码
<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>
</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(halfyear_num = 1){
//创建一个时间
var time = new Date()
//设定年份
time.setFullYear(this.showYear)
//设定月份
if(halfyear_num == 1){
//上半年设为1月
time.setMonth(0)
}else{
//下半年设为7月
time.setMonth(6)
}
//设定日期和时分秒
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,halfyear_num){
// 如果没有选中时间 直接return false
if(!this.selectTime){
return false
}
//当前年份
var select_year = this.selectTime.getFullYear()
//判断当前季度
var select_halfyear_num = ""
var select_month = this.selectTime.getMonth() + 1
if(select_month >= 1 && select_month <= 6){
select_halfyear_num = 1
}else{
select_halfyear_num = 2
}
//如果年份 季度一致 则直接返回true
if(select_year == showYear && select_halfyear_num == halfyear_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 halfyear_text = ""
var month = this.selectTime.getMonth()+1
if(month >= 1 && month <= 6){
halfyear_text = "上半年"
}else{
halfyear_text = "下半年"
}
return `${this.selectTime.getFullYear()}年 ${halfyear_text}`
}
}
}
</script>
<style scoped>
</style>
elementui半年选择组件的更多相关文章
- react-native DatePicker日期选择组件的实现
本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenber ...
- JS组件系列——不容错过的两款Bootstrap Icon图标选择组件
前言:最近好多朋友在群里面聊到bootstrap icon图标的问题,比如最常见的菜单管理,每个菜单肯定需要一个对应的菜单图标,要是有一个可视化的图标选择组件就好了,最好是直接选择图标,就能得到对应的 ...
- Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
media-choice为媒体资源选择组件,基于KnockoutJs.支持图片.语音.视频.图文的选择以及预览,支持默认选择类型,支持是否禁用选择类型的更改. 使用示例: <script id= ...
- NSIS:卸载时选择组件
原文 NSIS:卸载时选择组件 有时候,我们想要在卸载时也可以选择组件,进行定制性的卸载,那么,以下文字将简略讨论这个问题: 题外:我们想要卸载时选择组件,当然是在安装时要有组件选择页面的前提下,也就 ...
- ionic-基于angularjs实现的多级城市选择组件
大家都知道在移动端的选择地区组件,大部分都是模拟IOS选择器做的城市三级联动,但是在IOS上比较好,在Android上因为有的不支持ion-scroll.所以就会出现滚动不会自动回滚到某一个的正中间. ...
- 在 Element-UI 的 Table 组件上添加列拖拽效果
Element-UI 的 Table组件很强大,但是我们的需求更强大... 简单粗暴的来一发效果图: 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup ...
- vue仿京东省市区三级联动选择组件
工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...
- angular2.x 下拉多选框选择组件
angular2.x - 5.x 的下拉多选框选择组件 ng2 -- ng5.最近在学angular4,经常在交流群看见很多人问 下拉多选怎么做... 今天就随便写的个. 组件源码 百度云 链接: ...
- android 拍照和从相册选择组件
android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和 ...
- element-ui 的el-button组件中添加自定义颜色和图标的实现方法
这篇文章主要介绍了element-ui 的el-button组件中添加自定义颜色和图标的实现方法,目前的解决方案是:添加一个自定义全局指令,同时在element-ui源码中,加入对应的组件.需要的朋友 ...
随机推荐
- Angular Material 18+ 高级教程 – CDK Overlay
Overlay, Dialog, Modal, Popover 傻傻分不清楚 参考: Medium – Modal?Dialog?你真的知道他們是什麼嗎? Popups, dialogs, toolt ...
- C++ STL queue容器——队列
queue容器 基本概念 queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素. queue容器没有迭代器,所有元素进出都必须符合"先进先 ...
- トヨタ自動車プログラミングコンテスト2024#7(ABC 362)
非常好名次,使我的 \(1\) 旋转 四发罚时应该是这次比赛最唐的东西了,没有就进前一千了 A.Buy a Pen 特判秒了,懒得打三种 ans=,所以就把不能选的那个赋值成无穷大了 #include ...
- 北京智和信通 | 无人值守的IDC机房动环综合监控运维
随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...
- VMware Vsphere 8.0 ESXI 主机部署
一. VMware vSphere 8.0新特性 VMware vSphere 8.0是一个全新的版本,引入了许多新功能,其中最主要的新功能包括 1.集中式云控制台 使 IT 管理员能够借助 vSph ...
- spring上 -基于Xml配置bean笔记
4,Spring 内容 7,快速入门 需求:通过 Spring 的方式[配置文件], 获取 JavaBean: Monster 的对象, 并给该的对象属性赋值, 输出该对象信息. 代码结构: lib ...
- Linux PSI--Pressure Stall Information
Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi. 转载自使用PSI(Pressure Stall Information)监控服务器资源_ ...
- android系统启动流程- ServiceManager进程启动流程
*注:基于Android11源码 ServiceManager进程是在init进程创建的,所以我们从init进程的main()开始分析: // 文件路径: system/core/init/main. ...
- Linux 循环设备 loop疑惑
什么是loop设备? loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用.在使用之前,一个 loop 设备必须要和一个文件进行连接.这种结合方 ...
- 05-react的类组件和函数组件 -- 状态 state
// 函数组件是无状态的 既没有数据的 类似 vue 组件中的 data 数据 // 类组件是有状态的组件 是有数据的 是双向绑定的数据 是数据驱动视图的 负责UI的视图更新 (单个组件的私有数据组件 ...