当前位置: 首页 > news >正文

基于quasar,只选择年度与月份的组件

为什么要做

quasar是个基于vue的强大的UI开发库,它提供了非常多的组件,比如日期选择。但是有些时候只需要选择到月份就可以了,quasar中没有,所以自己动手写了一个。因为对界面编程我不熟悉,所以,如果你有更好的想法,请不吝赐教。源码在gitcode、gitee、github的至简网格/企业服务上都有,以Apache License协议开源,gitcode连接如下:

assets/file/v3/components/month_input.js · master · 至简网格 / 企业服务 · GitCode

用法:

1)先引入

import MonthInput from "path_to_components/month_input.js"

2)再注册

组件中注册:components:{"month-input":MonthInput}

或全局注册:app.component('month-input', MonthInput);  app是使用Vue.createApp创建的。

3)最后使用

<month-input class="justify-center text-primary" min="-5" max="cur" @update:modelValue="f"></month-input>

属性

min、max、monthName(默认为“月”)

min、max接受以下几种格式:cur当前月份、-x当前年度减x年,+x当前年度加x年,yyyy/MM、yyyy-MM或yyyy.MM具体的月份;不设置则不限制。

update:modelValue触发回调时传递一个对象,其中包括{year:年份,month:月份(从1开始),num:年份*12+月份-1}

操作

没有点击时显示如下:

点击左右箭头前移一个月或后移一个月;点击中间的年/月,显示一个弹窗,在min、max指定范围之外的年月显示为灰色,如果选中的年份不在当前年份列表页中,月份全部显示灰色。点击左右箭头前移或后移12年。先选择年份,然后选择月份就可以了触发update:modelValue,同时隐藏弹窗。

源码

