FullCalendar日历组件集成实战(9)

news2024/11/20 16:32:39

背景

有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件,则需要做大量的二次开发。
FullCalendar是一款备受欢迎的开源日历组件,以其强大的功能而著称。其基础功能不仅免费且开源,为开发者提供了极大的便利,仅有少量高级功能需要收费。然而,尽管该组件功能卓越,其文档却相对简洁,导致在集成过程中需要开发者自行摸索与探索,这无疑增加了不少学习和验证的时间成本。
为此,本专栏通过日程管理系统的真实案例,手把手带你了解该组件的属性和功能,通过需求导向的方式,详细阐述FullCalendar组件的集成思路和实用解决方案。
在介绍过程中,我们将重点关注集成要点和注意事项,力求帮助开发者在集成过程中少走弯路,提供有效的避坑指南,从而提升开发效率,更好地利用这款优秀的日历组件。

官网:https://fullcalendar.io/
image.png
环境Vue3+Element Plus+FullCalendar 6.1.11。

使用

按需加载事件数据(二)

方案确认

一度打算采用最初的思路,重写头部工具栏的方式来实现,工作量略大,但整体上可行。
后来在系统地查看官方文档时,突然从一个角落找到了解决方案,即通过函数的方式来获取事件数据源。
官方文档:https://fullcalendar.io/docs/events-function
不得不说,太隐蔽了,当时查看文档时,仅当成一种提供事件数据源方式,没有点开细看。
按照官方说明,通过events属性指定一个回调方法,当用户点击上一个、下一个或者切换视图时触发,并且回调时会传入开始时间和结束时间。

做了下验证:

// 加载事件数据
events: this.loadEvent

// 加载事件数据
loadEvent(fetchInfo, successCallback, failureCallback) {
  this.startTime = this.$dateFormatter.formatUTCTime(fetchInfo.start)
  this.endTime = this.$dateFormatter.formatUTCTime(fetchInfo.end)
  console.log('loadEvent', this.startTime, this.endTime)
}   

打开控制台,点击按钮测试,结果如下:
image.png
组件内置的按钮(今天、上一个、下一个、月视图、周视图、日视图和列表视图),均能触发回调,并且内部做了逻辑判断,只有当前展示的数据本地没有,才会发起回调。
怎么理解呢?例如先加载了月视图,这时候拿到了一个月的事件数据,如果这时候切换到周视图,如果当前显示的周数据没超出已获取到的一个月范围内,则不会发起回调,如果超出,才会回调,这些细节只有测试和验证才能获取到。

方案实现

基于该方案,进行调整如下:
首先,为了避免在方法调用时传输参数,在vue的data段中新增几个变量用于保存起止时间和回调方法(注意:不在日历组件的选项option对象内)。

// 开始时间
startTime: '',
// 结束时间
endTime: '',
// 回调方法
successCallback: null

其次,当回调时,将起止时间和回调方法缓存到上面新加的变量,然后调用后端服务来获取数据。

// 加载事件数据
loadEvent(fetchInfo, successCallback, failureCallback) {
  this.startTime = this.$dateFormatter.formatUTCTime(fetchInfo.start)
  this.endTime = this.$dateFormatter.formatUTCTime(fetchInfo.end)
  this.successCallback = successCallback
  this.loadData()
}

再次,获取数据的服务改造,传入起止时间:

// 加载数据
loadData() {
  this.$api.personaltask.task.listWithScope(this.startTime, this.endTime).then((res) => {
    if (res.data) {
      const eventArray = res.data.map((item) => {
        // 若起止时间均为00:00:00,则设置为allDay属性为true
        let allDay = false
        if (
          item.startTime &&
          item.endTime &&
          item.startTime.substr(11, 8) === '00:00:00' &&
          item.endTime.substr(11, 8) === '00:00:00'
        ) {
          allDay = true
        }
        return {
          id: item.id,
          title: item.name,
          start: item.startTime,
          end: item.endTime,
          allDay: allDay,
          status: item.status,
          extendedProps: {
            priority: item.priority
          }
        }
      })
      this.eventData = eventArray
      this.filteData()
    }
  })
}

