欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端vue實(shí)現(xiàn)甘特圖功能

 更新時(shí)間:2024年04月18日 10:40:43   作者:xiaofiy  
dhtmlxGantt是一個(gè)強(qiáng)大的JavaScript Gantt圖表庫(kù),提供易于使用、高度可自定義的Gantt圖表組件,它支持多項(xiàng)任務(wù)和進(jìn)度條,以及多種列和行布局,可用于創(chuàng)建各種類(lèi)型的時(shí)間線和計(jì)劃表,本文給大家介紹前端vue實(shí)現(xiàn)甘特圖的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

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并愉快的使用方式

    這篇文章主要介紹了vue項(xiàng)目中自動(dòng)導(dǎo)入svg并愉快的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • uniapp 拖拽圖片排序功能實(shí)現(xiàn) 類(lèi)似于微信朋友圈效果

    uniapp 拖拽圖片排序功能實(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-07
  • vue中使用file-saver導(dǎo)出文件的全過(guò)程記錄

    vue中使用file-saver導(dǎo)出文件的全過(guò)程記錄

    這篇文章主要給大家介紹了關(guān)于vue中使用file-saver導(dǎo)出文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Vue3父子組件互調(diào)方法的實(shí)現(xiàn)

    Vue3父子組件互調(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-04
  • Vue.js?前端項(xiàng)目在常見(jiàn)?Web?服務(wù)器上的部署配置過(guò)程

    Vue.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-02
  • 在vue中使用eslint,配合vscode的操作

    在vue中使用eslint,配合vscode的操作

    這篇文章主要介紹了在vue中使用eslint,配合vscode的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue中使用heatmapjs的示例代碼(結(jié)合百度地圖)

    vue中使用heatmapjs的示例代碼(結(jié)合百度地圖)

    這篇文章主要介紹了vue中使用heatmapjs的示例代碼(結(jié)合百度地圖),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue3中setup聲明變量的方式匯總

    vue3中setup聲明變量的方式匯總

    本文給大家介紹Vue3中setup()函數(shù)中聲明變量的幾種方法,希望本文能夠幫助你更好地理解Vue3的開(kāi)發(fā)方式,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Vue項(xiàng)目中大文件切片上傳實(shí)現(xiàn)秒傳與斷點(diǎn)續(xù)傳的詳細(xì)實(shí)現(xiàn)過(guò)程

    Vue項(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-08
  • vue實(shí)現(xiàn)button按鈕的重復(fù)點(diǎn)擊指令方式

    vue實(shí)現(xiàn)button按鈕的重復(fù)點(diǎn)擊指令方式

    這篇文章主要介紹了vue實(shí)現(xiàn)button按鈕的重復(fù)點(diǎn)擊指令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論