添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
首发于 SandBox
轻量级办公平台开发实录(11):FullCalendar

轻量级办公平台开发实录(11):FullCalendar

FullCalendar是一个基于jquery的日历插件,可用来管理日程安排,记录工作日志,它的功能很强大,本节主要是来介绍下FullCalendar的基本使用,更多用法可参考官方文档: fullcalendar.io/docs
本节使用sandboxOA v4.0版本:增加了 django admin配置,增加了dailreport app, 修改了数据库连接设置,使用sqlite3文件数据库(解决部分网友不熟悉mysql数据安装配置的苦恼)

1、克隆新版本到本地

进入要存放项目的目录,右键鼠标,选择 "Git Bash Here" ,打开git命令窗口,在Git Bash命令窗口输入:

$ git clone git@github.com:RobbieHan/sandboxOA.git

本节课程使用v4.0来创建dev分支,进入项目文件目录,运行 Git Bash:

$ git checkout -B dev v4.0

本地运行环境配置、使用pycharm运行项目请参考前面几节文章。

2、新建日程管理模板

使用pycharm打开项目,在sandboxOA/templates/目录下创建新的目录dailyreport(在pycharm下右键sandboxOA/templates/选择【New】→【Directory】在弹窗中输入dailyreport选择【ok】完成), 在新建的目录下创建HTML文件:myreport.html, 清空myreport.html 里面的内容, 新增模板目录结构如下:

/sandboxOA/                        # 项目根目录
    |-- templates                  # html模板文件存放目录
        |-- dailyreport
            -- myreport.html       # 清空文件内容

打开sandboxOA/templates/dailyreport/myreport.html,配置模板继承和模板内容:

{% extends "base-left.html" %}
{% load staticfiles %}
{% block css %}
{% endblock %}
{% block content %}
    <section class="content-header margin-bottom">
        <ol class="breadcrumb">
            <li><a href="">办公平台</a></li>
            <li><a href="#">我的日报</a></li>
    </section>
    <!-- Main content -->
    <section class="content">
    </section>
    <!-- /.content -->
{% endblock %}
{% block javascripts %}
{% endblock %}

模板标签说明: - {% extends %}: 关键标签,用来指定继承的模板,myreport.html 继承了 base-left.html模板。 - {% block %}: django提供了强大的模板继承功能,在理解{% block %} 标签前,先来回顾下我们的模板继承关系:

base-static.html → head-footer.html → base-left.html → myreport.html

我们在base-left.html 模板中写入了一个{% block content %}{% endblock %}, 相当于挖了一个坑,这个坑可以被子模版内容填充,所以我们在myreport.html文件中{% block content %}{% endblock %}里面写入的内容都将会被填充到父模对应的坑中。
base-static.html包含了一些基础的样式文件和js文件,同时还挖了两个坑,用来填充其他样式文件和js脚本,比如在myreport.html模板中我们需要使用到FullCalendar的样式文件,就可以写在{% block css %}{% endblock %}中。

3、创建我的日报视图

打开sandboxOA/apps/dailyreport/views.py,写入如下内容:

from django.shortcuts import render
from django.views.generic.base import View
from system.mixin import LoginRequiredMixin
class MyReportView(LoginRequiredMixin, View):
    def get(self, request):
        return render(request, 'dailyreport/myreport.html')

4、添加url

打开sandboxOA/sandboxOA/urls.py文件,添加如下内容:

......
from dailyreport import views
urlpatterns = [
    ......    
    url(r'^myreport/$', views.MyReportView.as_view(), name='myreport'),
]

到这里,使用pycharm运行项目后,就可以使用 127.0.0.1:8000/myreport 来访问我的日报页面了,不过现在页面还是空的。

5、使用FullCalendar

编辑sandboxOA/template/dailyreport/myreport.html文件:

