个人中心

联系我们

搜索
搜索 登录 免费注册
界面美化
业务优化
开发工具
图像管理
文档管理
Parasoft

新闻资讯

关注工具软件产品最新动态,了解软件开发行业新趋势。

DHTMLX Gantt 8.0 具有改进的资源管理、更新的自动计划和松弛计算、新的样本设计等

原创
软件开发
来源:DHTMLX
报表
图表
数据可视化
数据分析
2023-03-23
报表
图表
数据可视化
数据分析


在当今的技术世界中,项目管理是开展业务最具挑战性的方面之一。多年来,DHTMLX 甘特图一直是基于功能丰富的甘特图构建业务 Web 应用程序的可靠工具。现在是时候将我们的旗舰产品更新到 8.0 版,将其提升到一个新的水平。

 

但您将在 Gantt API 中找到此生活质量更新的最重要改进。它们旨在提升您使用我们的JavaScript 甘特图组件的编码体验,并帮助您在 Web 项目中充分利用它。

 

首先,我们通过几个 API 增强功能简化了处理项目资源和相关任务的过程。我们希望您能从自动调度、时间约束、关键路径、松弛时间和任务分组算法的更新中受益。还有多项更改可以更有效地处理拆分和汇总任务。除此之外,您还可以找到其他有用的东西,例如甘特图的“空状态”屏幕、空甘特图时间轴中的背景网格、嵌入式导出 API、从服务器端删除任务的确认、一种新的添加方式时间轴单元格中的自定义 HTML 内容等。

 

从视觉的角度来看,您一定会欣赏甘特图样本的新设计。

 

 

在这篇博文中,我们详细介绍了这次重大更新。

 

甘特图示例的新设计

随着我们包中样本数量的增加,浏览它们可能会变得更具挑战性。这就是为什么我们完全重新设计了甘特图示例,以便为您提供一种更好的方式来熟悉我们库的功能集。

DHTMLX Gantt 8.0

 

现在,您可以在 API 参考选项卡下快速找到特定示例中使用的方法、属性和事件的链接。您还可以通过简单地切换到“源代码”选项卡来查看源代码,而无需在新的浏览器窗口中打开它。如果您想与您的团队分享某个示例,只需将链接复制到“共享”选项卡下的示例即可。要在新页面上打开示例,只需单击“打开示例”按钮。

 

除此之外,现在示例页面完全响应,因此它们在各种类型的移动设备上都能很好地工作。例如,使用智能手机或平板电脑查看源代码或打开文档链接不是问题。

 

简化的资源管理配置

资源管理可能是我们甘特图组件中最需要的功能之一,我们提出了一些关于如何在 v8.0 中优化您的编码体验的想法。

 

首先,我们介绍了加载资源和资源分配以及任务和它们之间的依赖关系的能力。可以使用gantt.parsegantt.load方法完成:

 

gantt.parse({

    tasks: [

        ...,

        {

            id: 5,

            text: "Interior office",

            type: "task",

            start_date: "03-04-2024 00:00",

            duration: 7,

            parent: "2",

            owner: [

            {

                    resource_id: "6",

                    value: 3,

                    start_date: "03-04-2024 00:00",

                    end_date: "05-04-2024 00:00",

            }]

        },

        ...

    ],

    links: [],

    resources: [

        {id: 6, text: "John", unit: "hours/day" },

        {id: 7, text: "Mike", unit: "hours/day" },

        {id: 8, text: "Anna", unit: "hours/day" },

        {id: 9, text: "Bill", unit: "hours/day" },

        {id: 10, text: "Floe", unit: "hours/day" }

    ]

});

 

如果需要,您还可以将资源分配与任务分开传递到方法中。

 

现在,甘特图中资源及其分配的任何更改都可以作为具有持久 ID 的单独条目发送到数据处理器,从而简化了与后端 API 的集成。

 

gantt.config.resources = {

    dataprocessor_assignments: true,

    dataprocessor_resources: true,

};

