前端vue實現(xiàn)甘特圖功能
1 什么是甘特圖
甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。以提出者亨利·L·甘特先生的名字命名,是項目管理、生產(chǎn)排程、節(jié)點管理中非常常見的一個功能。
甘特圖內(nèi)在思想簡單,即以圖示的方式通過活動列表和時間刻度形象地表示出任何特定項目的活動順序與持續(xù)時間?;臼且粭l線條圖,橫軸表示時間,縱軸表示活動(項目),線條表示在整個期間上計劃和實際的活動完成情況。它直觀地表明任務(wù)計劃在什么時候進(jìn)行,及實際進(jìn)展與計劃要求的對比。管理者由此可便利地弄清一項任務(wù)(項目)還剩下哪些工作要做,并可評估工作進(jìn)度。
2 為什么要用甘特圖
在很多較大且時間跨度較長的工程、IT、市場營銷、電商運(yùn)營等項目中,都會涉及諸多對人員、時間、質(zhì)量等方面的控制,而且很多時候還需要跨部門進(jìn)行協(xié)作,所以,如何把控整個項目管理流程就顯得非常重要。
而使用甘特圖就可以實現(xiàn)這樣一個目的。
3 前端vue實現(xiàn)甘特圖
3.1 DHTMLX 甘特圖
dhtmlx-gantt 是一個綜合性 JavaScript 庫,在過去十年中被 Web 開發(fā)人員廣泛用于在項目管理應(yīng)用程序中實現(xiàn)甘特圖功能。使用這個完全可配置的甘特圖組件,開發(fā)人員可以提供有效的解決方案來管理基于流行框架和不同服務(wù)器端技術(shù)的項目中的任務(wù)及其依賴項。
可擴(kuò)展項和相關(guān)api比較完整,并且免費(fèi)、擴(kuò)展性高。
github地址:https://github.com/DHTMLX/gantt
dhtmlxGantt是一款JavaScript編寫的甘特圖控件,幫助開發(fā)人員進(jìn)行項目的可視化展示和安排,通過該控件可以在任務(wù)之間設(shè)置不同的關(guān)系,提供的大量的API和事件處理可以幫助開發(fā)人員根據(jù)自身需要進(jìn)行高度自定義和設(shè)置。支持過濾和放大、時間比例、最短路徑、顯示隱藏列、導(dǎo)出數(shù)據(jù)、加載大數(shù)據(jù)集等多種功能。

