uniapp 简易自定义日历

在这里插入图片描述
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>

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

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

相关文章

Linux常用命令大全(三)

系统权限 用户组 1. 创建组groupadd 组名 2. 删除组groupdel 组名 3. 查找系统中的组cat /etc/group | grep -n “组名”说明&#xff1a;系统每个组信息都会被存放在/etc/group的文件中1. 创建用户useradd -g 组名 用户名 2. 设置密码passwd 用户名 3. 查找系统账户说明&am…

蓝桥杯java基础

2. AB问题II 时间限制&#xff1a;1.000S 空间限制&#xff1a;32MB 题目描述 计算ab&#xff0c;但输入方式有所改变。 输入描述 第一行是一个整数N&#xff0c;表示后面会有N行a和b&#xff0c;通过空格隔开。 输出描述 对于输入的每对a和b&#xff0c;你需要在相应的…

openssl快速生成自签名证书

系统&#xff1a;Centos 7.6 确保已安装openssl openssl version生成私钥文件 private.key &#xff08;文件名自定义&#xff09; openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048-out private.key&#xff1a;生成的私钥文件-algorithm RS…

探索设计模式的魅力:工厂方法模式

工厂方法模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的接口&#xff0c;但将具体实例化对象的工作推迟到子类中完成。这样做的目的是创建对象时不用依赖于具体的类&#xff0c;而是依赖于抽象&#xff0c;这提高了系统的灵活性和可扩展性。 以下是工厂方法模式的…

MySQL 8.0中移除的功能(二)

PROCEDURE ANALYSE()​ 语法已被移除。客户端的 ​--ssl​ 和 ​--ssl-verify-server-cert​ 选项已被移除。使用 ​--ssl-modeREQUIRED​ 代替 ​--ssl1​ 或 ​--enable-ssl​。使用 ​--ssl-modeDISABLED​ 代替 ​--ssl0​、​--skip-ssl​ 或 ​--disable-ssl​。使用 ​-…

chatgpt的基本技术及其原理

ChatGPT是一种基于生成式预训练的语言模型&#xff0c;它的基本技术包括预训练和微调。下面我将为你解释这些技术及其原理。 1. 预训练&#xff08;Pre-training&#xff09;: ChatGPT的预训练阶段是在大规模的文本数据上进行的。模型通过对大量的互联网文本进行自监督学习来学…

学习视频一些杂乱的东西

文章目录 ref获取dom元素监听深层的某个属性? 可选链操作符 和 ?? 双问号表达式v-slot 语法糖作用域插槽动态插槽 初始化数组骚操作数字滚动 -> gsapstyle妙招新奇的原型链 object.createB站笔记链接JS相关设计模式ajaxsvgvue3scsswebpack内存泄漏 ref获取dom元素 直接给…

基于深度学习的实例分割的Web应用

基于深度学习的实例分割的Web应用 1. 项目简介1.1 模型部署1.2 Web应用 2. Web前端开发3. Web后端开发4. 总结 1. 项目简介 这是一个基于深度学习的实例分割Web应用的项目介绍。该项目使用PaddlePaddle框架&#xff0c;并以PaddleSeg训练的图像分割模型为例。 1.1 模型部署 …

【iOS】数据存储方式总结(持久化)沙盒结构

在iOS开发中&#xff0c;我们经常性地需要存储一些状态和数据&#xff0c;比如用户对于App的相关设置、需要在本地缓存的数据等等&#xff0c;本篇文章将介绍六个主要的数据存储方式 iOS中数据存储方式&#xff08;数据持久化&#xff09; 根据要存储的数据大小、存储数据以及…

案例:应用内字体大小调节

文章目录 介绍相关概念完整实例 代码结构解读保存默认大小获取字体大小修改字体大小 介绍 本篇Codelab将介绍如何使用基础组件Slider&#xff0c;通过拖动滑块调节应用内字体大小。要求完成以下功能&#xff1a; 实现两个页面的UX&#xff1a;主页面和字体大小调节页面。拖动…

算法训练营第34天|● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com) LeetCode 1005.K次取反后最大化的数组和 题目链接&#xff1a;1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode…

基于物联网设计的智能储物柜(4G+华为云IOT+微信小程序)

一、项目介绍 在游乐场、商场、景区等人流量较大的地方&#xff0c;往往存在用户需要临时存放物品的情况&#xff0c;例如行李箱、外套、购物袋等。为了满足用户的储物需求&#xff0c;并提供更加便捷的服务体验&#xff0c;当前设计了一款物联网智能储物柜。 该智能储物柜通…

git提交报错:remote: Please remove the file from history and try again.

1. 报错信息 remote: error: File: fba7046b22fd74b77425aa3e4eae0ea992d44998 500.28 MB, exceeds 100.00 MB. remote: Please remove the file from history and try again. git rev-list --objects --all | grep fba7046b22fd74b77425aa3e4eae0ea992d44998 2. 分析原因 e…

打架识别摄像机

随着社会治安问题的增加&#xff0c;打架事件在公共场所频繁发生&#xff0c;给社会治安带来了一定程度的威胁。因此&#xff0c;为了提高公共场所的安全性&#xff0c;可以利用现代科技&#xff0c;如人工智能和摄像技术&#xff0c;开发一种打架识别摄像机。 这种摄像机可以通…

基于 IDEA 进行 Maven 工程构建

一、构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程&#xff0c;在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分&#xff0c;它能够大大提高软件开发效率&…

【Docker】CentOS stream 上安装 Docker 环境详细指南

文章目录 1. 定义2. 优势3. 安装1&#xff09;Linux 上安装&#xff08;强烈推荐&#xff09;2&#xff09;Windows 和 MAC 上安装 4. 验证1&#xff09;查看版本2&#xff09;运行 Hello World 总结 Docker 是一种轻量级的容器化技术&#xff0c;提供了一种在不同环境中快速、…

Maven普通工程和web工程创建

文章目录 创建项目前设置maven工程前设置工作创建项目前--》设置utf-8配置maven参数Maven普通工程和web工程创建Maven简单工程第一步&#xff1a;File–New–Project 第二步&#xff1a;选择maven然后下一步&#xff1a;填写后询选择finish初始化maven工程目录简介maven简单工程…

vue3 | 自定义遮罩层组件

组件模板 <template><Teleport to"body" :disabled"!appendToBody"><div v-bind"$attrs" v-show"modelValue" class"maskLayer-overlay" :style"{ background }"><div class"maskLaye…

python中字符串常用的操作

在Python中&#xff0c;字符串是一种不可变的序列类型&#xff0c;它支持许多常用的操作。以下是一些常见的字符串操作&#xff1a; 字符串拼接&#xff1a; 使用 运算符可以将两个字符串拼接在一起。 str1 "Hello" str2 "World" result str1 "…

Rust-借用检查

Rust语言的核心特点是&#xff1a;在没有放弃对内存的直接控制力的情况下&#xff0c;实现了内存安全。 所谓对内存的直接控制能力&#xff0c;前文已经有所展示&#xff1a;可以自行决定内存布局&#xff0c;包括在栈上分配内存&#xff0c;还是在堆上分配内存&#xff1b;支…