前端vue實(shí)現(xiàn)甘特圖功能
1 什么是甘特圖
甘特圖(Gantt chart)又稱(chēng)為橫道圖、條狀圖(Bar chart)。以提出者亨利·L·甘特先生的名字命名,是項(xiàng)目管理、生產(chǎn)排程、節(jié)點(diǎn)管理中非常常見(jiàn)的一個(gè)功能。
甘特圖內(nèi)在思想簡(jiǎn)單,即以圖示的方式通過(guò)活動(dòng)列表和時(shí)間刻度形象地表示出任何特定項(xiàng)目的活動(dòng)順序與持續(xù)時(shí)間。基本是一條線條圖,橫軸表示時(shí)間,縱軸表示活動(dòng)(項(xiàng)目),線條表示在整個(gè)期間上計(jì)劃和實(shí)際的活動(dòng)完成情況。它直觀地表明任務(wù)計(jì)劃在什么時(shí)候進(jìn)行,及實(shí)際進(jìn)展與計(jì)劃要求的對(duì)比。管理者由此可便利地弄清一項(xiàng)任務(wù)(項(xiàng)目)還剩下哪些工作要做,并可評(píng)估工作進(jìn)度。
2 為什么要用甘特圖
在很多較大且時(shí)間跨度較長(zhǎng)的工程、IT、市場(chǎng)營(yíng)銷(xiāo)、電商運(yùn)營(yíng)等項(xiàng)目中,都會(huì)涉及諸多對(duì)人員、時(shí)間、質(zhì)量等方面的控制,而且很多時(shí)候還需要跨部門(mén)進(jìn)行協(xié)作,所以,如何把控整個(gè)項(xiàng)目管理流程就顯得非常重要。
而使用甘特圖就可以實(shí)現(xiàn)這樣一個(gè)目的。
3 前端vue實(shí)現(xiàn)甘特圖
3.1 DHTMLX 甘特圖
dhtmlx-gantt 是一個(gè)綜合性 JavaScript 庫(kù),在過(guò)去十年中被 Web 開(kāi)發(fā)人員廣泛用于在項(xiàng)目管理應(yīng)用程序中實(shí)現(xiàn)甘特圖功能。使用這個(gè)完全可配置的甘特圖組件,開(kāi)發(fā)人員可以提供有效的解決方案來(lái)管理基于流行框架和不同服務(wù)器端技術(shù)的項(xiàng)目中的任務(wù)及其依賴(lài)項(xiàng)。
可擴(kuò)展項(xiàng)和相關(guān)api比較完整,并且免費(fèi)、擴(kuò)展性高。
github地址:https://github.com/DHTMLX/gantt
dhtmlxGantt是一款JavaScript編寫(xiě)的甘特圖控件,幫助開(kāi)發(fā)人員進(jìn)行項(xiàng)目的可視化展示和安排,通過(guò)該控件可以在任務(wù)之間設(shè)置不同的關(guān)系,提供的大量的API和事件處理可以幫助開(kāi)發(fā)人員根據(jù)自身需要進(jìn)行高度自定義和設(shè)置。支持過(guò)濾和放大、時(shí)間比例、最短路徑、顯示隱藏列、導(dǎo)出數(shù)據(jù)、加載大數(shù)據(jù)集等多種功能。
圖一:dhtmlx-gantt實(shí)現(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, //時(shí)間軸圖表中,任務(wù)條形圖的高度 row_height: 36, //時(shí)間軸圖表中,甘特圖的高度 add_column: true, // 添加符號(hào) auto_types: true, //將包含子任務(wù)的任務(wù)轉(zhuǎn)換為項(xiàng)目,將沒(méi)有子任務(wù)的項(xiàng)目轉(zhuǎn)換回任務(wù) xml_date: '%Y-%m-%d', //從后端過(guò)來(lái)的數(shù)據(jù)格式化 show_grid: false, //是否顯示左側(cè)樹(shù)表格 autosize: true, //自適應(yīng)甘特圖的尺寸大小, 使得在不出現(xiàn)滾動(dòng)條的情況下, 顯示全部任務(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è)時(shí)間格式 fit_tasks: true, //自動(dòng)調(diào)整圖表坐標(biāo)軸區(qū)間用于適配task的長(zhǎng)度 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: "請(qǐng)確認(rèn)是否撤銷(xiāo)修改!", confirm_deleting: "是否刪除計(jì)劃?", section_description: "描述:", section_time: "時(shí)間范圍:", section_type: "類(lèi)型", section_text: "任務(wù)名稱(chēng):", section_color: "顏色:", /* grid columns */ column_text: "計(jì)劃名稱(chēng)", column_start_date: "開(kāi)始時(shí)間", column_duration: "持續(xù)時(shí)間", column_add: "", /* link confirmation */ link: "關(guān)聯(lián)", confirm_link_deleting: "將被刪除", link_start: " (開(kāi)始)", link_end: " (結(jié)束)", type_task: "任務(wù)", type_project: "項(xiàng)目", type_milestone: "里程碑", minutes: "分鐘", hours: "小時(shí)", days: "天", weeks: "周", months: "月", years: "年" } } // 鼠標(biāo)操作甘特圖--懸浮顯示詳情、拖動(dòng)條目、拖動(dòng)圖等配置 gantt.plugins({ click_drag: true,//用于啟用或禁用通過(guò)單擊任務(wù)條目并拖動(dòng)來(lái)更改任務(wù)的開(kāi)始和結(jié)束日期的功能 drag_timeline: true,// 拖動(dòng)圖 marker: true,// 時(shí)間標(biāo)記 fullscreen: true,// 全屏 tooltip: true,// 鼠標(biāo)經(jīng)過(guò)時(shí)信息 undo: true // 允許撤銷(xiāo) })
3.2.4 方法Api
// 初始化 gantt.init(dom元素); // 填充數(shù)據(jù) gantt.parse(demoData) // 重新渲染 gantt.render() // 重新加載或刷新甘特圖的數(shù)據(jù)的 gantt.refreshData() // 設(shè)置本地化語(yǔ)言 gantt.i18n.setLocale("cn") // 跟新甘特圖標(biāo)記 gantt.updateMarker(標(biāo)記數(shù)據(jù)對(duì)象) // 清空數(shù)據(jù) gantt.clearAll(); //添加 gantt.attachEvent("onAfterTaskAdd", function (id, item) { // console.log("添加后觸發(fā)"); }); //移動(dòng)進(jìn)度 gantt.attachEvent("onAfterTaskDrag", function (id, mode, e) { console.log("移動(dòng)進(jìn)度后觸發(fā)"); }); //移動(dòng)任務(wù) gantt.attachEvent("onAfterTaskMove", function (id, parent, tindex) { console.log("移動(dòng)任務(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",// 項(xiàng)目類(lèi)型 task任務(wù) project項(xiàng)目 milestone里程碑 * start_date: "2023/3/15", * duration: 5,//任務(wù)持續(xù)時(shí)間 * parent: 11,//存在這個(gè)屬性說(shuō)明此數(shù)據(jù)為子任務(wù)數(shù)據(jù),父任務(wù)id為11 * progress: 0.3,//項(xiàng)目任務(wù)滑塊的進(jìn)度 * open: true,//是否展開(kāi)顯示 * .... },] link:[{ "id":"1", //唯一標(biāo)識(shí) "source":"1", // 起始 "target":"2", // 終止 "type":"1" //類(lèi)型 .... },]
3.3 具體功能
3.3.1 新增
圖二:新增任務(wù)
如圖所示 點(diǎn)擊表頭?則彈出 彈框進(jìn)行新增,新增主任務(wù)后還可以點(diǎn)擊任務(wù)欄?在其之上繼續(xù)新增子任務(wù)。
3.3.2 編輯、刪除
圖三:編輯、刪除任務(wù)
如圖所示 鼠標(biāo)雙擊任務(wù)則彈出 彈框,回顯任務(wù)具體信息進(jìn)行編輯、刪除操作
3.3.3 任務(wù)進(jìn)度
圖四:進(jìn)度
如圖所示,鼠標(biāo)在條目上拖動(dòng)三角形圖案可改變?nèi)蝿?wù)的進(jìn)度,同時(shí)在左側(cè)進(jìn)行回顯,拖動(dòng)后深色區(qū)域?yàn)橐淹瓿傻?,淺色區(qū)域代表未完成的。
3.3.4 拖拽
// 拖動(dòng)圖
gantt.plugins.drag_timeline: true,
圖五:拖拽
如圖所示,鼠標(biāo)在條目上長(zhǎng)按拖拽可改變?nèi)蝿?wù)的開(kāi)始和結(jié)束時(shí)間,同時(shí)在左側(cè)進(jìn)行回顯。
3.3.5 構(gòu)建關(guān)系
//是否連線
gantt.config.drag_links = true;
圖六:建立連線關(guān)系
如圖所示,當(dāng)開(kāi)啟條目連線后,在甘特圖中鼠標(biāo)懸浮每個(gè)條目在其兩端都會(huì)出現(xiàn)小圓點(diǎn),當(dāng)點(diǎn)擊某個(gè)條目的小圓點(diǎn)移動(dòng)至另一個(gè)條目的其中一個(gè)小圓點(diǎn)則成功構(gòu)建關(guān)系。
刪除連線關(guān)系:雙擊連線,彈框確認(rèn)即可。
結(jié)論
dhtmlxGantt是一個(gè)強(qiáng)大的JavaScript Gantt圖表庫(kù),提供易于使用、高度可自定義的Gantt圖表組件。它支持多項(xiàng)任務(wù)和進(jìn)度條,以及多種列和行布局,可用于創(chuàng)建各種類(lèi)型的時(shí)間線和計(jì)劃表。dhtmlxGantt包含多個(gè)配置選項(xiàng),允許用戶(hù)自定義時(shí)間軸、任務(wù)、列和行等組件,同時(shí)dhtmlxGantt可以和多個(gè)JavaScript庫(kù)和框架一起使用,如Angular、vue、React等,能夠更加有效地利用它來(lái)開(kāi)發(fā)各種類(lèi)型的時(shí)間線和計(jì)劃表
到此這篇關(guān)于前端vue實(shí)現(xiàn)甘特圖功能的文章就介紹到這了,更多相關(guān)vue甘特圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式
這篇文章主要介紹了vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11uniapp 拖拽圖片排序功能實(shí)現(xiàn) 類(lèi)似于微信朋友圈效果
這篇文章主要介紹了uniapp 拖拽圖片排序功能實(shí)現(xiàn)類(lèi)似于微信朋友圈,一部分是拖拽的放大做小,xy位置判定,圖片數(shù)組的插入排序,另一部分是上傳加號(hào)圖片的?定位? 動(dòng)態(tài)計(jì)算分為幾列,每一個(gè)圖片大小的位置?絕對(duì)定位的計(jì)算,需要的朋友可以參考下2024-07-07vue中使用file-saver導(dǎo)出文件的全過(guò)程記錄
這篇文章主要給大家介紹了關(guān)于vue中使用file-saver導(dǎo)出文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02Vue3父子組件互調(diào)方法的實(shí)現(xiàn)
本文主要介紹了Vue3父子組件互調(diào)方法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Vue.js?前端項(xiàng)目在常見(jiàn)?Web?服務(wù)器上的部署配置過(guò)程
Web服務(wù)器支持多種編程語(yǔ)言,如 PHP,JavaScript,Ruby,Python 等,并且支持動(dòng)態(tài)生成 Web 頁(yè)面,這篇文章主要介紹了Vue.js?前端項(xiàng)目在常見(jiàn)?Web?服務(wù)器上的部署配置,需要的朋友可以參考下2023-02-02vue中使用heatmapjs的示例代碼(結(jié)合百度地圖)
這篇文章主要介紹了vue中使用heatmapjs的示例代碼(結(jié)合百度地圖),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Vue項(xiàng)目中大文件切片上傳實(shí)現(xiàn)秒傳與斷點(diǎn)續(xù)傳的詳細(xì)實(shí)現(xiàn)過(guò)程
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中大文件切片上傳實(shí)現(xiàn)秒傳與斷點(diǎn)續(xù)傳的詳細(xì)實(shí)現(xiàn)過(guò)程, 在開(kāi)發(fā)中,如果上傳的文件過(guò)大,可以考慮分片上傳,分片就是說(shuō)將文件拆分來(lái)進(jìn)行上傳,將各個(gè)文件的切片傳遞給后臺(tái),然后后臺(tái)再進(jìn)行合并,需要的朋友可以參考下2023-08-08vue實(shí)現(xiàn)button按鈕的重復(fù)點(diǎn)擊指令方式
這篇文章主要介紹了vue實(shí)現(xiàn)button按鈕的重復(fù)點(diǎn)擊指令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08