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…

python对redis的增删查改

python对redis的增删查改 安装 redis-py 库连接 Redis 服务器增1. 字符串&#xff08;String&#xff09;2. 列表&#xff08;List&#xff09;3. 哈希&#xff08;Hash&#xff09;4. 集合&#xff08;Set&#xff09;5. 有序集合&#xff08;Sorted Set&#xff09; 删1. 删除…

电影动画shader解析与实现

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

代码随想录算法【Day11】

150. 逆波兰表达式求值 class Solution { public:int evalRPN(vector<string>& tokens) {// 力扣修改了后台测试数据&#xff0c;需要用longlongstack<long long> st; for (int i 0; i < tokens.size(); i) {if (tokens[i] "" || tokens[i] &…

让Qt 具有多选文件夹和记忆上一次打开位置的文件对话框

最近要做一个可以多选文件夹的功能&#xff0c;在网上查阅了多个资料&#xff0c;发现github有一段代码可以实现该功能&#xff0c;于是将其收入进行改造。另外qt自带的 getExistingDirectory 和 getOpenFileNames 不具有记忆上一次打开的文件夹位置。要实现多选文件夹和记忆上…

【杂谈】-50+个生成式人工智能面试问题(一)

50个生成式人工智能面试问题 文章目录 50个生成式人工智能面试问题1、生成式人工智能面试问题与神经网络相关Q1. 什么是Transformers&#xff1f;Q2. 什么是注意力机制&#xff1f;有哪些类型的注意力机制&#xff1f;Q3. 为什么Transformer比RNN架构更好&#xff1f;Q4. Trans…

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

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

原型模式详解与实践

在软件开发的奇妙世界里&#xff0c;我们常常面临重复创建相似对象的任务。如果每次创建都要从头开始设置各种属性和状态&#xff0c;不仅繁琐&#xff0c;还可能降低效率。原型模式就像一位神奇的魔法师&#xff0c;为我们提供了一种通过复制现有对象来创建新对象的优雅方式。…

比较procfs 、 sysctl和Netlink

procfs 文件系统和 sysctl 的使用: procfs 文件系统(/proc) procfs 文件系统是 Linux 内核向用户空间暴露内核数据结构以及配置信息的一种方式。`procfs` 的挂载点是 /proc 目录,这个目录中的文件和目录呈现内核的运行状况和配置信息。通过读写这些文件,可以查看和控制内…

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

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

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

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

有关Redis的相关概述

一、Redis概述 1.1 Redis简介 Redis是一个开源的高性能键值对数据库&#xff0c;使用C语言编写&#xff0c;支持多种数据结构&#xff0c;如字符串&#xff08;String&#xff09;、列表&#xff08;List&#xff09;、哈希&#xff08;Hash&#xff09;、集合&#xff08;Set…

_controller_validate

在 controller 中我们首先对所有的请求进行日志记录&#xff0c;身份校验&#xff0c;参数校验之后直接把过滤后的数据丢给 logic(serviceImpl) 。这样子一来 controller 只是充当了 路由 过滤器 的作用&#xff0c;如果之后修改 API &#xff0c;前端的请求地址不需要修改&am…

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

MyBatis面试-1

1、什么是MyBatis&#xff1f; MyBatis是一个半ORM框架(对象关系映射)。---》Hibernate全ORM框架 ---》基于JDBC封装的框架 专注于SQL语句&#xff0c;不用关心JDBC操作的其他流程 2、MyBatis有什么优点 基于SQL语句的编程&#xff0c;相对来说会更加的灵活和JDBC相比&#…

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

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

历代iPhone运行内存大小和电池容量信息

系列设备名称充电端口标配充电线PD快充无线充电 (W)标配充电器电池容量 (mAh)发布时间RAM运存iPhone 16iPhone 16 Pro MaxUSB Type-CUSB-C to USB-C支持25无47472024/9/108GB LPDDR5XiPhone 16 ProUSB Type-CUSB-C to USB-C支持25无35772024/9/108GB LPDDR5XiPhone 16 PlusUSB …

JAVA学习记录3

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