最后,过滤数据(用于显示全部和仅显示未完成)方法中使用回调方法处理数据。

// 筛选数据
filteData() {
  if (this.showAllFlag) {
    this.calendarOptions.customButtons.changeShowScopeButton.text = '显示未结束'
    this.successCallback(this.eventData)
  } else {
    this.calendarOptions.customButtons.changeShowScopeButton.text = '显示全部'
    const filtedData = this.eventData.filter((item) => {
      return (
        item.status === 'IN_PROGRESS' ||
        item.status === 'TO_DO' ||
        item.status === 'EXPIRED' ||
        item.status === 'PENDING' ||
        item.status === 'PAUSED'
      )
    })
    this.successCallback(filtedData)
  }
}

完成上述所有操作后,进行功能测试,数据可以正常加载和显示,点击头部内置按钮可以按需调用后端服务,获取数据并显示。

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

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

相关文章

成都石室中学学子游汶鑫展现新时代好少年风采 拾金不昧获表彰

在繁华的都市中,每天都有无数的故事在上演,而其中的一些故事,却以其独特的温暖和正能量,深深打动着我们的心灵。近日,成都石室中学初中学校的一名学生游汶鑫同学,就用他的实际行动,诠释了新时代好少年的风采,展现了中华民族传统美德在当代青少年身上的生动体现。 成都石室中学初…

Sui公布第四批学术研究奖结果,新增100万美金资金支持

Sui基金会很高兴宣布第四批Sui学术研究奖的获奖者,该计划资助推动Web3发展的前沿研究,特别关注区块链技术、智能合约编程和基于Sui的平台产品。 在这一批中,我们接受了来自加州大学伯克利分校、耶鲁大学、纽约大学、洛桑联邦理工学院和新加坡…

【Arduino】ADC模拟量输入

目录 1、模拟信号 2、ADC输入 analogRead()函数 analogReadMillivolts analogReadResolution 3、示例 1、模拟信号 生活中,接触到的大多数信号都是模拟信号,如声音、温度的变化等。如图1所示,模拟信号是用连续变化的物理量表示的信息&…

【QT】记录一次QT程序发布exe过程

记录一次QT程序发布exe过程 使用windeploy与enigma发布独立的QT程序第一步 QT编译输出 **release** 版本第二步 QT 自带 windepoyqt 补全链接库第三步 enigma virtual box压缩打包为单一exe最后【2024-06-07 17】- 【补充】 贴一个自己用的bat脚本【**QtDeploy2exe.bat**】半自…

操作系统复习-Linux的文件系统

