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.mzph.cn/news/587647.shtml

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

相关文章

MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之General Tablespaces&#xff08;通用表空间/一般表空间&#xff09;General tablespaces&#xff08;通用表空间/一般表空间&#xff09;通用表空间的功能通用表空间的限制 创建通用表空间&#xff08;一般表空间&#xff09;创建语法…

【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口字典树 map 离线查询 map map可以分成有序(单调)map和无序(哈希)map。还可分成单键map和多键map&#xff08;允许重复的键&#xff09;。本文用&#xff1a;单键无序map。 …

防弹防线:彻底击败Redis缓存穿透问题【redis问题 一】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 防弹防线&#xff1a;彻底击败Redis缓存穿透问题 前言1. 缓存穿透定义和成因定义&#xff1a;缓存穿透的隐秘入侵成因分析&#xff1a;揭秘缓存穿透的幕后黑手故事描述 2. 缓存穿透的影响对数据库的影…

最优轨迹生成(三)—— 无约束BIVP轨迹优化

本系列文章是学习深蓝学院-移动机器人运动规划课程第五章最优轨迹生成 过程中所记录的笔记&#xff0c;本系列文章共包含四篇文章&#xff0c;依次介绍了微分平坦特性、无约束BVP轨迹优化、无约束BIVP轨迹优、 带约束轨迹优化等内容 本系列文章链接如下&#xff1a; 最优轨迹生…

设计模式详解:代理模式

1. 什么是代理模式&#xff1f; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许通过代理对象控制对另一个对象的访问。代理模式在客户端和目标对象之间引入了一个代理对象&#xff0c;客户端通过代理对象间接地访问目标对象&#xff0c…

以太坊代币标准解读及相关Dapp的搭建

文章目录 什么是以太坊代币标准1、什么是以太坊2、以太坊代币标准 同质化代币 Dapp 搭建1、MetaMask 的安装2、Ganache 的安装3、实现 ERC-20 代币协议4、前端页面的编写5、部署流程及操作演示 什么是以太坊代币标准 1、什么是以太坊 以太坊&#xff08;Ethereum&#xff09;是…

idea构建maven项目报错的解决

使用idea创建了一个新的spring项目&#xff0c;maven配置完毕后&#xff0c;报错&#xff0c;引用的依赖不存在。 控制台报错信息如下&#xff1a; 通过查询资料&#xff0c;发现是阿里云的maven仓库中没有这个版本的jar包&#xff0c;导入无法引用到对应的依赖。 解决方法就是…

01 HAL库点亮LED灯

引言&#xff1a;本专题采取的开发平台是stm32cubeIDE&#xff0c; 文章后面会后提供 一 、 LED简介 LED&#xff08;Light Emitting Diode&#xff09;是一种半导体发光器件&#xff0c;能够将电能直接转化为光能的电子元件。它具有体积小、功耗低、寿命长等特点&#xff0c;广…

接入Cloudflare后Nginx和Django获取用户真实IP的办法

可以用Nginx的real_ip的相关命令来实现这个需求。 01-real_ip命令集详解 real_ip命令的使用分为两个步骤: 01-1-设置从哪些代理IP获取真实IP 第1个步骤&#xff1a;通过set_real_ip_from命令设置从哪些代理IP请求获取真实的IP,比如下面的命令&#xff1a; set_real_ip_from…

Navicat for MySQL 创建函数——报错1418

解决方法 1查看是否开启了创建函数的功能 输入下面语句查看是否开启了创建函数的功能 show variables like %func%; 下面为创建函数功能为开启的查询结果 如果不是上面的结果可以用下面的语句修改为开启 set GLOBAL log_bin_trust_function_creatorstrue; //或 set GLOBAL …

【一分钟】ThinkPHP v6.0 (poc-yaml-thinkphp-v6-file-write)环境复现及poc解析

写在前面 一分钟表示是非常短的文章&#xff0c;只会做简单的描述。旨在用较短的时间获取有用的信息 环境下载 官方环境下载器&#xff1a;https://getcomposer.org/Composer-Setup.exe 下载文档时可以设置代理&#xff0c;不然下载不上&#xff0c;你懂的 下载成功 cmd cd…

Redis经典五大类型源码及底层实现(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

数据结构:第7章:查找(复习)

顺序查找&#xff1a; ASL 折半查找&#xff1a; 这里 j 表示 二叉查找树的第 j 层 二叉排序树&#xff1a; 二叉排序树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种特殊的二叉树&#xff0c;定义&#xff1a; 对于二叉排序树的每个节点&#xff0c;…

全球电商平台API数据稳定接入

API是什么&#xff1f; API就是接口&#xff0c;就是通道&#xff0c;负责一个程序和其他软件的沟通&#xff0c;本质是预先定义的函数。”比如&#xff1a;电脑需要调用手机里面的信息&#xff0c;这时候你会拿一根数据线将电脑手机连接起来&#xff0c;电脑和手机上连接数据…

Linux学习笔记(一)

如果有自己的物理服务器请先查看[这篇文章](https://blog.csdn.net/yasinawolaopo/article/details/132391128)文章目录 网卡配置Linux基础指令ls:列出目录内容cd(mkdir.rmkdir): 切换文件夹(创建,删除操作)cp:复制文件或目录mv:文件/文件夹移动cat:查看文件vi:文件查看编辑man…

二进制文件分割器

二进制文件分割器 时间: 2023.12.29 作者: FlameCyclone 自己写的一个能方便分割文件的小工具 使用说明 输出文件名 输出文件名规则前缀文件名开始固定名称序号(10/16进制显示, 宽度以输出最大序号为准)分割范围(16进制显示, 宽度以输出最大范围为准)CRC32校验码8字符组成…

touchHLE实战之游戏

前面推荐了touchHLE&#xff0c;号称可以玩旧的IOS游戏&#xff0c;但是国外还是管理的很严格的&#xff0c;一直没有找到合适的游戏文件测试。最近&#xff0c;发现官网上公布了开发者赠送的一款游戏&#xff0c;试了下完美运行。 看到国外贴吧reddit上有人推荐可用的ipa资源&…

蓝桥杯C/C++程序设计——成绩统计

题目描述 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分&#xff0c;则称为及格。如果得分至少为 85 分&#xff0c;则称为优秀。 请计算及格率和优秀率&#xff0c;用百分数表示&am…

不同语言告别2023,迎接2024

一、序言 1.一名合格的程序员&#xff0c;始于Hello World&#xff0c;终于Hello World&#xff0c;用不同语言表达2023最后一天。 2.在这一年里&#xff0c;博主新接触了VUE、Python、人工智能、JAVA的框架SprinBoot、微服务等&#xff0c;然后一路来感谢大家的支持&#xf…

ClickHouse基础知识(一):ClickHouse 入门

1. ClickHouse 入门 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用 C 语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用 SQL 查询实时生成分析数据报告。 2. Cl…