在vue中使用FullCanlendar实现日历预约会议室功能

news2025/1/22 21:48:04

最近接到任务,让实现一个预约功能,让我找找插件,需求是这个样子滴

在这里插入图片描述

明白任务以后,那咱就开抄呗~(bushi 开找
经过一番寻找,最后我决定使用FullCalendar,为啥用这个呢,你看它样子长的像不像我的需求,虽然说不上是有一些像吧,但简直就是一模一样.

在这里插入图片描述

更关键的是这玩意有很全的文档(但全是英文的!!),而且支持在vue中直接使用.

FullCanlendar介绍

FullCanlendar一款日历插件,支持react,Vue,angular以及原生js.支持年月日各种样式风格,上面是日的样式和我需求是一样的,还有经典的日历模式.
官网:https://fullcalendar.io/

在这里插入图片描述

Vue中使用FullCanlendar

  • 进行安装
npm install --save @fullcalendar/vue @fullcalendar/core

( 这两个是基础包,额外的功能需要在额外下载对应的包,额外的功能对应的包可以自行查找, https://fullcalendar.io/docs/plugin-index )

  • 按需引入
import FullCalendar from '@fullcalendar/vue'
import resourceTimelinePlugin from '@fullcalendar/resource-timeline'
import interactionPlugin from '@fullcalendar/interaction'

然后在对应的vue页面进行导入 并注册组件 (后两个为我需要的额外功能包)

  • 配置项配置
<FullCalendar class="calenderCon" :options="calendarOptions" ref="fullCalendar" />
 
export default {
  components: {
    FullCalendar
  },
   data() {
    return {
      //不要改这个变量的名字
      calendarOptions: { 
        locale: 'zh-cn', //选择语言
        headerToolbar: false, // 不显示头部按钮
        plugins: [interactionPlugin, resourceTimelinePlugin],//把需要的功能包导入
        initialView: 'resourceTimeline', //初始化要渲染的包
        schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', //此配置是为了消除右下角的版权提示
        resourceAreaHeaderContent: '房间名称', // 纵轴的第一行 用来表示纵轴的名称
        resourceAreaWidth: '5%',//纵轴饿宽度
        resources: [], //纵轴的数据
        slotLabelFormat: { //时间格式配置
          hour: 'numeric',
          minute: '2-digit', //分钟显示2位
          omitZeroMinute: false, // 是否显示分钟
          meridiem: 'short',
          hour12: false, //12小时制还是24小时制
        },
        slotDuration: '00:30:00', //时间间隔 默认半小时
        slotMinTime: '08:00:00', // 开始时间
        slotMaxTime: '18:00:00', // 结束时间
        selectable: true, //是否可以在日历表上选择
        select: this.showDialog, // 选择时间段触发的事件
        selectOverlap: (event) => { //已有事件的各自是否还能选择
          return event.rendering === 'background';
        },
        events: [], // 日历右侧主体事件数据
        eventClick: this.eventClick, // 事件点击事件
      },
    }
  },
  created() {
    this.init()
  },
   methods: {
    init() {
      setTimeout(() => {
        // 模拟资源
        this.calendarOptions.resources = [{
          id: 'A1111',
          groupId: '1',
          title: '房间 A'
        },
        {
          id: 'B',
          groupdId: '1',
          title: '房间 B'
        },
        {
          id: 'C',
          groupId: '1',
          title: '房间 C'
        },
        {
          id: 'd',
          groupId: '1',
          title: '房间 d'
        },
        ]
      }, 1000)
      // 模拟事件
      this.calendarOptions.events = [{
        id: '666',
        resourceId: 'A1111',
        title: '模拟会议',
        start: '2022-11-02 10:00',
        end: '2022-11-02 11:00',
        display: 'background', //事件块的样式 不写的时候默认是块
        color: 'transparent', // 边框颜色
        textColor: '#303133', // 文字颜色
        backgroundColor: '#E6E7F4', // 背景颜色
      }
      ]
    },
    //选择日期格子触发
    showDialog(selectInfo) {
      let calendarApi = selectInfo.view.calendar;
      calendarApi.unselect(); // clear date selection 清空上次选择
      // let obj = {
      //   resourceId: selectInfo.resource.id,
      //   title: '会议名称',
      //   start: selectInfo.start,
      //   end: selectInfo.end,
      //   // color: 'transparent', // 边框颜色
      //   // textColor: '#fff', // 文字颜色
      //   // backgroundColor: '#409EFF', // 背景颜色
      // }
      // 创建一个新事件格子 向日历中增加一个事件格子
      // calendarApi.addEvent(obj)
    },
    // 事件点击
    eventClick(eventInfo) {
      console.log(eventInfo);
    },
    // 切换日期  可以切换到对应天显示事件
    changeDate() {
      let calendarApi = this.$refs.fullCalendar.getApi()
      let calendar = calendarApi.view.calendar
      calendar.gotoDate('要跳转的日期')
    }
  },
 }

以上没有涉及到定制化功能,基本插件库的功能都可以实现,插件还有很多高级的功能,需要的小伙伴自己去探究吧~ 欢迎交流讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5移动端适配方案rem/vw

前言 在讲解适配方案之前&#xff0c;我们聊聊为什么要做适配&#xff1f; 因为视口、逻辑像素、分辨率这些变量的不同&#xff0c;在每个设备展示都不一样&#xff0c;需要一种方案来统一。 物理像素&#xff1a;也就是分辨率&#xff0c;一个物理像素是显示器上的最小的物…

项目无法识别 ?. 语法,导致报错Module parse failed: Unexpected token

一、第一种情况是如果你需要引入的组件库源码的过程中&#xff0c;比如你要import一个封装好的组件这种场景&#xff1a; 首先找到报这个问题的地方 我这里是因为es语法问题 如果你也是npm安装了一个包&#xff0c;然后在导入的时候报这个语法错&#xff0c;那你可以接着往下…

【前端趋势】Vue、Vite作者尤雨溪前端趋势2022主题演讲

欢迎来到我的博客 &#x1f4d4;博主是一名大学在读本科生&#xff0c;主要学习方向是前端。 &#x1f36d;目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 &#x1f308;博客主页&#x1f449;codeMak1r.的博客 最新专栏【React–从基础到实战】…

Vant UI 中 van-collapse 下拉折叠面板如何默认展开第一项

问题重现 最近在做项目时&#xff0c;有一个需求是让 van-collapse 下拉折叠面板的第一项默认是展开状态&#xff1b;我使用到了 Vant UI 组件&#xff0c;首先按照官网文档的写法直接引入&#xff1a; <!--下拉折叠面板--><van-collapse class"collapse" …

vue路由的安装和使用

TOCVue 路由 vue-router 1 安装vue-router npm i vue-router -s 2 创建路由模块 // src/router/index.js就是当前项目的路由模块 // 1 导入Vue 和VueRouter的包 import Vue from vue import VueRouter from vue-router // 导入路由要用到的组件 import Home from ../component…

【TypeScript介绍】一文带你初步了解TypeScript

前言 博主主页&#x1f449;&#x1f3fb;蜡笔雏田学代码 专栏链接&#x1f449;&#x1f3fb;【TypeScript专栏】 今天开始学习学习TypeScript这门语言&#xff01; 感兴趣的小伙伴一起来看看吧~&#x1f91e; 文章目录TypeScript介绍1. TypeScript是什么2. TypeScript为什么要…

大文件上传

大文件上传原理 当我们在做文件上传的功能时&#xff0c;如果上传的文件过大&#xff0c;可能会导致长传时间特别长&#xff0c;且上传失败后需要整个文件全部重新上传。因此&#xff0c;我们需要前后端配合来解决这个问题。 最常用的解决方案就是 —— 切片上传。 这次我们…

图文详解uni-app PC端宽屏适配方案

图文详解uni-app PC端宽屏适配方案 随着互联网的发展&#xff0c;iOS、Android、H5以及各种小程序快应用层出不穷&#xff0c;随之而来的问题就是如何用一套代码&#xff0c;适配多个平台&#xff0c;其中uni-app表现优异&#xff0c;已经实现了手机端全覆盖&#xff0c;支持i…

【JavaScript速成之路】JavaScript对象

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言1&#xff0c;初识对象1.1&#xff0c;对象概念1.2&#xff0c;对象创建1.2.…

手撕前端面试题【JavaScript】

前端的那些基本标签&#x1f353;&#x1f353; 浅拷贝&#x1f353;&#x1f353;简易深拷贝&#x1f353;&#x1f353;深拷贝&#x1f353;&#x1f353;什么是深拷贝&#xff0c;什么是浅拷贝&#xff0c;二者有什么区别&#xff0c;平时改怎么区分呢&#xff1f;&#x1f…

vue3.0本地引入vue.js

第一步获取vue版本 Vue的各种版本介绍&#xff1a; cjs&#xff08;两个版本都是完整版&#xff0c;包含编译器&#xff09; vue.cjs.js vue.cjs.prod.js&#xff08;开发版&#xff0c;代码进行了压缩&#xff09; global&#xff08;这四个版本都可以在浏览器中直接通过…

Vue中 provide、inject 详解及使用

传送门&#xff1a;Vue中 子组件向父组件传值 及 .sync 修饰符 详解 传送门&#xff1a;Vue中 状态管理器&#xff08;vuex&#xff09;详解及应用场景 传送门&#xff1a;Vue中 $ attrs、$ listeners 详解及使用 传送门&#xff1a;Vue中 事件总线&#xff08;eventBus&#x…

New Bing申请与使用教程

&#xff08;1&#xff09;安装 Edge 浏览器插件&#xff1a; 由于在 CN 访问 Bing 国际版会自动跳转到 CN 版&#xff0c;因此需要先重定向浏览器的 Header&#xff0c;先在 Edge 浏览器安装插件&#xff1a;Header Editor&#xff1a; 添加如下配置&#xff08;其中&#xf…

① 尚品汇的后台管理系统【尚硅谷】【Vue】

后台管理系统项目简介 什么是后台管理系统项目&#xff1f; 在前端领域当中&#xff0c;开发后台管理系统项目&#xff0c;并非是Java&#xff0c;PHP等后台语言项目 在前面课程当中&#xff0c;我们已经开发了一个项目【尚品汇电商平台项目】&#xff0c;这个项目主要针对的是…

HTML5+CSS3模拟实现《亮剑》平安县城一役精彩微信群聊-谁开的炮?

转眼从2005年到现在&#xff0c;《亮剑》已经播出多年&#xff0c;但热度依然不减&#xff0c;而且每次重温我都会看出不一样的意蕴&#xff0c;今天&#xff0c;我就用HTML5CSS3模拟实现《亮剑》平安县城一役精彩微信群聊-谁开的炮&#xff1f; 目录 1. 实现思路 2. 素材介绍…

零基础JavaScript学习【第四期】

博主有话说:不知不觉这一已经第四期了,感谢大家的支持。 个人空间:GUIDM的个人空间 专栏内容:零基础JavaScript学习 基础还是关键。 欢迎大家的一键三连。 往期回顾: 前情回顾:第一期https://blog.csdn.net/m0_61901625/article/details/124772807?spm=1001.2014.3001.…

Spring-Security实现登录接口

目录简介原理初探实现思路登录接口实现准备工作编码实现效果展示简介 Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 具体介绍和入门看springSecurity入门 原理初探 在实…

CSS 实现六边形柱状图

前言 &#x1f44f;CSS 实现六边形柱状图 速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义全局css变量&#xff0c;柱状宽度为–w&#xff0c;最大高度为–h&#xff0c;柱形整体为渐变色&#xff0c;定义上部分颜色为…

VUE-webpack超详细教程

一.认识webpack 官网解释&#xff1a;从本质上来讲&#xff0c;webpack是一个现代的JavaScript应用的静态模块打包工具。 从模块化和打包两个角度来理解&#xff1a; 模块化&#xff1a; webpack其中一个核心就是让我们可能进行模块化开发&#xff0c;并且会帮助我们处理模块…

【uni-app导入vant】

uni-app导入vant一、为什么要写这篇文章二、 安装vant三、 进行全局导入Vant组件四、 导入Vant全局公共样式五、 在页面中使用Vant组件一、为什么要写这篇文章 相信有很多人在进行小程序转为uni-app的时候都会遇到转换后vant组件不能用的问题&#xff0c;为了解决这个问题本人…