引入步骤

1、安装插件

yarn add @fullcalendar/vue @fullcalendar/core @fullcalendar/daygrid @fullcalendar/interaction @fullcalendar/list @fullcalendar/timegrid

2、引入组件

html代码

<template><div><FullCalendar ref="myCalendar" :options="calendarOptions"/></div>
</template>

js代码

import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'
import timeGridPlugin from '@fullcalendar/timegrid'
import interactionPlugin from '@fullcalendar/interaction'
import listPlugin from '@fullcalendar/list'
export default {components: {FullCalendar // make the <FullCalendar> tag available},data() {return {calendarOptions: {plugins: [ dayGridPlugin,interactionPlugin,timeGridPlugin,listPlugin ],initialView: 'timeGridWeek',events: [{ title: 'event 1', date: '2020-06-01',classNames:['cal'] },{ title: 'event 2', date: '2020-06-02',classNames:['inv'] },{ title: '公司会议', start: '2020-06-22 09:05', end:'2020-06-23 12:00',classNames:['cal'] },{ title: '部门会议', start: new Date(),classNames:['cal'] },],headerToolbar: {left: 'title prev,next',center: '',right: 'today dayGridMonth,timeGridWeek,listDay'},buttonText:{today:'今天',month:'月视图',week:'周视图',day:'日视图',list:'列表视图',},displayEventEnd: true, //所有视图显示结束时间dateClick:this.handleDateClick,allowContextMenu:false,editable: true,selectable: true,selectMirror: true,dayMaxEvents: true,weekends: true,}}
}

css样式   scss

.fc-daygrid-event{.fc-daygrid-event-dot{display:none;}&.cal{padding-left:5px;color:#333;border-radius: 0;border:none;border-left: 2px solid #5289FF;background-color:#EEF3FF;.fc-event-title{color:#333;}}&.inv{padding-left:5px;color:#333;border-radius: 0;border:none;border-left: 2px solid #FFA327;background-color:#FFF6E9;.fc-event-title{color:#333;}}
}
.fc-timegrid-event{.fc-daygrid-event-dot{display:none;}&.cal{padding-left:5px;color:#333;border-radius: 0;border:none;border-left: 2px solid #5289FF;background-color:#EEF3FF;.fc-event-title{color:#333;}}&.inv{padding-left:5px;color:#333;border-radius: 0;border:none;border-left: 2px solid #FFA327;background-color:#FFF6E9;.fc-event-title{color:#333;}}
}
.fc .fc-toolbar-title{display: inline-block;vertical-align: middle;
}
.fc-theme-standard td{border-top-color:transparent;
}

效果图:

-------------------------------------------------------------------------------------------------------------

扩展--------------------------------------------

1、月视图增加农历

calendarOptions中增加views数据;

通过dayCellContent来设置日期里显示的数据;

引入calendar.js计算农历 https://github.com/jjonline/calendar.js;

import calenderFormate from "../utils/calendar" //农历计算方法
import {formatDate} from "../utils/index" //将日期对象转换成 2020-01-01 格式的日期//data中calendarOptions修改:
calendarOptions: {views:{//对应月视图dayGridMonth:{displayEventTime:false,//是否显示时间dayCellContent(item){let _date=formatDate(item.date).split('-')let _dateF=calenderFormate.solar2lunar(_date[0],_date[1],_date[2])return {html:`<p><label>${_dateF.cDay}</label><span>${_dateF.IDayCn}</span></p>`}},}},
}

效果如下图:

2、周视图增加农历

在前面的基础上修改views;

在dayHeaderContent中设置显示数据;

views: {//对应周视图调整timeGridWeek:{slotMinTime:"09:00",//周视图开始时间slotMaxTime:"20:00",//周视图结束时间displayEventTime:false,//是否显示时间dayHeaderContent(item){let _date=formatDate(item.date).split('-')let _dateF=calenderFormate.solar2lunar(_date[0],_date[1],_date[2])return {html:`<h3>${_dateF.ncWeek.slice(2)}</h3><p><label>${_dateF.cDay}</label><span>${_dateF.IDayCn}</span></p>`}}}
}

效果图如下

*注 周视图中配置了dayHeaderContent后,如果还有日视图,但是日视图没有特殊配置会出现一个bug:从周视图切到日视图,日视图的header会变成undefined,而不是正常的“星期...”

解决方法:在日视图的配置中也给出 dayHeaderContent的配置即可(具体原因没有深入探索)。

timeGridDay:{dayHeaderContent(item){return {html:`<h3>${item.text}</h3>`}}
}

非常感谢网友 weixin_40712964 反馈这个bug!

3、修改周视图时间点显示格式为24小时制

calendarOptions中增加设置属性slotLabelFormat

slotLabelFormat:{hour: '2-digit',minute: '2-digit',meridiem: false,hour12: false //设置时间为24小时
},

效果图如下所示:

4、calendarOptions中其他设置

calendarOptions:{select: this.handleDateSelect,//选择日期事件,可响应一个新建日程的事件eventClick: this.handleEventClick,//点击事件对象事件schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives'//试用证书
}//methods中定义相应的事件
handleDateSelect(selectInfo) {let title = prompt('Please enter a new title for your event')let calendarApi = selectInfo.view.calendarcalendarApi.unselect() // clear date selectionif (title) {calendarApi.addEvent({id: createEventId(),title,start: selectInfo.startStr,end: selectInfo.endStr,allDay: selectInfo.allDay,classNames:['cal'] })}
},
handleEventClick(clickInfo) {if (confirm(`Are you sure you want to delete the event '${clickInfo.event.title}'`)) {clickInfo.event.remove()}
},

效果:

-----------------------------------------------------------------------------------------------------------

****修改源码,实现右键选择日期新建效果

修改node_modules\@fullcalendar\interaction文件夹中的main.js

在方法PointerDragging中增加代码

containerEl.addEventListener('contextmenu', (e)=>{e.preventDefault()this.handleMouseUp
});

修改isPrimaryMouseButton方法的判断逻辑

function isPrimaryMouseButton(ev) {return (ev.button === 0||ev.button ===2) && !ev.ctrlKey;
}

此时,鼠标右键的效果和鼠标左键效果一致,可以点击日期新建,也可以拖选日期新建。

-----------------------------------------------------------------------------------------------------------

****修改源码,解决IE9中报Intl未定义错误

1、下载Intl.js文件

地址:https://github.com/andyearnshaw/Intl.js/

将Intl.js-master\dist\Intl.complete.js文件放入public文件夹中

2、index.html中引入改文件

<head>
<script src="<%= BASE_URL %>Intl.complete.js"></script>
</head>

3、修改 node_modules\@fullcalendar\common\main.js文件。将Intl替换成IntlPolyfill并保存文件

-----------------------------------------------------------------------------------------------------------

****解决IE9中不支持classList

在 index.html文件前面增加如下代码

if (!("classList" in document.documentElement)) {Object.defineProperty(HTMLElement.prototype, 'classList', {get: function() {var self = this;function update(fn) {return function(value) {var classes = self.className.split(/\s+/g),index = classes.indexOf(value);fn(classes, index, value);self.className = classes.join(" ");}}return {add: update(function(classes, index, value) {if (!~index) classes.push(value);}),remove: update(function(classes, index) {if (~index) classes.splice(index, 1);}),toggle: update(function(classes, index, value) {if (~index)classes.splice(index, 1);elseclasses.push(value);}),contains: function(value) {return !!~self.className.split(/\s+/g).indexOf(value);},item: function(i) {return self.className.split(/\s+/g)[i] || null;}};}});}

此时,fullCalendar基本上可以在IE9上面运行。只不过IE9中不支持flex布局,可能会布局有点错乱。

vue fullCalendar的使用及扩展(支持农历显示及鼠标右键新建)相关推荐

  1. Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法打开文件”“文件格式或文件扩展名无效”...

    近段时间,陆续有两个同事先后出现同样的问题(在Excel多个版本都可能出现),问题描述: 当用鼠标右键在任意文件夹或电脑桌面"新建"→" Microsoft Excel ...

  2. FullCalendar增加节气、节日和农历显示

    https://m.aoh.cc/222.html 对比了各种日历插件后选择了FullCalendar,根据需求需要显示节假日和节气,顺带把农历也加上,网上看了FeiFei些的<fullCale ...

  3. Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法打开文件”“文件格式或文件扩展名无效”

    首先关于这个问题的原因有多种,我自己遇到过两次,一次是装完WPS后卸载完遇到的,第二次是重装office版本导致的. 网上的解决方案有很多种,我之前试过一个修改注册表的方法,看起来比较琐碎,后来看一篇 ...

  4. win10 怎样设置扩展屏幕不显示任务栏

    扩展显示器不显示任务栏 右键点击任务栏=====>选择任务栏设置======>找到[多个显示器]模块,把[在所有显示器上显示任务栏]关了 扩展器只显示打开了窗口的任务栏 右键点击任务栏== ...

  5. [vue] 怎么配置使vue2.0+支持TypeScript写法?

    [vue] 怎么配置使vue2.0+支持TypeScript写法? 配置ts-loader,tsconfig增加类型扩展,让ts识别vue文件vue文件中script里面换成ts写法, 需要增加几个t ...

  6. VUE fullcalendar 制作排班

    1.首先在已创建好的VUE项目下用使用命令行安装好fullcalendar依赖,整行输入enter就行 VUE2: npm install --save @fullcalendar/vue @full ...

  7. 使用 Vue.js 构建 VS Code 扩展

    使用 Vue.js 构建 VS Code 扩展 Visual Studio (VS) Code 是开发人员在日常任务中最喜欢使用的代码编辑器之一.它的构建考虑到了可扩展性.在某种程度上,VS Code ...

  8. EasyNVR摄像机网页直播中,推流组件EasyRTMP推送RTMP扩展支持HEVC(H.265)的方案

    众所周知,RTMP标准协议实际是不支持HEVC(H.265)编码格式的,同样,现行的H5标准里面,也没有对H.265的描述,所以,在很大程度上,H5网页浏览器是无法接入HEVC(H.265)的,但是, ...

  9. php7 memcached sasl,Mac安装memcached扩展支持sasl

    Mac安装memcached扩展支持sasl Memcached在服务以及扩展中,默认都是不支持用户名和密码,但是如果需要可以通过打开sasl来提供用户名和密码服务.所以在memcached的扩展与服 ...

最新文章

  1. 读《程序是怎样跑起来的》第5章
  2. idea中提交mapper.xml到svn后代码变灰色
  3. jQuery中json对象与json字符串互换
  4. ARC132D-Between Two Binary Strings【贪心】
  5. Shell Pyramid【数学+二分】
  6. mysql使用sql语句查询数据库所有表注释已经表字段注释
  7. PID参数整定法(1)
  8. npm install readline-sync:同步获取用户通过键盘输入的值(+算法实例)
  9. eclipse 下编写java code 比较好的设置和快捷键
  10. sql中判断日期大小_excel中text函数的方法,日期操作、数值转化,条件判断
  11. Oracle安装本地和远程两种方式的DISPLAY设置
  12. Excel练习线性回归
  13. python体验课讲什么_火遍朋友圈的Python小课体验起来是什么样的?
  14. jetson nano 3(Archiconda安装)
  15. Hibernate框架的入门级学习运用
  16. 宏碁笔记本安装固态硬盘
  17. 设计模式之禅学习笔记
  18. 区块链相关的关键概念
  19. IDEA中如何实现git的cherry-pick可视化操作?
  20. Centos GNOME桌面

热门文章

  1. Deepin的wine安装Windows的EXE程序,Deepin安装sqlyog,并且打包成deb程序。
  2. 智能质检产品Compliance:七大亮点满足企业多样化合规质检、SOP质检需求
  3. apollo scenario
  4. Zabbix —— 配置邮箱报警
  5. 简单说明c++inline函数
  6. CentOS 8 开机启动Nginx
  7. 【转载】ACM入门 .
  8. The service already exists
  9. Flame Graphs 火焰图安装与使用
  10. matlab 判断奇异矩阵,[转载]matlab错误 关于奇异矩阵