uniapp Vue3 日历 可签到 跳转

 上干货

<template><view class="zong"><view><view class="top"><!-- 上个月 --><view class="sgy" @click="sgy">◀</view><view class="nianyue">{{ year }}年{{ month + 1 }}月</view><!-- 下个月 --><view class="xgy" @click="xgy">▶</view><view class="tzjinri" @click="tzjinri">今日</view></view></view><!-- 周期 --><view class="days"><view class="dayss" v-for="(item,index) in days" :key="index">{{item.week}}</view></view><!-- 天数 --><view class="tian"><view style="color: grey;" class="tians" v-for="(itemm,indexx) in qnumbers" :key="indexx"@click="qdianjitian(year , month , itemm)">{{itemm}}</view><view class="tians" v-for="(item,index) in numbers" :key="index":class="{ 'highlight': item === day && pdjr === true }" @click="dianjitian(year , month + 1 , item)">{{item}}<text v-if="item === day && pdjr === true" class="jinriziyang">今日</text><text v-if="dianjizhi.includes(JSON.stringify(year)+JSON.stringify(month + 1) + JSON.stringify(item) )"class="qiandaozhi">已签</text></view><view style="color: grey;" class="tians" v-for="(itemmm,indexxx) in houmianbuqi" :key="indexxx"@click="hdianjitian(year , month + 1 , itemmm)">{{itemmm}}</view></view></view></template><script setup>import {onMounted,ref,watch} from "vue";// 获取当前年月日const currentDate = new Date();// 获取当前年const year = ref(currentDate.getFullYear());// 获取当前月const month = ref(currentDate.getMonth());// 获取当前日const day = ref(currentDate.getDate());// 当天年月日const teday = ref()// 判断是否是今日const pdjr = ref(false)// 获取当前周期const week = ref(currentDate.getDay())// 获取当前月的总天数const totalDaysInMonth = ref();// 当前月的整体天数const numbers = ref([]);// 当前月的1号是星期几const weekdate = ref()// 当月前的空数据const qnullnumber = ref()// 当月后面补齐的差的数据const hnullnumber = ref()// 前一个月的数据const qnumber = ref()// 前一个月补充的天数const qnumbers = ref()// 补充到后面的数据const houmianbuqi = ref()// 被点击后赋值 进行签到const dianjizhi = ref([])// 是否已签到const yiqiandao = ref()// 周期const days = ref([{id: 0,week: '日'},{id: 1,week: '一'},{id: 2,week: '二'},{id: 3,week: '三'},{id: 4,week: '四'},{id: 5,week: '五'},{id: 6,week: '六'},])// 程序加载完获取当日日期onMounted(() => {huoqu()})// 上个月function sgy() {// 如果月数小于1那就恢复到12月if (month.value <= 0) {month.value = 11year.value = year.value - 1} else {month.value = month.value - 1// console.log("上个月", month.value)}huoqu()}// 下个月function xgy() {// 如果月数大于12那就恢复到1月if (month.value >= 11) {month.value = 0year.value = year.value + 1} else {month.value = month.value + 1// console.log("下个月", month.value)}huoqu()}// 跳转到当日function tzjinri() {// 获取当前年月日const jcurrentDate = new Date();// 获取当前年year.value = jcurrentDate.getFullYear();// 获取当前月month.value = jcurrentDate.getMonth();// 获取当前日day.value = jcurrentDate.getDate();huoqu()}// 点击天数function dianjitian(iyear, imouth, item) {const Y = JSON.stringify(iyear)const M = JSON.stringify(imouth)const D = JSON.stringify(item)const iqriqi = Y + M + Dyiqiandao.value = iqriqiconsole.log("点击天数", yiqiandao.value)if (dianjizhi.value.includes(iqriqi)) {// 如果已点击,则取消点击状态dianjizhi.value = dianjizhi.value.filter(i => i !== iqriqi);console.log('55', dianjizhi.value)} else {// 如果未点击,则添加点击状态dianjizhi.value.push(iqriqi);dianjizhi.value = Array.from(new Set(dianjizhi.value));console.log('44', dianjizhi.value)}}// 上个月点击天数function qdianjitian(iyear, imouth, item) {let itemm = 0// 如果月数小于1那就恢复到12月if (month.value <= 0) {itemm = 12} else {itemm = imouth// console.log("上个月", month.value)}const Y = JSON.stringify(iyear)const M = JSON.stringify(imouth)const D = JSON.stringify(item)const iqriqi = Y + itemm + Dconsole.log("上个点击天数", iqriqi)}// 下个月点击天数function hdianjitian(iyear, imouth, item) {let itemm = 0// 如果月数大于12那就恢复到1月if (month.value >= 11) {itemm = 1} else {itemm = imouth// console.log("下个月", month.value)}const Y = JSON.stringify(iyear)const M = JSON.stringify(imouth)const D = JSON.stringify(item)const iqriqi = Y + itemm + Dconsole.log("点击天数", iqriqi)}// 获取天数function huoqu() {const nian = year.value;const yue = month.value;const ri = day.valueconst jyue = yue + 1teday.value = nian + jyue + ri// 判断是否是今日,是今日给当日加背景const today = new Date();const jyear = today.getFullYear();const jmonth = today.getMonth() + 1; // 月份从0开始,所以要加1const jday = today.getDate();const jinri = jyear + jmonth + jdayif (jinri === teday.value) {pdjr.value = trueconsole.log("是今日")} else {pdjr.value = false}console.log("今天是", jinri, pdjr.value)console.log("随机年月日", teday.value)// 获取当月总天数totalDaysInMonth.value = new Date(nian, yue + 1, 0).getDate();// 获取当月1号是星期几weekdate.value = new Date(nian, yue - 1, 1).getDay();// 周如果等于0加1if (weekdate.value === 0) {weekdate.value += 1// console.log("周等于0", syue)} else {// console.log("周不等于0", syue)	}// 当月前空数据// 通过查找周期数据,返回前面有几个空数据const id = weekdate.value;const index = days.value.findIndex(item => item.id === id);const count = index >= 0 ? index : 0;qnullnumber.value = count// console.log(`当月前面有${qnullnumber.value}个数据`);console.log(`星期`, weekdate.value);// 给当月的前添加上个月多出的天数const number = [];for (let i = 1; i <= totalDaysInMonth.value; i++) {number.push(i);}// 获取上个月末尾的天数补充到当月前的空数据console.log("月", yue)let syue = yueif (syue === 0) {syue += 1// console.log("月等于0", syue)} else {// console.log("月不等于0", syue)	}const snumber = new Date(nian, syue, 0).getDate();const snumberss = [];for (let i = 1; i <= snumber; i++) {snumberss.push(i);}qnumber.value = snumberss// console.log("上个月天数", qnumber.value)// 从上个月天数后面开始取后本月缺少的空值const snum = qnullnumber.valueconst lastFour = qnumber.value.slice(-snum);qnumbers.value = lastFourconsole.log("上个月后面的天数", number);// 只显示前35个天数const slicedArray = number.slice(0, 35 - snum);// 查看数据是否满35个const tianshushuju = slicedArray.length;let chashu = ''let houbuqi = []if (tianshushuju < 35) {chashu = 35 - tianshushuju - snum} else {console.log("已够35个")}// 后面的差数赋值hnullnumber.value = chashuconsole.log("差", hnullnumber.value)for (let i = 0; i < chashu; i++) {houbuqi.push(i + 1); // 补齐数据,从1开始递增}numbers.value = slicedArrayhoumianbuqi.value = houbuqiconsole.log("当月天数", houbuqi)}
</script>

