uniapp 简易自定义日历

注:此日历是根据接口返回的日期自动对应星期的,返回的数据中也包含星期,其实就是一个div自定义,可根据自己需求更改;
在这里插入图片描述
1、组件代码 gy-calendar-self.vue

<template><view class="calendar"><view class="selsct-date">请选择预约日期</view><!-- 日历头部,显示星期 --><view class="weekdays"><view v-for="day in weekDays" :key="day" class="weekday">{{ day }}</view></view><!-- 日历主体 --><view class="calendar-body"><view v-for="(week, weekIndex) in calendarData" :key="weekIndex" class="week"><viewv-for="(day, dayIndex) in week":key="dayIndex"@click="selectDate(day)":class="{'has-schedule': day.schState !== 0 }"class="day":style="{ width: cellWidth + 'rpx' }"><view class="day-label">{{ day.dateLabel }}</view><view v-if="day.day"class="day-status-has":class="[day.info == '有' ? 'day-status-has' : day.info == '满' ? 'day-status-over' : 'day-status-none']">{{day.info}}</view></view></view></view></view>
</template><script>
export default {props: {scheduleData: {type: Array,default: () => [],},},data() {return {weekDays: ["日", "一", "二", "三", "四", "五", "六"],calendarData: [],selectedDate: null,cellWidth: 100, // 单位为rpx};},created() {this.generateCalendar();},methods: {generateCalendar() {const startDate = new Date(this.scheduleData[0].dateWork);const endDate = new Date(this.scheduleData[this.scheduleData.length - 1].dateWork);let currentDate = new Date(startDate);let week = [];if (currentDate.getDay() !== 0) {for (let i = 0; i < currentDate.getDay(); i++) {week.push({});}}while (currentDate <= endDate) {const dateWork = currentDate.toISOString().split('T')[0];const schState = this.getScheduleState(dateWork);const weekDay = currentDate.getDay();const day = currentDate.getDate();const dayObject = { date: dateWork, dateLabel: this.formatDateLabel(currentDate), schState, weekDay, day };week.push(dayObject);if (currentDate.getDate() === new Date().getDate()) {// Check if the current date matches the current datethis.selectedDate = dayObject;}if (currentDate.getDay() === 6) {this.calendarData.push(week);week = [];}currentDate.setDate(currentDate.getDate() + 1);}if (week.length > 0) {this.calendarData.push(week);}// Check if the last week array has fewer than 7 elementsconst lastWeek = this.calendarData[this.calendarData.length - 1];const remainingCells = 7 - lastWeek.length;if (remainingCells > 0) {// Add empty objects to fill the remaining cellsfor (let i = 0; i < remainingCells; i++) {lastWeek.push({});}}this.calendarData.forEach((item) => {if (item && item.length > 0) {item.forEach((s) => {s.info = s.schState == 1 ? "有" : s.schState == 0 ? "满" : "无";s.pkSchs = s.pkSchs});}});console.log(this.calendarData, 'this.calendarData')},getScheduleState(date) {const scheduleItem = this.scheduleData.find(item => item.dateWork === date);return scheduleItem ? scheduleItem.schState : 0;},selectDate(day) {this.selectedDate = day;const additionalData = this.scheduleData.find(item => item.dateWork === day.date);console.log(additionalData, 'additionalData')this.$emit('selceted', additionalData);// this.$emit('selceted', day)},isDateSelected(day) {return this.selectedDate && day.date === this.selectedDate.date;},formatDateLabel(date) {const month = date.getMonth() + 1;const day = date.getDate();return `${this.padZero(month)}-${this.padZero(day)}`;},padZero(num) {return num < 10 ? `0${num}` : `${num}`;},},
};
</script><style scoped lang="scss">
.calendar {display: flex;flex-direction: column;font-family: Arial, sans-serif;.selsct-date {text-align: center;margin: 20rpx auto;}
}.weekdays {display: flex;justify-content: space-around;// background-color: #f2f2f2;padding: 10rpx;// border-bottom: 1px solid #ccc;.weekday {text-align: center;padding: 5rpx;font-weight: bold;flex: 1;}
}.calendar-body {display: flex;flex-wrap: wrap;justify-content: center;padding: 0 10rpx;
}.day {position: relative;text-align: center;padding: 10rpx 0;cursor: pointer;box-sizing: border-box;flex: 1;.day-label {font-size: 28rpx;// font-weight: bold;}.day-status-has {width: 40rpx;height: 40rpx;color: #4AB039;opacity: 0.8;background-color: #EDF8EC;border-radius: 50%;text-align: center;line-height: 40rpx;border-radius: 50%;box-sizing: border-box;margin: auto;}.day-status-over {width: 40rpx;height: 40rpx;color: #EA4070;opacity: 0.8;background-color: #EFEFEF;border-radius: 50%;text-align: center;line-height: 40rpx;border-radius: 50%;box-sizing: border-box;margin: auto;}.day-status-none {width: 40rpx;height: 40rpx;color: rgb(102, 102, 102);opacity: 0.8;background-color: #EFEFEF;border-radius: 50%;text-align: center;line-height: 40rpx;border-radius: 50%;box-sizing: border-box;margin: auto;}&.selected {background-color: #85af8b;color: #fff;}
}.week {display: flex;flex-wrap: wrap;
}
</style>

2、引入

<view class="calendar-box" v-if="showCalendar"><u-popup v-model="showCalendar" safe-area-inset-bottom mode="bottom"><data-calendar :scheduleData="selectedList" @selceted="selcetedDate"></data-calendar></u-popup>
</view>

最后附上返回的数据格式:
只需要 dateWork 和 week
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

华为路由设备DHCPV6配置

组网需求 如果大量的企业用户IPv6地址都是手动配置&#xff0c;那么网络管理员工作量大&#xff0c;而且可管理性很差。管理员希望实现公司用户IPv6地址和网络配置参数的自动获取&#xff0c;便于统一管理&#xff0c;实现IPv6的层次布局。 图1 DHCPv6服务器组网图 配置思路 …

VLAN区域间路由详解

LAN局域网 WAN 广域网 WLAN无线局域网 VLAN:虚拟局域网 交换机和路由器&#xff0c;协同工作后&#xff0c;将原来的一个广播域&#xff0c;切分为多个&#xff0c;节省硬件成本&#xff1b; 配置思路&#xff1a; 交换机上创建vlan交换机上的各个接口划分到对应的vlan中 T…

meter报OOM错误,如何解决?

根据在之前的压测过程碰到的问题&#xff0c;今天稍微总结总结&#xff0c;以后方便自己查找。 一、单台Mac进行压测时候&#xff0c;压测客户端Jmeter启动超过2000个线程&#xff0c;Jmeter报OOM错误&#xff0c;如何解决&#xff1f; 解答&#xff1a;单台Mac配置内存为8G&…

【Android Studio】APP练手小项目——切换图片APP

本项目效果&#xff1a; 前言&#xff1a;本项目最终实现生成一个安卓APP软件&#xff0c;点击按钮可实现按钮切换图片。项目包含页面布局、功能实现的逻辑代码以及设置APP图标LOGO和自定义APP名称。 关于Android Studio的下载与安装见我的博文&#xff1a;Android Studio 最新…

IDEA新建SpringBoot工程时java版本只有17和21

解决方法&#xff1a;替换源 参考博客&#xff1a;https://www.kuazhi.com/post/712799571.html

thinkphp 可执行文件think

think 是一个可执行文件&#xff0c;位置&#xff1a;网站根目录 内容&#xff1a;1 定义项目路径 2 加载cll框架文件 shell脚本里第一行的&#xff1a;#!/usr/bin/env php 什么意思 这句#!的含义就是&#xff0c;按照环境变量PATH寻找第一个php程序来执行。 #!/usr/bin/php…

K8s(一)Pod资源——Pod介绍、创建Pod、Pod简单资源配额

目录 Pod概述 pod网络 pod存储 pod和容器对比 创建pod的方式 pod运行方式分类 Pod的创建 Pod的创建过程 通过kubectl run来创建pod 通过yaml文件创建&#xff0c;yaml文件简单写法 Pod简单操作 Pod的标签labels Pod的资源配额resource 测试 Pod概述 Kubernetes …

RHCE9学习指南 第21章 用bash写脚本

grep的用法是&#xff1a; grep 关键字 file 意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages中过滤出含有root的行。这里很明确的是过滤含有“root”的行。 如果我要是想在/var/log/messages中过滤…

基于CPLEX的IEEE-30节点机组组合优化(MATLAB实现)

1.机组组合优化数学模型 1.1 问题分析 机组组合问题要求基于已知的系统数据&#xff0c;求解计划时间内机组决策变量的最优组合&#xff0c;使得系统总成本达到最小。该问题的决策变量由两类&#xff0c;一类是各时段机组的启停状态&#xff0c;为整数变量&#xff0c;0表示关…

android 自定义八边形进度条

自定义八边形动画效果图如下 绘制步骤&#xff1a; 1.先绘制橙色底部八边形实心 2.黑色画笔绘制第二层&#xff0c;让最外层显示一条线条宽度即可 3.再用黄色画笔绘制黄色部分 4.使用渐变画笔根据当前进度绘制覆盖黄色部分 5.使用黑色画笔根据当前进度绘制刻度条 6.黑色画笔绘制…

自动驾驶预测-决策-规划-控制学习(5):图像分割与语义分割入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 论文题目&#xff1a;Evolution of Image Segmentation using Deep Convolutional Neural Network: A Survey前言&#xff1a;图像分割与语义分割一、图像分割是什么…

重新认识Word——页眉页脚

重新认识Word——页眉页脚 节设置页脚第X页&#xff0c;共Y页 奇偶页不同页眉包含章节号清除页眉横线 我们之前已经全面的构建了我们的文章&#xff0c;现在我们来了解一下&#xff0c;我们毕业论文的页眉&#xff08;页面信息&#xff09;页脚&#xff08;页码&#xff09;的设…

Clickhouse: One table to rule them all!

前面几篇笔记我们讨论了存储海量行情数据的个人技术方案。它们之所以被称之为个人方案&#xff0c;并不是因为性能弱&#xff0c;而是指在这些方案中&#xff0c;数据都存储在本地&#xff0c;也只适合单机查询。 数据源很贵 – 在这个冬天&#xff0c;我们已经听说&#xff0…

JMeter请求参数Parameters,带中文或特殊字符(+/=)时,例如登录密码或者token等,需要勾选编码

以前的登录接口密码参数不包含特殊字符&#xff0c;为了安全&#xff0c;产品今天修改了需求&#xff0c;密码必须由数字&#xff0c;字母和特殊字符构成&#xff0c;之前利用JMeter接口编写的脚本报错了&#xff0c;调整了一下&#xff0c;里面踩了一点坑&#xff0c;记录下来…

给科研人的 ML 开源发布工具包

什么是开源发布工具包&#xff1f; 恭喜你的论文成功发表&#xff0c;这是一个巨大的成就&#xff01;你的研究成果将为学界做出贡献。 其实除了发表论文之外&#xff0c;你还可以通过发布研究的其他部分&#xff0c;如代码、数据集、模型等&#xff0c;来增加研究的可见度和采…

c语言嵌套循环

c语言嵌套循环 c语言嵌套循环 c语言嵌套循环一、c语言嵌套循环格式二、嵌套循环案例九九惩罚口诀 一、c语言嵌套循环格式 for(初始值&#xff1b;表达式&#xff1b;表达式) {for&#xff08;初始值&#xff1b;表达式&#xff1b;表达式&#xff09;{代码} }int main() {for (…

【java八股文】之计算机网络系列篇

1、TCP/IP和UDP模型 TCP/IP分层&#xff08;4层&#xff09;&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层 网络的七层架构 &#xff08;7层&#xff09;&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff…

Spring事务的四大特性+事务的传播机制+隔离机制

Spring事务的四大特性 ① 原子性 atomicity 原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么都发生&#xff0c;要么都不发生。 事务是一个原子操作, 由一系列动作组成。 组成一个事务的多个数据库操作是一个不可分割的原子单元&#xff0c;只有所有的…

无需任何三方库,在 Next.js 项目在线预览 PDF 文件

前言&#xff1a; 之前在使用Vue和其它框架的时候&#xff0c;预览 PDF 都是使用的 PDFObject 这个库&#xff0c;步骤是&#xff1a;下载依赖&#xff0c;然后手动封装一个 PDF 预览组件&#xff0c;这个组件接收本地或在线的pdf地址&#xff0c;然后在页面中使用组件的车时候…

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操…