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.rhkb.cn/news/504165.html

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

相关文章

Java语法总结

Java的数据类型分为基本数据类型和引用数据类型。 1.基本数据类型&#xff1a;四类八种 byte 和short 比较特殊&#xff0c;不必考虑int类型&#xff0c;只关注是否超出了表示范围。 数据超出了int的范围&#xff0c;改正&#xff1a;在后边添加L &#xff0c;定义变量报错…

自动驾驶控制与规划——Project 6: A* Route Planning

目录 零、任务介绍一、算法原理1.1 A* Algorithm1.2 启发函数 二、代码实现三、结果分析四、效果展示4.1 Dijkstra距离4.2 Manhatten距离4.3 欧几里德距离4.4 对角距离 五、后记 零、任务介绍 carla-ros-bridge/src/ros-bridge/carla_shenlan_projects/carla_shenlan_a_star_p…

闲谭SpringBoot--ShardingSphere分库分表探究

文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文&#xff0c;我们对日志表&#xff0c;进行了按月的分表&#xff0c;这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢&#xff0c;除了提高硬件性能&#xff0c;还有一…

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…

STM32供电参考设计

STM32供电参考设计 ​ 在图中有VDD&#xff0c;VSS和VDDA&#xff0c;VSSA两种类型的供电引脚&#xff0c;其数据手册解释如下&#xff1a; ​ 令我不解的是&#xff1a;VDDA和VSSA必须分别连接到VDD和VSS&#xff0c;这是什么意思&#xff1f;有大佬能够解答一下吗&#xff1f…

和为0的四元组-蛮力枚举(C语言实现)

目录 一、问题描述 二、蛮力枚举思路 1.初始化&#xff1a; 2.遍历所有可能的四元组&#xff1a; 3.检查和&#xff1a; 4.避免重复&#xff1a; 5.更新计数器&#xff1a; 三、代码实现 四、运行结果 五、 算法复杂度分析 一、问题描述 给定一个整数数组 nums&…

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心&#xff0c;主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构&#xff1a;前者指令和数据共享同一存储空间…

对快速由表及里说拜拜/如何正确运用由表及里

你是不是还&#xff1a;看到一男子拖走一女子就以为小情侣吵架而已&#xff08;可能人贩子&#xff09;&#xff1b;看到男友对你好个几次就从此死心塌地&#xff08;可能有手就行&#xff0c;细节装装而已&#xff09;结果耽误终身&#xff1b;看到女同事对你微笑不排斥就以为…

(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络

零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗&#xff1f;或者被抖音的人脸特效逗乐的瞬间&#xff1f;这些有趣的应用背后&#xff0c;其实藏着一个精妙的AI世界。今天&#xff0c;就让我们开启一段奇妙的人脸识别技术探索之旅吧&#xff01; 一、人脸识…

腾讯云AI代码助手编程挑战赛-图片转换工具

作品简介&#xff1a; 解决了人们学习生活中的图片格式转换问题&#xff0c; 制作该脚本&#xff0c;省去了打开在线编辑器操作的时间&#xff0c; 免费为用户提供图片格式的转换的实用小工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c; 引用PIL包转换图…

【VUE 指令学习笔记】

v-bind :单向绑定解析表达式&#xff0c;可简写为:xxx v-model :双向数据绑定。 v-for&#xff1a;遍历数组/对象/字符串 v-on&#xff1a;绑定事件监听&#xff0c;可简写为。 v-if:条件渲染(动态控制节点是否存存在) v-else:条件渲染(动态控制节点是否存存在) v-show:条件渲染…

高山旅游景区有效降低成本,无人机山下到山上物资吊运技术详解

在高山旅游景区&#xff0c;传统的物资运输方式往往面临人力成本高昂、效率低下等问题&#xff0c;而无人机技术的引入为这一难题提供了新的解决方案。以下是对无人机从山下到山上进行物资吊运技术的详细解析&#xff1a; 一、无人机物资吊运技术的优势 1. 降低人力成本&#…

【Linux】shell脚本编程

目录 概念&#xff1a; shell脚本的本质&#xff1a; shell脚本编程&#xff1a; shell变量&#xff1a; 变量的定义格式&#xff1a; 变量的分类 自定义变量&#xff1a; 环境变量&#xff1a; 命令变量与命令行参数&#xff1a; 预定义变量&#xff1a; shell中的…

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…

接口测试-postman(使用postman测试接口笔记)

一、设置全局变量 1. 点击右上角设置按钮-》打开管理环境窗口-》选择”全局“-》设置变量名称&#xff0c;初始值和当前值设置一样的&#xff0c;放host放拼接的url&#xff0c;key放鉴权那一串字符&#xff0c;然后保存-》去使用全局变量&#xff0c;用{{变量名称}}形式 二、…

Django学习笔记之数据库(一)

文章目录 安装一、数据库配置二、基本操作步骤1.增加2.查看3.排序4.更新5.删除数据 三、一对多&#xff0c;多对多&#xff0c;一对一1.一对多1.一对一1.多对多 四、查询操作五、聚合操作六、F和Q操作 安装 首先就是安装Mysql和Navicat。 一、数据库配置 其实整个就是连接前端…

【工具变量】统计行业锦标赛激励数据集(2008-2023年)

一、数据简介 坚持创新驱动发展&#xff0c;要强化企业创新主体地位&#xff0c;发挥企业家在技术创新中的重要作用。作为企业组织内部最具有影响力的角色&#xff0c;高级管理人员拥有企业经营管理的自由裁量权&#xff0c;对企业战略决策及由此产生的经营绩效具有举足轻重的…

DuckDB:PRAGMA语句动态配置数据库行为

PRAGMA语句是DuckDB从SQLite中采用的SQL扩展。PRAGMA命令可能会改变数据库引擎的内部状态&#xff0c;并可能影响引擎的后续执行或行为。本文介绍PRAGMA命令及其典型应用场景。 DuckDB PRAGMA介绍 在 DuckDB 中&#xff0c;PRAGMA 是一种编译指示&#xff08;compiler directi…

【QT-QTableView实现鼠标悬浮(hover)行高亮显示+并设置表格样式】

1、自定义委托类 HoverDelegate hoverdelegate.h #ifndef HOVERDELEGATE_H #define HOVERDELEGATE_H#include <QObject> #include <QStyledItemDelegate>class hoverdelegate : public QStyledItemDelegate {Q_OBJECT // 添加 Q_OBJECT 宏public:explicit hoverde…

Improving Language Understanding by Generative Pre-Training GPT-1详细讲解

Improving Language Understanding by Generative Pre-Training 2018.06 GPT-1 0.有监督、半监督、无监督 CV&#xff1a;ImageNet pre-trained model NLP&#xff1a;pre-trained model? 在计算机视觉中任务包含分类、检测、分割&#xff0c;任务类别数少&#xff0c;对应…