如果想用fullcalendar实现排班功能,或者日历、日程功能。那么只需要简单的几步:
这里先挂官网链接:
fullcalendar
fullcalendar官网下载链接
一、下载及简单配置
1、这里先明确你想要的是哪种形式式:fullcalendar 提供多种日历形式:
你们可以在官网首页的演示里面看到,在这里我主要讲一下我这里使用的两种实现:
(1)日历模式(只是用fullcalendar实现)

(2)时间轴模式(除了fullcalendar还用了官网的另一个插件叫schedule

在下载了fullcalendar之后将其引入你自己的项目,只需要进行很简单的配置就可以进行使用了。
这是需要运行插件的几个基本的配置,将其引入页面

<link rel='stylesheet' href='fullcalendar/fullcalendar.css' />
<script src='lib/jquery.min.js'></script>
<script src='lib/moment.min.js'></script>
<script src='fullcalendar/fullcalendar.js'></script>

此处需要注意的是jquery和moment的js必须在fullcalendar的js之前引入。如果你也想做时间轴模式的日历,并且已经下载了schedule的话,那么你需要在在页面中引入schedule的js和css
也就是说不但要引入fullcalendar的还要引入schedule的。

<link href='fullcalendar.css' rel='stylesheet' />
<link href='scheduler.css' rel='stylesheet' />
<script src='moment.js'></script>
<script src='jquery.js'></script>
<script src='fullcalendar.js'></script>
<script src='scheduler.js'></script>

之后在页面定义一个div 这个div会被渲染成日历插件比如我建立一个div

<div id='calendar'></div>

那么这时候就可以在js中进行配置了

$('#calendar').fullCalendar({
defaultView: 'month',
height: 'auto',
header: false,
displayEventTime:true,
displayEventEnd:true,
weekMode:"liquid",
aspectRatio:2,
allDaySlot:false,
timeFormat: 'HH:mm',
locale:'zh-cn',
})

这其中的一些配置根据自己的需求来定,具体官方文档
需要说明的是fullcalendar提供schedule的免费使用,不过在插件上会有水印。要想去掉水印可以在配置中加上这一句

schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives',

加在上面的配置里就可以。
这样运行之后你可以得到一个日历了

其中的defaultView是决定显示是月 还是年 或者是星期的。对于fullcalendar有以下几种取值:

month
basicWeek
basicDay
agendaWeek
agendaDay
listYear
listMonth
listWeek
listDay

如果你同时下载了schedule想要以小时来分割每日的时间那么你可以使用以下几种视图:

timelineDay
timelineWeek
timelineMonth
timelineYear

当然你也可以自定义视图 具体看文档自定义视图
这里我写一个例子

views: {
agendaFourDay: {
type: 'timeline',
duration: { days: 4 },
buttonText: '4 day'
},
},

这里我设置了一个4天的区间,表明在这种模式下,我的日历显示跨度为四天。然后设置defaultView:agendaFourDay,就好了。完整写就是这样。

$('#calendar').fullCalendar({
defaultView: 'agendaFourDay',
height: 'auto',
header: false,
displayEventTime:true,
displayEventEnd:true,
weekMode:"liquid",
aspectRatio:2,
allDaySlot:false,
timeFormat: 'HH:mm',
locale:'zh-cn',
views: {
agendaFourDay: {
type: 'timeline',
duration: { days: 4 },
buttonText: '4 day'
},
},
})

除了一开始在配置中写好,fullcalendar提供方法可以在js中更改视图,这样就能自定义按钮来控制视图了

$('#calendar').fullCalendar("changeView","basicDay ");

这样就把视图类型更改为basicDay 了。
当然上述配置也可以在js中修改。体现在代码里就是
上面是一个例子 底下是格式。

$('#calendar').fullCalendar('option','height',"600")
$('#calendar').fullCalendar('option','属性',"属性值")

改代码把日历的高度定义为600px。
还有很多种方法 参看文档的(method)
以下就完成了插件的基本配置。
二、往插件里传数据
以下是我向日历里传数据的方法

function drawCalendar(data) {
$('#calendar').fullCalendar( 'removeEvents');
var events=[];
for(var i=0, len=data.length; i<len; i++){
var timeDate=data[i];
//如果非整天时间,则显示时分数据
var isallDay=true;
if(timeDate["end"] !=null && timeDate["start"] != null){
if(moment(timeDate["start"].replace(" ","T")).format("HH:mm") !== "00:00" || moment(timeDate["end"].replace(" ","T")).format("HH:mm") !== "00:00"){
isallDay = false;
}
}
var item={
title : timeDate["title"],
start : timeDate["start"].replace(" ","T"),
className : "event-bar",
allDay : isallDay,
end : timeDate["end"]==null ? "" : timeDate["end"].replace(" ","T"),
backgroundColor : getCalendarColor(timeDate["user"]),
user : timeDate["user"],
startTime : timeDate["startTime"],
endTime : timeDate["endTime"]
};
events.push(item);
}
$('#calendar').fullCalendar( 'addEventSource', events );
}

其中

$('#calendar').fullCalendar( 'removeEvents');

是用来先移除原来控件中的事件的。
event是事件数组,事件就是图里面一条一条的,把item(下面的属性各项,有设置事件条的颜色的,也有设置开始结束时间的,与英文意思相同这里不多做解释,有不懂得可以在评论中问我)

var item={
title : timeDate["title"],
start : timeDate["start"].replace(" ","T"),
className : "event-bar",
allDay : isallDay,
end : timeDate["end"]==null ? "" : timeDate["end"].replace(" ","T"),
backgroundColor : getCalendarColor(timeDate["user"]),
user : timeDate["user"],
startTime : timeDate["startTime"],
endTime : timeDate["endTime"]
};

推入事件数组。
再用

$('#calendar').fullCalendar( 'addEventSource', events );

控件提供的方法把事件数组推入事件,就可以了在图上显示你的事件了。

补充:vue中的实现

<template>
<div class="work-day-manage">
<h3>工作日管理</h3>
<div class="calendar-wrap">
<FullCalendar defaultView="dayGridMonth"
ref="fullCalendar"
:header="{
left: 'dayGridMonth,timeGridWeek, timeGridDay',
center: 'title',
right: 'today prev,next,'
}"
:events="events"
:eventColor="'#378006'"
:eventBackgroundColor="'#378006'"
:eventResizableFromStart="true"
@eventClick="handleEventClick"
:editable="true"
:droppable="true"
:selectMirror="true"
:selectAllow="selectAllow"
:unselectAuto="false"
:weekends="true"
:selectable="true"
:locale="zhLocale"
@viewSkeletonRender="viewSkeletonRender"
@dateClick="handleDateClick"
@select="handleDateSelect"
:plugins="calendarPlugins"/> </div> </div>
</template> <script>
import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'
import timeGridPlugin from '@fullcalendar/timegrid'
import zhLocale from '@fullcalendar/core/locales/zh-cn'
import { formatDate } from '@/utils/common' export default {
data() {
return {
defaultView: 'dayGridMonth',
calendarPlugins: [dayGridPlugin, interactionPlugin, timeGridPlugin],
zhLocale,
events: [
// event data...
{
title: 'Event1',
start: '2019-08-26 15:00:23',
end: '2019-08-26 19:00:00',
startTime: '2019-08-26 15:00:23',
endTime: '2019-08-26 19:00:00',
allDay: false,
},
{
title: 'Event2',
start: '2019-08-21',
end: '2019-08-25',
allDay: false,
user: 'abc',
backgroundColor: 'orange',
className: 'event-bar',
startTime: '2019-08-21',
},
{
title: 'Event3',
start: '2019-08-21',
end: '2019-08-25',
allDay: false,
user: 'abc',
backgroundColor: 'orange',
className: 'event-bar',
startTime: '2019-08-21',
}
],
}
},
components: {
FullCalendar,
},
mounted() {
console.log(formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'))
},
methods: {
viewSkeletonRender(info) {
this.defaultView = info.view.type
},
selectAllow() {
if (this.defaultView === 'dayGridMonth') {
return false
}
return true
},
handleDateClick(arg) {
console.log(arg)
// arg.dayEl.style.backgroundColor = 'red'
// arg.dayEl.style.backgroundColor = 'red'
console.log(this.$refs.fullCalendar.getApi().getEvents())
},
handleDateSelect(arg) {
console.log(arg)
},
handleEventClick(eventInfo) {
console.log(eventInfo.event)
},
}
}
</script> <style lang="less">
@import '~@fullcalendar/core/main.css';
@import '~@fullcalendar/daygrid/main.css';
@import '~@fullcalendar/timegrid/main.css'; .work-day-manage {
padding: 0 20px;
.calendar-wrap {
width: 1000px;
height: 2000px;
.fc { }
}
}
</style>

js jquery 实现 排班,轮班,日历,日程。使用fullcalendar 插件的更多相关文章

  1. JS+Jquery自定义格式导出HTML为Word(下列插件同样可以用于Excel导出)

    这里的word导出主要采用了jquery.wordexport.js.FileSaver.js,做功能之前我也是找了很多网上的资料,里面涉及到js导出word的用的都是这个插件,只是在自定义样式这一块 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(86)-日程管理-fullcalendar插件用法

    前言 本文分享fullcalendar用法,最后面提供代码下载 说到日程管理,基于JQuery的插件FullCalendar当之无愧,完整的API稳定和调用方式,非常易于扩展!可以用于系统的个人历程管 ...

  3. fullcalendar插件日程管理

    日程管理-fullcalendar插件用法   前言 本文分享fullcalendar用法,最后面提供代码下载 说到日程管理,基于JQuery的插件FullCalendar当之无愧,完整的API稳定和 ...

  4. 详解 OneAlert 排班可以帮你做什么

    排班的存在,实质是通过有序安排,降低企业/团队人力成本,提升工作效率. 阅读导航(预计2min)   1. 详解排班功能 轮班机制 工作时间 双视图展示 灵活调整 2. 利用排班如何助力运维团队 排班 ...

  5. 使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling

    上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.NET ...

  6. 25个有用的jQuery日历和日期选取插件

    jQuery被认为是最好的JavaScript库,因为它简单易用.灵活,并有大量的插件.本文介绍25个非常不错的jQuery日历和日期选取插件,希望对各位有用. 1. Simple JQuery Da ...

  7. c++实现医院检验科排班程序

    c++实现医院检验科排班程序 1.背景: 医院急诊检验科24h×7×365值班.工作人员固定.採取轮班制度.确保24h都有人值班. 本文就通过C++实现编敲代码自己主动排班,并能够转为Excel打印. ...

  8. vue日历/日程提醒/html5本地缓存

    先上图 功能: 1.上拉日历折叠,展示周 2.左右滑动切换月 2.“今天”回到今天:“+”添加日程 3.localStorage存储日程 index,html <body> <div ...

  9. UI自动化之js\jquery的应用

    js\jquery的应用,有很多难以定位到的,可以通过js或者jquery来处理 目录 1.js 2.jquery 1.js 1.1js有5种定位,最后execute_script(js)来执行js ...

随机推荐

  1. 【方法】list<?> 两个list集合 查找不同元素,求差值

    //方法1 //自己声明list//思路,从list1中删除list2中相同的元素//使用循环遍历对比的方式删除//list1包含list2,list1多与list2//结束得出list1为不相同元素 ...

  2. MySQL比较时间(datetime)大小

    获取时间返回的秒数:strtotime('2019-05-10 00:00:00') 遇到一个业务功能需要将当前时间与数据库中的会议开始.结束时间进行比较,记录一下,方便下次用. 用unix_time ...

  3. FreeRTOS优先级翻转

    举例 //高优先级任务的任务函数 void high_task(void *pvParameters) { while(1) { vTaskDelay(500); //延时500ms,也就是500个时 ...

  4. MyBatis之Oracle、Mysql批量插入

    Mybatis中Dao层 public interface UsersMapper { public void insertEntitys(List<UserEntity> users); ...

  5. pip 和pip3的区别

    前言装完python3后发现库里面既有pip也有pip3,不知道它们的区别,因此特意去了解了一下. 解释先搜索了一下看到了如下的解释, 安装了python3之后,库里面既会有pip3也会有pip 1. ...

  6. Linux命令——du

    参考:10 Useful du (Disk Usage) Commands to Find Disk Usage of Files and Directories 前言 du(Disk Usage), ...

  7. LG4783 【模板】矩阵求逆

    P4783 [模板]矩阵求逆 题目描述 求一个$N\times N$的矩阵的逆矩阵.答案对$10^9+7$取模. 输入输出格式 输入格式: 第一行有一个整数$N$,代表矩阵的大小: 从第$2$行到第$ ...

  8. BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme

    [Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  9. 浏览器兼容问题--get/post

    问题描述: 人员通过发送位置在百度地图上显示出来.删除人员后,chrome地图上该人员也随即消失,但IE浏览器上仍旧存在.清除缓存后,才消失. 原因: IE下面同一个地址,不会多次去请求的.只有加一个 ...

  10. epoll版http服务器

    epoll是事件通知方式接收数据,效率比轮询要高 代码: import socket import re import select def client_server(new_client,recv ...