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

背景

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

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

问题清单

本系列的已解决的问题清单如下,还在持续更新中……

问题项说明
整体预览月、周、日、列表视图的预览
版本差异免费版的主要功能,收费版的附加功能
安装说明如何安装与基本使用
基本配置默认初始化配置情况与效果
配置语种界面显示为中文
设置周起始日按照中国习惯,将周一设为一周的起始
设置头部工具栏设置头部标题及按钮,变更默认配置,去除上一年下一年按钮,解决标题栏换行问题、上一个下一个按钮不显示问题
配置常用视图配置月、周、日视图和列表视图
配置周次打开显示周次开关,并自定义显示周次内容,由“W12”调整为“第12周”
设置主题风格以使用bootrap5主题风格为例,说明如何更改组件自带的主题(此处误区较多)
更改allDay显示配置allDay显示为中文
事件增删与展示在日历视图中进行事件的创建、修改与显示,通过点击和拖放来自动填充起止时间。
通过拖放调整起止时间在日历视图中通过拖放事件调整开始时间和结束时间
通过缩放调整起止时间在日历视图中通过缩放事件调整开始时间和结束时间
限制事件显示最大数量设置一个单元格显示最大数量,多出来的以“更多”方式聚合
调整单元格高度解决默认设置留下大量空白影响美观的问题
控制事件时间显示控制各视图中事件是否显示开始时间和结束时间
优化事件显示利用“全天”机制优化事件显示
控制事件数据加载自定义按钮,根据事件属性是已完成还是未完成,控制事件是否在视图中显示
开启视图间导航通过调整配置,开始各视图下的链接与快速导航
开启时间线显示开启当前时间线标识
设置工作时间设置工作时间与非工作时间
设置事件颜色根据事件自身属性或业务扩展属性,如优先级、重要程度、分类等设置不同的颜色
设置事件排序基于组件内置规则与约定,灵活控制事件的显示顺序
设置事件最小高度通过设置属性,避免自动缩放字体导致的不美观及字体过小查看不便的问题
按需加载事件按照视图显示的起止时间,去后端获取指定时间范围内数据,需要进行大量的二次开发,坑点多,实现复杂
为事件增加右键菜单通过二次开发,实现事件邮件菜单,可以通过菜单快速复制、删除事件
事件区域间拖动导致结束时间丢失问题修复事件在全天与非全天区域间拖动,组件会清空结束时间,自己补写处理逻辑解决
保持当前视图范围不变当我们在月底使用日历组件制定下个月计划和日程,或者安排下周的工作,新增或修改事件后,后端数据持久化后通过刷新页面的方式来让日历组件上的数据更新。这样存在的问题在于一旦刷新页面,则日历组件会“跳”回到当天日期,严重影响用户操作与用户体验。
从组件外拖拽事件至组件内部组件外拖放事件至FullCalendar内部,自动设置起止时间,坑点较多
隐藏全天区域不显示全天区域配置
设置可用时间段控制夜间休息期间时间段不显示
设置时间片设置时间段最小颗粒度
设置时间坐标显示设置时间坐标轴的颗粒度和显示格式
持续更新中……

整体预览

月视图

支持中文,并且把周一放在第一天。
image.png

周视图

image.png

日视图

image.png

列表视图

image.png

版本差异

官方提供了三个版本,其中标准版是MIT协议。
image.png
邮件技术支持我们不需要,打印功能的友好展现同样不需要。有差异的功能主要就是两个,一个是时间线视图,可自定义的水平时间轴和行形式的资源,即显示一个任务的当天或跨天情况。
image.png
这个功能其实还不错,但也不属于强需求,既然不免费,可以暂时不考虑。

另外一个是垂直资源视图,能够将资源显示为列,例如会议室预定系统,显示各会议室各时间段的预定情况。
image.png
以个人为对象的日程管理,不需要这方面的功能。

安装

在vscode终端中执行以下命令安装日历组件相关的包。

pnpm install  @fullcalendar/core  @fullcalendar/vue3 

image.png

使用

初始配置

按照官方示例https://fullcalendar.io/docs/vue,写了一个初始化页面,源码如下:

<template>
  <FullCalendar :options="calendarOptions" />
</template>

<script>
import FullCalendar from '@fullcalendar/vue3'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'

export default {
  name: 'ListByCalendar',
  components: { FullCalendar },
  data() {
    return {
      calendarOptions: {
        plugins: [dayGridPlugin, interactionPlugin],
        initialView: 'dayGridMonth'
      }
    }
  }
}
</script>

<style scoped></style>

运行报错,提示dayGridPlugin未找到。
查阅官方文档有句话是Then install any additional FullCalendar plugins like @fullcalendar/daygrid,即所有的插件也都需要单独安装。

在vscode终端中执行以下命令安装两个插件相关的包。

pnpm install  @fullcalendar/daygrid @fullcalendar/interaction 

然后,组件可以正常加载了,如下图所示
image.png
界面不怎么美观,默认显示语种是英文,右上角切换上一个月和下一个月按钮就是两个黑块。

注意:
Vue 中“属性”(通过 v-bind 或 :)与“事件”(通过 v-on 或 @)是不同的概念。 对于 FullCalendar 二次封装出来的Vue组件,属性和事件之间没有区别, 都是作为键值对传递到主选项对象options中。
接下来就是通过配置选项进行调整。

设置中文语种

第一件要做的事情,就是把界面调整为中文。
关于vue版本的说明,只有一页简要介绍https://fullcalendar.io/docs/vue,并没有各属性的详细说明,而其他部分说明是针对日历组件主体的,需要自己去摸索对应。
例如,语种的变更,官方文档是针对ES6的,跟vue 组件使用方式并不一样。

import { Calendar } from '@fullcalendar/core';
import esLocale from '@fullcalendar/core/locales/es';
...
let calendar = new Calendar(calendarEl, {
  locale: esLocale
});

参照上面,推测option中传入locale: 'zh-cn’的键值对就行了,但是是否需要类似引入
import esLocale from ‘@fullcalendar/core/locales/es’;并不确定。

  calendarOptions: {
        // 插件列表
        plugins: [dayGridPlugin, interactionPlugin],
        // 默认视图
        initialView: 'dayGridMonth',
        // 语言
        locale: 'zh-cn'
}

动手试了下,不需要再引入语言包了,封装的vue组件中应该已经内置了。
但是汉化不完整,标题和周如期变成了中文,右上角的按钮依旧是英文。
image.png
补充说明:通过后面的深入探索,将语种配置为中文后,右上角按钮依旧显示是英文,其原因是日历组件并没有把所有的显示元素都放到了语言包里,而是提供了自定义配置功能,后续有详细说明。

  • 47
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯,行者无疆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值