vue3 Fullcalendar 实现动态创建、编辑(拖拽)计划

文章介绍了在Vue3项目中集成fullcalendarV6插件的步骤,包括安装、配置、自定义头部视图切换、事件处理等功能,展示了如何实现场景化的日历功能。
摘要由CSDN通过智能技术生成

实现效果如图:在这里插入图片描述
在这里插入图片描述

  1. 基础框架Vue3,使用的是fullcalendar插件,V6版本:官网地址
  2. 安装插件:@fullcalendar/core、@fullcalendar/daygrid、@fullcalendar/timegrid、@fullcalendar/list、@fullcalendar/interaction,都是npm install 插件,就可以了
  3. 插件引入到使用的页面里面
import { Calendar } from '@fullcalendar/core'
import dayGridPlugin from '@fullcalendar/daygrid'
import timeGridPlugin from '@fullcalendar/timegrid'
import listPlugin from '@fullcalendar/list'
import interactionPlugin from '@fullcalendar/interaction'
  1. 页面里定义fullcalendar挂载的DOM
<div ref="fullcalendar" class="card" />
  1. 创建日历视图,定义各种配置
    const initCalendar = () => {
      state.Tcalendar = new Calendar(state.fullcalendar, {
        plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin],
        initialView: 'dayGridMonth',
        aspectRatio: 2.2,
        locale: 'zh-cn',
        handleWindowResize: true,
        editable: true, // 允许编辑表格
        droppable: true,
        eventDurationEditable: true,
        eventResizableFromStart: true,
        selectable: getPermissionBtn('CalendarPlanAdd'), // 允许用户通过单击和拖动来突出显示多个日期或时间段
        firstDay: 1, // 设置一周中显示的第一天是哪天,周日是0,周一是1,类推。
        unselectAuto: true, // 当点击页面日历以外的位置时,是否自动取消当前的选中状态
        unselectCancel: '.el-drawer',
        dayMaxEvents: true,
        headerToolbar: false, // 关闭默认日历头部,采取自定义的方式切换日历视图
        buttonText: {
          today: '回到今天',
          month: '月',
          week: '周',
          list: '列',
          day: '日'
        },
        allDayText: '全天',
        events: state.infoList,
        eventClassNames: function(arg) { // 添加自定义class
          return [arg.event.extendedProps.class]
        },
        eventContent: function(arg) { // 日历上event显示的样式
          const italicEl = document.createElement('div')
          if (arg.event.extendedProps.startDateMinute && state.type === '1') {
            const childEl = document.createElement('span')
            childEl.innerHTML = arg.event.extendedProps.startDateMinute
            italicEl.append(childEl)
          }
          italicEl.append(arg.event.title)
          italicEl.setAttribute('class', `plan_title ${arg.event.extendedProps.class}`)
          return { domNodes: [italicEl] }
        },
        eventDrop: function(info) {
          // 拖拽停止时触发
          handleDrap(info)
        },
        eventClick: function(info) {
          // 点击查看时触发
          handleClick(info)
        },
        select: function(info) {
          // 视图选择日期触发
          if (getPermissionBtn('CalendarPlanAdd')) { // 有权限的才可以选择日期创建
            handleSelectDate(info)
          }
        },
        eventResize: function(info) { // 拖拽event大小时触发
          handleEventResize(info)
        }
      })
      state.Tcalendar.render()
    }
  1. 既然选择自定义头部,就要考虑怎么切换日历视图,以及日历显示的时间切换:

(1)切换日历视图为月视图:

state.Tcalendar.changeView('dayGridMonth')

(2)切换日历视图为周视图:

state.Tcalendar.changeView('timeGridWeek')

…等,还有日视图,我这里没有用到,可以自行查找。

(3)切换日历到其他月份、周、或日期

state.Tcalendar.gotoDate(date) // date: '2024-02-01' 月视图的情况下跳转到二月份
state.Tcalendar.today() // 月视图切换到本月,周视图切换到本周

(4)周视图:切换日历到其他周

state.Tcalendar.next() // 下一月或下一周
state.Tcalendar.prev() //  上一月、周、日
  1. 懒加载事件资源(可优化,根据官网写的,但感觉不是很对):
// 接口请求前
state.Tcalendar.getEventSources().forEach(item => {
   item.remove()
})
// 接口请求成功之后
state.Tcalendar.addEventSource(资源数组)

进阶详细版

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Vue 3 中使用 FullCalendar 切换视图有多种方式,以下是其中一种方法: 1. 首先,确保已经安装了 FullCalendar 的依赖包。可以通过 npm 或 yarn 安装: ```bash npm install @fullcalendar/vue @fullcalendar/daygrid @fullcalendar/timegrid ``` 或 ```bash yarn add @fullcalendar/vue @fullcalendar/daygrid @fullcalendar/timegrid ``` 2. 创建一个 Vue 组件,引入 FullCalendar 和所需的视图组件: ```vue <template> <div> <FullCalendar :options="calendarOptions" /> </div> </template> <script> import { FullCalendar } from '@fullcalendar/vue' import dayGridPlugin from '@fullcalendar/daygrid' import timeGridPlugin from '@fullcalendar/timegrid' export default { components: { FullCalendar }, data() { return { calendarOptions: { plugins: [dayGridPlugin, timeGridPlugin], initialView: 'dayGridMonth', // 初始视图为月视图 views: { dayGridMonth: { buttonText: '月视图', type: 'dayGridMonth' }, timeGridWeek: { buttonText: '周视图', type: 'timeGridWeek' }, timeGridDay: { buttonText: '日视图', type: 'timeGridDay' } } } } } } </script> ``` 在上述代码中,我们引入了 `FullCalendar`、`dayGridPlugin` 和 `timeGridPlugin`,并在 `calendarOptions` 中配置了初始视图为月视图,并定义了不同的视图选项。 3. 然后,你可以通过按钮或其他交互方式来切换视图。在模板中添加切换按钮: ```vue <template> <div> <FullCalendar :options="calendarOptions" /> <button @click="changeView('dayGridMonth')">月视图</button> <button @click="changeView('timeGridWeek')">周视图</button> <button @click="changeView('timeGridDay')">日视图</button> </div> </template> ``` 4. 在 Vue 组件的方法中,定义 `changeView` 方法来切换视图: ```vue <script
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值