提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2024-01-31 11:12:39.593|阅读 34 次
概述:本文将主要介绍如何用DHTMLX Gantt构建类似JIRA式的项目路线图,欢迎下载最新版组件体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。
在web项目中使用DHTMLX Gantt时,开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的自定义能力,因此本文仅继续介绍DHTMLX Gantt的自定义用例。
在这个系列的文章中,您将学习如何使用DHTMLX Gantt组件构建类似jira的项目路线图。在上文中(点击这里回顾>>)主要介绍了如何实现工作项的自定义图标,本文将继续介绍如何实现工作项的自定义对话框窗口、自定义网格列等,欢迎持续关注!
在工作项的自定义图标中,可以动态更改显示的数值。为此有必要单击所需的图标,并在打开的对话框窗口中使用三个按钮进行必要的更改。接下来,我们将向您解释如何实现此功能。
您需要使用modalbox()方法来显示自定义对话框窗口,需要指定一个类型为“number”的输入元素,以便更方便地设置值。此窗口还包括保存和取消更改的按钮,以及删除图标值和图标本身的按钮。
将对话框窗口保存为一个变量,以便以后能够访问它并从HTML元素中获取值,而无需在屏幕上看到对话框窗口。
let modalbox = gantt.modalbox({ title: "Work Item", text: `<div><label>Value: <input type='number' min=0 class='items_value' /></label></div>`, buttons: [ { label: "Save", css: "items_button", value: "save" }, { label: "Cancel", css: "items_button", value: "cancel" }, { label: "Delete", css: "items_button", value: "delete" } ],
对话框窗口出现在屏幕上之后,您应该设置任务属性的值。如果给定日期的任务没有值,则将其设置为0。
modalbox.querySelector(".items_value").value = task.items[clickDate] || 0;
在callback()方法中,有必要指定在自定义图标的对话框窗口中的每个按钮被点击后应该发生什么:
callback: function (result) { switch (result) { case "save": const newValue = modalbox.querySelector(".items_value").value; task.items[clickDate] = +newValue; gantt.updateTask(task.id); break; case "cancel": break; case "delete": if (task.items[clickDate]) { delete task.items[clickDate]; gantt.updateTask(task.id); } break; } }
路线图的网格部分还包括一些应该从编程角度解释的专栏,本文中我们讨论的是三列——物品、故事点和状态。
我们从“Items” 一栏开始,每个任务的工作项总数可以在相应的网格列中找到。由于在列配置中使用了模板函数,因此可以显示这些值。应该提到的是,“故事点”列中的值是有依赖关系的,没有描述点的任务也应该有0个工作项。
name: "items", label: "Items", align: "center", width: 40, resize: true, template: function (task) { let total = 0; if (task.story_points && task.items) { for (item in task.items) { total += task.items[item]; } } return total; }
为了简化故事点的编辑,您需要向相应的网格列添加一个内联编辑器。
const storyPointsEditor = { type: "number", map_to: "story_points", min: 0 }; ... { name: "story_points", label: "Story Points", align: "center", width: 40, resize: true, editor: storyPointsEditor, template: function (task) { return task.story_points || 0; } },
路线图网格中的“Status” 列显示任务的进度条,可以通过单击所需的状态选项动态更改此参数,状态数据存储在一个单独的数组中:
gantt.serverList("status", [ { key: 0, label: "Pending" }, { key: 1, label: "Ready to Start" }, { key: 2, label: "In Progress" }, { key: 3, label: "Done" }, { key: 4, label: "On Review" }, { key: 5, label: "Accepted" }, ]);
lightbox配置有一个“select”类型的标准部分(即这种类型的部分在甘特图中可用),该列表取自数组gantt.serverList(" status ")。
{ name: "status", height: 22, map_to: "status", type: "select", options: gantt.serverList("status") },
要在网格中显示自定义状态值,必须在列配置中使用模板选项。然后添加主HTML元素,所有其他元素都应该放在这里,文本状态显示在单元格的顶部。
let statusName = byId(gantt.serverList('status'), task.status);
let html = `<div class="status_column"><div class="status_name">${statusName}</div><div class="status_progress">`
配置任务时,需要指定状态值(而不是状态名)。要匹配状态号及其文本,请应用自定义byId函数,它有助于通过状态名的编号找到所需的状态名。
function byId(list, id) { for (var i = 0; i < list.length; i++) { if (list[i].key == id) { return list[i].label || ""; } } return "Pending"; }
每个任务状态都有一个序号,彩色方块的数量由这个序号决定。
在编程上,它以以下方式实现:
const statuses = gantt.serverList('status'); for (var i = 1; i < statuses.length; i++) { const item = statuses[i]; let filled = ""; if (item.key <= task.status) { filled = "filled" } const el = `<div class="bar ${filled}" data-status=${item.key}></div>`; html += el; }
使用onTaskClick事件处理程序使状态任务在点击状态列中的方块后发生变化:
gantt.attachEvent("onTaskClick", function (id, e) {
在方形元素中,需要从HTML元素中获取状态号并更改任务对象的状态。之后,应该更新任务以呈现更改。最后,您需要返回false,以便在任务状态改变时不会触发onTaskClick事件。否则,甘特图将从单击的行中选择任务,而不再选择前一个任务。
const statusBar = e.target.closest(".status_progress .bar"); if (statusBar) { const task = gantt.getTask(id); task.status = statusBar.dataset.status; gantt.updateTask(id); return false; } return true;
更多教程内容请下期再见,记得点赞关注收藏哦!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
在处理电子表格时,尤其是在专业和数据导向型环境中,正确设置 Excel 单元格内的数字格式至关重要。本文将介绍如何使用 Spire.XLS for Java 设置 Excel 单元格的数字格式,帮助轻松创建精美且结构清晰的电子表格。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