You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FullCalendar能否按资源自定义slotDuration?或限制资源选择时长

FullCalendar resourceTimeGridDay 资源时段自定义方案

一、按资源单独设置slotDuration的可行性

FullCalendar目前不支持针对单个资源配置独立的slotDuration,该参数属于全局配置,所有资源列会共享同一时间间隔,无法实现类似businessHours那样的资源级自定义。

二、限制资源选择时长的实现方法

如果全局使用15分钟间隔,针对不同资源设置选择规则是完全可行的。以你提到的场景为例:资源A允许选择15分钟时段,资源B仅允许选择整点开始的60分钟时段,用户选B列非整点时段时自动调整,具体实现步骤如下:

1. 全局基础配置

先设置全局slotDuration为'00:15:00',保证日历显示15分钟间隔的时间槽。

2. 监听选择事件,修正时段

通过select事件拦截用户的选择操作,根据选中的资源ID判断并调整时段:

  • 资源A:直接保留用户选择的15分钟时段
  • 资源B:将选中的起始时间向下取整到最近整点,结束时间设为整点加60分钟,然后重新选中调整后的时段

3. 处理事件拖拽与调整

为了防止用户通过拖拽现有事件或调整事件时长违反规则,需要监听eventDrop和eventResize事件,强制修正不符合规则的事件。

代码示例

document.addEventListener('DOMContentLoaded', function() {
  const calendarEl = document.getElementById('calendar');
  const calendar = new FullCalendar.Calendar(calendarEl, {
    schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
    initialView: 'resourceTimeGridDay',
    slotDuration: '00:15:00',
    resources: [
      { id: 'A', title: '资源A' },
      { id: 'B', title: '资源B' }
    ],
    select: function(info) {
      const resourceId = info.resource.id;
      let start = info.start;
      let end = info.end;

      // 资源B强制整点开始,时长60分钟
      if (resourceId === 'B') {
        // 向下取整到最近整点
        start.setMinutes(0, 0, 0);
        end = new Date(start.getTime() + 60 * 60 * 1000);
        
        // 替换原选择
        calendar.unselect();
        calendar.select(start, end, info.resource);
      }

      // 此处可添加创建事件的业务逻辑
    },
    eventDrop: function(info) {
      if (info.event.extendedProps.resourceId === 'B') {
        const adjustedStart = new Date(info.event.start);
        adjustedStart.setMinutes(0, 0, 0);
        info.event.setStart(adjustedStart);
        info.event.setEnd(new Date(adjustedStart.getTime() + 60 * 60 * 1000));
      }
    },
    eventResize: function(info) {
      if (info.event.extendedProps.resourceId === 'B') {
        // 禁止调整时长,强制保持60分钟
        const start = info.event.start;
        info.event.setEnd(new Date(start.getTime() + 60 * 60 * 1000));
      }
    }
  });

  calendar.render();
});

内容的提问来源于stack exchange,提问作者Russell Greenleaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:45:35