【vue】 实现 自定义 Calendar 日历

图例:自定义日历

一、标签自定义处理

<div class="date-box">
  <el-calendar v-model="state.currDate" ref="calendar">
    <template #header="{ date }">
      <div class="date-head flex">
        <div @click="selectDate('prev-month')">
          <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 37 37" fill="none">
            <path d="M17.0801 32.3773C17.368 32.3773 17.6559 32.2675 17.8756 32.0479C18.3149 31.6085 18.3149 30.8962 17.8756 30.4568L6.01482 18.5961L17.8756 6.73533C18.3149 6.29598 18.3149 5.58368 17.8756 5.14433C17.4362 4.70498 16.7239 4.70498 16.2846 5.14433L3.62831 17.8006C3.189 18.2399 3.189 18.9522 3.62831 19.3916L16.2846 32.0478C16.5043 32.2675 16.7922 32.3773 17.0801 32.3773Z" fill="#8B8B8B"/>
          </svg>
        </div>
        <div class="head-data">{{ date.split('年')[0]+'-'+date.split('年')[1].replace('月','')}}</div>
        <div @click="selectDate('next-month')">
          <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 37 37" fill="none">
            <path d="M19.2441 32.3773C18.9562 32.3773 18.6683 32.2675 18.4486 32.0479C18.0093 31.6085 18.0093 30.8962 18.4486 30.4568L30.3094 18.5961L18.4486 6.73533C18.0093 6.29598 18.0093 5.58368 18.4486 5.14433C18.888 4.70498 19.6003 4.70498 20.0397 5.14433L32.6959 17.8006C33.1352 18.2399 33.1352 18.9522 32.6959 19.3916L20.0397 32.0478C19.82 32.2675 19.532 32.3773 19.2441 32.3773Z" fill="#8B8B8B"/>
          </svg>
        </div>
      </div>
    </template>
    <template #date-cell="{ data }">
      <div @click="currDate(data)" class="date-item" :class="data.isSelected ? 'is-selected' : ''">
        <el-progress v-if="data.isSelected" class="ok-green" :percentage="50" :stroke-width="20" :text-inside="true"/>
        <el-progress v-if="data.isSelected" class="ok-red" :percentage="50" :stroke-width="20" :text-inside="true"/>
        <el-progress v-if="!data.isSelected" class="ok-yellow" :percentage="50" :stroke-width="20" :text-inside="true"/>
        <el-progress class="ok-blue" :percentage="50" :stroke-width="20" :text-inside="true"/>
        <div class="item-text">{{ data.day.split('-')[2]}}</div>
      </div>
    </template>
  </el-calendar>
</div>

二、将上个月下个月事件作用于自定义的左右箭头

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import type { CalendarDateType, CalendarInstance } from 'element-plus'

// 基本信息
const calendar = ref<CalendarInstance>()
const state = reactive<any>({
  activeDate: '',
  currDate: new Date()
})

// ===============methods================
onMounted(() => {
  init()
})
const init = async () => {
  // 初始化获取当前日期
  state.activeDate = newDate(state.currDate)
}
// 自定义下个月/上个月
const selectDate = (val: CalendarDateType) => {
  if (!calendar.value) return
  calendar.value.selectDate(val)
}
// 获取选中的日期
const currDate = (data:any) => {
  state.activeDate = data.day
}
// 当前日期格式转换
const newDate=(time:any)=> {
  let date = new Date(time)
  let y = date.getFullYear()
  let m = date.getMonth() + 1
  let mm = m < 10 ? '0' + m : m
  let d = date.getDate()
  let dd = d < 10 ? '0' + d : d
  return y + '-' + mm + '-' + dd
}
</script>

三、相关样式调整