{% extends "base-left.html" %}
{% load staticfiles %}
{% block css %}
    <link href="{% static 'plugins/fullcalendar/fullcalendar.min.css' %}" rel="stylesheet"/>
{% endblock %}
{% block content %}
    <section class="content-header margin-bottom">
        <ol class="breadcrumb">
            <li><a href="">办公平台</a></li>
            <li><a href="#">我的日报</a></li>
    </section>
    <!-- Main content -->
    <section class="content">
        <div class="box box-primary">
            <div class="box-body no-padding">
                <!-- THE CALENDAR -->
                <div id="calendar">
            <!-- /.box-body -->
    </section>
    <!-- /.content -->
{% endblock %}
{% block javascripts %}
    <script src="{% static 'plugins/daterangepicker/moment.min.js' %}"></script>
    <script src="{% static 'plugins/fullcalendar/fullcalendar.min.js' %}"></script>
    <script type="text/javascript">
    $(function () {
            //初始化FullCalendar
            $('#calendar').fullCalendar({
    </script>
{% endblock %}

内容说明: - {% block css %} {% endblock %} 标签中引入了fullcalendar样式文件 - {% block content %}{% endblock %} 标签中写入了页面内容 - {% block javascripts %} {% endblock %}标签中引入了fullcalendar的js文件,并作了初始化配置,同时还引入了moment.min.js一个JavaScript 日期处理类库 打开 127.0.0.1:8000/myreport 就可以看到日历表,效果如下:



6、FullCalendar初始化配置

初始化配置内容包括,日期显示的汉化,日期显示格式设置,日历头部按钮设置。
修改myreport.html文件 fullCalendar初始化的js配置:

<script type="text/javascript">
    $(function () {
            //初始化FullCalendar
            $('#calendar').fullCalendar({
                buttonText: {
                    today: '今天',
                    month: '月',
                    week: '周',
                    day: '日',
                allDayText: "全天",
                timeFormat: 'HH:mm',
                views: {
                    month: {titleFormat: 'YYYY年MMMM月'},
                    week: {titleFormat: 'YYYY年MMMM月'},
                    day: {titleFormat: 'YYYY年MMMM月D日'},
                monthNames: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
                monthNamesShort: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
                dayNames: ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
                dayNamesShort: ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
                //defaultView: 'agendaWeek',
                contentHeight: 650,
                header: {
                    //日历头部左边:初始化切换按钮
                    left: 'prev,next today',
                    //日历头部中间:显示当前日期信息
                    center: 'title',
                    //日历头部右边:初始化视图
                    right: 'month,agendaWeek,agendaDay'
                //设置是否显示周六和周日,设为false则不显示
                weekends: true,
    </script>

初始化配置后刷新myreport页面查看效果:



日历内容已经成功汉化,同时新增了月,周,日视图和时间后退 前进按钮。

7、FullCalendar添加自定义按钮

我们想在日历表上添加一个按钮,用来添加日程数据,这里就需要使用到FullCalendar的customButtons,修改myreport.html文件中FullCalendar的初始化配置文件:

<script type="text/javascript">
    $(function () {
            //初始化FullCalendar
            $('#calendar').fullCalendar({
                // 新增内容:自定义按钮
                customButtons: {
                    reportAddButton: {
                        text: '添加',
                        click: function(){
                            alert('这是一个自定义按钮');
                header: {
                    //日历头部左边:初始化切换按钮
                    left: 'prev,next today reportAddButton',
                    //日历头部中间:显示当前日期信息
                    center: 'title',
                    //日历头部右边:初始化视图
                    right: 'month,agendaWeek,agendaDay'
                //设置是否显示周六和周日,设为false则不显示
                weekends: true,
    </script>

我们使用customButtons创建了一个自定义按钮reportAddButton, 同时将reportAddButton添加到日历表格头部的左侧窗口,页面显示效果:



我们在添加自定义按钮的时候定义了click 触发alert事件弹窗:



8、在日历上添加日程数据

FullCalendar可以直接添加数据,可以接收json数据,修改myreport.html文件中FullCalendar的初始化配置文件,保留原有的内容,添加下面的events内容:

<script type="text/javascript">
    $(function () {
            //初始化FullCalendar
            $('#calendar').fullCalendar({
                .......
            //新增的events
            events: [
                    title: '测试用的日程数据',
                    start: '2018-09-08'
                    title: '新的工作计划',
                    start: '2018-09-10'