vue2日历组件

这个代码可以直接运行,未防止有组件库没安装,将组件库的代码,转成文字了

vue页面

<template><div class="about"><div style="height: 450px; width: 400px"><div style="height: 100%; overflow: auto"><div class="calendar-title" style="height: 45px"><span class="on-title cursor-btn">日历</span><span><span class="date-title cursor-btn">{{dateTypeFormat('YYYY-mm-dd',new Date())}}</span><span>今日</span></span></div><div class="plan-zone"><div class="left-btn"><!-- <a-icon type="left" @click="prevMonth" /> --><!-- 切换月份----可以换成图标 --><span @click="prevMonth">左</span><span class="cursor-btn">{{ getCurDate() }}</span><span @click="nextMonth">右</span><!-- <a-icon type="right" @click="nextMonth" /> --><!-- <el-button type="primary" @click="goToCurrentDay">回到今天</el-button>--></div><table class="parent-table"><thead><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th><th>日</th></thead><tbody><tr v-for="(week, windex) in weeks" :key="windex"><tdv-for="(day, dindex) in week":class="{ highlight: isToday(day.date) }":key="dindex"><divclass="content":class="{faded: !isCurrentMonth(day.date),}"><div class="top-day" @click="onDate(day)"><a-badge :dot="judgment(day.date.getDate())">{{day.date.getDate()}}</a-badge></div><div class="middle-event"></div><div class="bottom-event"></div></div></td></tr></tbody></table><div class="orientation-btn cursor-btn" @click="goToCurrentMonth">定位到今天</div></div></div></div></div>
</template>
<script>export default {name: "AboutView",components: {},data() {return {group_data: [],current: new Date(),today: new Date(),};},computed: {weeks() {return this.getMonthData(this.current.getFullYear(),this.current.getMonth() + 1);},},methods: {dateTypeFormat(fmt, date) {let ret;const opt = {"Y+": date.getFullYear().toString(), // 年"m+": (date.getMonth() + 1).toString(), // 月"d+": date.getDate().toString(), // 日"H+": date.getHours().toString(), // 时"M+": date.getMinutes().toString(), // 分"S+": date.getSeconds().toString(), // 秒// 有其他格式化字符需求可以继续添加,必须转化成字符串};for (const k in opt) {ret = new RegExp("(" + k + ")").exec(fmt);if (ret) {fmt = fmt.replace(ret[1],ret[1].length === 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"));}}return fmt;},judgment(val) {let dete = this.getCurDate() + "-" + val;let flag = false;this.group_data.forEach((item) => {if (item.name === dete) {flag = true;}});return flag;},onDate(val) {this.current = val.date;},getCurDate() {var date = this.current;var year = date.getFullYear();var month = date.getMonth() + 1; // getMonth() returns a zero-based value (0-11)if (month < 10) {month = "0" + month; // add a leading zero if the month is a single digit}return year + "-" + month;},isToday(date) {// let today = new Date()return (date.getDate() === this.current.getDate() &&date.getMonth() === this.current.getMonth() &&date.getFullYear() === this.current.getFullYear());},goToCurrentDay() {this.current = new Date(this.today);},isCurrentMonth(date) {return date.getMonth() === this.current.getMonth();},prevMonth() {this.current.setMonth(this.current.getMonth() - 1);this.current = new Date(this.current);},nextMonth() {this.current.setMonth(this.current.getMonth() + 1);this.current = new Date(this.current);},goToCurrentMonth() {this.current = new Date(this.today);},getMonthData(year, month) {let weeks = [];let firstDay = new Date(year, month - 1, 1); // 这个月的第一天let lastDayOfCurrentMonth = new Date(year, month, 0); // 这个月的最后一天let lastDayOfPrevMonth = new Date(year, month - 1, 0); // 上个月的最后一天//这里的0有一个特殊的意义,它可以返回上个月的最后一天。也就是说,如果你想知道某个月有多少天,你可以创建一个日期对象,年份和月份设置为你想知道的月份,日期设置为0,然后调用getDate()方法,返回的就是那个月的天数。// new Date(year, month - 1, 0) 最后一个参数,超过当月天数重新排序,比如1月31天,最后一个参数为33返回2let startDayOfWeek = firstDay.getDay() === 0 ? 7 : firstDay.getDay(); // 开始是周几let dayCount = 1; // 当前日期的变量,初始值为1// 上一个月的天数let prevMonthDayCount = lastDayOfPrevMonth.getDate() - startDayOfWeek + 2; // 这是为了在日历中填充上个月的日期。for (let i = 0; i < 6; i++) {let week = [];for (let j = 0; j < 7; j++) {// 日期为上个月的日期,然后将这个日期对象添加到`week`数组中,同时`prevMonthDayCount`加1。if (i === 0 && j < startDayOfWeek - 1) {week.push({ date: new Date(year, month - 2, prevMonthDayCount++) });// 日期为下个月的日期,然后将这个日期对象添加到`week`数组中,同时`dayCount`加1} else if (dayCount > lastDayOfCurrentMonth.getDate()) {week.push({date: new Date(year,month,dayCount++ - lastDayOfCurrentMonth.getDate()),});// 日期为这个月的日期,然后将这个日期对象添加到`week`数组中,同时`dayCount`加1} else {week.push({ date: new Date(year, month - 1, dayCount++) });}}weeks.push(week);}return weeks;},},
};
</script>
<style lang="less" scoped>
.cursor-btn {cursor: pointer;
}
.faded {opacity: 0.3;
}
.highlight {background: #3f7afe;border-radius: 50px;color: #fff;
}
.plan-zone {margin-top: 10px;border: 1px solid #ddd;border-radius: 4px;.left-btn {display: flex;justify-content: space-evenly;align-items: center;height: 38px;border-bottom: 1px solid #d4d4d4;}.orientation-btn {display: flex;justify-content: space-evenly;align-items: center;height: 32px;border-top: 1px solid #d4d4d4;color: #819cef;}.right-btn {button.new {background-color: #fff;border: 1px solid #fff;color: #409eef;position: relative;&::before {content: "";width: 8px;height: 8px;border-radius: 50%;position: absolute;top: 7px;left: -3px;background-color: #409eef;}}button.ing {background-color: #fff;border: 1px solid #fff;color: #ff974a;position: relative;&::before {content: "";width: 8px;height: 8px;border-radius: 50%;position: absolute;top: 7px;left: -3px;background-color: #ff974a;}}button.finish {background-color: #fff;border: 1px solid #fff;color: #3dd599;position: relative;&::before {content: "";width: 8px;height: 8px;border-radius: 50%;position: absolute;top: 7px;left: -3px;background-color: #3dd599;}}}
}
.parent-table {border-collapse: collapse;table-layout: fixed;text-align: center;width: calc(100% - 70px);/* margin-top: 1.04167vw; */margin: 15px 35px;thead {border-bottom: 1px solid #d4d4d4;}th,td {width: 14.4%;// border: 1px solid #ddd;}td {padding: 2px 3px;.content {position: relative;height: 32px;line-height: 32px;}vertical-align: top;.top-day {cursor: pointer;text-align: center;font-size: 13px;}}
}
.table-date {display: flex;> div {flex: 1;}
}
.schedule-right {height: calc(48% - 20px);padding-top: 8px;
}
.calendar-title2 {height: 45px;display: flex;justify-content: space-between;align-items: center;padding: 0 8px 4px 8px;border-bottom: 1px solid #e8e8e8;margin-bottom: 8px;font-size: 15px;font-weight: 600;// margin-top: 8px;.date-title {color: #819cef;}
}
.calendar-title {height: 45px;display: flex;justify-content: space-between;align-items: center;padding: 0 8px 4px 8px;border-bottom: 1px solid #e8e8e8;margin-bottom: 8px;font-size: 15px;font-weight: 600;.date-title {color: #819cef;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交响曲-24-3-单细胞CNV分析及聚类

CNV概述 小于1kb是常见的插入、移位、缺失等的变异 人体内包含<10% 的正常CNV&#xff0c;我们的染色体数是两倍体&#xff0c;正常情况下&#xff0c;只有一条染色体表达&#xff0c;另一条沉默&#xff0c;当表达的那条染色体发生CNV之后&#xff0c;表达数量就会成倍增加…

UDP -- 简易聊天室

目录 gitee&#xff08;内有详细代码&#xff09; 图解 MessageRoute.hpp UdpClient.hpp UdpServer.hpp Main.hpp 运行结果&#xff08;本地通信&#xff09; 如何分开对话显示&#xff1f; gitee&#xff08;内有详细代码&#xff09; chat_room zihuixie/Linux_Lear…

电影动画shader解析与实现

着色器代码解析 大家好&#xff01;我是 [数擎AI]&#xff0c;一位热爱探索新技术的前端开发者&#xff0c;在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情&#xff0c;欢迎关注我的文章&#xff0c;我们一起成长、进步&#xff01; 开发领域&#xff1a;…

【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector&#xff5e;简单实现&#xff08;10 /100&#xff09; 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果&#xff08;12 /100&#xff09; 上效果&#xff1a; 这个在知乎里找到的效果&…

【Rust自学】11.1. 编写和运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.1.1. 什么是测试 在Rust里一个测试就是一个函数&#xff0c;它被用于验证非测试代码的功能是否和预期一致。 在一个测试的函数体里通…

数据分析思维(八):分析方法——RFM分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

Unity:删除注册表内的项目记录

然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中&#xff0c;删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…

JAVA学习记录3

文章为个人学习记录&#xff0c;仅供参考&#xff0c;如有错误请指出。 上期说到使用记事本编写Java程序太过繁琐&#xff0c;所以我们后面都将使用IDEA进行代码的编写、编译和运行。 如何下载安装IDEA&#xff1f; 这个的下载途径也很多&#xff0c;我还是推荐去官网下载(h…

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…

GMDH自组织网络模型时间序列预测,可预测未来

GMDH自组织网络模型时间序列预测&#xff0c;可预测未来 目录 GMDH自组织网络模型时间序列预测&#xff0c;可预测未来效果一览基本介绍模型构建程序设计学习总结参考资料 效果一览 基本介绍 GMDH自组织网络模型是自组织数据挖掘中的一种模型方法&#xff0c;是基于计算机科学和…

【docker系列】可视化Docker 管理工具——Portainer

1. 介绍 Portainer是一个可视化的Docker操作界面&#xff0c;提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作&#xff08;包括上传下载镜像&#xff0c;创建容器等操作&#xff09;、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录…

Linux/Ubuntu/银河麒麟 arm64 飞腾FT2000 下使用 arm64版本 linuxdeployqt 打包Qt程序

文章目录 一、前言二、环境三、准备1、下载Linuxdeployqt源码2、下载Appimagetool-aarch64.AppImage四、编译linuxdeployqt1.配置环境变量2.编译linuxdeployqt五、安装patchelf六、配置Appimagetool七、打包Qt程序重要提示:测试启动应用八、其他九、最后一、前言 因为项目需要…

pg数据库运维经验2024

这篇文章主要是讲pg运维常见问题&#xff0c;两三年见一次的疑难杂症就不说了。 主要是技术性运维总结&#xff0c;主打通俗易懂和快速上手&#xff0c;尽量避免源码层面等深入分析。 SQL性能与执行计划 执行计划突变 pg官方不支持hint功能&#xff0c;并且计划永远不支持&…

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载&#xff1a;https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…

个人博客搭建(二)—Typora+PicGo+OSS

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; 做个超努力的小奚-CSDN博客 一、前言 博客搭建完一直没有更新&#xff0c;因为WordPress自带的文档编辑器不方便&#xff0c;以前用CSDN写作的时候&#xff0c;习惯了Typora。最近对比了…

【向量数据库】搜索算法

最近几年&#xff0c;一种叫做向量数据库的产品&#xff0c;正趁着AI的热潮开始崭露头角。伴随着AI时代的到来&#xff0c;向量将成为一种重要的数据形式&#xff0c;而传统数据库并不适合用来存储和检索向量数据&#xff0c;因此我们大约需要一种专门设计的数据库来处理这些问…

ARM CCA机密计算安全模型之安全生命周期管理

安全之安全(security)博客目录导读 目录 一、固件启用的调试 二、CCA系统安全生命周期 三、重新供应 四、可信子系统与CCA HES 启用 CCA&#xff08;机密计算架构&#xff09;的安全系统是指 CCA 平台的实现处于可信状态。 由于多种原因&#xff0c;CCA 启用系统可能处于不…