.date-box{
  .date-head{
    .head-data{
      width: 500px;
      font-size: 28px;
      text-align: center;
    }
  }
  .date-item{
    position: relative;
    height: 150%;
    .item-text{
      font-size: 28px;
      position: absolute;
      bottom: -5px;
      right: 10px;
    }
  }
  :deep(.el-calendar){
    text-align: right;
    .el-calendar__body{
      padding: inherit;
      overflow-y: scroll;
      height: calc(100vh - 340px);
      padding: 0 10px;
      &::-webkit-scrollbar{
        width: 6px;
      }
      &::-webkit-scrollbar-thumb{
        background: #ebeef5;
        border-radius: 20px;
      }
    }
    .el-calendar__header{
      justify-content: center;
    }
    .el-calendar-table__row{
      height: 124px;
    }
    .el-calendar-table td.is-selected{
      background: #EDFFF5;
      color: #00B386;
    }
    .el-calendar-table .el-calendar-day:hover{
      background-color: inherit !important;
    }
  }
}
.el-progress{
  margin-bottom: 10px;
}
.ok-green{
  :deep(.el-progress-bar__inner){
    background: #04D288;
  }
}
.ok-blue{
  :deep(.el-progress-bar__inner){
    background: linear-gradient(270deg, #3994FF -6.36%, #39D9FF 99.96%);
  }
}
.ok-yellow{
  :deep(.el-progress-bar__inner){
    background: linear-gradient(270deg, #FFAF57 -6.91%, #EF5614 103.61%);
  }
}
.ok-red{
  :deep(.el-progress-bar__inner){
    background: linear-gradient(270deg, #FC4444 -6.36%, #FC9574 99.96%);
  }
}

       希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang获取月份的第一天和最后一天

package mainimport ("fmt""strconv""strings""time" )func main() {month : "2023-11"result : GetMonthStartAndEnd(month)fmt.Println(result["start"] " - " result["end"]) }// 获取月…

图形化探索:快速改造单实例为双主、MGR、读写分离等架

单机GreatSQL/MySQL调整架构为多副本复制的好处有哪些&#xff1f;为什么要调整&#xff1f; 性能优化&#xff1a;如果单个GreatSQL服务器的处理能力达到瓶颈&#xff0c;可能需要通过主从复制、双主复制或MGR&#xff0c;以及其他高可用方案等来提高整体性能。通过将读请求分…

zabbix的服务器端 server端安装部署

zabbix的服务器端 server 主机iplocalhost&#xff08;centos 7&#xff09;192.168.10.128 zabbix官网部署教程 但是不全&#xff0c;建议搭配这篇文章一起看 zabbixAgent部署 安装mysql 所有配置信息和Zabbix收集到的数据都被存储在数据库中。 下载对应的yum源 yum ins…

【Linux】非堵塞轮询

堵塞轮询&#xff1a; 堵塞轮询是我们最简单的一种等待方式也是最常应用的等待方式。 但是&#xff0c;一旦阻塞等待也就意味着我们当前在进行等待的时候&#xff0c;父进程什么都干不了。 非堵塞轮询&#xff1a; 其中非阻塞等待&#xff0c;是等待的一种模式&#xff0c; 在…

如何使用Imagewheel+内网穿透搭建私人图床实现公网访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

【淘宝API】商品详情+搜索商品列表接口

淘宝商品详情API接口可以使用淘宝开放平台提供的SDK或API来获取。这些接口可以用于获取商品的详细信息&#xff0c;如标题、价格、描述、图片等。 以下是使用淘宝开放平台API获取商品详情的步骤&#xff1a; 注册淘宝开放平台账号&#xff0c;并创建应用&#xff0c;获取应用…

Sentinel 流控规则

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

下一代VPN工具:体验TailScale的简便和高效

目录 一、概要VPN 是什么&#xff1f;TailScale 是什么 二、使用1、注册2、下载安装3、 Windows4、Linux5、 Android6、测试 三、Nginx整合Tailscale做端口转发 一、概要 VPN 是什么&#xff1f; 看到 VPN 第一反应应该是翻墙&#xff0c;但 VPN 最初应该也是最普遍的用途应该…

重生奇迹mu圣导师加点

重生奇迹mu圣导师加点&#xff1a;要攻击高可以加力量&#xff0c;平衡系建议加点力量600~800&#xff0c;智力200~400&#xff0c;敏够装备要求&#xff0c;统帅1000&#xff0c;其余加体力。 圣导师靠加力量培养高攻圣导师不现实&#xff0c;建议玩家练魔&#xff0c;低级圣…

win10关闭讲述人、粘滞键功能的快捷键启动

简单记录下在win10关闭讲述人、粘滞键快速启动的快捷键&#xff0c;这两个功能对正常人没什么用。误触发很烦。 禁用讲述人 按windows键&#xff0c;输入“轻松使用设置”&#xff0c;点“讲述人”&#xff0c;如下图取消讲述人开关和快捷键的勾选。 禁用粘滞键 按windows…

算法笔记-散列

算法笔记-散列 hash算法的思想整数出现的个数字符串出现个数整数是否出现整数出现的个数2字符是否出现字符串出现的个数2-sum-hash字符串出现的次数集合求交集合求并集合求差hash算法的思想 散列方法的主要思想是根据结点的关键码值来确定其存储地址 以关键码值K为自变量,通过…

电子学会C/C++编程等级考试2021年03月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:药房管理 随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医…

【Java 进阶篇】JQuery 案例:优雅的隔行换色

在前端的设计中&#xff0c;页面的美观性是至关重要的。而其中一个简单而实用的设计技巧就是隔行换色。通过巧妙地使用 JQuery&#xff0c;我们可以轻松地实现这一效果&#xff0c;为网页增添一份优雅。本篇博客将详细解析 JQuery 隔行换色的实现原理和应用场景&#xff0c;让我…

测试员练就什么本领可以让自己狂揽10个offer

最近&#xff0c;以前的一个小徒弟又双叒叕跳槽了&#xff0c;也记不清他这是第几次跳槽了&#xff0c;不过从他开始做软件测试开始到现在已经有2-3年的工作经验了&#xff0c;从一开始的工资8K到现在的工资17K&#xff0c;不仅经验上积累的很多&#xff0c;财富上也实现了翻倍…

JS基础 查漏补缺

学习视频&#xff1a;黑马程序员 第五天——对象 方法和调用 数据行为性的信息称为方法&#xff0c;如跑步、唱歌等&#xff0c;一般是动词性的&#xff0c;其本质是函数。 方法是依附在对象上的函数 方法是由方法名和函数两部分构成&#xff0c;它们之间使用 : 分隔 方法是…

excel中用NORM.INV函数计算正态累积分布的逆

NORM.INV函数返回正态累积分布的逆。它的形式为NORM.INV(probability,mean,standard_dev)。 正态累积分布函数和正态概率密度函数互为逆。 参数说明&#xff1a; probability&#xff1a;对应正态分布的累积分布值。例如该值等于0.9&#xff0c;表示累积概率之和是0.9Mean&am…

硬件开发笔记(十一):Altium Designer软件介绍、安装过程和打开pcb工程测试

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134405411 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

基础课3——客服中心现状

智能客服服务的对象就是客服中心&#xff0c;智能客服旨在帮助客服中心更好、更快地解决客户的问题。 1.客服中心的背景 随着数字化时代的到来&#xff0c;客户服务已经成为了企业中不可或缺的一部分。消费者对于客户服务的期望也在不断变化&#xff0c;他们不再满足于仅仅在…

【AI】将Python项目打包成Docker镜像的小实践

1.准备工作 可以本地运行的Python程序 这个因人而异&#xff0c;可以是Anaconda环境&#xff0c;也可以是本机运行的Python环境&#xff0c;确保python程序是可以正常运行的。Docker环境 Docker环境是打包镜像必需的&#xff0c;可以安装Docker Desktop for Windows&#xff0…

升级支持requests库更新:兼容最新urllib3版本及相关库

你是否经常在深夜加班&#xff0c;只为解决一个bug&#xff1f;有时候&#xff0c;我们为了工作的进展和质量&#xff0c;不得不牺牲自己的休息时间。然而&#xff0c;加班并不是没有尽头的&#xff0c;更不是因为我们体贴不够。其实&#xff0c;真正的体贴&#xff0c;应该是让…