//月份选择组件month-input
export default{
data(){return {maxMonth:0,minMonth:0,year:'',month:'',num:0,//year*12+month-1startYear:0,years:[],months:[],old:{y:0,m:0}
}},
props: {modelValue:{type:String},min:{type:String,default:''}, //年份max:{type:String,default:''},monthName:{type:String, default:"月"}
},
emits: ['update:modelValue'],
created(){var m=this.parse(this.max,{y:9999,m:1});this.maxMonth=m.y*12+m.m-1;m=this.parse(this.min,{y:0,m:1});this.minMonth=m.y*12+m.m-1;var dt=new Date();m=this.parse(this.modelValue,{y:dt.getFullYear(),m:dt.getMonth()+1})this.old={year:m.y, month:m.m};this.year=m.y;this.month=m.m;this.num=this.year*12+this.month-1;this.startYear=this.year-4;this.set_array();
},
methods:{
set_array() {var month;var list=[];var chked=false;var v=this.startYear;var yMax=Math.floor(this.maxMonth/12);var yMin=Math.floor(this.minMonth/12);for(var i=0;i<4;i++) {var yy=[];for(var j=0;j<3;j++) {var y={v:v,cls:"col text-center"};if(v>yMax||v<yMin) {y.cls+=" text-grey";} else if(v==this.year) {y.cls+=" bg-primary text-white";chked=true;}yy.push(y);v++;}list.push(yy);}this.years=list;v=1;list=[];for(var i=0;i<4;i++) {var mm=[];for(var j=0;j<3;j++) {var m={v:v,cls:"col text-center"};if(chked) {//所选年份可见month=this.year*12+v-1;if(month>this.maxMonth||month<this.minMonth) {m.cls+=" text-grey";} else if(v==this.month) {m.cls+=" bg-primary text-white";}} else {m.cls+=" text-grey";}mm.push(m);v++;}list.push(mm);}    this.months=list;
},
parse(s,def) {if(!s) {return def;}var cfg=s.trim().toLowerCase();var dt=new Date();if(cfg=="cur") {return {y:dt.getFullYear(),m:dt.getMonth()+1};}if(cfg.startsWith('-')) {var v = parseInt(cfg.substring(1));return {y:dt.getFullYear()-v, m:1};}if(cfg.startsWith('+')) {var v = parseInt(cfg.substring(1));return {y:dt.getFullYear()+v, m:1};}var y,m;var p=cfg.indexOf('/');if(p<0)p=cfg.indexOf('-');if(p<0)p=cfg.indexOf('.');if(p>0) {y=parseInt(cfg.substring(0,p));m=parseInt(cfg.substring(p+1));} else {y=parseInt(cfg);m=1;}return {y:y,m:m};
},
pageUp() {this.startYear-=12;this.set_array();
},
pageDn() {this.startYear+=12;this.set_array();
},
fore(){if(this.num<=this.minMonth)return;this.month--;if(this.month==0) {this.year--;this.month=12;}this.num=this.year*12+this.month-1;this.old={year:this.year, month:this.month,num:this.num};this.$emit('update:modelValue', this.old);
},
next(){if(this.num>=this.maxMonth)return;this.month++;if(this.month>12) {this.year++;this.month=1;}this.num=this.year*12+this.month-1;this.old={year:this.year, month:this.month,num:this.num};this.$emit('update:modelValue', this.old);
},
set_year(v) {var yMax=Math.ceil(this.maxMonth/12);var yMin=Math.floor(this.minMonth/12);if(v>yMax||v<yMin) {return;}this.month=-1;this.year=v;this.set_array();
},
set_month(v) {if(this.year<this.startYear||this.year>=this.startYear+12) {return;//未选择年份}var m=v-1+this.year*12;if(m>this.maxMonth||m<this.minMonth) {return; //不在有效范围内}this.month=v;if(v!=this.old.month||this.year!=this.old.year) {this.num=this.year*12+this.month-1;this.old={year:this.year, month:this.month,num:this.num};this.$emit('update:modelValue',this.old);}this.$refs._my_dlg.hide();
}
},
computed: {value: {get() {return this.year+'/'+(this.month>9?this.month:('0'+this.month))},set(v) {var ym=this.parse(v);this.year=ym.y;this.month=ym.m;this.num=this.year*12+this.month-1;}}
},
template: `
<div class="row"><div class="rol q-pr-lg"><q-icon name="navigate_before" @click="fore":class="num<=minMonth?'text-grey':''"></q-icon></div><div class="rol" style="cursor:pointer">{{year}} / {{month<10?('0'+month):month}}<q-popup-proxy cover @before-show="set_array" ref="_my_dlg"><div class="row q-pa-sm" style="min-width:20em;"><div class="col self-center"><q-icon name="navigate_before" @click="pageUp" size="2em" class="q-px-sm"></q-icon></div><div class="col-8"><div class="row" v-for="yy in years"><div v-for="y in yy" :class="y.cls" @click="set_year(y.v)"style="cursor:pointer">{{y.v}}</div></div><q-separator spaced="md"></q-separator><div class="row" v-for="mm in months"><div v-for="m in mm" :class="m.cls" @click="set_month(m.v)"style="cursor:pointer">{{m.v}}{{monthName}}</div></div></div><div class="col self-center"><q-icon name="navigate_next" @click="pageDn" size="2em" class="q-px-sm"></q-icon></div></div></q-popup-proxy></div><div class="rol q-pl-lg"><q-icon name="navigate_next" @click="next":class="num>=maxMonth?'text-grey':''"></q-icon></div> 
</div>
`
}

相关文章:

基于quasar,只选择年度与月份的组件

为什么要做 quasar是个基于vue的强大的UI开发库&#xff0c;它提供了非常多的组件&#xff0c;比如日期选择。但是有些时候只需要选择到月份就可以了&#xff0c;quasar中没有&#xff0c;所以自己动手写了一个。因为对界面编程我不熟悉&#xff0c;所以&#xff0c;如果你有更…...

健康养生:拥抱生活的艺术

健康养生&#xff1a;拥抱生活的艺术 在快节奏的现代生活中&#xff0c;健康已成为我们最宝贵的财富。健康养生&#xff0c;不仅仅是一种生活方式的选择&#xff0c;更是一种对待生活的态度&#xff0c;它关乎于如何在日常中寻找到平衡&#xff0c;让身心得以滋养&#xff0c;…...

注意力机制+时空特征融合!组合模型集成学习预测!LSTM-Attention-Adaboost多变量时序预测

注意力机制时空特征融合&#xff01;组合模型集成学习预测&#xff01;LSTM-Attention-Adaboost多变量时序预测 目录 注意力机制时空特征融合&#xff01;组合模型集成学习预测&#xff01;LSTM-Attention-Adaboost多变量时序预测效果一览基本介绍程序设计参考资料 效果一览 基…...

uniapp 微信小程序 均分数据展示

效果图 数据展示&#xff0c;可自行搭配 html <view class"num-wrapper"><view class"num-item" click.stop"routerGo(跳转的地址)"><text class"num">&#xffe5;{{ 要展示的数据 || 0}}</text><view…...

Nacos 3.0 考虑升级到 Spring Boot 3 + JDK 17 了!

Nacos 由阿里开源&#xff0c;是 Spring Cloud Alibaba 中的一个重要组件&#xff0c;主要用于发现、配置和管理微服务。 由于 Spring Boot 2 的维护已于近期停止&#xff0c;Nacos 团队考虑升级到 Spring Boot 3 JDK 17&#xff0c;目前正在征求意见和建议。 这其实是一件好…...

跟沐神学读论文-论文阅读管理

摘要 近期有读论文的需求&#xff0c;就需要去了解一下论文到底要怎么读&#xff0c;同一个系列之间的论文如何作整理和归纳&#xff0c;之前也有了解过市面上有成熟的论文阅读工具&#xff0c;但是对于学生党来讲没什么性价比&#xff0c;在B站上看到沐神有讲解他的思路Typor…...

Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署

当配置项存储在外部文件&#xff08;如 XML、JSON&#xff09;时&#xff0c;修改配置无需重新编译和发布代码。通过更新 XML 文件即可调整参数&#xff0c;无需更改源代码&#xff0c;从而提升开发效率和代码可维护性。 1. 为什么选择 XML 配置文件 XML 配置文件具有多种优点…...

[SV]如何在UVM环境中使用C Model

在UVM环境中使用C Memory 一、C语言实现Memory 1.1 代码说明 Memory 初始化: memory_init() 函数将内存空间初始化为 0,并初始化互斥锁。AXI 写操作 (axi_write): 检查地址范围是否合法。使用 memcpy 将数据从输入缓冲区写入模拟内存。使用互斥锁保证线程安全。AXI 读操作 …...

十大开源的Cursor AI替代方案

随着AI的兴起&#xff0c;所使用的工具也在不断进步。Cursor AI 作为一个强大的编码助手&#xff0c;已经成为开发人员不可或缺的工具。开源替代方案提供了透明性、个性化和成本效益。本文深入探讨了Cursor AI 的十大开源替代方案&#xff0c;这些方案将丰富您的编码体验&#…...

相机光学(四十六)——镜头马达(VCM)控制策略模式

One Step Mode、Linear Slope Control&#xff08;LSC&#xff09;和Acceleration Control是三种不同的控制模式&#xff0c;它们在控制策略和应用场景上有所区别。这些控制模式在VCM中的应用是为了提高其性能&#xff0c;减少振动&#xff0c;加快响应速度&#xff0c;并提高定…...

专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。

考研落幕&#xff0c;本人本中游211&#xff0c;如愿以偿考入浙江大学&#xff0c;专业课842信号系统与数字电路140&#xff0c;总分410&#xff0c;和考前多次模考预期差距不大&#xff08;建议大家平时做好定期模考测试&#xff0c;直接从实战分数中&#xff0c;找到复习的脉…...

了解ARM的千兆以太网——RK3588

1. 简介 本文并不重点讲解调试内容&#xff0c;重点了解以太网在ARM设计中的框架以及在设备树以及驱动的一个整体框架。了解作为一个驱动开发人员当拿到一款未开发过的ARM板卡应该怎么去把网卡配置使用起来。 2. 基础知识介绍 在嵌入式ARM中实现以太网的解决方案通常有以下两种…...

JavaFX使用jfoenix的UI控件

jfoenix还是一个不错的样式&#xff0c;推荐使用&#xff0c;而且也可以支持scene builder中的拖拖拽拽 需要注意的是过高的javafx版本可能会使得某些样式或控件无法使用 比如alert控件&#xff0c;亲测javaFX 19版本可以正常使用 1.在pom.xml中引入依赖 GitHub地址https://gi…...

Linux(Ubuntu)命令大全——已分类整理,学习、查看更加方便直观!(2024年最新编制)

Hello! 认真好学的小伙伴们&#xff0c;大家好呀&#xff08;Respect~&#xff09;&#xff01;我是 H u a z z i Huazzi Huazzi&#xff0c;欢迎观看本篇博客&#xff0c;接下来让我们一起来学习 Ubuntu命令大全 吧&#xff01;祝你有所收获&#xff01; 文章目录 前言&#x…...

单片机:实现教学上下课的自动打玲(附带源码)

单片机实现教学上下课的自动打铃 在学校或其他教育机构中&#xff0c;定时的打铃系统被广泛应用&#xff0c;用于提醒学生和老师上下课的时间。一个简单的自动打铃系统可以通过单片机实现&#xff0c;结合蜂鸣器和定时器控制&#xff0c;可以在设定的时间点自动打铃&#xff0…...

进程通信方式---共享映射区(无血缘关系用的)

5.共享映射区&#xff08;无血缘关系用的&#xff09; 文章目录 5.共享映射区&#xff08;无血缘关系用的&#xff09;1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理&#xff1a;共享映射区是将文件…...

深度学习实战智能交通计数

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…...

【MySQL】MySQL表的操作

【MySQL】MySQL表的操作 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;MySQL&#x1f34b; &#x1f33c;文章目录&#x1f33c; 1. 创建表 2. 查看表结构 3. 修改表 4. 删除表 1. 创建表 create table table_name(表名称)( fiel…...

Redis篇-12--数据结构篇4--Hash内存模型(数组,链表,压缩列表zipList,哈希表,短结构)

Redis的Hash数据结构用于存储键值对&#xff08;key-value形式&#xff09;的集合&#xff08;类似java中HashMap或对象&#xff09;。为了在保证高效性能的同时节省内存&#xff0c;Redis对Hash的底层实现进行了多种优化。特别是通过使用压缩列表&#xff08;ziplist&#xff…...

二、windows环境下vscode使用wsl教程

本篇文件介绍了在windows系统使用vscode如何连接使用wsl&#xff0c;方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode&#xff0c;按快捷键CtrlShiftX打开插件市场&#xff0c;搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...