uniapp 微信小程序 自定义日历组件
效果图

功能:可以记录当天是否有某些任务或者某些记录
具体使用:
子组件代码
<template><view class="Accumulate"><view class="bx"><view class="bxx"><view class="plank"></view><view class="calendar"><view class="calendarbx"><view class="calendarview flex jc ac"><u-icon name="arrow-left" color="#232323" size="18" @click="addmonth(1)"></u-icon><view class="title">{{viewday}}</view><u-icon name="arrow-right" color="#232323" size="18" @click="addmonth(2)"></u-icon></view><view class="week flex ac"><view class="weekli" v-for="(item,index) in week">{{item.title}}</view></view><view class="data"><view class=" flex ac flexwrap" v-if="show"><view class="datali flex jc ac" v-for="(item,index) in days" :key="item"><!-- 三层判断条件 --><view class="dataliradius flex jc ac flexwrap":class="newday==item&&isnewmonth&&chooseday==item?'dataliradiusc':newday==item&&isnewmonth&&chooseday!=item?'dataliradiuscc':newday!=item&&chooseday==item?'dataliradiusc':''"@click.stop="funchoosedayy(item)">{{item==newday&&isnewmonth?'今':item}}<view class="rounds"><view class="round" v-if="recordlist.includes(item)&&item!=chooseday"></view></view></view></view></view><!-- 以下是为了防止切换闪烁而复制了一份用于展示 --><view class=" flex ac flexwrap" v-else><view class="datali flex jc ac" v-for="(item,index) in days" :key="item"><!-- 三层判断条件 --><view class="dataliradius flex jc ac flexwrap":class="newday==item&&isnewmonth&&chooseday==item?'dataliradiusc':newday==item&&isnewmonth&&chooseday!=item?'dataliradiuscc':newday!=item&&chooseday==item?'dataliradiusc':''">{{item==newday&&isnewmonth?'今':item}}<view class="rounds" v-if="recordlist.includes(item)&&item!=chooseday"><view class="round"></view></view></view></view></view></view></view></view></view></view></view>
</template><script>export default {data() {return {day: Number(new Date()), //用于记录今天showday: null, //用来存储要加减的日期viewday: null, //页面上展示的日期newday: null, //当天几号isnewmonth: true, //是否是当月chooseday: null, //选中的那一天show: true,week: [{title: '一'},{title: '二'},{title: '三'},{title: '四'},{title: '五'},{title: '六'},{title: '日'}],days: [], //天数数组height: 0};},
props:{recordlist:{default: [], //是否有练习记录,需要每次切换月份的时候查询,那几天有练习记录,下标会记录stype:Array}},onLoad() {},onReady() {let time = this.yearFormat(this.day, 'obj')this.newday = time.day; //当天日期只用初始化一次就不用再初始化了this.showday = time.year + '-' + time.month + '-' + time.day; //用来存储要加减的日期this.viewday = this.yearFormat(this.showday) //页面上展示的日期this.chooseday = time.day;this.addmonth(0) //初始化时间},methods: {//选中日期funchoosedayy(item) {// console.log(item, '选中几号');if (item == '') {return}this.chooseday = item;let dataobj = this.showday.split('-');let month;let year;let day;let sendtime = dataobj[0] + '-' + dataobj[1] + '-' + this.chooseday;this.$emit('sendtime', '选中的时间:' + sendtime);},//加减月份,初始化月份addmonth(type) {this.show = false;setTimeout(() => {this.show = true;}, 100)let newmonth = this.yearFormat(this.day, 'obj')let dataobj = this.showday.split('-');let month;let year;let day;//加if (type == 2) {if (dataobj[1] == 12) {month = 1;year = (dataobj[0] * 1) + 1} else {year = (dataobj[0] * 1);month = (dataobj[1] * 1) + 1}}//减if (type == 1) {if (dataobj[1] == 1) {month = 12;year = (dataobj[0] * 1) - 1} else {year = (dataobj[0] * 1);month = (dataobj[1] * 1) - 1}}//初始化使用if (type == 0) {month = (dataobj[1] * 1);year = (dataobj[0] * 1);}let daynum = this.getDaysInYearMonth(year, month);this.days = daynum; //获取天数let week = this.getDayOfWeek(year, month, 1) //获取每个月1号星期几//0 相当于星期日let addday;if (week == 0) {addday = 6;} else {addday = (week - 1)}for (let i = 0; i < addday; i++) {this.days.unshift('')this.$forceUpdate()}//判断是否是当月,是当月的话,选中当天日期,不是则是当月1号if (newmonth.month == month) {day = dataobj[2];this.chooseday = newmonth.day;this.isnewmonth = true;this.showday = year + '-' + month + '-' + day;this.viewday = year + '年' + month + '月';// console.log(this.showday, '当月');this.$forceUpdate()} else {day = 1;this.chooseday = day;this.isnewmonth = false;this.showday = year + '-' + month + '-' + day;this.viewday = year + '年' + month + '月';this.$forceUpdate()}// console.log(this.days);this.$emit('state_sendtime', '初始化时间:' + this.showday);this.$forceUpdate()},//获取年月yearFormat(num, obj) {//过滤器 用于格式化时间let date = new Date(num); //时间戳为10位需*1000,时间戳为13位的话不需乘1000let year = date.getFullYear();let month = ("0" + (date.getMonth() + 1)).slice(-2);let sdate = ("0" + date.getDate()).slice(-2);let hour = ("0" + date.getHours()).slice(-2);let minute = ("0" + date.getMinutes()).slice(-2);let second = ("0" + date.getSeconds()).slice(-2);let result;if (obj) {// 拼接result = {year: year,month: month,day: sdate}} else {result = year + '年' + month + '月'}// 返回return result;},// 获取该年该月的天数getDaysInYearMonth(year, month) {// 每一次进行更新前,先清空日期数组month = parseInt(month, 10);// javascript中Date()对象的getDate()是获取时间对象对应于一个月中的某一天(1~31),当设置为0的时候,getDate()返回的就是最后一天,刚好对应我们需要的值。var date = new Date(year, month, 0);let arr = [];for (var i = 1; i <= date.getDate(); i++) {arr.push(i)}return arr;},//获取周几// console.log(getDayOfWeek(2023, 10, 5)); // 输出:星期四// 0就是 周日getDayOfWeek(year, month, day) {console.log(year, (month * 1), day);const date = new Date(year + '-' + (month * 1) + '-' + day).getDay(); // 注意月份是从0开始计数const options = {weekday: 'long'};//new Intl.DateTimeFormat('zh-CN', options).format(date)return date;}}}
</script><style lang="less" scoped>.Accumulate {// position: relative;}.back {width: 100%;height: 360rpx;border-radius: 0 0 60rpx 60rpx;background: #3366ff;position: absolute;}.Evaluationlist {margin-top: 30rpx;padding: 0 30rpx;box-sizing: border-box;overflow: scroll;.Evaluationlistli {padding: 30rpx 20rpx;box-sizing: border-box;border-radius: 30rpx;background: #fff;margin-bottom: 30rpx;.left {// display: block;width: 70%;max-height: 100rpx;}.right {padding: 10rpx 30rpx;height: 60rpx;box-sizing: border-box;border-radius: 20rpx;background: #3366ff;color: #fff;}.rightb {padding: 10rpx 30rpx;height: 60rpx;box-sizing: border-box;border-radius: 20rpx;background: #fff;color: #3366ff;border: 1rpx solid #3366ff;}}}.bx {width: 100%;// position: absolute;z-index: 999;.plank {width: 100%;height: 30rpx;}}.viewdata {width: 100%;height: 130rpx;padding: 0 30rpx;box-sizing: border-box;.viewdatali {width: 46%;height: 100%;border-radius: 30rpx;.num {width: 100%;font-size: 38rpx;font-weight: bold;text-align: center;}.title {width: 100%;font-size: 24rpx;margin-top: 5rpx;text-align: center;}}.viewdataliA {background: #f5f5f5;color: skyblue;}.viewdataliB {background: #f5f5f5;color: pink;}}.calendar {width: 100%;// padding: 30rpx 30rpx 0rpx 30rpx;box-sizing: border-box;// border-radius: 30rpx;.calendarbx {width: 100%;padding: 30rpx 30rpx 0rpx 30rpx;box-sizing: border-box;border-radius: 30rpx;background: #fff;.calendarview {background: lightgoldenrodyellow;padding: 10rpx 20rpx;box-sizing: border-box;.title {color: #232323;font-size: 28rpx;margin-left: 100rpx;margin-right: 100rpx;}}.week {font-size: 26rpx;color: #999;margin-top: 30rpx;.weekli {width: 12.2%;height: 30rpx;text-align: center;margin-right: 2.4%;line-height: 30rpx;}.weekli:nth-child(7n+7) {margin-right: 0% !important;}}.data {font-size: 28rpx;color: #999;margin-top: 40rpx;font-weight: bold;min-height: 410rpx;.datali {width: 12.2%;height: 50rpx;// text-align: center;margin-right: 2.4%;margin-bottom: 40rpx;.dataliradius {width: 50rpx;height: 50rpx;border-radius: 999%;background: #fff;line-height: 50rpx;color: #232323 !important;.rounds {width: 100%;height: 10rpx;.round {width: 10rpx;height: 10rpx;border-radius: 999%;background: #3366ff;margin: auto;}}}.dataliradiuscc {color: #3366ff !important;}.dataliradiusc {width: 50rpx;height: 50rpx;border-radius: 999%;background: #3366ff;color: #fff !important;line-height: 50rpx;}}.datali:nth-child(7n+7) {margin-right: 0% !important;}}}}
</style>
父组件
<customCalendar @sendtime="sendtime" @state_sendtime="state_sendtime" :recordlist="[27, 25, 26, 29, 28]" ></customCalendar>
有需求可以自行修改。
相关文章:
uniapp 微信小程序 自定义日历组件
效果图 功能:可以记录当天是否有某些任务或者某些记录 具体使用: 子组件代码 <template><view class"Accumulate"><view class"bx"><view class"bxx"><view class"plank"><…...
EdgeX规则引擎eKuiper
EdgeX 规则引擎eKuiper 一、架构设计 LF Edge eKuiper 是物联网数据分析和流式计算引擎。它是一个通用的边缘计算服务或中间件,为资源有限的边缘网关或设备而设计。 eKuiper 采用 Go 语言编写,其架构如下图所示: eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源…...
react 优化方案
更详细的 React 优化方案可以分为性能优化、代码结构优化、开发效率提升等多个方面,结合实际项目需求,逐步应用这些优化策略。 一、性能优化 1. 避免不必要的重新渲染 React.memo: 缓存组件,防止组件在父组件重新渲染时无意义的重新渲染。 const ChildComponent = Reac…...
【Linux】sed编辑器
一、基本介绍 sed编辑器也叫流编辑器(stream editor),它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器(如Vim)中,可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…...
(leetcode算法题)137. 只出现一次的数字 II
处理这种数据集中只有一个数出现的频次为1,其他数出现的频次均为k的题目 往往都是使用位运算的进行求解 假设 target在数据集中只出现了1次,其他数据n1, ... nj都出现了 k 次, 考虑数据集中所有数据的第 i 位的取值,那么将会有…...
在大数据环境下高效运用NoSQL与关系型数据库的结合策略
在大数据环境下,高效运用NoSQL与关系型数据库结合策略涉及到理解两者各自的优劣势,以及如何有效地整合它们。以下是一些代码示例和实际案例,以帮助你了解这种结合策略。 背景介绍 NoSQL数据库通常用于处理大量非结构化或半结构化的数据&…...
C语言——分支与循环语句
目录 一.分支语句 1.if语句 2.悬空else问题 3.switch语句 default子句 二.循环语句 1.while循环 whle循环流程图: break与continue 2.for循环 2.2for与while循环 2.3关于for循环的一道笔试题 3.do while 循环 三.猜数字游戏实现 四.goto语句 补充 …...
下载b站高清视频
需要使用的edge上的一个扩展插件,所以选择使用edge浏览器。 1、在edge浏览器上下载 强力视频下载合并 扩展插件 2、在edge上打开b站,登录自己账号(登录后才能下载到高清!!)。打开一个视频,选择自…...
常见 JVM垃圾回收器、内存分配策略、JVM调优
垃圾收集( Garbage Collection ,下文简称 GC),垃圾收集的历史远远比 Java久远。经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么…...
【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
目录 😋环境配置:华为HarmonyOS开发者 📺演示效果: 📖实验步骤及方法: 一、在media文件夹中添加想要使用的图片素材 二、在entry/src/main/ets/page目录下创建Welcome.ets文件 1. 整体结构与组件声…...
【MySQL】:Linux 环境下 MySQL 使用全攻略
📃个人主页:island1314 🔥个人专栏:MySQL学习 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 1. 背景 🚀 世界上主…...
Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题
当时gpio子系统进行读取时返回必定是0 因此,首先必须使用platform驱动来管理gpio和pinctrl子系统,然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法: 将设备树中的引脚设置为 pinctrl_gpioled: gpio…...
【数据结构】栈与队列(FIFO)
在阅读该篇文章之前,可以先了解一下堆栈寄存器和栈帧的运作原理:<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹,最先装进去的子弹最后射出来,最后装入的子弹…...
vue.js -ref和$refs获取dom和组件
在Vue.js中,ref和$refs是两个常用的属性,用于访问DOM元素和组件实例。下面分别详细解析这两个属性,并提供代码实例。 ref属性 ref属性用于给DOM元素或组件指定一个唯一的引用标识,在Vue实例中可以通过这个标识来访问对应的DOM元素…...
unity学习5:创建一个自己的3D项目
目录 1 在unity里创建1个3D项目 1.1 关于选择universal 3d,built-in render pipeline的区别 1.2 创建1个universal 3d项目 2 打开3D项目 2.1 准备操作面板:操作界面 layout,可以随意更换 2.2 先收集资源:打开 window的 AssetStore 下载…...
IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案
IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案 问题描述 在IEEE PDF eXpress上上传论文后,出现Font XXX is not embedded的问题。 该问题是指你所插入的图片等,没有将对应的字体嵌入进去。 解决方案 以下以Origin Lab图片…...
计算机网络 (21)网络层的几个重要概念
前言 计算机网络中的网络层是OSI(开放系统互连)模型中的第三层,也是TCP/IP模型中的第二层,它位于数据链路层和传输层之间,负责数据包从源主机到目的主机的路径选择和数据转发。 一、网络层的主要功能 路由选择…...
企业网络性能监控
什么是网络性能监控 网络性能监控(NPM)是指对计算机网络的性能进行持续测量、分析和管理的过程,通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标,确保网络高效、安全地运行,并将停机时间降至最低…...
halcon三维点云数据处理(五)创建代表工具和机器人底座的3D模型
目录 一、gen_robot_tool_and_base_object_model_3d 函数调用二、gen_arrow_object_model_3d 函数调用 首先说明一下这部分代码在find_box_3d这个例程中,非常好用的一个坐标系生成函数。 一、gen_robot_tool_and_base_object_model_3d 函数调用 RobotToolSize : 0.…...
容器技术思想 Docker K8S
容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
