FullCanendar V5.4使用

场景:纺纱企业的维保计划编制及调整,点击日期可以添加计划,通过拖动事件可以调整计划。

从12月16日拖动到12月17日后提示是否要调整计划,点击确定自动修改日期等相关信息,如果点击取消则事件还原到12月16日。

点击计划的事件后弹出编辑窗口,输入保养日期及周期

考虑之前使用旧版本函数及参数都和新版本不一致,特此说明一下版本:FullCalendar V5.4.0、Bootstrap 3.3.6 

HTML文件引入Bootstrap css、fullcalendar包里面的main.css、jQuery.js、fullcalendar包里面的main.js\Locales-all.js

添加JS代码

document.addEventListener('DOMContentLoaded', function() {
        var initialLocaleCode = 'zh-cn'; //当前版本直接使用中文的,未使用其他语言的,这个可以查询其他博客
        var localeSelectorEl = document.getElementById('locale-selector');
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
            timeZone: 'local',
            headerToolbar: {
                left: 'prev,next today',
                center: 'title',
                right: 'dayGridWeek,dayGridMonth,listWeek' //'dayGridMonth,dayGridWeek,listWeek,timeGridWeek
              },
            initialView: 'dayGridWeek', //此处使用这个就是为了不显示时间,因为当前我的场景不需要展示时间
            firstDay:1,
            allDaySlot:true,
            locale: initialLocaleCode,
            buttonIcons: false, // show the prev/next text
            weekNumbers: true, //展示当前是第几周
            navLinks: true, // can click day/week names to navigate views
            editable: true,
            selectable: true,
            dayMaxEvents: true, // allow "more" link when too many events
            contentHeight:750, //设置日历主体内容的高度,不包括header部分,默认未设置,高度根据aspectRatio值自适应。
            aspectRatio:1.5,//设置日历单元格宽度与高度的比例。
            //点击事件的回调
            eventClick: function(info) {
                edit(info.event.id,info.event.status);
            },
            //点击没有事件单元格的回调,当前是点击后添加一个计划
            dateClick: function(info) {
                add(info.dateStr);
            },

           //拖动时间的回调,当前是拖动调整计划使用,需要明确function里面info相关属性
            eventDrop: function(info) {
                //var str = JSON.stringify(info);  //此处调试时比较有用,当时因为之前用的旧版本,新版本的搞不清这个info到底有什么属性,所以通过这样的方式输出所有属性。
                //console.log("str="+str);

                //询问框
                layer.alert('确认要调整计划?', {
                      btn: ['确定','取消'] //按钮
                      ,icon: 6    // icon
                      ,yes:function(index){
                          updatePlan(info); //事件拖动并且事件改变时触发
                          layer.close(index);
                      }
                     ,btn2:function(index){
                         info.revert();          //点击取消按钮后还原
                         layer.close(index);
                     }});
            },
            events: function(arg, callback) {  //此处的arg里面的参数也可以参照上面的那个info输出后进行研究,要把参数都明确什么意思
                $.ajax({
                    url:"/maintenance/spinningMaintenanceRecord/getMaintenancePlan",
                    type : "POST",
                    //下面的startDate必须用单引号,不能用双引号
                    data: {'startDate':formatDate(arg.startStr),'endDate':formatDate(arg.endStr)},
                    //contentType:"application/json;charset:utf-8",
                    cache:false,
                    dataType: "json",
                    success:function(data){
                           var events=[];
                           for(var i=0;i<data.length;i++){
                               events.push({
                                   id:data[i].id,
                                   title:data[i].title,
                                   start:data[i].start,
                                   allDay: true,
                                   //background:'none',//背景颜色。
                                   //color: '#01A8F7',// 背景和边框颜色。
                                   //textColor:'#01A8F7',// 文本颜色。
                                   status:data[i].maintenanceStatus,
                                   editable:data[i].editable //事件可编辑
                               });
                           }       
                           callback(events);
                    },
                    
                }); 
            },
            //html内容前置条件,如果没有这一句,自定义的html不生效,必须
            eventContent: function(arg, createElement) {
                var italicEl = document.createElement('span');
                italicEl.innerHTML = arg.event._def.title
                var arrayOfDomNodes = [italicEl]
                return {
                    domNodes: arrayOfDomNodes
                }
            }
        });
        calendar.render();
});
      

function formatDate(date) {   //格式化日期函数
      var d = new Date(date),
      month = '' + (d.getMonth() + 1),
      day = '' + d.getDate(),
      year = d.getFullYear();                 
      if (month.length < 2) 
          month = '0' + month;
      if (day.length < 2) 
          day = '0' + day;                 
      return [year, month, day].join('-');
}

function updatePlan(info){   //更新计划函数,info.event表示拖动后的事件
    $.ajax({
        url:"/maintenance/spinningMaintenanceRecord/updatePlan",
        type : "POST",
        //下面的startDate必须用单引号,不能用双引号
        data: {'maintenanceId':info.event.id,'newDate':formatDate(info.event.start)},
        //contentType:"application/json;charset:utf-8",
        cache:false,
        dataType: "json",
        success:function(data){
            if(data.code>0){
                layer.msg(data.msg);  
                info.revert();  //拖动调整计划失败返回
            }
        },
        
    });    
}

function add(today) {
    layer.open({
        type : 2,
        title : '增加',
        maxmin : true,
        shadeClose : false, // 点击遮罩关闭层
        area : [ '800px', '400px' ],
        content : '/maintenance/spinningMaintenanceRecord/add/'+today // iframe的url
    });
}

function edit(maintenanceId,status) {
    if(status!='SUCCESS'){
        layer.open({
            type : 2,
            title : '编辑',
            maxmin : true,
            shadeClose : false, // 点击遮罩关闭层
            area : [ '800px', '400px' ],
            content : '/maintenance/spinningMaintenanceRecord/edit/' + maintenanceId // iframe的url
        });
    }    
}
 

下载Fullcalendar V5.4.0 https://github.com/fullcalendar/fullcalendar/tree/v5.4.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值