gantt.createDataProcessor(function(entity, action, data, id){

       switch (entity) {

             case "task":

                    break;

             case "link":

                    break;

             case "resource":

                    break;

             case "assignment":

   

                   break;

             }

 });

 

还可以通过切换到数据处理器中的自定义路由模式(如上面的代码所示)或使用函数声明来在处理程序中存储与资源相关的更改。

 

因此,甘特图资源可以像任务和链接一样上传和保存。

 

v8.0 中,您还将受益于资源视图配置中的大量调整。

 

在这里我们应该提到,资源的数据存储现在是在甘特图初始化期间自动创建的。要在资源存储中进行额外更改,您应该应用新的gantt.config.resources选项:

 

gantt.config.resources = {

    resource_store: {

        type: "treeDataStore",

        fetchTasks: true,

        initItem: function(item) {

            item.parent = item.parent || gantt.config.root_id;

            item[gantt.config.resource_property] = item.parent;

            item.open = true;

            return item;

        }

    },

}

 

但与此同时,仍然可以手动创建资源数据存储并默认使用它。

 

v8.0 开始,您有机会通过以下配置在资源图中编辑资源分配:

 

gantt.config.resources = {

    editable_resource_diagram: true

};

 

最后,现在您可以使用lightbox_resources函数指定灯箱中资源控件的行为。默认情况下,资源控制将填充来自资源数据存储的数据。

 

文档中提供了有关这些对我们的 JavaScript 甘特图的重要补充的更多详细信息。

 

分组任务时保存树结构(专业版)

分组任务是我们甘特图的一项广泛使用的功能,它允许根据特定属性快速安排甘特图任务。对于 v8.0,我们的客户给了我们如何让它变得更好的提示。在此之前,甘特图的树状结构在分组后不保存,即任务以扁平列表的形式显示,给最终用户带来了一些不便。这不再是问题。现在,在执行分组操作后,当父任务和子任务属于同一组时,甘特树结构仍然可见。

 

为了帮助您通过 API 激活这个有用的功能,我们将新的布尔值save_tree_structure参数添加到gantt.groupBy()方法。您所要做的就是将此参数的值设置为 true

 

gantt.groupBy({

     groups: groups,

     relation_property: gantt.config.resource_property,

     group_id: "group_id",

     group_text: "text",

     delimiter: ", ",

     default_group_label: "No Material",

     save_tree_structure: true

});

 

DHTMLX Gantt 8.0 - 分组后保存的树结构

 

在上图中,您可以看到甘特图,其中任务按资源分组并保存了树结构。

 

请注意,此功能仅在 DHTMLX 甘特图的专业版中可用。

 

甘特图的空状态屏幕

以前,当使用 DHTMLX 构建的甘特图不包含任何任务时,它会显示为空白。这可能会被初次使用的用户误解为图表加载问题或任何其他错误,从而导致对下一步该做什么感到困惑。因此,我们的客户面临的挑战之一是为甘特图实施全面的空白状态。

 

为了解决这个问题,我们在甘特图中引入了一个新的内置空屏幕功能。它是完全可配置的,可以显示在图表的网格或时间线部分。空状态屏幕的主要目的是邀请最终用户在没有数据加载到甘特图中时开始安排他们的活动。在代码中,此功能是通过show_empty_state配置激活的。

 

gantt.config.show_empty_state = true;

 

此外, Gantt API 中的ext对象现在还包含emptyStateElement扩展,其中包含一系列与“空状态”相关的方法。例如,使用getContainer()方法,您可以在没有任何任务的情况下在甘特图时间轴中显示“空状态”而不是网格,即更改将应用“空状态”的容器:

 

gantt.ext.emptyStateElement.getContainer = function() {

      return gantt.$task_data.closest(".gantt_layout_content");

};

 

DHTMLX Gantt 8.0 - 空状态

 

 

还有机会使用renderContent()方法更改“空状态”消息中显示的内容:

 

