vue中的Fullcalendar日期组件修改侧栏时间间隔slotDuration

在Vue项目中使用Fullcalendar组件创建排产表时,将原有的30分钟时间间隔改为4小时。主要通过修改`slotDuration`配置项实现,配置代码示例已给出。

最近的Vue项目使用到了Fullcalendar日期组件来做排产表,但是侧栏的时间间隔30分钟实在间隔太短,便想将其修改为4小时这样的时间间隔,上代码:

      <FullCalendar ref="fullCalendar" :options="calendarOptions"></FullCalendar>

option里的配置文件:重点看slotDuration配置!

      calendarOptions: {
        plugins: [dayGridPlugin, listPlugin, timeGridPlugin, interactionPlugin],
        initialView: 'timeGridWeek',
        locale: 'zh',
        // 每周开始是周几,Sunday=0, Monday=1
        firstDay: '1',
        // 时间轴间距
        slotMinTime: '00:00',
        slotMaxTime: '24:00',
        // 原来的
        // slotDuration: '00:' + this.$consts.COURSE_DURATION_STEP_MINUTE + ':00',
        slotDuration: '04:00:00',
        // 是否显示第几周
        // weekNumbers: true,
        // 是否显示周末
        // weekends: true,
        // weekText: '周',
        // 是否显示当前时间标记
        nowIndicator: true,
        // 是否显示全天插槽
        allDaySlot: false,
        // 日期否可点击
        navLinks: true,
        // 月视图,是否为指定周数高度,true 6周高度
        fixedWeekCount: false,
        // 月视图,是否显示非本月日期
        showNonCurrentDates: false,
        // 月视图,限制每天显示最大事件数,不包括+more链接,false 全部显示,true 限制为日单元格的高度,number 限制为指定行数高度
        dayMaxEvents: true,
        // 与dayMaxEvents类似,区别为包括+more链接
        // dayMaxEventRows: true,
        // 是否可拖拽
        editable: true,
        events: [],
        // 日历头部信息,若设置为False,不显示头部信息
        headerToolbar: {
          start: 'prev,next today',
          center: 'title',
          end: 'timeGridWeek,dayGridMonth'
        },
        buttonText: {
          today: '今天',
          month: '月',
          week: '周',
          day: '日',
          list: '周列表'
        },
        slotLabelFormat: {
          hour: 'numeric',
          minute: '2-digit',
          hour12: false
        },
        eventTimeFormat: {
          hour: 'numeric',
          minute: '2-digit',
          hour12: false
        },
        datesSet: this.datesSet,
        dayHeaderContent: this.dayHeaderContent,
        // eventClick: this.handleEventClick,
        dateClick: this.handleDateClick,
        // 当事件拖动时触发
        eventDragStart: this.eventDragStart,
        // 当事件拖动停止时触发
        eventDragStop: this.eventDragStop,
        // 当拖动停止并且事件移动到不同的日子/时间时触发
        eventDrop: this.eventDrop,
        // 当外部可拖动元素或来自另一个日历的事件被拖放到该日历中时调用
        drop: this.drop,
        // 当带有关联事件数据的外部可拖动元素拖放到日历中时调用,或来自另一个日历的事件
        eventReceive: this.eventReceive,
        // 当一个日历上的事件即将拖放到另一个日历上时触发
        eventLeave: this.eventLeave,
        // 开始缩放时触发
        eventResizeStart: this.eventResizeStart,
        // 停止缩放时触发
        eventResizeStop: this.eventResizeStop,
        // 当缩放停止且事件持续时间发生更改时触发
        eventResize: this.eventResize
      }

见下图:
在这里插入图片描述

修改后的图片:
在这里插入图片描述
参考的这位老兄的文章:
https://blog.youkuaiyun.com/weixin_40103332/article/details/94392195

