【vue】 实现 自定义 Calendar 日历

news2024/11/23 18:45:37

图例:自定义日历

一、标签自定义处理

<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%);
  }
}

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

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

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

相关文章

网页布局 flex

弹性盒模型 弹性盒模型&#xff08;Flexible Box模型&#xff09;&#xff0c;也被成为flexbox&#xff0c;是一种一维的布局模型&#xff08;也就是说一次只能处理一个维度上的元素布局&#xff0c;一行或者一列&#xff09;。它给flexbox的子元素之间提供了强大的空间分布和对…

CRM系统:助力数据服务企业,打造核心竞争力

近年来&#xff0c;数据服务企业开始走入大众视野。作为企业管理应用热门选手——CRM客户管理系统&#xff0c;可以助力企业实时数据应用先行者&#xff0c;提升业务转化与协同效率&#xff0c;进一步打造核心竞争力。下面我们说说&#xff0c;CRM系统对数据服务企业的作用。 …

运动耳机哪种类型好?2023年热门运动蓝牙耳机推荐

​在现代社会&#xff0c;耳机已经成为了人们生活中的必备数码设备。无论是在工作、学习还是娱乐中&#xff0c;我们都需要用到耳机。而在运动的时候&#xff0c;佩戴耳机更是成为了很多人的标配。那么&#xff0c;什么样的运动耳机最适合我们呢&#xff1f;下面&#xff0c;我…

【iOS】将网络请求封装在一个单例类Manager中(AFNetworking、JSONModel)

项目开发中会请求大量不同的API&#xff0c;若将网络请求三板斧直接写在Controller中会代码十分冗杂&#xff0c;干脆直接将AFNetWorking和JSONModel封装到一个全局的Manager单例类中&#xff0c;在Manager类中进行网络请求和数据解析 导入AFNetworking和JSONModel 参考【iOS…

SM5203 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器

SM5203 1.2A/18V 锂电池线性充电芯片 简介&#xff1a; SM5203 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器&#xff0c;并带有锂电池正负极反接保护功能&#xff0c;可以保护芯片和用户安全。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff…

opencv车牌识别<一>