教学视频地址

点击跳转教学页面

也可以添加下方的名片

完整源码下载地址

点击跳转下载页面

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

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

相关文章

MD5算法

一、引言 MD5&#xff08;Message-Digest Algorithm 5&#xff09;是一种广泛应用的密码散列算法&#xff0c;由Ronald L. Rivest于1991年提出。MD5算法主要用于对任意长度的消息进行加密&#xff0c;将消息压缩成固定长度的摘要&#xff08;通常为128位&#xff09;。在密码学…

右键菜单“以notepad++打开”,在windows文件管理器中

notepad 添加到文件管理器的右键菜单中 找到安装包&#xff0c;重新安装一般即可。 这里有最新版&#xff1a;地址 密码:f0f1 方法 在安装的时候勾选 “Context Menu Entry” 即可 Notepad的右击打开文件功能 默认已勾选 其作用是添加右键快捷键。即&#xff0c;对于任何…

黑马程序员SSM框架-SpringBoot

视频连接&#xff1a;SpringBoot-01-SpringBoot工程入门案例开发步骤_哔哩哔哩_bilibili SpringBoot简介 入门程序 也可以基于官网创建项目。 SpringBoot项目快速启动 下面的插件将项目运行所需的依赖jar包全部加入到了最终运行的jar包中&#xff0c;并将入口程序指定。 Spri…

2023/12/30 c++ work

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…

JavaScript 工具库 | PrefixFree给CSS自动添加浏览器前缀

新版的CSS拥有多个新属性&#xff0c;而标准有没有统一&#xff0c;有的浏览器厂商为了吸引更多的开发者和用户&#xff0c;已经加入了最新的CSS属性支持&#xff0c;这其中包含了很多炫酷的功能&#xff0c;但是我们在使用的时候&#xff0c;不得不在属性前面添加这些浏览器的…

lv14 注册字符设备 3

