当前位置: 首页 > 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…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...