文件系统概述 FAT FAT(File Allocation Table)FAT16、FAT32等,微软Dos/Windows使用的文件系统使用一张表保存盘块的信息 NTFS NTFS (New Technology File System)WindowsNT环境的文件系统NTFS对FAT进行了改进,取代了日的文件系统 EXT EXT(Extended…

SAP 服务提供者 (Services Provider)接口测试笔记

文章目录 SAP 服务提供者 (Services Provider)接口测试笔记设置Content-Type授权SAP接口测试-SoapUI参数配置 SAP 服务提供者 (Services Provider)接口测试笔记 现在我在SAP里面公布了一些查询接口,现在就是要用SoapU…

Unity3D测量面积和角度实现方法(二)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、unity测量面积👉1-1 视频效果👉1-2 先创建预制体👉1-3 在创建LineRenderer预制体👉1-4 代码如下 👉二、测量平面和测量空间切换&…

AIGC绘画设计基础:AI-MidJourney关键词大全+万能架构+保姆级教程(建议收藏!)

随着 ChatGPT 的热度席卷全网,越来越多人开始关注 AIGC(AI Generated Content)的相关应用。 其中Midjourney 作为一款强大的 AI 图像生成工具,与其他AI图像生成相比,Midjourney学习成本更低,生成速度更快&a…

Unity年中大促618活动又来了3折模板特效角色动画插件工具FPS生存建造模板RPG和2D素材优惠码UNITY6182024限时20240611

独立游戏开发需要找各种美术资源和模板,可以在低价时看看,节省开发时间。 Unity年中大促618活动又来了3折模板特效角色动画插件工具FPS生存建造模板RPG和2D素材优惠码UNITY6182024限时202406111104 300 款Unity引擎适配资源 3 折特惠,结账时输…

拥抱开源,构建未来:王嘉树与 TDengine 的开源之旅

在当代的技术浪潮中,开源文化不仅催生了无数创新技术,也为广大技术爱好者提供了一个展示才华、相互学习的平台。我们今天采访到的这位北京邮电大学电子工程学院的研究生,就是在这样的背景下,通过开源活动不断探索、学习并实现自我…

耐用充电宝有哪些?优质充电宝到底选哪个?良心推荐!

在电量即生产力的现今时代,如何为移动设备寻找一位最佳的伴侣呢?一款耐用、优质的充电宝无疑是你的不二之选。今天我们将带您揭开市场隐藏的一面,揭示哪些充电宝品牌真正代表了耐用与品质的标杆。让我们一起深入了解并选购最适合自己的充电宝…

合法二叉搜索树

题目链接 合法二叉搜索树 题目描述 注意点 无 解答思路 第一个思路是将中序遍历,并将遍历到的节点的值存储到队列中,根据队列先进先出的特点将每次弹出的元素与其前面的值进行比较,如果队列是按照从小到大进行排序的,说明该树…

CATIA入门操作案例——创成式曲面设计案例,吹风机的绘制,多截面曲面的绘制,曲面偏移和修剪

目录 引出画吹风机吹风机壳体多截面曲面吹风机后壳桥接曲面吹风机把手多截面曲面进行曲面的修剪绘制把手的后盖绘制内凹的圆曲面进入零件工作台,定义厚曲面绘制进气凹槽 总结异形弹簧新建几何体草图编辑,画一条样条线进行扫掠,圆心和半径画出…

基于机器学习的电池剩余使用寿命RUL预测

​代码较为简单。 import numpy as np # linear algebraimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)import os import matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline​import warningswarnings.filterwarnings(ignore) df…

2024年6月8日,骑行杨柳冲峡谷:一场心灵与自然的交响曲

引言:寻找生活的节奏在这个快节奏的时代,我们常常迷失在都市的喧嚣中,忘记了如何聆听内心的声音。2024年6月8日,我与一群志同道合的校卡骑行群骑友,踏上了前往杨柳冲峡谷的旅程,这不仅仅是一次简单的户外活…

C++ BFS相关题目

目录 图像渲染 岛屿数量 图像渲染 733. 图像渲染 vis就是标记1有没有被用过 符合条件的都放到队列里,每次出队列一个,判四个, 如果要改的值与当前的值相同直接返回 注意:image[x][y] prev要放在坐标判断的后面&#xff…

【数据分析】统计学基础及Python具体实现

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

检查平衡性

题目链接 检查平衡性 题目描述 注意点 平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1 解答思路 递归寻找每个节点作为根节点时是否是平衡树,对于任意一个节点,判断其是否是平衡树需要分别判断其左子树和右子树是…

【Echarts系列】平滑折线面积图

【Echarts系列】平滑折线面积图 序示例数据格式代码 序 为了节省后续开发学习成本,这个系列将记录我工作所用到的一些echarts图表。 示例 平滑折线面积图如图所示: 数据格式 data [{name: 2020年,value: 150},{name: 2021年,value: 168},{name: 2…

edge的GPU占很大内存处理

到设置中,把对视频的这2个增强关掉,重启浏览器之后就正常多了