gantt.ext.emptyStateElement.renderContent = function(container) {

       return `<div>

           <div></div>

           <div>

                <div     data-empty-state-create-task>${gantt.locale.labels.empty_state_text_link}</div>

           <div>${gantt.locale.labels.empty_state_text_description}</div>

      </div>

</div>`;

};

 

要熟悉emptyStateElement扩展中提供的其他新方法,请联系我们

 

空甘特图时间轴中的背景网格

我们用户的另一个要求是即使没有任务也能显示时间线的背景网格。在我们的新版本中,您现在可以扩展最后一个任务行下方的背景网格以填充整个时间线,使其与某些 UI 解决方案配合得很好。此外,当应用程序允许用户通过将任务拖放到图表的空白区域来创建新任务时,此功能会派上用场。

 

要将背景网格添加到时间轴,您需要进行以下设置:

 

gantt.config.timeline_placeholder = true;

 

如有必要,您还可以通过timeline_cell_class模板突出显示背景网格中的特定列和单元格:

 

gantt.templates.timeline_cell_class = function (task, date) {

   if (!gantt.isWorkTime({ date: date, task: task })) {

       return "weekend";

   }

};

 

至于背景行,一个临时任务对象将被添加到模板中,如文档中所述。

DHTMLX Gantt 8.0 - 空甘特图中的背景网格

 

当甘特图没有数据或任务行未填满整个时间线时,背景网格将显示在时间线中。

 

启用甘特图导出的新方法

导出是 DHTMLX 甘特图的一个重要特征。早些时候,您可以在 HTML 页面上包含导出 api.js 文件后开始使用它,或者将其放入配置文件夹并导入(当使用 JS 框架和 Node.js 时)。在 v8.0 中,我们提供了一种更方便的方式来启用此功能。现在您可以将其设置为使用plugins()方法:

 

gantt.plugins({

   export_api: true

})

 

在迁移说明中了解有关此新颖性的更多信息。

 

从项目继承约束 (专业版)

当使用 DHTMLX Gantt 中的自动调度功能时,最终用户通常会借此机会为常规任务添加约束以更好地满足他们的调度需求。将复杂任务分解为多个更易于管理的部分也很常见。但在这种情况下,对任务的开始和/或完成日期设置限制将花费更多时间。

 

新版本的 DHTMLX Gantt 库提供了在其子任务中继承项目类型任务(或简称项目)约束的可能性,从而消除了这种不便。这意味着您只需为父项目设置所需的约束类型,这将自动应用于其子项目。同时,如果任何一个子任务已经有了自己的约束,它不会被父任务的约束所取代。

DHTMLX Gantt 8.0 - 从项目继承约束

 

在后台,通过将新添加的gantt.config.auto_scheduling_project_constraint属性的值从false(默认值)更改为true来启用此功能。

 

gantt.config.auto_scheduling_project_constraint = true;

 

否则,项目中的约束将不会应用于它们的嵌套任务。

 

请注意,此功能仅在 DHTMLX 甘特图的专业版中可用。

 

改进了关键路径和松弛时间的计算

按时交付项目是使用甘特图的主要目的。但时常发生的是,由于任何情况,项目任务需要额外的时间才能完成。这可能会成为项目经理真正头疼的问题,因为这样的时间滞后可能会影响整个项目的截止日期。在我们的甘特图中,您可以计算松弛时间(自由时间和总时间)以及甘特图任务为此类紧急情况做好准备的关键路径。新版本包括对这些功能的一些有用更改。

 

首先,对于中型项目,关键路径和松弛期的计算过程应该变得更快。我们还消除了客户报告的与松弛计算相关的各种问题。

 

新的甘特图增加了计算项目总冗余的可能性。它将帮助最终用户大致了解完成任务的缓冲时间,而不会影响整个项目的截止日期。因此,现在可以为所有类型的甘特图任务计算总时差,而免费时差仅适用于常规任务和里程碑。

 