目录 一、概述 二、ANPR简介 一、概述 本文将介绍创建自动车牌识别(Automatic Number Plate Recognition&#xff0c;ANPR)所需的步骤。对于不同的情形&#xff0c;实现自动车牌识别会用不同的方法和技术&#xff0c;例如&#xff0c;IR 摄像机、固定汽车位置、光照条件等…

hadoop 大数据环境配置 ssh免密登录 centos配置免密登录 hadoop(四)

1. 找到.ssh文件夹 cd ~ # 在.ssh文件夹下生成 # cd .ssh 2. 生成私钥公钥命令&#xff1a; ssh-keygen -t rsa3. 发送到需要免密机器&#xff1a; # hadoop23 是我做了配置。在host配置得机器ip和名称得映射 ssh-copy-id hadoop23 4. 成功

长假想要获得理想投放效果?巨量千川给出解决方案

巨量千川一直对商家的体验格外关注&#xff0c;了解到许多千川投手和商家在长假投放存在困难时&#xff0c;便深入了解原因&#xff0c;并针对问题提出了可行的解决方案。 发现原因有三&#xff1a; 其一&#xff0c;每逢节假日&#xff0c;大家都明白流量都会相对充足&#xf…

【科研新手指南4】ChatGPT的prompt技巧 心得

ChatGPT的prompt心得 写在最前面chatgpt咒语1&#xff08;感觉最好用的竟然是这个&#xff0c;简单方便快捷&#xff0c;不需要多轮对话&#xff09;chatgpt思维链2&#xff08;复杂任务更适用&#xff0c;简单任务把他弄复杂了&#xff09;机理chatgpt完整咒语1&#xff08;感…

5天飞驰1000公里的狗狗,救了整个镇的孩子

它&#xff0c;哈士奇&#xff0c;是个名副其实的网红&#xff0c;因其性格温顺、行为幼稚&#xff0c;被叫做“二哈”&#xff0c;成为现在很多搞笑视频、表情包的主角。 当我们调侃二哈可爱、蠢萌的时候&#xff0c;可能还没意识到&#xff0c;它的先祖们&#xff0c;竟是救命…

npm封装插件打包上传后图片资源错误

问题&#xff1a; npm封装插件&#xff1a;封装的组件页面涉及使用图片资源&#xff0c;在封装的项目里调用图片显示正常&#xff1b;但是打包上传后&#xff0c;其他项目引入使用报错找不到图片资源&#xff1b;图片路径也不对 获取图片的base64方法 解决方案&#xff1a; 将…

移远EC600U-CN开发板 11.14

控件探索-仪表&#xff08;lv.meter&#xff09; 1. 显示一个简单的仪表盘 def set_value(indic, v):meter.set_indicator_value(indic, v)# # A simple meter # meter lv.meter(scr) meter.center() meter.set_size(200, 200)# Add a scale first scale meter.add_scale()…

【C++代码】罗马数字和阿拉伯数字互转,双指针完成盛最多水的容器,自动机实现字符串转换整数

题目&#xff1a;整数反转 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 $[−2^{31}, 2^{31} − 1] $&#xff0c;就返回 0。 记 rev 为翻转后的数字&#xff0c;为完成翻转&#xff0c;我们可以…

WebSocket Day04 : 消息推送

前言 随着Web应用程序的不断发展&#xff0c;实时性和交互性成为了用户体验中至关重要的一部分。传统的HTTP协议在处理实时数据传输方面存在一些局限性&#xff0c;而WebSocket作为一种全双工通信协议&#xff0c;为实现实时、高效的消息推送提供了全新的解决方案。 在Web开发…

基于单片机微波炉加热箱系统设计

**单片机设计介绍&#xff0c; 基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的微波炉加热箱系统是一种智能化的厨房电器设备&#xff0c;利用单片机控制技术实现自动加热和定时等功能…

unity 使用Vuforia扫描实体物体交互

文章目录 前言一、Vuforia是什么&#xff1f;二、Unity导入Vuforia1.去Unity - Windows – Asset Store&#xff0c;搜vuforia engine&#xff0c;添加到我的资源2.从 Unity 的菜单 Assets -> Import package -> Custom Package 导入脚本&#xff0c;添加 Vuforia Engine…

selenium报错:没有打开网页或selenium.common.exceptions.NoSuchDriverException

文章目录 问题解决方法 问题 当selenium的环境配置没有问题&#xff0c;但在使用selenium访问浏览器时并没有打开网页&#xff0c;或者出现selenium.common.exceptions.NoSuchDriverException报错信息&#xff08;如下图所示&#xff09;。 以上问题可能的原因是没有配置chrom…

格式化或删除了存储卡的照片?值得收藏的几个有效方法

最好的恢复软件可以从 SD 卡、固态硬盘和硬盘恢复已删除的照片、视频和数据 您是否不小心重新格式化了存储卡或删除了想要保留的照片&#xff1f;最好的照片恢复软件可以提供帮助&#xff01;如果您使用数码相机拍摄的时间足够长&#xff0c;当您错误地删除了您想要保留的图像…

音画欣赏|《还有个家园》

《还有个家园》 38x30cm 陈可之2018年绘 猎户星座 【朴树】 你还记得吗 那时的夜晚 是如何降临的 什么都不说 像来自天空 轻如指尖的触痛 你是否得到了 期待的人生 梦里的海潮声 他们又如何从 指缝中滑过 像吹在旷野里的风 情长 飘黄 静悄悄的时光 清晨 日暮 何处是…

Spring Boot项目优雅实现读写分离

文章目录 1. 读写分离简介2. Spring Boot集成MyBatis3. 配置读写分离数据源4. 定义数据源上下文5. 自定义注解和切面6. 在Service层使用注解7. 拓展与分析7.1 多数据源的选择7.2 事务的处理7.3 异常处理7.4 动态数据源切换7.5 Spring Boot版本适配 &#x1f389;欢迎来到架构设…