翻譯|使用教程|編輯:龔雪|2024-09-25 11:04:03.480|閱讀 131 次
概述:本文將為大家介紹如何用DHTMLX Gantt集成DHTMLX Suite的工具欄部件來更方便的管理項(xiàng)目,歡迎下載最新版體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DHTMLX Gantt是用于跨瀏覽器和跨平臺應(yīng)用程序的功能齊全的Gantt圖表。可滿足項(xiàng)目管理應(yīng)用程序的所有需求,是最完善的甘特圖圖表庫。
今天給大家分享一種方法,通過將DHTMLX Gantt集成工具欄來簡化交互,為此選用了DHTMLX Suite的Toolbar(工具欄)小部件,可以與DHTMLX Gantt平滑地結(jié)合在一起。
功能齊全的甘特圖是一種復(fù)雜且經(jīng)過時間驗(yàn)證的工具,用于管理任何復(fù)雜項(xiàng)目中的工作流。然而掌握它的功能多樣性并在實(shí)際項(xiàng)目中充分利用它通常需要時間,因此使用輔助控件(如工具欄)來補(bǔ)充甘特圖是合理的,以方便其使用。在下面的示例中,您可以看到一個基于DHTMLX構(gòu)建的JavaScript甘特圖,其工具欄使用DHTMLX Suite庫中的UI小部件實(shí)現(xiàn)。
工具欄允許最終用戶方便地在甘特圖中執(zhí)行廣泛的操作,例如:
現(xiàn)在我們可以繼續(xù)在JavaScript甘特圖中添加工具欄。
讓我們從使用toolbarItems變量定義工具欄菜單(即工具欄圖標(biāo))的外觀開始,在圖標(biāo)字段中,為圖標(biāo)指定類名,這些圖標(biāo)取自HTML選項(xiàng)卡中啟用的網(wǎng)頁字體(材料設(shè)計(jì)圖標(biāo))。
首先,這是一個CSS部分:
<link media="all" rel="stylesheet" type="text/css">
現(xiàn)在,我們可以繼續(xù)編寫JavaScript代碼了:
const toolbarItems = [ { icon: "mdi mdi-undo-variant", id: "undo" }, { icon: "mdi mdi-redo-variant", id: "redo" }, { icon: "mdi mdi-folder", id: "close" },
您可以指定工具欄元素的類型(例如,輸入、日期選擇器等)。否則,將使用默認(rèn)元素類型。
{ id: "search", type: "input", placeholder: "Search tasks", icon: "mdi mdi-magnify", width: 150, }, { type: "datePicker", value: new Date(2025, 03, 01), label: "Start:", width: 150, id: "start_date", editable: true, mark: (date) => { if (date.getDay() === 5) return "highlight-date"; }, },
在數(shù)組的items參數(shù)中,為下拉列表指定子元素。
{ value: "Export", id: "export", items: [ { value: "Export To PDF", id: "pdf" }, { value: "Export To PNG", id: "png" },
下一步是創(chuàng)建工具欄的新實(shí)例,并在具有toolbar_container ID的容器中初始化它,然后用工具欄項(xiàng)加載數(shù)據(jù)。
const toolbar = new dhx.Toolbar("toolbar_container", { css: "dhx_toolbar--bordered" }); toolbar.data.parse(toolbarItems);
之后,您需要指定在單擊按鈕/輸入文本/選擇日期時觸發(fā)的事件處理程序。
讓我們從點(diǎn)擊事件開始。
toolbar.events.on("click", function (id, e) { switch (id) {
對于展開按鈕,使用eachTask()方法遍歷每個任務(wù),并調(diào)用open()方法打開任務(wù)。所有這些都在batchUpdate()方法中完成,因此更改只呈現(xiàn)一次。
case "open": gantt.batchUpdate(function (task) { gantt.eachTask(function (task) { task.$open = true; }) }) break;
對于折疊按鈕,您可以使用close()方法進(jìn)行相同的操作。
case "close": gantt.batchUpdate(function (task) { gantt.eachTask(function (task) { task.$open = false; }) }) break;
對于撤銷和重做按鈕,您可以使用相應(yīng)的undo()和redo()方法。
case "undo": gantt.undo() break; case "redo": gantt.redo() break;
具有critical ID的元素啟用和禁用highlight_critical_path配置,來添加或刪除關(guān)鍵任務(wù)的高亮顯示。
case "critical": gantt.config.highlight_critical_path = !gantt.config.highlight_critical_path; gantt.render() break; }
然后是導(dǎo)出選項(xiàng),要導(dǎo)出為Excel格式,您應(yīng)該使用可視化參數(shù)向?qū)С龅奈募砑宇愃聘侍貓D的時間軸。
case "pdf": gantt.exportToPDF() break; case "png": gantt.exportToPNG() break; case "excel": gantt.exportToExcel({ visual: true }) break; case "msp": gantt.exportToMSProject() break; case "p6": gantt.exportToPrimaveraP6() break;
接下來,您需要為輸入元素添加事件處理程序。如果它是一個搜索字段,則將filterValue變量的值更改為一個新值,并調(diào)用refreshData來呈現(xiàn)更改。
toolbar.events.on("input", function (id, value) { if (id == "search") { filterValue = value; gantt.refreshData() }
任務(wù)在onBeforeTaskDisplay事件處理程序中進(jìn)行過濾,如果返回false,則不會顯示任務(wù)。在這里,您將任務(wù)名稱轉(zhuǎn)換為小寫,并查看任務(wù)名稱是否包含來自filterValue的值(也轉(zhuǎn)換為小寫)。
let filterValue = ""; gantt.attachEvent("onBeforeTaskDisplay", function (id, task) { if (filterValue && task.text.toLowerCase().indexOf(filterValue) == -1) { return false; } return true; });
如果輸入處理程序中有另一個事件,則意味著應(yīng)該更新任務(wù)的顯示日期范圍。
toolbar.events.on("input", function (id, value) { if (id == "search") { filterValue = value; gantt.refreshData() } else { updateDateRange() } });
在updateDateRange函數(shù)中,指定帶有日期的HTML元素。
function updateDateRange() { const startDateEl = document.querySelector("#start_date"); const endDateEl = document.querySelector("#end_date");
之后,將值從字符串轉(zhuǎn)換為日期。
const startDate = gantt.date.str_to_date("%d/%m/%y")(startDateEl.value); const endDate = gantt.date.str_to_date("%d/%m/%y")(endDateEl.value);
然后為gantt.config.start_date 和 gantt.config.end_date參數(shù)指定日期,現(xiàn)在使用render()方法來呈現(xiàn)更改。
gantt.config.start_date = startDate; gantt.config.end_date = endDate; gantt.render()
當(dāng)元素失去焦點(diǎn)時觸發(fā)inputBlur事件,檢查ID值,如果有start_date或end_date參數(shù),則調(diào)用updateDateRange函數(shù)。它必須在一段時間后執(zhí)行,因?yàn)槿绻⒓磮?zhí)行,HTML元素仍將具有舊值。
toolbar.events.on("inputBlur", function (id) { if (id == "start_date" || id == "end_date") { setTimeout(function () { updateDateRange() }, 200) } });
完成所有這些配置步驟后,啟用所有插件(擴(kuò)展)。
gantt.plugins({ undo: true, critical_path: true, export_api: true })
本教程中最棘手的部分已經(jīng)結(jié)束。
從最后的示例中可以看到,工具欄使最終用戶更容易與甘特圖進(jìn)行交互。使用DHTMLX Suite的工具欄小部件,您可以用最少的時間和精力將方便的工具欄與JavaScript甘特圖集成在一起,DHTMLX庫的高度可定制性允許實(shí)現(xiàn)完全符合任何項(xiàng)目需求的解決方案。
如需了解更多產(chǎn)品資訊,歡迎咨詢“”!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)