圖一:dhtmlx-gantt實現(xiàn)甘特圖demo圖
3.2 使用dhtmlx-gantt甘特圖
3.2.1 下載安裝
npm install dhtmlx-gantt -save
3.2.2 引入插件
import { gantt } from 'dhtmlx-gantt' // 組件插件
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css' // 組件樣式3.2.3 配置屬性
gantt.config: {
task_height: 28, //時間軸圖表中,任務(wù)條形圖的高度
row_height: 36, //時間軸圖表中,甘特圖的高度
add_column: true, // 添加符號
auto_types: true, //將包含子任務(wù)的任務(wù)轉(zhuǎn)換為項目,將沒有子任務(wù)的項目轉(zhuǎn)換回任務(wù)
xml_date: '%Y-%m-%d', //從后端過來的數(shù)據(jù)格式化
show_grid: false, //是否顯示左側(cè)樹表格
autosize: true, //自適應(yīng)甘特圖的尺寸大小, 使得在不出現(xiàn)滾動條的情況下, 顯示全部任務(wù)
date_format: "%Y-%m-%d-%H", //日期格式化
autofit: true, //左側(cè)自適應(yīng)
grid_width: 500, //左側(cè)寬
drag_links: true, //是否連線
readonly: false, //只讀
resize_rows: true, //允許調(diào)整行高
select_task: true, //右側(cè)顯示列名
scales: [
{ unit: "day", step: 1, format: "%Y-%m-%d" },
{ unit: "hour", step: 1, format: "%Y-%m-%d %H" },
{ unit: "minute", step: 1, format: "%Y-%m-%d %H:%i" },
{ unit: "second", step: 1, format: "%Y-%m-%d %H:%i:%s" },
{ unit: "week", step: 1, format: "%Y-%m-%d %H:%i" },
{ unit: "month", step: 1, format: "%Y-%m" },
{ unit: "year", step: 1, format: "%Y" },
], // 右側(cè)時間格式
fit_tasks: true, //自動調(diào)整圖表坐標(biāo)軸區(qū)間用于適配task的長度
wide_form: false, //彈窗寬
}
// 漢化
gantt.locale = {
date: {
month_full: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
month_short: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
day_full: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
day_short: ["日", "一", "二", "三", "四", "五", "六"]
},
labels: {
dhx_cal_today_button: "今天",
day_tab: "日",
week_tab: "周",
month_tab: "月",
new_event: "新建日程",
icon_save: "保存",
icon_cancel: "關(guān)閉",
icon_details: "詳細(xì)",
icon_edit: "編輯",
icon_delete: "刪除",
confirm_closing: "請確認(rèn)是否撤銷修改!",
confirm_deleting: "是否刪除計劃?",
section_description: "描述:",
section_time: "時間范圍:",
section_type: "類型",
section_text: "任務(wù)名稱:",
section_color: "顏色:",
/* grid columns */
column_text: "計劃名稱",
column_start_date: "開始時間",
column_duration: "持續(xù)時間",
column_add: "",
/* link confirmation */
link: "關(guān)聯(lián)",
confirm_link_deleting: "將被刪除",
link_start: " (開始)",
link_end: " (結(jié)束)",
type_task: "任務(wù)",
type_project: "項目",
type_milestone: "里程碑",
minutes: "分鐘",
hours: "小時",
days: "天",
weeks: "周",
months: "月",
years: "年"
}
}
// 鼠標(biāo)操作甘特圖--懸浮顯示詳情、拖動條目、拖動圖等配置
gantt.plugins({
click_drag: true,//用于啟用或禁用通過單擊任務(wù)條目并拖動來更改任務(wù)的開始和結(jié)束日期的功能
drag_timeline: true,// 拖動圖
marker: true,// 時間標(biāo)記
fullscreen: true,// 全屏
tooltip: true,// 鼠標(biāo)經(jīng)過時信息
undo: true // 允許撤銷
})3.2.4 方法Api
// 初始化
gantt.init(dom元素);
// 填充數(shù)據(jù)
gantt.parse(demoData)
// 重新渲染
gantt.render()
// 重新加載或刷新甘特圖的數(shù)據(jù)的
gantt.refreshData()
// 設(shè)置本地化語言
gantt.i18n.setLocale("cn")
// 跟新甘特圖標(biāo)記
gantt.updateMarker(標(biāo)記數(shù)據(jù)對象)
// 清空數(shù)據(jù)
gantt.clearAll();
//添加
gantt.attachEvent("onAfterTaskAdd", function (id, item) {
// console.log("添加后觸發(fā)");
});
//移動進(jìn)度
gantt.attachEvent("onAfterTaskDrag", function (id, mode, e) {
console.log("移動進(jìn)度后觸發(fā)");
});
//移動任務(wù)
gantt.attachEvent("onAfterTaskMove", function (id, parent, tindex) {
console.log("移動任務(wù)后觸發(fā)");
});
//刪除任務(wù)
gantt.attachEvent("onAfterTaskDelete", function (id, item) {
console.log("刪除");
});
//修改任務(wù)
gantt.attachEvent("onAfterTaskUpdate", function (id, item) {
console.log("修改");
})
// 獲取任務(wù)總數(shù)
gantt.getTaskCount()3.2.4 數(shù)據(jù)結(jié)構(gòu)
data: [{
* id: 1,//必填
* text: "標(biāo)題",//必填
* type: "task",// 項目類型 task任務(wù) project項目 milestone里程碑
* start_date: "2023/3/15",
* duration: 5,//任務(wù)持續(xù)時間
* parent: 11,//存在這個屬性說明此數(shù)據(jù)為子任務(wù)數(shù)據(jù),父任務(wù)id為11
* progress: 0.3,//項目任務(wù)滑塊的進(jìn)度
* open: true,//是否展開顯示
* ....
},]
link:[{
"id":"1", //唯一標(biāo)識
"source":"1", // 起始
"target":"2", // 終止
"type":"1" //類型
....
},]3.3 具體功能
3.3.1 新增

