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

寻求支持周工作日范围表头的Kendo活动规划组件解决方案

寻求Kendo周度活动规划界面组件解决方案

需求清单

  • 每列表头显示月度内的工作日周范围(例如5/06 - 9/06、12/06 - 16/06等);
  • 首列展示用户列表;
  • 用户与周期交叉的单元格中显示对应周期内用户的活动,支持活动拖拽,且能便捷切换年月。

当前尝试与问题

我尝试使用Kendo Scheduler组件,它可满足用户展示、活动展示、拖拽操作及年月便捷导航的需求,但无法实现表头日期范围显示,特此寻求建议。

参考界面示例:
周度活动规划界面示例

解决方案:自定义Timeline视图表头模板

你可以基于timelineMonth视图,通过自定义majorTimeHeaderTemplate来实现按工作日周范围显示表头,同时保留Scheduler的拖拽、导航功能。修改后的代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kendo UI 周度活动规划</title>

    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2022.3.1109/styles/kendo.default-v2.min.css"/>

    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2022.3.1109/js/kendo.all.min.js"></script>
</head>
<body>
  
<script id="groupHeaderTemplate" type="text/x-kendo-template">
  <strong style="color: #=color#">#=text#</strong>
</script>
<div id="scheduler"></div>
<script>
// 计算指定日期所在周的工作日起止
function getWorkWeekRange(date) {
    var weekStart = kendo.date.startOfWeek(date, { weekStartDay: 1 }); // 周一为周起始
    var weekEnd = kendo.date.addDays(weekStart, 4); // 周五为周结束
    
    // 确保日期在当前显示的月度范围内
    var viewDate = $("#scheduler").data("kendoScheduler").view().date();
    var monthStart = kendo.date.startOfMonth(viewDate);
    var monthEnd = kendo.date.endOfMonth(viewDate);
    
    weekStart = kendo.date.max(weekStart, monthStart);
    weekEnd = kendo.date.min(weekEnd, monthEnd);
    
    return {
        start: weekStart,
        end: weekEnd
    };
}

$("#scheduler").kendoScheduler({
    date: new Date("2013/6/6"), 
    showWorkHours: true,
    footer: false,
    dataSource: [
      {
        id: 1,
        start: new Date("2013/6/6 08:00 AM"),
        end: new Date("2013/6/6 09:00 AM"),
        title: "面试",
        isAllDay: true,
        attendees: 1
      },
      {
        id: 2,
        start: new Date("2013/6/12 08:00 AM"),
        end: new Date("2013/6/12 09:00 AM"),
        title: "团队会议",
        isAllDay: true,
        attendees:  3 
      }
    ],
    views: [{ 
        type: "timelineMonth", 
        majorTick: 1440, // 按天划分,确保每周作为一个大刻度组
        majorTimeHeaderTemplate: kendo.template(`
            # 
                var range = getWorkWeekRange(data.date);
                var startStr = kendo.toString(range.start, 'd/M');
                var endStr = kendo.toString(range.end, 'd/M');
            #
            #= startStr + " - " + endStr #
        `)
    }],
    resources: [ {
        field: "attendees",
        name: "参会人",
        dataSource: [
            { text: "Alex", value: 1, room: 1, color: "blue" },
            { text: "Bob", value: 2, room: 1, color: "#6eb3fa" },
            { text: "Charlie", value: 3, room: 2, color: "red" },
            { text: "Andrea", value: 4, room: 1, color: "green" },
            { text: "Lucas", value: 5, room: 1, color: "orange" }
        ],
        title: "参会人"
    }],
    group: {
        resources: ["参会人"],
        orientation: "vertical"
    }
});
</script>
</body>
</html>

关键说明

  1. 视图类型切换:使用timelineMonth视图替代timelineWeek,这样可以展示整月的周区间;
  2. 自定义表头模板:通过majorTimeHeaderTemplate调用工具函数getWorkWeekRange,计算每个周的工作日起止日期,并格式化为需求的样式;
  3. 日期边界处理:确保计算出的周范围不会超出当前显示的月度边界;
  4. 保留原有功能:Scheduler的拖拽、年月导航、用户列表展示等功能完全保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:05:41