uniapp Vue3 日历 可签到 跳转

news2025/1/24 22:48:29

 上干货

<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 = 11
			year.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 = 0
			year.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 + D
		yiqiandao.value = iqriqi
		console.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 + D
		console.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 + D
		console.log("点击天数", iqriqi)
	}
	// 获取天数
	function huoqu() {
		const nian = year.value;
		const yue = month.value;
		const ri = day.value
		const jyue = yue + 1
		teday.value = nian + jyue + ri
		// 判断是否是今日,是今日给当日加背景
		const today = new Date();
		const jyear = today.getFullYear();
		const jmonth = today.getMonth() + 1; // 月份从0开始,所以要加1
		const jday = today.getDate();
		const jinri = jyear + jmonth + jday
		if (jinri === teday.value) {
			pdjr.value = true
			console.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加1
		if (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 = yue
		if (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.value
		const lastFour = qnumber.value.slice(-snum);
		qnumbers.value = lastFour
		console.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 = chashu
		console.log("差", hnullnumber.value)
		for (let i = 0; i < chashu; i++) {
			houbuqi.push(i + 1); // 补齐数据,从1开始递增
		}
        
		numbers.value = slicedArray
		houmianbuqi.value = houbuqi
		console.log("当月天数", houbuqi)

	}
</script>

教学视频地址

点击跳转教学页面

也可以添加下方的名片

完整源码下载地址

点击跳转下载页面

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

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

相关文章

Python - 深夜数据结构与算法之 Divide Conquer Backtrack

目录 一.引言 二.分治与回溯简介 1.Divide & Conquer 分治 2.BackTrack 回溯 三.经典算法实战 1.Combination-Of-Phone [17] 2.Permutations [46] 3.Permutations-2 [47] 4.Pow-X [50] 5.N-Queen [51] 6.Combinations [78] 7.Sub-Sets [78] 8.Majority-Elemen…

模式识别与机器学习-无监督学习-聚类

无监督学习-聚类 监督学习&无监督学习K-meansK-means聚类的优点&#xff1a;K-means的局限性&#xff1a;解决方案&#xff1a; 高斯混合模型&#xff08;Gaussian Mixture Models&#xff0c;GMM&#xff09;多维高斯分布的概率密度函数&#xff1a;高斯混合模型&#xff…

DBAPI个人版如何升级到企业版

安装好企业版软件&#xff0c;并启动 注意要新建mysql数据库&#xff0c;执行新版本的ddl_mysql.sql脚本 在旧版本系统中分别导出数据源、分组、API&#xff0c;得到3个json文件 注意全选所有的数据导出 在新版本系统中导入数据源 在新版本系统中导入分组 进入分组管理菜单&…

FART12刷机脱壳记录笔记

其他脱壳笔记&#xff1a; https://codeooo.blog.csdn.net/article/details/126891503 fart12 脱壳系统 可以脱邦邦 爱加密 企业壳 等&#xff1b; 寒冰大佬的脱壳王 本文记录下刷机过程&#xff0c;方便以后查看使用。 adb授权和ome锁要开着 代表锁是开着状态 如果出现&a…

鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

在应用/元服务早期使用过程中&#xff0c;-Serverless账户验证码的格式是[AGC][应用/元服务名称]&#xff0c;如下图。 但是&#xff0c;在最近&#xff0c;[应用/元服务]名称直接变成了【default】,用户收到这种验证码后&#xff0c;心里存有疑虑的&#xff0c;这是哪里配置…

实习知识整理11:确认订单并将订单的相关信息插入用户订单表和订单详情表

用户订单表&#xff1a; 订单详情表&#xff1a; 思路分析&#xff1a;首先我们需要知道当点击了确认订单按钮后&#xff0c;需要向后端传递哪些数据&#xff0c;先看用户订单表&#xff1a;ORDER_ID是不需要传的&#xff0c;这个可以在后台生成就行了&#xff1b;USER_ID是需要…

【赠书第13期】边缘计算系统设计与实践

文章目录 前言 1 硬件架构设计 2 软件框架设计 3 网络结构设计 4 安全性、可扩展性和性能优化 5 推荐图书 6 粉丝福利 前言 边缘计算是一种新兴的计算模式&#xff0c;它将计算资源推向网络边缘&#xff0c;以更好地满足实时性、低延迟和大规模设备连接的需求。边缘计算…

腾讯开源AppAgent,手机的大模型智能代理

腾讯研究团队开源了一款基于大语言模型的&#xff0c;用于手机端执行复杂任务的多模态智能代理框架——AppAgent。 据悉&#xff0c;AppAgent的功能与AutoGPT等智能代理类似&#xff0c;不依赖于操作系统的后台访问,而是通过UI界面进行点击、滑动等拟人化操作&#xff0c;与Ap…

继电保护测试仪的这4点用途和6点功能你知道几个?

众所周知&#xff0c;继电保护系统是电力系统中至关重要的组成部分。当电路出现故障时&#xff0c;它可以快速准确地切除故障部分&#xff0c;以确保电力系统的安全稳定运行。然后&#xff0c;为了提前发现和保证继电保护系统的故障和问题&#xff0c;通常需要使用继电保护测试…

嵌入式面试准备

题目都摘于网上 嵌入式系统中经常要用到无限循环&#xff0c;如何用C编写死循环 while(1){}或者for(;&#x1f609; 内存分区 代码区&#xff0c;全局区&#xff08;全局变量&#xff0c;静态变量&#xff0c;以及常量&#xff09;&#xff0c;栈区&#xff0c;堆区 const关键…

企业知识库:成为优秀企业的必备系统

导语&#xff1a; 在当今竞争激烈的商业环境中&#xff0c;企业需要不断创新和提高团队的协作效率&#xff0c;以保持竞争优势。而构建一个优秀的企业知识库系统已经成为众多企业必备的系统之一。本文将介绍企业知识库的定义、作用以及如何搭建一个完整有效的企业知识库。 什么…

基于MATLAB的正态分布与卡方分布(附完整代码与例题)

目录 一. 理论部分 二. MATLAB所使用的函数介绍 2.1 概率密度函数 2.2 概率分布函数 2.3 逆概率分布函数 三. 例题与代码 例题1 例题2 例题3 例题4 一. 理论部分 将连续随机变量的概率密度函数记为&#xff0c;既然跟概率相关&#xff0c;那必然满足两个重要的性质&a…

智能酒精壁炉历史轨迹:文化传统与现代融合的取暖方式

智能酒精壁炉作为一种取暖装置&#xff0c;承载着丰富的历史和文化传统。深入了解其在不同文化中的演变过程&#xff0c;以及如何成为现代家庭的取暖方式&#xff0c;可以了解智能酒精壁炉在历史中的发展轨迹。 古希腊和古罗马时期&#xff0c;人们使用酒精和其他可燃性液体作…

猫冻干什么牌子口碑好?专业人士分享口碑好的五款冻干猫粮牌子

近几年&#xff0c;冻干猫粮在宠物圈内非常流行&#xff0c;许多品牌都推出了冻干猫粮。在所有的猫食品中&#xff0c;冻干无疑是最具营养、动物蛋白含量最高的食品之一。冻干作为现在宠物圈最火的猫食品&#xff0c;受到了众多猫友们的喜爱和追捧。但有些铲屎官在选择冻干猫粮…

手动创建idea SpringBoot 项目

步骤一&#xff1a; 步骤二&#xff1a; 选择Spring initializer -> Project SDK 选择自己的JDK版本 ->Next 步骤三&#xff1a; Maven POM ->Next 步骤四&#xff1a; 根据JDK版本选择Spring Boot版本 11版本及以上JDK建议选用3.2版本&#xff0c;JDK为11版本…

rosdep init/update失败(转载)

sudo rosdep init rosdep update 如果你直接成功了&#xff0c;可直接跳过当我没说&#xff08;不过90%的几率你都会失败的啦&#xff09; 由于http://raw.githubusercontent.com这个网址墙的很厉害&#xff0c;大概率你是成功不了的&#xff0c;这里推荐一种本地化安装的方法…

Docker - 镜像 | 容器 | 数据卷 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…

理解 Go Mod Init

初始化Go模块和管理依赖的全面指南 go mod init 是Go编程语言&#xff08;通常称为Golang&#xff09;中用于初始化新Go模块的命令。在Go中&#xff0c;一个模块是一组相关的Go包&#xff0c;它们作为一个单元一起进行版本控制。通常&#xff0c;在项目目录的根目录下使用 go m…

Qt之自定义分页(翻页)控件

当数据量较大时,分页显示是个不错的选择。这里用百家姓来演示分页效果,包括首页、上一页、下一页、尾页和跳转。 一.效果 每页15个姓氏。 二.实现 QHPageWidget.h #ifndef QHPAGEWIDGET_H #define QHPAGEWIDGET_H#include <QWidget> #include <QStandardItemMod…

搭建一个高效的Python开发环境

“工欲善其事&#xff0c;必先利其器”&#xff0c;这里我们来搭建一套高效的 Python 开发环境&#xff0c;为后续的数据分析做准备。 关于高效作业&#xff0c;对于需要编写 Python 代码进行数据分析的工作而言&#xff0c;主要涉及两个方面。 1. 一款具备强大的自动完成和错…