首页 > 其他分享 >使用fullcalendar构建简单会议室预约页面

使用fullcalendar构建简单会议室预约页面

时间:2022-12-02 16:46:39浏览次数:48  
标签:info 00 const Room title 预约 fullcalendar id 页面

<link href="./plugins/fullcalendar-5.11.2/fullcalendar-scheduler/main.min.css" rel="stylesheet" />
<script type="text/javascript" language="javascript" src="./plugins/fullcalendar-5.11.2/fullcalendar-scheduler/main.min.js"></script>
<script type="text/javascript" language="javascript" src="./plugins/fullcalendar-5.11.2/lib/locales-all.min.js"></script>

<div class="calendar" id="calendar"></div>

<script>
  document.addEventListener("DOMContentLoaded", function () {
    var calendarEl = document.getElementById("calendar");

    var calendar = new FullCalendar.Calendar(calendarEl, {
      schedulerLicenseKey: "CC-Attribution-NonCommercial-NoDerivatives",
      locale: "zh-cn",
      timeZone: "Asia/Shanghai",
      selectable: true,
      initialView: "resourceTimeGridDay",
      slotMinTime: "08:00",
      slotMaxTime: "20:00",
      businessHours: true,
      views: {
        resourceTimeGridDay: {
          slotDuration: "00:10",
        },
      },
      resources: [
        { id: "a", title: "Room A" },
        { id: "b", title: "Room B" },
        { id: "c", title: "Room C" },
        { id: "d", title: "Room D" },
        { id: "e", title: "Room E" },
        { id: "f", title: "Room F", eventColor: "red" },
        { id: "g", title: "Room G" },
        { id: "h", title: "Room H" },
        { id: "i", title: "Room I" },
        { id: "j", title: "Room J" },
        { id: "k", title: "Room K" },
      ],
      eventSources: [
        {
          url: "../test.php",
          method: "POST",
          extraParams: {
            uid: 1,
          },
          failure: function () {
            alert("请求失败,请联系系统管理员");
          },
          color: "yellow",
          textColor: "black",
        },
      ],
      select: function (info) {
        const events = calendar.getEvents();
        const startTime = new Date(info.startStr).getTime();
        const endTime = new Date(info.endStr).getTime();
        let flag = true;
        for (let index in events) {
          const resourceIds = events[index].getResources().map(function (resource) {
            return resource.id;
          });
          const resourceId = resourceIds[0];

          const st = new Date(events[index]["startStr"]).getTime();
          const et = new Date(events[index]["endStr"]).getTime();
          if (endTime <= st || startTime >= et || resourceId != info.resource.id) {
          } else {
            flag = false;
            break;
          }
        }
        if (!flag) {
          alert("该时间段该会议室已被预定,请选择其它时间段或者其它会议室");
          return false;
        }

        if (confirm("是否确定预定:\r\n" + "起始时间:" + info.startStr + "\r\n结束时间:" + info.endStr + "\r\n会议室:" + info.resource.title + "?")) {
          calendar.addEvent({
            title: "技术部meeting",
            resourceId: info.resource.id,
            start: info.startStr,
            end: info.endStr,
          });
        }
        calendar.unselect();
      },
      eventClick: function (arg) {
        if (confirm("确定要删除这个预定吗?")) {
          arg.event.remove();
        }
      },
    });

    calendar.render();
  });
</script>

 

<?php

$data = [];
$date = date('Y-m-d');
$date_prev = date('Y-m-d', strtotime('-1 day'));
$date_next = date('Y-m-d', strtotime('+1 day'));
$data = [
    ["id" => "1", "resourceId" => "b", "start" => $date . "T09:00:00", "end" => $date . "T10:00:00", "title" => "财务部meetting"],
    ["id" => "2", "resourceId" => "c", "start" => $date . "T15:00:00", "end" => $date . "T17:00:00", "title" => "销售部meeting"],
];
echo json_encode($data);

 

 

 注意:fullcalendar的fullcalendar-scheduler商用需要购买schedulerLicenseKey

 

标签:info,00,const,Room,title,预约,fullcalendar,id,页面
From: https://www.cnblogs.com/caroline2016/p/16944880.html

相关文章

  • form表单提交后,页面弹出成功或者失败的信息
    Ssm 中用RedirectAttributes做提示消息`@RequiresPermissions("hic:zybl:hicZybl:edit") @RequestMapping(value="save") publicStringsave(HicZyblhicZybl,Model......
  • iframe框架页面实现自适应高度解决方案
    经常会有父页面需要通过iframe嵌入另一个子页面,又要适时根据子页面的高度调整父页面中iframe的高度,这就要求页面必须具有自适应功能。自适应思想比较简单:就是父页面中ifra......
  • 直播平台开发,scroll-view如何自适应页面剩余高度
    直播平台开发,scroll-view如何自适应页面剩余高度首先想到的方法是通过计算得出scroll-view的高度,使用100vh即视口高度,减去上下两个组件和手机状态栏的高度,得到剩余的高度......
  • react native中刷新页面
    在reactnative中刷新页面就是改变页面的数据源,如果页面的数据源是state或者是store那么当数据源改变了.页面就会自动刷新的.所以刷新页面的两种方式1:用redux来做数据源......
  • 解决VLC前端遮挡页面元素问题
    说实话也就360浏览器还可以用vlc了,目前是为了播放海康视频流同时绘制报警框,因为对实时性有要求,转码延迟不大好控制因此考虑vlc。反正是针对个别用户的,也不会在公网部署主......
  • 使用HTTPCLIENT去生成静态HTML页面
    一般生成HTML页时,都会用比如freemarker等去搞,但今天看到和学到一个还应该不错的方法,是使用httpclient的get方法,去读某个动态的URL,然后把读出的内容再......
  • 基于springboot私人健身与教练预约管理系统设计与实现的源码+文档
    摘 要随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行......
  • C++输出页面的相关操作
    下文需要用到的头文件等#include<bits/stdc++.h>#include<Windows.h>#include<stdlib.h>#include<time.h>#include<conio.h>#defineintlonglongusingnamesp......
  • 页面css哀悼模式
      查找的一波样式原来是css的:filter:grayscale(100%);//灰度   ......
  • 支付宝小程序访问浙里办应用,提示页面访问受限,IOS无法访问
    之前在浙里办上架的应用,现在需要上架到支付宝里的“浙里办”,也就是小程序,正常情况下是不需要改动什么代码,都是一套H5代码即可,无需特殊编写另一台原生小程序。最近在上架支付......