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

前言

本文分享fullcalendar用法,最后面提供代码下载

说到日程管理,基于JQuery的插件FullCalendar当之无愧,完整的API稳定和调用方式,非常易于扩展!
可以用于系统的个人历程管理,系统的任务日历列表.
支持按:月、周、日来查看,非常实用

FullCalendar插件下载

下载使用

下载好FullCalendar解压,里面包含了demo和必要的JS,CSS文件

我们打开Demo随便打开一个样例,得到以下必要的文件即可,其他都可以删掉

  • /fullcalendar.min.css
  • /fullcalendar.print.min.css
  • /lib/moment.min.js
  • /lib/jquery.min.js
  • /fullcalendar.min.js
  • /zh-cn.js

由于使用过程中有弹窗,这部分辅助我使用的是EasyUI的组件(你可以使用其他弹窗组件来做弹窗)

数据库结构

由于我们使用了数据保存,所以表的建立要根据官方的事件数据来建对应的数据库表用来存储一个日历事件信息的标准对象,其中只有titlestart是必须的

但是我们可以全建来获得完整的数据支持

属性描述
id可选,事件唯一标识,重复的事件具有相同的id
title必须,事件在日历上显示的title
allDay可选,true or false,是否是全天事件。
start必须,事件的开始时间。
end可选,结束时间。
url可选,当指定后,事件被点击将打开对应url。
className指定事件的样式。
editable事件是否可编辑,可编辑是指可以移动, 改变大小等。
source指向次event的eventsource对象。
color背景和边框颜色。
backgroundColor背景颜色。
borderColor边框颜色。
textColor文本颜色。
CREATE TABLE [dbo].[SysCalendarPlan](
    [Id] [varchar](50) primary key,
    [Title] [varchar](500) NOT NULL,
    [PlanContent] [varchar](500) NULL,
    [BeginDate] [datetime] NOT NULL,
    [EndDate] [datetime] NOT NULL,
    [CreateTime] [datetime] NOT NULL,
    [Url] [varchar](250) NULL,
    [Color] [varchar](50) NULL,
    [TextColor] [varchar](50) NULL,[Editable] [varchar](50) NULL,
)

至此,数据库的表结构就已经建立完成

前端代码

新建一个MVC5项目(普通MVC没有权限验证)

删掉Home视图,新建一个空的Index.cshtml页面,引入必要的JS,这就是我们的主页了

Index.cshtml代码

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="../../Scripts/jquery.min.js"></script>
    <script src="../../Scripts/jquery.easyui.min.js"></script>
    <link href="../../Content/metro/easyui.css" rel="stylesheet" />
    <link href="~/Scripts/fullcalendar/fullcalendar.css" rel="stylesheet" />
    <script src="~/Scripts/fullcalendar/moment.min.js"></script>
    <script src="~/Scripts/fullcalendar/fullcalendar.min.js"></script>
    <script src="~/Scripts/fullcalendar/zh-cn.js"></script>
    <script>
      var editEvent = null;
        $(function () {
   
            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay,listWeek'
                },
                weekNumbers: true,
                weekNumbersWithinDays: true,
                weekNumberCalculation: 'ISO',
                editable: true,
                navLinks: true, // can click day/week names to navigate views
                defaultView:'month',
                contentHeight:540,
                selectable: true,
                selectHelper: true,//在agenda视图下选择时会带上对应的时间
                dragOpacity: 0.5, //Event被拖动时的不透明度
            });
        });
    </script>
</head>
<body>
   <div id="calendar" style="margin-top:10px;margin-left:5px"></div>
</body>
</html>

添加从例子中引用的JS的代码,F5运行一下,效果已经出来了!

展示逻辑代码

一、将表添加到EF(助于我们快速开发数据)

新建EF并加入表SysCanlendarPlan

二、插入几条模拟数据