v8.0 开始,我们的甘特图中用于计算关键路径、松弛期和自动调度的算法也可以像在 MS Project 中一样包括任务进度值。

它将有助于解决与上述算法中已完成任务(100% 进度)相关的一些问题,并确保以下内容:

 

1、已完成的任务有零松弛

2、自动调度过程中不考虑已完成的任务

3、已完成的任务不能成为甘特图中关键路径的一部分

 

默认情况下禁用此功能,更新不会改变我们客户现有应用程序中甘特图计算算法的行为。

 

从技术角度来看,这种新颖性是通过可选的auto_scheduling_use_progress属性实现的:

 

gantt.config.auto_scheduling_use_progress = true;

gantt.init("gantt_here");

 

仅当通过相应插件将关键路径或自动调度扩展设置为工作时,您才能应用此配置。

 

请记住,auto_scheduling_use_progress属性仅在 DHTMLX 甘特图的专业版中可用。

 

拆分和汇总任务的更新

DHTMLX 甘特图中,拆分和汇总任务的能力对于在父子层次结构中或作为摘要显示项目数据至关重要。

 

v8.0 中,我们在自定义单个汇总和拆分任务方面为您提供了更多自由。新的甘特图使您能够根据时间线中的位置为汇总和拆分任务应用各种样式。

 

它是使用task_class模板完成的,该模板丰富了新的task.$rendered_at属性,该属性指示行的 id,其中在甘特图时间轴中呈现特定的拆分任务或汇总项目:

 

gantt.templates.task_class = function(start, end, task) {

    if(task.$rendered_at) {

           if(gantt.calculateTaskLevel(gantt.getTask(task.$rendered_at)) === 1) {

                   return "phase-level-split-task"; // or "phase-level-rollup";

           }

    }

    return " ";

};

 

现在您可以控制每个汇总任务在其父项目中的可见性。它是通过新的onBeforeRollupTaskDisplay事件实现的。

 

我们还为拆分任务添加了一个过滤选项。要将此有用的任务管理功能付诸实践,您需要使用onBeforeSplitTaskDisplay事件并返回truefalse,以便相应地在甘特图中显示或不显示特定子任务。

 

gantt.attachEvent("onBeforeSplitTaskDisplay", function (id, task, parent) {

       if (task.progress === 1) {

           return false;

       }

       return true;

});

    

我们在本节中指出的最后一件事,我们必须提到项目类型的甘特图任务的汇总属性现在可以获得false值。这将有助于确保不会在给定的项目任务上呈现汇总元素。使用rollup属性中的所有其他值,汇总任务将照常在项目上呈现。

 

已删除任务的服务器确认

通过 UI 对甘特图中的任务执行基本操作时,必须确保这些操作正确保存在服务器端并通知用户。为此,DHTMLX 使用内置的DataProcessor库。但直到最近,它还仅限于保存与创建和编辑任务相关的数据更改。

 

从现在开始,DataProcessor对象包含新的deleteAfterConfirmation: true设置选项,这将有助于处理任务的删除:

 

const dp = gantt.createDataProcessor({

    url: "/gantt/backend/data",

    mode: "REST",

    deleteAfterConfirmation: true

});

 

或者

 

const dp = new gantt.dataProcessor("/api");

dp.init(gantt);

dp.setTransactionMode("REST");

dp.deleteAfterConfirmation = true;

 

以下是它在实践中的工作原理:

DHTMLX Gantt 8.0 - 删除任务

 

 

与创建和编辑一样,被删除的任务将高亮显示,直到收到服务器的操作完成确认响应。当任务突出显示时间过长时,可能表示后端出现问题。如果要删除的任务有依赖项或子任务,则只有在确认删除父任务后,才会开始删除它们。

 

在时间线单元格中添加自定义内容的新方法

每个项目都有其独特的方式,项目经理可能需要向时间线单元添加一些额外的视觉元素,以更有效地管理任务。在 v8.0 之前,您只能使用addTaskLayer()方法来实现此类功能。它用于为时间线中的任务应用带有自定义元素的附加层。

 

