当前位置: 首页 > news >正文

vue框架学习 -- 日历控件 FullCalendar 使用总结

最近在项目中要实现日期排班的功能,正好要用到日历视图的控件,经过对比发现,vue 中 使用 FullCalendar 可以实现相关需求,下面对使用过程做一个总结。

一. 引入 FullCalendar 控件

package.json 中添加相关依赖

"dependencies": {"@fullcalendar/bootstrap5": "^6.1.15","@fullcalendar/core": "^6.1.15","@fullcalendar/daygrid": "^6.1.15","@fullcalendar/interaction": "^6.1.15","@fullcalendar/list": "^6.1.15","@fullcalendar/timegrid": "^6.1.15","@fullcalendar/vue": "^6.1.15",}

二. 页面中引入 FullCalendar

<template><div class="common-list"><!-- 日历控件 --><div ><FullCalendar :options="calendarOptions" /></div></div>
</template>

相应的 javascript 方法说明

<script>
import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'
import timeGridPlugin from '@fullcalendar/timegrid'
import listPlugin from '@fullcalendar/list'import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap-icons/font/bootstrap-icons.css';
import bootstrap5Plugin from '@fullcalendar/bootstrap5';
import { formatDate} from '@/utils'
import {listDutyPlanCalendar,
} from "@/api/duty/zbrl";
export default {components: {FullCalendar // make the <FullCalendar> tag available},data() {return {// 搜索参数queryParams: {pageNum: 1,pageSize: 100,startDate: '',endDate: '',},// 日历配置calendarOptions: {plugins: [dayGridPlugin, interactionPlugin, bootstrap5Plugin, listPlugin, timeGridPlugin],locale: 'zh-cn',themeSystem: 'bootstrap5',headerToolbar: {end: 'today prev next dayGridMonth dayGridWeek',},// 周一从星期一开始,0为星期日// firstDay: 1,buttonText: {today: '今天',month: '月',week: '周'},// 在日历的初始化完成后执行的事件datesSet: this.handleDateChange,/*customButtons: {myCustomButton: {text: 'custom!',click: function() {alert('Clicked the custom button in v6!');}}},*/views: ['dayGridMonth', 'dayGridWeek', 'dayGridDay'],initialView: 'dayGridMonth',//日期点击事件dateClick: this.handleDateClick,events: [{ title: 'event 1', date: '2024-09-01'},{ title: 'event 2', date: '2024-09-01' },{ title: 'event 3', date: '2024-09-03' },],// 添加事件点击处理eventClick: function(info) {// 这里是点击事件时执行的代码// alert('你点击了事件: ' + info.event.title);// 你可以在这里执行更多逻辑,比如打开模态框显示事件详情},}}},created() {this.handleQuery();},methods: {//查询接口数据handleQuery() {listDutyPlanCalendar(this.queryParams).then(res => {if(res.code === 200){this.calendarOptions.events = res.rows;}console.log(res)console.log(this.calendarOptions.events)});},// 当日历的日期范围发生变化时,监听事件handleDateChange(info) {if(this.queryParams){console.log(this.queryParams.startDate)this.queryParams.startDate = formatDate(info.start).substring(0, 10);this.queryParams.endDate = formatDate(info.end).substring(0, 10);this.handleQuery();}// 当日历的日期范围发生变化时(包括翻页操作),这个函数会被调用// console.log('新的日期范围:', info.startStr, '到', info.endStr);},resetQuery() { },//某个日期点击监听方法handleDateClick(arg) {console.log(arg)alert('date click! ' + arg.dateStr)},}
}
</script>

三. 最终页面实现效果

在这里插入图片描述

四. 功能点实现总结

1. calendarOptions 详解

FullCalendar 的 calendarOptions 是一个非常重要的配置项,它包含了初始化 FullCalendar 日历所需的各种设置和参数。以下是对 calendarOptions 中一些常见属性的详细解析:

1. 插件列表(plugins)

作用:定义 FullCalendar 需要加载的插件。FullCalendar 的许多功能都是通过插件来实现的。
示例:

plugins: [dayGridPlugin, timeGridPlugin, interactionPlugin]

这里加载了日视图(dayGridPlugin)、时间网格视图(timeGridPlugin)和交互插件(interactionPlugin),后者允许用户拖拽、缩放等交互操作。

2. 默认视图(initialView)

作用:设置日历初始化时显示的视图。
示例:

initialView: 'dayGridMonth'

这将日历的初始视图设置为月视图,并以日网格(dayGrid)的形式展示。

3. 语言(locale)

作用:设置日历的语言。FullCalendar 支持多种语言,通过设置 locale 属性可以实现界面的国际化。
示例:

locale: 'zh-cn'

这将日历的语言设置为中文。

4. 头部工具栏(headerToolbar)

作用:自定义日历头部的工具栏布局和按钮。
示例:

headerToolbar: {  left: 'today prev,next',  center: 'title',  right: 'dayGridMonth,timeGridWeek,timeGridDay'  
}

这将在日历头部左侧放置“今天”、“上一个”、“下一个”按钮,中间显示标题,右侧放置月视图、周视图和日视图的切换按钮。

5. 按钮文本(buttonText)

作用:自定义头部工具栏中各按钮的显示文本。
示例:

buttonText: {  today: '今天',  month: '月',  week: '周',  day: '日',  prev: '‹',  next: '›'  
}

这将把头部工具栏中的按钮文本替换为中文或自定义符号。

6. 周起始日(firstDay)

作用:设置一周中哪一天作为起始日。FullCalendar 默认周日为一周的开始,但可以通过此属性进行自定义。
示例:

firstDay: 1

这将把周一设置为一周的开始(注意:FullCalendar 中周日是 0,周一是 1,以此类推)。

7. 事件(events)

作用:定义日历中要展示的事件数组。每个事件对象可以包含日期、标题、描述等信息。
示例:

events: [  { title: '事件1', date: '2024-09-28' },  { title: '事件2', start: '2024-09-29T10:00:00', end: '2024-09-29T12:00:00' }  
]
8. 其他常用属性

aspectRatio:设置日历单元格的宽高比。
eventColor:设置所有日历事件的背景颜色。
editable:是否允许用户通过拖拽、缩放等方式修改事件。
selectable:是否允许用户选择日历上的日期范围。
eventClick:点击事件时触发的回调函数。
dateClick:点击日期时触发的回调函数。

2. 日历中添加 日期点击事件

//日期点击事件dateClick: this.handleDateClick,

相关文章:

  • 汇总3个工作必备的Python自动化代码!完整代码分享!
  • 微信小程序开发系列之-实战搭建一个简单的待办事项小程序
  • Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长
  • 使用AT command 修改手机APN
  • GB/T28181规范解读和技术实现
  • ArduSub程序学习(11)--EKF实现逻辑①
  • 鸿蒙 OS 开发单词打卡 APP 项目实战 20240922 笔记和源码分享
  • 数据链路层 ——MAC
  • 小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(3)嵌入式系统的存储体系
  • 便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考
  • 二、MySQL环境搭建
  • [sql-03] 求阅读至少两章的人数
  • R开头的后缀:RE
  • 从密码学看盲拍合约:智能合约的隐私与安全新革命!
  • some 牛课题
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6核心特性
  • express.js的介绍及使用
  • extract-text-webpack-plugin用法
  • Gradle 5.0 正式版发布
  • Hibernate最全面试题
  • in typeof instanceof ===这些运算符有什么作用
  • Python socket服务器端、客户端传送信息
  • Spring Boot快速入门(一):Hello Spring Boot
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 记录一下第一次使用npm
  • 批量截取pdf文件
  • 微信小程序开发问题汇总
  • 我从编程教室毕业
  • 再谈express与koa的对比
  • 《天龙八部3D》Unity技术方案揭秘
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 如何在招聘中考核.NET架构师
  • 组复制官方翻译九、Group Replication Technical Details
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • (2022 CVPR) Unbiased Teacher v2
  • (23)Linux的软硬连接
  • (Charles)如何抓取手机http的报文
  • (二十三)Flask之高频面试点
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (南京观海微电子)——I3C协议介绍
  • (三)Honghu Cloud云架构一定时调度平台
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • *上位机的定义
  • ... 是什么 ?... 有什么用处?
  • .bashrc在哪里,alias妙用
  • .NET 8.0 发布到 IIS
  • .Net 代码性能 - (1)
  • .net经典笔试题
  • .NET设计模式(11):组合模式(Composite Pattern)