USE [TestDB]
GO
/****** Object:  Table [dbo].[SysCalendarPlan]    Script Date: 07/25/2017 16:11:00 ******/
INSERT [dbo].[SysCalendarPlan] ([Id], [Title], [PlanContent], [BeginDate], [EndDate], [CreateTime], [Url], [Color], [TextColor], [Editable]) VALUES (N'201706291423265580000cb3f24cb11', N'测试1', N'测试内容1', CAST(0x0000A7B100000000 AS DateTime), CAST(0x0000A7B200000000 AS DateTime), CAST(0x0000A7BB00000000 AS DateTime), NULL, N'#3a87ad', N'#ffffff', N'true')
INSERT [dbo].[SysCalendarPlan] ([Id], [Title], [PlanContent], [BeginDate], [EndDate], [CreateTime], [Url], [Color], [TextColor], [Editable]) VALUES (N'201706291423265580000cb3f24cb24', N'测试', N'测试内容', CAST(0x0000A7A700000000 AS DateTime), CAST(0x0000A7A800000000 AS DateTime), CAST(0x0000A7BB00000000 AS DateTime), NULL, N'#3a87ad', N'#ffffff', N'true')

三、编写Ajax请求方法

Json格式根据官方demo提供的json数据格式必须一致

新建json格式的模型,放到Models下即可

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 日程管理.Models
{
    public class CalendarPlanJsonModel
    {
        public string id { get; set; }
        public string title { get; set; }//he text on an event's element
        public string content { get; set; }//content
        public string color { get; set; }//Sets an event's background and border color 
        public string textColor { get; set; }//Sets an event's text color
        public DateTime start { get; set; }//The date/time an event begins
        public DateTime end { get; set; }//The exclusive date/time an event ends
        public string url { get; set; }//A URL that will be visited when this event is clicked by the user
    }
}

查询,新增,修改的Ajax请求方法

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using 日程管理.Models;

namespace 日程管理.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        //读取事件列表
        [HttpGet]
        public JsonResult GetList(DateTime start, DateTime end)
        {
            using (DBContainer db = new DBContainer())
            {
                List<SysCalendarPlan> list = db.SysCalendarPlan.ToList();
                var json = (from r in list
                            select new CalendarPlanJsonModel()
                            {
                                id = r.Id,
                                title = r.Title,
                                content = r.PlanContent,
                                start = r.BeginDate,
                                end = r.EndDate,
                                url = r.Url,
                                color = r.Color,
                                textColor = r.TextColor
                            }).ToArray();
                return Json(json, JsonRequestBehavior.AllowGet);
            }
        }

        //创建新事件
        public ActionResult Create(string start, string end)
        {
            DateTime beginDate = new DateTime();
            DateTime endDate = new DateTime();
            if (start == null)
            {
                beginDate = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                endDate = Convert.ToDateTime(DateTime.Now.AddDays(1).ToShortDateString());
            }
            else
            {
                beginDate = Convert.ToDateTime(start);
                endDate = Convert.ToDateTime(end);
            }


            SysCalendarPlan model = new SysCalendarPlan()
            {
                BeginDate = beginDate,
                EndDate = endDate
            };
            return View(model);
        }

        [HttpPost]
        public JsonResult Create(SysCalendarPlan model)
        {
            using (DBContainer db = new DBContainer())
            {
                model.Id = DateTime.Now.ToString("yyyyMMddHHmmssfffffff");
                model.CreateTime = DateTime.Now;
                model.Editable = model.Editable == null ? "false" : model.Editable;
                SysCalendarPlan entity = new SysCalendarPlan();
                entity = new SysCalendarPlan();
                entity.Id = model.Id;
                entity.Title = model.Title;
                entity.PlanContent = model.PlanContent;
                entity.BeginDate = model.BeginDate;
                entity.EndDate = model.EndDate;
                entity.CreateTime = model.CreateTime;
                entity.Url = model.Url;
                entity.Color = model.Color;
                entity.TextColor = model.TextColor;
                entity.Editable = model.Editable;
                db.Set<SysCalendarPlan>().Add(entity);
                if (db.SaveChanges() > 0)
                {
                    return Json("1");
                }
                else
                {
                    return Json("0");
                }
            }
        }


        //修改事件

        public ActionResult Edit(string id)
        {
            using (DBContainer db = new DBContainer())
            {
                SysCalendarPlan entity = db.SysCalendarPlan.SingleOrDefault(a=>a.Id==id);
                return View(entity);
            }
        }

        [HttpPost]
        //[SupportFilter]
        public JsonResult Edit(SysCalendarPlan model)
        {

            using (DBContainer db = new DBContainer())
            {
                SysCalendarPlan entity = db.SysCalendarPlan.SingleOrDefault(a => a.Id == model.Id);
                entity.Title = model.Title;
                entity.PlanContent = model.PlanContent;
                entity.BeginDate = model.BeginDate;
                entity.EndDate = model.EndDate;
                entity.CreateTime = model.CreateTime;
                entity.Url = model.Url;
                entity.Color = model.Color;
                entity.TextColor = model.TextColor;
                entity.Editable = model.Editable;
                db.Set<SysCalendarPlan>().Attach(entity);
                db.Entry(entity).State = EntityState.Modified;
                if (db.SaveChanges() > 0)
                {
                    return Json("1");
                }
                else
                {
                    return Json("0");
                }
            }
        }
    }
}
控制器的代码

 

