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为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
