自定义 vant 的 van-calendar 日历控件

最近在做 vue 微信公众号项目, 有个自定义日历控件展示的需求,经过查阅资料,最终实现了如图所示效果,这里做了总结,需要的小伙伴可以参考一下:

HTML代码:

<template><div class="pageContainer"><div class="vanCalendar"><div class="topTitle"><div class="topYear">{{ new Date().getFullYear() }}</div>{{ new Date().getMonth() + 1 }}月</div><van-calendarref="calendar"color="#1989fa":formatter="formatter":min-date="minDate":max-date="maxDate":show-title="false":show-mark="false":show-subtitle="false":poppable="false":show-confirm="false"@select="onCalendarSelect"/></div></div>
</template>

JS代码: 

<script>
export default {data() {return {dateList: [],minDate: "",maxDate: "",};},created() {const currentDate = new Date();const year = currentDate.getFullYear();const month = currentDate.getMonth();this.minDate = new Date(year, month, 1);this.maxDate = new Date(year, month, this.getLastDayOfMonth());// 模拟异步请求setTimeout(() => {this.dateList = [{ date: "2024/06/01", status: "0" },{ date: "2024/06/02", status: "0" },{ date: "2024/06/03", status: "1" },{ date: "2024/06/04", status: "1" },{ date: "2024/06/05", status: "2" },{ date: "2024/06/06", status: "2" },{ date: "2024/06/07", status: "2" },{ date: "2024/06/08", status: "2" },{ date: "2024/06/09", status: "2" },{ date: "2024/06/10", status: "1" },{ date: "2024/06/11", status: "1" },{ date: "2024/06/12", status: "1" },{ date: "2024/06/13", status: "1" },{ date: "2024/06/14", status: "1" },{ date: "2024/06/15", status: "0" },{ date: "2024/06/16", status: "0" },{ date: "2024/06/17", status: "1" },{ date: "2024/06/18", status: "1" },{ date: "2024/06/19", status: "1" },{ date: "2024/06/20", status: "1" },{ date: "2024/06/21", status: "1" },{ date: "2024/06/22", status: "0" },{ date: "2024/06/23", status: "0" },{ date: "2024/06/24", status: "2" },{ date: "2024/06/25", status: "2" },{ date: "2024/06/26", status: "1" },{ date: "2024/06/27", status: "1" },{ date: "2024/06/28", status: "1" },{ date: "2024/06/29", status: "0" },{ date: "2024/06/30", status: "0" },];});},methods: {// 自定义日期文案formatter(day) {let isHasData = 0;let dayTimestamp = this.formattedDateFunc(day.date);this.dateList.forEach((item) => {if (dayTimestamp == item.date) {isHasData = item.status;}});// status=1,日期下方添加黄点if (isHasData == 1) {day.className = "addOrangeDot";}// status=2,日期下方添加绿点if (isHasData == 2) {day.className = "addGreenDot";}// 当前选中的日期if (day.type == "selected") {if (isHasData == 1) {// 给选中的日期加上蓝色实心圆,且status=1,日期下方添加黄点day.className = "selectedDay addOrangeDot";}if (isHasData == 2) {// 给选中的日期加上蓝色实心圆,且status=2,日期下方添加绿点day.className = "selectedDay addGreenDot";}}// 当天日期if (dayTimestamp == this.formattedDateFunc()) {if (isHasData == 1) {// 给当天加上蓝色空心圆,且status=1,日期下方添加黄点day.className = "addOrangeDot calendarToday";}if (isHasData == 2) {// 给当天加上蓝色空心圆,且status=2,日期下方添加绿点day.className = "addGreenDot calendarToday";}}return day;},// 日期被选中时触发的方法onCalendarSelect(val) {this.$toast("当前选中日期:" + this.formattedDateFunc(val, "-"));},// 获取当月的最后一天getLastDayOfMonth() {const date = new Date();const year = date.getFullYear();const month = date.getMonth();const lastDay = new Date(year, month + 1, 0).getDate();return lastDay;},// 日期格式化formattedDateFunc(timestamp, type = "/") {const currentDate = timestamp ? new Date(timestamp) : new Date();const year = currentDate.getFullYear();let month = currentDate.getMonth() + 1;let day = currentDate.getDate();month = month < 10 ? `0${month}` : month;day = day < 10 ? `0${day}` : day;return `${year}${type}${month}${type}${day}`;},},
};
</script>

CSS代码: 


<style lang="scss" scoped>
.pageContainer {height: calc(100vh - 68px);background: #fff;font-size: 18px;overflow: auto;.vanCalendar {::v-deep .van-calendar__month-title {display: none;}::v-deep .van-calendar__header {box-shadow: none;}//有数据日期加点.addGreenDot,.addOrangeDot {position: relative;}// 绿点::v-deep .addGreenDot::after {position: absolute;content: "";width: 6px;height: 6px;top: 56px;left: 25px;border-radius: 50%;background-color: rgb(34, 177, 76);}// 黄点::v-deep .addOrangeDot::after {position: absolute;content: "";width: 6px;height: 6px;top: 56px;left: 25px;border-radius: 50%;background-color: #ff822c;}//当天日期::v-deep .calendarToday {position: relative;}// 当天日期添加空心蓝色圆::v-deep .calendarToday::before {width: 40px;height: 40px;line-height: 40px;position: absolute;top: 11px;left: 9px;content: "";text-align: center;font-size: 30px;border-radius: 50%;border: 2px solid rgb(25, 137, 250);}//选中的日期::v-deep .selectedDay {position: relative;}::v-deep .selectedDay::before {width: 40px;height: 40px;line-height: 40px;position: absolute;top: 12px;left: 8.6px;content: "";text-align: center;font-size: 30px;border-radius: 50%;border: none;}//选中的日期添加实心蓝色圆::v-deep .van-calendar__selected-day {border-radius: 50%;background: #59afff;z-index: 2;position: absolute;border: none;}::v-deep .van-calendar__selected-day::after {background-color: #fff !important;}::v-deep .van-calendar__header-subtitle {display: none;}::v-deep .van-calendar__selected-day {width: 40px;height: 40px;}}.topTitle {position: relative;padding: 10px;text-align: center;background: #fff;font-size: 24px;font-weight: bold;}.topYear {position: absolute;left: 0;font-weight: normal;}
}
</style>

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

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

相关文章

I/O系统

1. I/O接口 接口可以看做两个系统或两个部件之间的交接部分&#xff0c;它既可以是两种硬设备之间的连接电路&#xff0c;也可以是两个软件之间的共同逻辑边界。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。 2. 程序查询方式 程序查询方式是一…

知乎正通过乱码来干扰必应/谷歌等爬虫,从而限制中文数据集被用于AI训练

有用户反馈称使用微软必应搜索和谷歌搜索发现存在不少知乎乱码内容&#xff0c;即搜索结果里知乎内容的标题和正文内容都可能是乱码的&#xff0c;但抓取的正文前面一些段落内容可以正常查看。考虑到此前知乎已经屏蔽除百度和搜狗以外的所有搜索引擎爬虫 (蜘蛛 / 机器人)&#…

酣客的“FFC模式”|白酒商业模式|分润制度顶层架构设计

酣客公社摒弃传统商业模式&#xff0c;提出“心联网”及“FFC模式”的商业模式。 坐标&#xff1a;厦门&#xff0c;我是肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天和大家分享“酣客”的营销模式&#xff…

检信智能推出我国首款Allemotion OS基于AI生理心理参数服务开发者平台

检信Allemotion OS生理心理开发者平台是根据世界人工智能高速发展的特点,为实现脑机交互的行业需求&#xff0c;由检信智能推出我国首款检信Allemotion OS生理心理开发者平台。检信Allemotion OS生理心理开发者平台集成了振动影像心理情绪20项情绪参数、11项生理相关参数&#…

知识图谱——Neo4j数据库实战

数据与代码链接见文末 1.Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量

2、Redis持久化与高可用架构

一、Redis 持久化 RDB 快照&#xff08;Snapshot&#xff09; 基本概念&#xff1a;RDB&#xff08;Redis DataBase&#xff09;快照是将 Redis 内存中的数据在某个时间点保存到磁盘中的一种持久化方式&#xff0c;默认保存到 dump.rdb 的二进制文件中。通过 RDB 快照&#xff…

C# 中的 StreamReader 和 StreamWriter 类

在这里插入代码片StreamReader 和 StreamWriter 位于 System.IO 命名空间中。当您想要读取或写入基于字符的数据时&#xff0c;这两个类都很有用。这两个类都处理 Unicode 字符。 StreamReader 派生自抽象类“TextReader”&#xff0c;StreamWriter 派生自“TextWriter”。 下…

springboot系列七: Lombok注解,Spring Initializr,yaml语法

老韩学生 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…

Rethinking Semantic Segmentation: A Prototype View 2022CVPR Oral

流行的语义分割方案的掩码解码策略&#xff08;基于参数softmax或基于像素查询&#xff09;视为可学习的类原型。本研究揭示了这种参数分割策略的几个局限性&#xff0c;并提出了一种基于不可学习原型的非参数替代方案。与之前的方法以完全参数化的方式为每个类学习单个权重/查…

ubuntu22.04编译安装tesseract

1、 为什么用自己编译安装&#xff0c;而不采用apt安装&#xff1f; 由于tesseract有很多依赖包&#xff0c;直接用deb包或者rpm包等安装包安装很复杂&#xff0c;不一定能成功安装。 2、安装基本的依赖包 sudo apt update sudo apt install g autoconf automake libtool pkg…

Docker-Compose一键部署项目

Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…

新手向导:掌握Axure RP的第一步

其实很多时候&#xff0c;我们很容易把教程做得太复杂&#xff0c;让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容&#xff0c;学起来就容易多了:一是简单了解这个软件&#xff0c;二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

【QCustomPlot实战系列】QCPGraph折线图的渐变

包含折线图渐变效果以及QCPAxisTickerDateTime的使用 static QBrush GenerateLinearBrush(Qt::Orientation orientation) {qreal x 1;qreal y 0;if (orientation Qt::Vertical) {x0;y1.5;}QLinearGradient gradient(0, y, x, 0);gradient.setCoordinateMode(QLinearGradie…

软件需求管理规程(DOC原件)

软件需求管理规程是确保软件开发过程中需求清晰、一致、可追踪的关键环节&#xff1a; 明确需求&#xff1a;项目初期&#xff0c;与利益相关者明确项目目标和需求&#xff0c;确保需求完整、无歧义。需求评审&#xff1a;组织专家团队对需求进行评审&#xff0c;识别潜在风险和…

huggingface加速下载模型

文章目录 所需环境huggingface-cli 用法登录token 获取 huggingface 镜像huggingface 缓存hf-transfer 拉满下载带宽如果开了的话&#xff0c;记得关掉科学上网&#xff01;&#xff01;&#xff01; 所需环境 python huggingface-cli 用法 huggingface-cli的更多用法点击这…

基于SpringBoot+IDEA+Mysql开发的在线课程教育平台

基于SpringBootIDEAMysql开发的在线课程教育平台 项目介绍&#x1f481;&#x1f3fb; 项目背景描述 随着信息技术的迅猛发展和互联网的普及&#xff0c;传统教育模式正面临着前所未有的挑战和机遇。为满足广大用户对于灵活、便捷、高效学习方式的需求&#xff0c;我们决定开发…

Redis 内存碎片是什么?如何清理?

Redis 内存碎片相关的问题在得物、美团、阿里、字节、携程等公司的后端面试中都曾出现过&#xff0c;还是建议认真准备一下。即使不是准备面试&#xff0c;日常开发也是能够用到的&#xff01; 什么是内存碎片? 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子&…

PMP认证有什么好处?

一般这些人适合去考PMP认证&#xff1a; 想要通过资质进行晋升的人群&#xff1a; 比如说在项目相关的助理岗位&#xff0c;企业中的项目人才需求依旧是很大的&#xff0c;项目助理如果想要达到项目经理或者项目主管的提升&#xff0c;就需要让公司对自己的项目管理能力认同才…

基于Java的旅游景区网站系统(springboot+vue)

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

泰迪智能科技携手广州番禺职业技术学院共建上进双创工作室

为充分发挥校企双方的优势&#xff0c;促进产教融合&#xff0c;发挥职业教育为社会、行业、企业服务的作用&#xff0c;为企业培养更多高素质、高技能的应用型人才的同时也为学生实习、就业提供更大空间。6月26日&#xff0c;“泰迪广州番禺职业技术学院上进双创工作室签约授牌…