1 注册字符设备 1.1 结构体介绍 struct cdev {struct kobject kobj;//表示该类型实体是一种内核对象struct module *owner;//填THIS_MODULE&#xff0c;表示该字符设备从属于哪个内核模块const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址str…

VMware安装RHEL9.0版本Linux系统

最近在学习Linux&#xff0c;安装了Red Hat Enterprise Linux 的 9.0版本&#xff0c;简称RHEL9.0。RHEL9.0是Red Hat公司发布的面向企业用户的Linux操作系统的最新版本。我把它安装在虚拟机VMware里来减少电脑性能占用&#xff0c;也防止系统炸搞得我后面要重装。安装RHEL9.0还…

2023海内外零知识证明学习资料汇总(二)(深入理解零知识证明篇)

工欲善其事,必先利其器 Web3开发中&#xff0c;各种工具、教程、社区、语言框架.。。。 种类繁多&#xff0c;是否有一个包罗万象的工具专注与Web3开发和相关资讯能毕其功于一役&#xff1f; 参见另一篇博文&#x1f449; 2024最全面且有知识深度的web3开发工具、web3学习项目…

Springboot整合JSP-修订版本(Springboot3.1.6+IDEA2022版本)

1、问题概述&#xff1f; Springboot对Thymeleaf支持的要更好一些&#xff0c;Springboot内嵌的Tomcat默认是没有JSP引擎&#xff0c;不支持直接使用JSP模板引擎。这个时候我们需要自己配置使用。 2、Springboot整合使用JSP过程 现在很多的IDEA版本即使创建的项目类型是WAR工…

中科亿海微UART协议

引言 在现代数字系统设计中&#xff0c;通信是一个至关重要的方面。而UART&#xff08;通用异步接收器/发送器&#xff09;协议作为一种常见的串行通信协议&#xff0c;被广泛应用于各种数字系统中。FPGA&#xff08;现场可编程门阵列&#xff09;作为一种灵活可编程的硬件平台…

王道考研计算机网络——应用层

如何为用户提供服务&#xff1f; CS/P2P 提高域名解析的速度&#xff1a;local name server高速缓存&#xff1a;直接地址映射/低级的域名服务器的地址 本机也有告诉缓存&#xff1a;本机开机的时候从本地域名服务器当中下载域名和地址的对应数据库&#xff0c;放到本地的高…

Python编程新技能:如何优雅地实现水仙花数?

水仙花数&#xff08;Narcissistic number&#xff09;也被称为阿姆斯特朗数&#xff08;Armstrong number&#xff09;或自恋数等&#xff0c;它是一个非负整数&#xff0c;其特性是该数的每个位上的数字的n次幂之和等于它本身&#xff0c;其中n是该数的位数。简单来说&#x…

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间&#xff0c;简直火的一塌糊度&#xff0c;学习OpenHarmony相关的技术栈也有一段时间了&#xff0c;做个记账本小应用&#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件&#xff08;Button、Select、Text、Span、Divider、Image&am…

SpringCloud(H版alibaba)框架开发教程,使用eureka,zookeeper,consul,nacos做注册中心——附源码(1)

源码地址&#xff1a;https://gitee.com/jackXUYY/springboot-example 创建订单服务&#xff0c;支付服务&#xff0c;公共api服务&#xff08;共用的实体&#xff09;&#xff0c;eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.…

数据结构:队列(链表和数组模拟实现)

目录 1.何为队列 2.链表模拟实现 2.1 节点和队列创建 2.2 初始化队列 2.3 入队操作 2.4 出队操作 2.5 遍历队列 2.6 获取队首和队尾元素 2.7 判断队列是否为空 2.8 完整实现 3. 数组模拟实现 3.1 创建队列 3.2 入队和出队操作 3.3 遍历队列 3.4 获取队首和队尾元…

构建安全的SSH服务体系

1、配置OpenSSH服务端 在CentOS7.3系统中&#xff0c;OpenSSH服务由openssh、openssh-server等软件包提供&#xff08;默认已安装&#xff09;&#xff0c;并已将sshd添加为标准的系统服务。执行"systemctl start sshd"命令即可启动sshd服务。ssh服务的配置文件默认位…

初识SpringBoot(2023最后一篇文章)

初识SpringBoot 1、SpringBoot概述 Spring是什么&#xff1f; Spring是一个于2003 年兴起的一个轻量级开源Java开发框架&#xff0c;由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;使…

探索工业智能检测,基于轻量级YOLOv8开发构建焊接缺陷检测识别系统

焊接缺陷相关的开发实践在前面的博文中已经有所涉及了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《探索工业智能检测&#xff0c;基于轻量级YOLOv5s开发构建焊接缺陷检测识别系统》 将智能模型应用和工业等领域结合起来是有不错市场前景的&#xff0c;比如&…

001、安装 Rust

目录 1. 安装 Rust 2. 安装编译器 Visual Studio Code 3. 更新、卸载、文档命令 4. 结语 1. 安装 Rust 安装 Rust 非常简单&#xff0c;首先进入 Rust官网 &#xff0c;然后点击右上角的 Install 。 进入 Install 界面&#xff0c; 它会自动识别你当前的操作系统并给你推荐…

SASS循环

<template><div><button class"btn type-1">默认按钮</button><button class"type-2">主要按钮</button><button class"type-3">成功按钮</button><button class"type-4">信息…