这种方法仍然是我们向时间线添加额外元素的推荐方法。但是,在某些情况下,可能需要在时间轴的特定单元格上添加内容,从而导致自定义图层功能庞大而复杂。

 

为了解决这个问题,我们提出了一种在时间线单元格中添加额外内容的替代方法。

 

使用 DHTMLX 甘特图 8.0,您可以通过特殊模板将带有图像、图标或其他自定义 HTML 元素的您自己的内容添加到任何时间线单元格 - timeline_cell_content

DHTMLX Gantt 8.0 - 单元格中的自定义内容

 

 

这就是timeline_cell_content模板在代码中的实现方式:

 

gantt.templates.timeline_cell_content = function (task, date) {

   if (17 <= task.id && task.id <= 20){

       const demoValue = randomValueForDate(date, 7)

       var value2 = Math.round(demoValue + demoValue * 0.15);

       return `<div>${randomValueForDate(date, 7)}</div>

       <div>${value2}</div>`;

   }

   return "";

};

 

呈现时间线行时,将为每个可见单元格调用模板,并将接收一个任务对象和单元格的日期作为输入。该方法应返回包含任何文本或 HTML 元素的字符串,如上例所示。

 

应该注意的是,单元格中的自定义内容将显示在任务栏“下方”,即任务栏将具有更高的 z-index。因此,当任务栏放在单元格上面时,单元格内容将不可见。

 

当需要在任务栏上显示内容时,需要在自定义元素中添加 z-index

 

.cost{

  position:absolute;

  z-index: 5;

  pointer-events: none;

}

 

在时间线单元格中添加内容时,新模板方法在工作量和性能影响方面是更可取的选择。

 

项目任务的新搜索选项

DHTMLX Gantt 组件 v8.0 getTaskBy()方法提供了一个新的搜索选项。更具体地说,现在这个方法允许搜索项目类型的任务。在早期版本中,您不得不求助于使用函数作为方法的参数来迭代常规任务和里程碑以及项目:

 

var task = gantt.getTaskBy(function(task){

   return task.text == "Project #2";

});

console.log(task);

 

这可能会造成一些不便并影响甘特图的性能。因此,我们添加了一个可选参数,旨在指定应返回哪些类型的任务。

 

例如,您可以通过将第三个参数中的值设置为true来选择所有类型的任务:

 

gantt.getTaskBy("progress", 1, { task: true, project: true, milestone: true })

 

如果您只想查看项目,只需在参数中设置project: true即可:

 

gantt.getTaskBy("progress", 1, { project: true})

 

更多惊喜

作为对这个大版本的奖励,我们的开发团队还准备了一个关于将 DHTMLX 甘特图组件与我们的 JavaScript 小部件库集成的示例。

 

在此示例中,甘特图的灯箱编辑器完全基于套件小部件,使您可以完全控制通常无法从甘特图的用户界面访问的元素。

DHTMLX Gantt 8.0 - 甘特图与套件的集成

 

 

使用此示例中的灯箱编辑器,您不仅可以编辑任务,还可以编辑以下内容:

 

1、添加/删除任务前置任务

2、修改任务日历和日历设置

3、管理资源分配

 

我们努力改进 TypeScript 支持。库附带的类型定义现在包括gantt.ext中定义的插件 API ,以及以前对 TypeScript 不可见的甘特图对象的许多其他模块和属性。

 

通过访问“更新列表”页面总结您对新甘特图版本的了解。

 

如果您想评估此版本的实用性,我们邀请您下载我们的 JavaScript 甘特图的30 天免费试用版。如需帮助,请联系我们的在线客服

联系我们

周一至周日 8:00-23:00

免费热线

023-62585653

张经理:13082556879

罗经理:17558866126

许经理:13057566525

开发外包

ERP-一体化

小程序

企业微信客服

版权所有:重庆庚乾信息科技有限公司 ©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508

版权所有:重庆庚乾信息科技有限公司

©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508