圖二:新增任務(wù)
如圖所示 點擊表頭?則彈出 彈框進(jìn)行新增,新增主任務(wù)后還可以點擊任務(wù)欄?在其之上繼續(xù)新增子任務(wù)。
3.3.2 編輯、刪除

圖三:編輯、刪除任務(wù)
如圖所示 鼠標(biāo)雙擊任務(wù)則彈出 彈框,回顯任務(wù)具體信息進(jìn)行編輯、刪除操作
3.3.3 任務(wù)進(jìn)度

圖四:進(jìn)度
如圖所示,鼠標(biāo)在條目上拖動三角形圖案可改變?nèi)蝿?wù)的進(jìn)度,同時在左側(cè)進(jìn)行回顯,拖動后深色區(qū)域為已完成的,淺色區(qū)域代表未完成的。
3.3.4 拖拽
// 拖動圖
gantt.plugins.drag_timeline: true,

圖五:拖拽
如圖所示,鼠標(biāo)在條目上長按拖拽可改變?nèi)蝿?wù)的開始和結(jié)束時間,同時在左側(cè)進(jìn)行回顯。
3.3.5 構(gòu)建關(guān)系
//是否連線
gantt.config.drag_links = true;

圖六:建立連線關(guān)系
如圖所示,當(dāng)開啟條目連線后,在甘特圖中鼠標(biāo)懸浮每個條目在其兩端都會出現(xiàn)小圓點,當(dāng)點擊某個條目的小圓點移動至另一個條目的其中一個小圓點則成功構(gòu)建關(guān)系。
刪除連線關(guān)系:雙擊連線,彈框確認(rèn)即可。
結(jié)論
dhtmlxGantt是一個強(qiáng)大的JavaScript Gantt圖表庫,提供易于使用、高度可自定義的Gantt圖表組件。它支持多項任務(wù)和進(jìn)度條,以及多種列和行布局,可用于創(chuàng)建各種類型的時間線和計劃表。dhtmlxGantt包含多個配置選項,允許用戶自定義時間軸、任務(wù)、列和行等組件,同時dhtmlxGantt可以和多個JavaScript庫和框架一起使用,如Angular、vue、React等,能夠更加有效地利用它來開發(fā)各種類型的時間線和計劃表
到此這篇關(guān)于前端vue實現(xiàn)甘特圖功能的文章就介紹到這了,更多相關(guān)vue甘特圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
uniapp 拖拽圖片排序功能實現(xiàn) 類似于微信朋友圈效果
這篇文章主要介紹了uniapp 拖拽圖片排序功能實現(xiàn)類似于微信朋友圈,一部分是拖拽的放大做小,xy位置判定,圖片數(shù)組的插入排序,另一部分是上傳加號圖片的?定位? 動態(tài)計算分為幾列,每一個圖片大小的位置?絕對定位的計算,需要的朋友可以參考下2024-07-07
vue中使用file-saver導(dǎo)出文件的全過程記錄
這篇文章主要給大家介紹了關(guān)于vue中使用file-saver導(dǎo)出文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02
Vue.js?前端項目在常見?Web?服務(wù)器上的部署配置過程
Web服務(wù)器支持多種編程語言,如 PHP,JavaScript,Ruby,Python 等,并且支持動態(tài)生成 Web 頁面,這篇文章主要介紹了Vue.js?前端項目在常見?Web?服務(wù)器上的部署配置,需要的朋友可以參考下2023-02-02
vue中使用heatmapjs的示例代碼(結(jié)合百度地圖)
這篇文章主要介紹了vue中使用heatmapjs的示例代碼(結(jié)合百度地圖),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
Vue項目中大文件切片上傳實現(xiàn)秒傳與斷點續(xù)傳的詳細(xì)實現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于Vue項目中大文件切片上傳實現(xiàn)秒傳與斷點續(xù)傳的詳細(xì)實現(xiàn)過程, 在開發(fā)中,如果上傳的文件過大,可以考慮分片上傳,分片就是說將文件拆分來進(jìn)行上傳,將各個文件的切片傳遞給后臺,然后后臺再進(jìn)行合并,需要的朋友可以參考下2023-08-08
vue實現(xiàn)button按鈕的重復(fù)點擊指令方式
這篇文章主要介紹了vue實現(xiàn)button按鈕的重復(fù)點擊指令方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

