提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2024-05-23 10:46:34.900|阅读 121 次
概述:本文将为大家介绍DHTMLX Suite UI库中的JavaScript日历小部件和DHTMLX Gantt的实际应用场景,欢迎下载最新组件体验!
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
相关链接:
DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是完善的甘特图图表库。
在项目管理中,合理利用时间起着至关重要的作用。当在甘特图中处理大量任务时,有必要腾出时间来指定它们的持续时间。因此,用日历功能来补充它是一个好主意,这样可以更方便地进行时间管理,您可以依赖经过时间验证的DHTMLX Calendar,替代使用某些第三方工具。
在这篇博文中,您将学习使用Suite UI库中的JavaScript日历小部件和DHTMLX Gantt的场景。
在上文中(点击这里回顾>>),我们为大家介绍了“开始日期和结束日期”这个使用场景,接下来将介绍第三个场景,一起来看看吧~
最后我们想与您分享如何使用DHTMLX Suite库中的Calendar小部件在甘特图时间轴中演示任务截止日期。
这种自定义看起来很不寻常,所以让我们介绍一下它在实践中应该如何工作。在时间轴上双击截止日期元素后,可以更改截止日期或将其删除。如果给定的任务没有截止日期,而最终用户希望添加此参数,则只需双击时间轴中所需的任务行并添加截止日期。
现在,我们进入这个自定义的实现阶段。
在这种情况下,使用额外的层绘制最后期限。自定义元素使用属性进行补充,其中应该指定任务ID。
gantt.attachEvent("onGanttReady", function () {
gantt.addTaskLayer(function drawPlanned(task) {
if (task.deadline) {
const sizes = gantt.getTaskPosition(task, task.deadline, task.deadline);
const el = document.createElement('div');
el.className = 'deadline';
el.setAttribute("data-taskId", task.id);
el.style.left = sizes.left + 'px';
el.style.top = sizes.top + 7 + 'px';
return el;
}
return false;
});
});
双击鼠标的事件处理程序以以下方式添加:
window.addEventListener('dblclick', function (e) {
使用此处理程序,您可以检查是否已经打开了用于编辑截止日期的对话框窗口。如果是,则必须使用return语句终止函数。
if (document.querySelector(".deadline_editor")) {
return
}
接下来应该做的是获取截止日期的DOM元素或时间轴中的任务行。
const deadlineNode = e.target.closest(".deadline");
const taskRowNode = e.target.closest(".gantt_task_row");
const targetNode = deadlineNode || taskRowNode;
DOM元素的属性帮助您获取任务ID,该ID将在getTask()方法中用于获取任务对象。
const taskId = targetNode.dataset.taskId || targetNode.dataset.taskid; const task = gantt.getTask(taskId);
如果在时间轴上双击单元格后,它已经有了截止日期,那么该操作很可能不是为了更改截止日期,而是为了更改其他内容。因此在这种情况下,应该用return语句结束函数。
if (taskRowNode && task.deadline) {
return
}
然后您必须为一项任务设定截止日期,从任务的相应截止日期属性中获取。如果任务没有截止日期,则需要从时间轴中的单击中获取日期,为此使用getRelativeEventPosition()方法。该方法的第一个参数是click事件itself (`e`),第二个参数是时间轴的DOM元素,该方法将返回时间轴中的点击位置。接下来,使用dateFromPos()方法从单击位置获取日期。
let deadlineDate;
if (task.deadline){
deadlineDate = new Date(task.deadline);
}
else {
const clickPos = gantt.utils.dom.getRelativeEventPosition(e, gantt.$task_data);
deadlineDate = gantt.dateFromPos(clickPos.x);
}
下面的步骤是创建一个弹出实例并向其添加HTML内容,将有保存更改、删除截止日期的按钮,以及用于选择日期和时间的日历本身。
const popup = new dhx.Popup({
css: "deadline_editor dhx_widget--bordered"
});
popup.attachHTML("<div id='form_container'></div><div id='calendar_container'></div>");
之后,日历显示在单击的元素下面。
popup.show(targetNode);
日历只有在重新绘制后才能添加到弹出框中,因此您需要将以下代码放入函数中,该函数将在弹出式重绘后启动:
dhx.awaitRedraw().then(function () {
// code
});
当重新绘制弹出窗口时,需要添加一个新的日历实例。在本例中,您指定容器的ID,日历应该在容器中初始化。
const calendar = new dhx.Calendar("calendar_container", {
value: deadlineDate,
dateFormat: gantt.config.date_format,
timePicker: true,
css: "dhx_widget--bordered"
});
下一步是添加一个事件处理程序,该处理程序将在日历中选择日期或时间时触发,并将所选日期添加到deadlineDate变量。
calendar.events.on("change", function (date) {
deadlineDate = date;
});
现在是时候创建一个表单了,您可以在其中显示两个按钮。在CSS属性中,指定dhx_widget-border_bottom来在按钮下呈现框架,并在视觉上将带有按钮的表单与日历分开。在align参数中,可以设置页面宽度的对齐方式。
const form = new dhx.Form("form_container", {
rows: [
{
css: "dhx_widget--border_bottom",
align: "evenly",
cols: [
{ name: "save", view: "flat", text: "Save", type: "button", },
{ name: "delete", view: "link", text: "Delete", type: "button", },
]
},
]
});
最后您必须向表单添加事件处理程序,当按钮被点击时,这些处理程序将被触发。在一个事件处理程序中,您可以为任务指定截止日期值,而在另一个事件处理程序中,您应该删除截止日期属性。之后,更新任务并隐藏弹出窗口。
form.getItem("save").events.on("click", function (events) {
task.deadline = deadlineDate;
gantt.updateTask(task.id);
popup.hide();
});
form.getItem("delete").events.on("click", function (events) {
if (task.deadline) {
delete task.deadline;
gantt.updateTask(task.id);
}
popup.hide();
});
这就是使用DHTMLX Suite库中的日历小部件在甘特图时间轴中实现任务截止日期的方法。
根据上面指南提供的说明,您可以在基于DHTMLX Gantt的项目管理应用程序中有效使用DHTMLX Suite的日历小部件的三个选项。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:慧都网



在现代软件开发过程中,自动化单元测试是确保代码质量与可靠性的关键环节。尤其对于特定框架(如MFC)的代码,测试复杂度显著增加,常因依赖外部资源或交互操作而难以在静默环境中顺利执行。Parasoft C/C++test作为专业的软件测试工具,致力于帮助开发团队高效实施自动化测试,通过其强大的桩函数功能,能够有效模拟依赖组件的行为,从而实现对复杂逻辑的隔离测试。
本文将为大家介绍如何在MyEclipse中使用XDoclet开发EJB 2 Session Bean,欢迎下载最新版体验!
如果能将 CSV 自动转换为 PDF ,就能快速生成清晰、美观的报表,既节省手动排版时间,又能保持数据的专业呈现。本文将介绍如何使用 Spire.XLS for Java 实现这一过程——从加载 CSV 到输出高质量 PDF,仅需数行代码即可完成。
Parasoft C/C++test是一款专为C/C++代码设计的自动化测试工具,通过静态代码分析、单元测试和运行时错误检测等功能,帮助开发团队在早期发现并修复缺陷,提升代码质量和开发效率 。在实际使用中,尤其是在VC6此类旧版开发环境中执行单元测试时,可能会因环境兼容性问题触发链接错误。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站