FullCalendar ResourceTimeLine视图按资源配置多营业时间后拖拽事件不触发保存问题
问题诱因
- 营业时间规则未绑定对应资源ID:你当前配置的每一组businessHours规则的
resourceIds字段为空数组,FullCalendar资源维度营业时间校验逻辑无法将规则和当前拖拽的资源匹配,会默认判定拖拽位置属于非营业时间,直接拦截drop事件,不会触发后续的保存回调。 - Outsystems封装的FullCalendar组件存在版本兼容缺陷:低于v5.11.0版本的FullCalendar对多组资源维度营业时间的拖拽校验逻辑存在bug,只会读取全局单组营业时间规则,多组规则场景下校验逻辑执行异常,直接阻止了事件冒泡,导致保存动作无法触发。
解决方法
- 修正营业时间配置结构
给每一组营业时间规则添加对应资源的ID绑定,正确配置示例如下:
businessHours: [ // 资源ID 8547的营业时间规则 { daysOfWeek: [1, 2, 3], startTime: '08:00', endTime: '17:00', resourceId: '8547' }, { daysOfWeek: [4, 5], startTime: '15:00', endTime: '23:00', resourceId: '8547' } // 其余资源的营业时间规则按同样格式添加,各自绑定对应资源ID即可 ]
- 校验规则验证
临时将FullCalendar的eventConstraint参数设置为null关闭营业时间拖拽校验,如果调整后拖拽可以正常触发保存,即可确认问题是规则校验拦截导致。 - 手动注入规则适配Outsystems组件
如果直接传入数组依然被组件自动转成内部defs结构,可在组件初始化完成的生命周期回调中,调用FullCalendar实例的addBusinessHours方法逐个添加规则,确保每条规则都正确关联对应资源ID。 - 升级组件版本
将Outsystems中使用的FullCalendar组件升级到v5.11.0及以上版本,该版本已修复多组资源维度营业时间的拖拽校验bug。
内容的提问来源于stack exchange,提问作者Walter
相关产品推荐
相关产品推荐