四、来自前端的请求

请求之前我们需要了解一下这个插件的事件,方便我们调

 http://www.cnblogs.com/ymnets/p/7052818.html

虽然很多种事件,但是下面总结几个常用时间即可

 

  • 1.select 选择日期触发(弹出新增的框[新增])
  • 2.eventDrop 拖拽触发(拖动改变日期或者延长缩短[修改])
  • 3.eventClick 点击事件(进一步查看明细或者[修改])
  • 4.eventDrop 移动事件时候触发(直接改变日期[修改])

 

  <script>
      var editEvent = null;
        $(function () {
            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay,listWeek'
                },
                weekNumbers: true,
                weekNumbersWithinDays: true,
                weekNumberCalculation: 'ISO',
                editable: true,
                navLinks: true, // can click day/week names to navigate views
                defaultView:'month',
                contentHeight:540,
                selectable: true,
                selectHelper: true,//在agenda视图下选择时会带上对应的时间
                dragOpacity: 0.5, //Event被拖动时的不透明度
                droppable: true,
                events: {
                    //加载数据
                    url: '/Home/GetList',
                    error: function () {
                        alert("请求错误");
                    }
                },
                select: function (start, end) {
                    console.log('选择日期触发');
                },
                eventDrop: function (event, dayDelta, revertFunc) {
                    console.log('eventDrop --- start ---');
                    console.log('eventDrop被执行,Event的title属性值为:', event.title);
                    if (dayDelta._days != 0) {
                        console.log('eventDrop被执行,Event的start和end时间改变了:', dayDelta._days + '天!');
                    } else if (dayDelta._milliseconds != 0) {
                        console.log('eventDrop被执行,Event的start和end时间改变了:', dayDelta._milliseconds / 1000 + '秒!');
                    } else {
                        console.log('eventDrop被执行,Event的start和end时间没有改变!');
                    }
                    //revertFunc();
                    console.log('eventDrop --- end ---');
                },
                eventClick: function (event, element) {
                    //点击事件触发
                    console.log("点击事件触发");
                    console.log(event);
                },
                eventDrop: function (event, dayDelta, revertFunc) {
                    //移动事件时候触发
                    console.log("移动事件时候触发");
                    console.log(event);
                }
            });
        });
    </script>

实现

到这里已经分解了所有,剩下来只剩下实现!具体实现我们就参考源码代码吧!

代码下载

 链接:http://pan.baidu.com/s/1pKD7AFh 密码:skme

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值