了解Vue中日历插件Fullcalendar

实现效果如下图:

月视图
在这里插入图片描述

在这里插入图片描述
周视图
在这里插入图片描述
日视图
在这里插入图片描述

官方文档地址:Vue Component - Docs | FullCalendar

1、安装与FullCalendar相关的依赖项

npm install --save @fullcalendar/vue @fullcalendar/core @fullcalendar/daygrid @fullcalendar/timegrid @fullcalendar/list
npm install --save @fullcalendar/interaction
npm install --save @fullcalendar/core @fullcalendar/resource-timeline

2.使用日历的页面需要导入

import FullCalendar from "@fullcalendar/vue";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import listPlugin from "@fullcalendar/list";
import interactionPlugin from "@fullcalendar/interaction";
// import resourceTimelinePlugin from "@fullcalendar/resource-timeline";

完整代码

<template><div><div class="fc-toolbar"><div class="fc-left"><el-button-group><el-button @click="month"></el-button><el-button @click="week"></el-button><el-button @click="today"> 今天 </el-button></el-button-group></div><div class="fc-center"><el-button icon="el-icon-arrow-left" @click="prev"/><p class="title">{{ title }}</p><el-button icon="el-icon-arrow-right" @click="next" /></div><div><el-select v-model="type" style="margin-right: 20px" @change="handleType"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /></el-select><el-button class="search" style="margin-right: 20px" type="button" @click="addEvent">新增</el-button><el-button class="search" type="button" @click="search">查询</el-button></div></div><el-dialog title="添加日程" :visible.sync="dialogFormVisible" width="600px"><el-form :model="form"><el-form-item label="事件"><el-input v-model="form.content" autocomplete="off" placeholder="请输入事件"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="navConfirm">确 定</el-button></div></el-dialog><div v-if="showFullcalendar">加载数据中......</div><FullCalendar v-else id="calendar" ref="fullCalendar" class="demo-app-calendar" :options="calendarOptions"><template v-slot:eventContent="arg"><el-popover placement="top-start" title="标题" width="200" :visible-arrow="false" trigger="click"><i class="title">{{ arg.event.title }}</i><el-button @click="more(arg.event)"> 更多 </el-button><div slot="reference" class="popper-content"><span>{{ arg.timeText }}</span><i>{{ arg.event.title }}</i></div></el-popover></template><template v-slot:dayCellContent="arg">{{ arg.dayNumberText }}</template><template v-slot:resourceLabelContent="arg">{{ arg.resource.id }}</template></FullCalendar></div>
</template>
<script>import FullCalendar from "@fullcalendar/vue";import dayGridPlugin from "@fullcalendar/daygrid";import timeGridPlugin from "@fullcalendar/timegrid";import listPlugin from "@fullcalendar/list";import interactionPlugin from "@fullcalendar/interaction";// import resourceTimelinePlugin from "@fullcalendar/resource-timeline";let clickCount = 0;let prev = ""; // 上一次点击的dom节点export default {components: {FullCalendar, // make the <FullCalendar> tag available},data() {return {showFullcalendar: true,title: "",currentView: {},options: [{ value: "timeline", label: "resource-timeline" },{ value: "dategrid", label: "agenda" },],type: "dategrid",calendarOptions: {locale: "zh",timeZone: "UTC",plugins: [dayGridPlugin,timeGridPlugin,listPlugin,// resourceTimelinePlugin,interactionPlugin,],buttonText: {// 设置按钮today: "今天",month: "月",week: "周",dayGrid: "天",},initialView: "dayGridMonth", // 设置默认显示月,可选周、日resourceAreaWidth: 200,contentHeight: 600,slotMinWidth: 70,resourceOrder: "number",editable: true,dayMaxEvents: true, // allow "more" link when too many eventseventDurationEditable: true, // 可以调整事件的时间selectable: true, // 日历格子可选择nowIndicator: true, // 现在的时间线显示eventDisplay: "block", // 争对全天的情况下,以块状显示headerToolbar: false, // 隐藏头部的导航栏selectMirror: false,displayEventEnd: true, // like 08:00 - 13:00eventTimeFormat: {// like '14:30:00'hour: "2-digit",minute: "2-digit",meridiem: false,hour12: false, // 设置时间为24小时},events: [],eventColor: "#378006",allDayText: "全天",dateClick: this.handleDateClick, //点击日程事件eventClick: this.handleEventClick,  //点击日历中的某一日程select:this.handleDateSelect, // 监听用户选择的时间段,eventDrop:this.handleEventDrop,  //监听事件被拖动的操作eventResize:this.handleEventResize, //监听事件调整大小的操作resourceAreaHeaderContent: "Rooms",resources: [{id: "111",title: "asas",number: 1,},],schedulerLicenseKey: "GPL-My-Project-Is-Open-Source",resourceLabelContent(arg) {return {html: `<div>id: ${arg.resource.id}</div><div>title: ${arg.resource.title}</div>`,};},views: {customTimeLineWeek: {type: "resourceTimeline",duration: { weeks: 1 },slotDuration: { days: 1 },buttonText: "Custom Week",slotLabelFormat: {weekday: "long",// month: 'numeric',// day: 'numeric',omitCommas: true,},},customTimeLineMonth: {type: "resourceTimeline",duration: { month: 1 },slotLabelFormat: {// month: 'numeric',day: "numeric",// omitCommas: true,},},customGridWeek: {type: "timeGridWeek",dayHeaderFormat: {weekday: "long",},slotLabelFormat: {// 左侧时间格式hour: "2-digit",minute: "2-digit",meridiem: "lowercase",hour12: false, // false设置时间为24小时},},},// 切换视图调用的方法datesSet() { },},calendarApi: null,monthEvent: [{id: "1",resourceId: "1",title: "待办",start: "2024-01-04 09:00",end: "2024-01-04 18:00",color: "red",},{resourceId: "2",id: "2",title: "待办",start: "2024-01-15",color: "purple",},{ title: "待办", start: "2024-01-09" },{ title: "待办", start: "2024-01-17" },{ title: "待办", start: "2024-01-07" },{ title: "待办", start: "2024-01-07", color: "pink" },{ title: "待办", start: "2024-01-07" },{ title: "待办", start: "2024-01-07" },{id: "3",resourceId: "number_3",title: "待办",start: "20240111",end: "20240113",color: "blue",extendedProps: {description: "测试测试测试测试",},},{id: 4,title: "待办",start: "2024-01-15",extendedProps: {description: "test test test test test",},},],weekEvent: [{id: "4",resourceId: "4",title: "周待办",start: "2024-01-11",color: "red",},{id: "5",resourceId: "5",title: "待办1",start: "2024-01-04 10:00",end: "2024-01-04 18:00",color: "orange",},],dayDate:'',dialogFormVisible:false,form:{content:'',},selectInfo:{},};},mounted() {setTimeout(() => {this.showFullcalendar = false;this.$nextTick(() => {this.calendarApi = this.$refs.fullCalendar.getApi();this.title = this.calendarApi.view.title;this.getDtata();});}, 1000);},watch: {// 切换视图显示不同的事件"calendarApi.view.type"(newVal) {this.getDtata();},},methods: {// 监听用户选择的时间段,当用户选择了一段时间后会触发该回调,可以在这里处理创建新的日程。handleDateSelect(selectInfo) {console.log('selectInfo: ', selectInfo);this.selectInfo = selectInfo;this.form.content = '';// 用户选择了一个日期范围时触发this.dialogFormVisible = true;},// 用户拖动移动事件时触发handleEventDrop(dropInfo) {console.log('dropInfo: ', dropInfo);const updatedEvent = { ...dropInfo.event };updatedEvent.start = dropInfo.revertDuration ? dropInfo.oldEvent.start : dropInfo.event.start;updatedEvent.end = dropInfo.event.end;// 更新服务器上的事件或者重新排序你的事件数组// 示例:this.updateEventOnServer(updatedEvent);// 如果是在内存中维护事件,则更新本地数据const index = this.events.findIndex(e => e.id === updatedEvent.id);if (index !== -1) {this.events.splice(index, 1, updatedEvent);}},// 用户调整事件长度时触发handleEventResize(resizeInfo) {console.log('resizeInfo: ', resizeInfo);const updatedEvent = { ...resizeInfo.event };updatedEvent.end = resizeInfo.event.end;// 同样更新服务器或本地数据// 示例:this.updateEventOnServer(updatedEvent);const index = this.events.findIndex(e => e.id === updatedEvent.id);if (index !== -1) {this.events.splice(index, 1, updatedEvent);}},getDtata() {setTimeout(() => {this.calendarOptions.events =this.calendarApi.view.type === "dayGridMonth"? this.monthEvent: this.weekEvent;}, 200);},// 点击更多more(e) { console.log('more ', e)},//确认弹框按钮navConfirm(){this.dialogFormVisible = false;if (this.form.content) {this.calendarOptions.events.push({title: this.form.content,start: this.selectInfo.startStr,end: this.selectInfo.endStr,});// 更新日历视图以显示新添加的事件this.$refs.fullCalendar.getApi().addEvent({  //等同于 this.calendarApi.addEventtitle: this.form.content,start: this.selectInfo.startStr,end: this.selectInfo.endStr,});}},// 增加事件addEvent() {this.form.content = '';this.dialogFormVisible = true;// this.monthEvent},//点击日历中的某一日程handleEventClick(clickInfo) {console.log('clickInfo:', clickInfo);// 用户点击事件时触发,用于编辑或删除事件const event = clickInfo.event;console.log('Clicked on:', event.title);// 这里可以弹出模态框进行编辑或调用删除函数等操作},// 单击事件(日历中的某一天)handleDateClick(e) {this.dayDate = e.dateStr;if (e.dateStr !== prev) {clickCount = 0;}clickCount += 1;prev = e.dateStr;setTimeout(() => {if (clickCount === 2) {console.log("db click");} else if (clickCount === 1) {console.log("one click");}clickCount = 0;}, 300);},// 切换prev() {this.calendarApi.prev();this.title = this.calendarApi.view.title;},next() {this.calendarApi.next();this.title = this.calendarApi.view.title;},// 今天today(date, jsEvent, view) {// if (this.type === "timeline") {//   this.calendarApi.changeView("customTimeLineWeek");// } else {//   this.calendarApi.changeView("customGridWeek");// }this.calendarApi.today();this.title = this.calendarApi.view.title;this.calendarApi.changeView("timeGridDay");// this.calendarApi.today();// this.title = this.calendarApi.view.title;},// 月month() {if (this.type === "timeline") {this.calendarApi.changeView("customTimeLineMonth");} else {this.calendarApi.changeView("dayGridMonth");}this.calendarApi.today();this.title = this.calendarApi.view.title;},// 周week() {if (this.type === "timeline") {this.calendarApi.changeView("customTimeLineWeek");} else {this.calendarApi.changeView("customGridWeek");}this.calendarApi.today();this.title = this.calendarApi.view.title;},// 天day() {this.calendarApi.today();this.title = this.calendarApi.view.title;},// 查询search() {this.calendarApi.changeView("dayGrid", {start: "2022-07-07",end: "2022-07-09",});},// 选择时间线、日程handleType() {if (this.type === "timeline") {this.calendarApi.changeView("customTimeLineMonth");this.calendarOptions.slotLabelFormat = null;} else {this.calendarApi.changeView("dayGridMonth");}},},};
</script>
<style scoped>.demo-app {display: flex;min-height: 100%;font-family: Arial, Helvetica Neue, Helvetica, sans-serif;font-size: 14px;}.demo-app-sidebar {width: 300px;line-height: 1.5;background: #eaf9ff;border-right: 1px solid #d3e2e8;}.demo-app-sidebar-section {padding: 2em;}.demo-app-main {flex-grow: 1;padding: 3em;}.fc {/* the calendar root */max-width: 1100px;margin: 0 auto;}.fc-toolbar {width: 100%;margin: 30px auto;display: flex;flex: 1;justify-content: space-around;align-content: center;}.fc-center {/* height: 40px; */display: flex;align-content: center;}.fc-center .title {font-size: 16px;padding: 0 15px;font-weight: 700;/* height: 40px; *//* line-height: 40px; */}
</style>

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

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

相关文章

C++将信息输入到文件内

第一步检查文件是否打开&#xff0c;用到头文件&#xff1a; #include <fstream> #include <sstream> 文件打开的函数为 file.isopen() 信息输入到文件应该为 file << "" << value; 注意是file<< 如图 定义file ofstream f…

产品经理学习-产品运营《用户运营策略》

⽤户画像与⽤户运营策略 什么是用户画像 对产品运营而言&#xff0c;用户画像就是对用户的各种特征贴上标签通过这些标签将用户分成不同的用户群体 为用户提供有针对性的服务。 制作用户画像是为了专注和精准 使产品的服务对象更加聚焦&#xff0c;更加专注&#xff1b;根据产…

Rust - 可变引用和悬垂引用

可变引用 在上一篇文章中&#xff0c;我们提到了借用的概念&#xff0c;将获取引用作为函数参数称为 借用&#xff08;borrowing&#xff09;&#xff0c;通常情况下&#xff0c;我们无法修改借来的变量&#xff0c;但是可以通过可变引用实现修改借来的变量。代码示例如下&…

SAP S/4HANA 2023 Fully-Activated Appliance 虚拟机版介绍

注&#xff1a;市面上所有在售虚拟机均为拷贝本人所作的虚拟机&#xff0c;存在各种技术问题&#xff0c;请知悉。 SAP S4HANA 2023 FAA版本内置了四个Client&#xff1a; 1、000&#xff1a;SAP初始Client&#xff0c;原则上不能动&#xff1b; 2、100&#xff1a;只激活了US…

NG+WAF实现应用安全访问

一、基本概念 什么是waf&#xff1f; Web应用防火墙&#xff08;waf&#xff09;是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品&#xff0c;WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。 什么是ngx_lua_…

SpringMVC数据校验

导包 配置springmvc.xml <bean id"validator" class" org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name"providerClass" value"org.hibernate.validator.HibernateValidator ">…

App 设计工具中的回调

目录 创建回调函数 回调函数编程 回调输入参数 在回调函数之间共享数据 在多个组件之间共享回调 以编程方式创建和分配回调 在代码中搜索回调 更改回调或断开与回调的连接 删除回调 示例&#xff1a;具有滑块回调的 App 回调是在用户与 App 中的 UI 组件交互时执行的…

5G_系统同步机制(八)

BBU和RRU的同步机制 为什么要做到系统同步 在TDD模式下工作时&#xff0c;为了避免相邻小区之间的干扰&#xff0c;近距离的所有gNB在任何时间点都必须具有相同的传输方向(DL或UL)。这样做的必要条件是在BTS之间同步SFN (System Frame number)和time Slot。此外&#xff0c;由…

SystemC学习笔记(三) - 查看模块的波形

简述 波形在Simulation/Emulation中地位十分重要&#xff0c;尤其是在研发初期&#xff0c;只能通过波形来查看软件hang住的位置。 对于TLM来说&#xff0c;查看波形一般是指查看pvbus上的transaction&#xff0c;而对于SystemC本身来说&#xff0c;查看波形就是使用Gtkwave或…

决策树的分类

概念 决策树是一种树形结构 树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果 决策树的建立过程 1.特征选择&#xff1a;选取有较强分类能力的特征。 2.决策树生成&#xff1a;根据选择的特征生…

《ORANGE’S:一个操作系统的实现》读书笔记(三十五)内存管理(三)

内存管理到目前为止实现了fork()、exit()和wait()&#xff0c;而我们的目标是实现一个可以执行命令的shell&#xff0c;可无论Init进程fork出多少进程&#xff0c;它也都只是Init而已。所以我们还需要一个系统调用&#xff0c;它就是exec()&#xff0c;这篇文章就来记录exec()的…

最长公共前缀(Leetcode14)

例题&#xff1a; 分析&#xff1a; 我们可以先定义两个变量 i &#xff0c; j&#xff0c; j表示数组中的每一个字符串&#xff0c; i 表示每个字符串中的第几个字符。一列一列地进行比较&#xff0c;先比较第一列的字符&#xff0c;若都相同&#xff0c;则 i &#xff0c;继…

成功解决「MySQL问题1」启动mysql时:发生系统错误5拒绝访问

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; ✈️公众号 | 热爱技术的小郑 。文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G 教程资…

【数据结构】 顺序表的基本操作 (C语言版)

一、顺序表 1、顺序表的定义&#xff1a; 线性表的顺序存储结构&#xff0c;即将表中的结点按逻辑顺序依次存放在一组地址连续的存储单元里。这种存储方式使得在逻辑结构上相邻的数据元素在物理存储上也是相邻的&#xff0c;可以通过数据元素的物理存储位置来反映其逻辑关系。…

漫漫数学之旅009

文章目录 经典格言数学习题古今评注拓展学习&#xff08;一&#xff09;大数定理&#xff08;二&#xff09;伯努利级数 经典格言 真正的问题&#xff0c;不在于机器是否思考&#xff0c;而在于人们是否思考。——BF斯金纳&#xff08;B. F. Skinner&#xff09; BF斯金纳&…

2024首更---Web Service 教程

Web Services 简介 Web Services 可使您的应用程序成为 Web 应用程序。 Web Services 通过 Web 进行发布、查找和使用。 您应当具备的基础知识 在继续学习之前&#xff0c;您需要对下面的知识有基本的了解&#xff1a; HTMLXML 如果您希望首先学习这些项目&#xff0c;请在…

2024年华数杯国际赛A题:放射性废水处理建模 思路模型代码解析

2024年华数杯国际赛A题&#xff1a;放射性废水处理建模&#xff08;Radioactive Wastewater from Japan&#xff09; 一、问题描述 2011年3月&#xff0c;日本东海岸发生了地震&#xff0c;引发了福岛第一核电站事故&#xff0c;导致三个核反应堆熔毁&#xff0c;并在一场巨大…

[java基础揉碎]基本数据类型转换

介绍 当java程序在进行赋值或者运算时&#xff0c;精度小的类型自动转换为精度大的数据类型&#xff0c; 这个就是自动类型转换。 数据类型按精度&#xff08;容量&#xff09;大小排序为: 自动类型转换注意和细节 1.有多种类型的数据混合运算时&#xff0c;系统首先自动…

如何在浏览器上设置 VPN 网络虚拟专用网络

如何在DT浏览器上设置 VPN 网络 虚拟专用网络&#xff08;VPN&#xff09;是一种用公用网络架设专用网络的技术。如何在DT浏览器上设置 VPN 呢&#xff0c;先下载DT浏览器&#xff0c;建议在官方网站下载最新版&#xff0c;安装&#xff0c;在DT浏览器首页点更多&#xff0c;网…

php基础学习之变量

php使用变量的必要性 PHP 是一种动态网站开发的脚本语言&#xff0c;动态语言特点是交互性&#xff0c;会有数据的传递&#xff0c;而 PHP作为“中间人”&#xff0c;需要进行数据的传递&#xff0c;传递的前提就是 PHP 能自己存储数据(临时存储) php变量的使用 定义&#xf…