### 3. 安装与引入 FullCalendar Vue 3 组件 在 Vue 3 项目中使用 `FullCalendar`,首先需要安装必要的依赖包。可以通过 npm 或 yarn 进行安装: ```bash npm install --save @fullcalendar/core @fullcalendar/vue3 @fullcalendar/daygrid @fullcalendar/timegrid ``` 安装完成后,在组件中导入并注册 `FullCalendar`,然后引入所需的插件模块(如 `dayGridPlugin` 和 `timeGridPlugin`)[^3]。 ```javascript import { createApp } from 'vue' import App from './App.vue' import FullCalendar from '@fullcalendar/vue3' import dayGridPlugin from '@fullcalendar/daygrid' import timeGridPlugin from '@fullcalendar/timegrid' const app = createApp(App) app.component('FullCalendar', FullCalendar) app.mount('#app') ``` --- ### 3. 自定义样式:通过 CSS 覆盖默认样式 `FullCalendar` 的样式主要由 `.fc` 开头的类名控制。可以在项目的样式文件中编写自定义 CSS 来覆盖默认样式。例如,修改日历标题背景颜色、日期单元格边框和字体大小、事件背景色等: ```css /* 修改日历标题背景颜色 */ .fc-toolbar { background-color: #f0f0f0; } /* 修改日期单元格边框和字体大小 */ .fc-daygrid-day { border: 1px solid #ddd; font-size: 14px; } /* 修改事件背景色 */ .fc-event { background-color: #42b983; } ``` 将上述代码添加到全局样式文件或组件的 `<style>` 标签中即可生效[^2]。 --- ### 3. 使用 SCSS 变量进行深度定制 如果项目支持 SCSS,可以通过覆盖 SCSS 变量来自定义主题。例如: ```scss $fc-border-color: #ccc; $fc-today-bg-color: #f9f9f9; @import '~@fullcalendar/core/main.css'; @import '~@fullcalendar/daygrid/main.css'; ``` 这种方式适合对 `FullCalendar` 进行更深层次的主题定制,但需要确保项目已配置好 SCSS 编译环境[^1]。 --- ### 3. 动态修改 DOM 元素样式 对于某些无法通过 CSS 直接覆盖的样式,可以在组件挂载后动态修改 DOM 元素的样式属性。例如,在 Vue 的 `onMounted` 生命周期钩子中操作 DOM: ```javascript import { onMounted, ref } from 'vue' import Calendar from '@fullcalendar/core' import dayGridPlugin from '@fullcalendar/daygrid' export default { setup() { const calendarRef = ref(null) onMounted(() => { const calendarEl = calendarRef.value.$el const calendar = new Calendar(calendarEl, { plugins: [dayGridPlugin], events: [ { title: 'Event 1', start: '2023-09-01' }, { title: 'Event 2', start: '2023-09-05', end: '2023-09-07' } ] }) calendar.render() // 动态修改某个元素的样式 const header = document.querySelector('.fc-toolbar') if (header) { header.style.padding = '10px' header.style.fontWeight = 'bold' } }) return { calendarRef } } } ``` 此方法适用于需要根据运行时状态调整样式的场景[^2]。 --- ### 3. 使用 `eventContent` 回调自定义事件渲染 如果希望对日历中的事件内容进行样式定制,可以使用 `eventContent` 回调函数来返回自定义 HTML 内容: ```javascript const calendar = new Calendar(calendarEl, { plugins: [dayGridPlugin], events: [ { title: 'Custom Event', start: '2023-09-10' } ], eventContent: function(arg) { return { html: `<div style="background-color:#ff6666; padding:4px;">${arg.event.title}</div>` } } }) ``` 这允许完全控制事件的显示格式,包括内联样式或附加类名[^3]。 --- ### 3. 引入第三方主题 `FullCalendar` 支持多种主题,可以通过引入不同的 CSS 文件来切换主题风格。例如,引入 Bootstrap 主题: ```bash npm install @fullcalendar/bootstrap ``` 然后在代码中配置: ```javascript import bootstrapPlugin from '@fullcalendar/bootstrap' const calendar = new Calendar(calendarEl, { plugins: [bootstrapPlugin, dayGridPlugin], themeSystem: 'bootstrap' }) ``` 确保引入对应的 CSS 文件以正确应用主题样式[^1]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值