使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

news/2025/1/11 23:48:43/

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是完善的甘特图图表库。

DHTMLX Gantt 8.0正式版下载

项目管理中,合理利用时间起着至关重要的作用。当在甘特图中处理大量任务时,有必要腾出时间来指定它们的持续时间。因此,用日历功能来补充它是一个好主意,这样可以更方便地进行时间管理,您可以依赖经过时间验证的DHTMLX Calendar,替代使用某些第三方工具。

在这篇博文中,您将学习使用Suite UI库中的JavaScript日历小部件和DHTMLX Gantt的场景。

开始日期的甘特图内联编辑器中的日历

使用JavaScript日历小部件和DHTMLX Gantt的应用场景

我们从向甘特图网格中的内联编辑器添加JavaScript日历开始,内联编辑器附带了多种预定义的编辑器类型。如果您需要一些特殊的东西(例如日历)来快速设置任务的开始日期和时间,则有必要创建自定义内联编辑器。

让我们更详细地描述一下如何做到这一点。

第一步是在show()方法中创建HTML元素,这些元素将在打开自定义编辑器时显示。

javascript">gantt.config.editor_types.custom_editor = {
show: function (id, column, config, placeholder) {
const html = `<div class='dhx_calendar_container'>
<input type="text" id="calendar" readonly data-widget-control style="margin-left: 10px;">
</div>`;
placeholder.innerHTML = html;
},

Calendar小部件应该添加到set_value()方法中。

在函数的开头,您会得到一个任务对象:

javascript">set_value: function (value, id, column, node) {
const task = gantt.getTask(id)

之后,您需要创建一个新的calendar对象:

javascript">const calendar = new dhx.Calendar(null, { value: task.start_date, dateFormat: "%d/%m/%y %H:%i", timePicker: true, css: "dhx_widget--bordered" });

在第一个参数中,指定应该显示日历的容器。您应该使用null来创建一个新的calendar对象,但不要将其添加到页面中,第二个参数是一个具有日历配置的对象。

value参数显示在打开日历时将突出显示的日期。

javascript">value: task.start_date

接下来是日期格式:

javascript">dateFormat: "%d/%m/%y %H:%i",

如果您希望在日历中不仅可以设置日期,还可以设置时间,可以通过添加timePicker参数(将其值设置为true)来实现。

javascript">timePicker: true

CSS参数指定日历将接收的类的名称。

javascript">css: "dhx_widget--bordered"

我们文档的这一部分给出了当使用特定类名时将被添加的CSS类列表。

然后创建弹出对象并在其中添加日历。

javascript">const popup = new dhx.Popup();
popup.attach(calendar);

之后您必须找到一个输入元素,并将从日历中获得的日期值添加到该元素。

javascript">const dateInput = document.querySelector("#calendar");
dateInput.value = calendar.getValue();

因此在单击该元素之后,将显示带有日历的弹出窗口。

javascript">dateInput.addEventListener("click", function () {
popup.show(dateInput);
});

在日历中选择日期或时间时,输入元素中的值也将被更新。

javascript">calendar.events.on("change", function (date) {
dateInput.value = calendar.getValue();
// uncomment to hide the popup with calendar after changing the date
// popup.hide();
});

在当前的情况下,用户可以选择一个日期,然后通过选择另一个日期来修改它,或者在Calendar弹出窗口保持显示的同时设置时间。要保存输入的值,需要单击甘特图中的空白区域。结果,内联编辑器将关闭,并保存值。

如果使用示例中的popup.hide()方法取消注释行,则在更改日期或时间后立即隐藏带有日历的弹出窗口,但内联编辑器本身将保持打开状态。要应用更改,还需要单击甘特图中的空白区域。

在get_value()方法中,从输入元素获取日期值,将该值从字符串转换为日期对象,然后为任务指定一个新的日期。

javascript">get_value: function (id, column, node) {
const newValue = node.querySelector("input").value;
const dateValue = gantt.date.str_to_date("%d-%m-%y %H:%i")(newValue)return dateValue;
},

在is_changed()方法中,检查当前日期是否与打开内联编辑器时显示的日期不同。

javascript">is_changed: function (value, id, column, node) {
return +value != +this.get_value(id, column, node);
},

这些是在将DHTMLX Suite的Calendar添加到DHTMLX Gantt内联编辑器时必须考虑的关键技术特性。

未完待续,篇幅有限,下期继续讲~


http://www.ppmy.cn/news/1443465.html

相关文章

Mysql(数据库)知识详解终章~{日志,Mycat}

数据库里面的日志是记录数据库运行期间状态信息的文件&#xff0c;Mycat是一个开源的分布式数据库系统。 数据库日志主要包括错误日志、查询日志、慢查询日志、事务日志和二进制日志等几大类。具体如下&#xff1a; 错误日志&#xff1a;记录了数据库服务器启动、运行或停止时…

代谢组数据分析六:其他分析

Other Analysis {#OtherAnalysis} 除了常见的功能分析,还有其他的功能分析方法或R包。本章节主要介绍其他功能分析的方法以及结果解析。 所需要的数据:链接: https://pan.baidu.com/s/1xezhpZRebCsct0AtlDpSHg 提取码: 2djy FELLA: an R package to enrich metabolomics d…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 目录 多线程进阶1.常见的锁策略1.1乐观锁和悲观锁1.2重量级锁 和 轻量级锁1.…

MySQL数据库删除关联数据

在MySQL数据库中&#xff0c;当你想要删除某个数据表的条目&#xff0c;而这个条目与其他表通过外键建立了一对多或多对多的关联时&#xff0c;你需要确保在删除操作中也考虑到了这些关系。这可以通过以下几种方法来实现&#xff1a; 手动删除关联条目&#xff1a; 首先&#x…

STM32 SPI通信

一、SPI总线简介 1.1 SPI总线 串口外设接口&#xff08;Serial Peripheral Interface&#xff0c;SPI&#xff09;总线是一种同步串行外设接口&#xff0c;允许MCU与各种外围设备进行全双工、同步串行通信 SPI总线有四根通信线&#xff1a; ①SCK&#xff08;Serial Clock&a…

使用Python和Pygame创建贪吃蛇游戏 [附源码]

目录 引言&#xff1a; 安装Pygame&#xff1a; 创建游戏窗口&#xff1a; 初始化游戏变量&#xff1a; 绘制蛇和食物&#xff1a; 游戏循环&#xff1a; 运行结果&#xff1a; 结语&#xff1a; 引言&#xff1a; 贪吃蛇游戏是一款经典的游戏&#xff0c;它简单…

rust中结构体的属性默认是不能修改的,要想修改可以有两种方式

Rust中结构体里面的属性默认是不支持修改的&#xff0c;而且默认不是pub的&#xff0c;要想修改的话&#xff0c;有两种方式&#xff0c;我以为和python里面的类似呢&#xff0c;但是还是需要一点技术含量的。如果想在引到外部修改&#xff0c;需要声明pub&#xff0c;如果想在…

Java工程maven中排包exclude的操作

一、背景 在开发项目时依赖了新的jar包&#xff0c;结果工程启动时报错了&#xff0c;此时应该是包依赖冲突的问题。 二、确定冲突的依赖包 执行mvn clean install&#xff0c;通过报错信息来确定冲突的jar包信息 三、排除冲突包的方案 有两种冲突的情况&#xff1a; 1&am…