jQuery Gantt editorjavascript
jQuery Gantt Edit(如下簡稱GE)是一款開源的基於jQuery的甘特圖插件,做者:robicch. GitHub地址:https://github.com/robicch/jQueryGantthtml
首先是GE的主要特色:java
- 基於jQuery
- MIT許可:你能夠在任何地方重複使用
- json數據傳輸
- 支持國際化
- 任務管理與工做流處理
- 管理任務依賴(從屬)
- 管理做業(資源,角色,進度)
- 服務器同步
- 支持撤銷重作
- 瀏覽器兼容(能夠兼容IE8及以上版本,其餘基本都支持)
如何使用git
首先下載組件資源,點我下載,源碼裏面的gantt.html已是一個能夠使用的甘特圖github
使用火狐或者谷歌來調試代碼json
首先定義一個全局變量ge;這裏關於做用域的問題稍後討論數組
var ge = new GanttMaster();
任務對甘特圖的操做數據修改均可以使用ge.saveProject()來保存瀏覽器
使用ge.loadProject( [yourJsonProject] )加載項目服務器
對於甘特圖的項目數據結構數據結構
{
tasks:[…]
resources: […]
roles: […]
deletedTaskIds:[…]
selectedRow: 7
canWrite: true
canWriteOnParent: true
minEditableDate:1349906300000
maxEditableDate:3499063999999
}
其中tasks,roles,resources都是數組
tasks:裏面放的就是乾圖特要顯示的數據,中數據的順序就是甘特圖上顯示的順序,這裏顯示的任務數據全部參數
{
「id」:」tmp_fk1345562123031″,
「name」:」approval」,
「code」:」APP」,
「level」:2,
「status」:」STATUS_SUSPENDED」,
「start」:1348696800000,
「duration」:10,
「end」:1349906399999,
「startIsMilestone」:false,
「endIsMilestone」:false,
「assigs」:[…],
「depends」:」7:3,8″,
「description」:」Approval of testing」,
「progress」:20
}
- id:使用來與服務器同步的,若是是從服務器讀取的數據那麼任務將不可拖動,若是任務是從客戶端建立的,那麼id前面會加一個"tmp_"的前綴
- level:整形,是決定你任務分級的參數,也就是在甘特圖上的縮進,根任務或者叫總任務的level是0,而後子任務是level是1,以此類推,級別必須與任務結構一致,你不能在沒有n的狀況下寫n+1 級,同時level是控制任務從屬(父子關係)和左側任務縮進的關鍵
- start,end:這裏用的是js13位時間戳來表示任務的開始時間與結束時間
- duration:整形,表示你再工做的時間,好比說你的工做中包含了假期,甘特圖會根據你開始時間(start)和持續時間(duration)來計算你的結束日期,在下面會有說明
- startIsMilestone, endIsMilestone:布爾型,一旦設置爲true,那麼任務就不能移動,你能夠修改任務時間,可是該任務不會隨着子任務和進程修改而修改.
- depends:任務依賴關係,支持多任務依賴關係(通俗來講就那個完成以後再能進行那個),只支持從完成到開始狀態的依賴,7:3,8的意思是在第7個任務結束後3天和第八個任務結束的最長時間開始本任務
- status:表示任務的狀態,支持的狀態有(狀態轉換下面會有說明)
- STATUS_ACTIVE:執行中,
- STATUS_DONE:完成,
- STATUS_FAILED:失敗,
- STATUS_SUSPENDED:暫停/掛起,
- STATUS_UNDEFINED:無心義
- 這裏的狀態容許你想工做流那樣使用依賴關係,加入任務B依賴任務A.那個任務B的狀態就是暫停/掛起狀態,直到任務A的狀態從執行中變爲完成.完整的狀態轉化的信息,將在下面介紹
- progress:任務進度率,就是百分比.沒有限制,能夠超過100%
- assigs:數組,任務分配,每個assigs對象都具備如下結構
{
「resourceId」:」tmp_1″,
「id」:」tmp_1345560373990″,
「roleId」:」tmp_1″,
「effort」:36000000
}
-
- resourceId:惟一的id,與resource相關聯
- id:assige對象的惟一id
- roleId:惟一角色id,與roles想關聯
- effort:預計影響的工做量,也是13位時間戳
resources:數組包含如下數據結構
{
「id」:」tmp_1″,
「name」:」Resource 1″
}
roles:數組包含如下數據結構
{
「id」:」tmp_1″,
「name」:」Project Manager」
}
deleteTaskIds:刪除的任務數,裏面包含的是在客戶端刪除的任務數據的ids,那些id是以temp開頭的都不會保存到服務器,而是會被悄悄的刪除
selectedRow:如今正在被編輯的行
canWrite:布爾值,若是你又意向去編輯/建立/刪除任務,就把他設置爲ture
canWritOnParent:這個提及來有點模糊,好比說你是一個複雜項目下某個子任務的負責人,你修改的時間有可能形象到上層項目進度,那麼就能夠設置爲false來組織對top-project的修改
minEditableDate,maxEditableDate:設置最小時間和最大時間
狀態轉化規則
*注意:這裏狀態的大小寫要區分不支持小寫
- any status->STATUS_DONE:任意狀態到完成.
- 當前任務若是沒有前置任務,當前任務設置爲完成狀態
- 子任務全部項變爲完成狀態
- 依賴於這個任務的依賴項的暫停/掛起和未定義狀態會變爲執行狀態,其餘不改變
- STATUS_FAILED -> STATUS_DONE:失敗到完成
- 當前任務變爲完成狀態,
- 子任務不改變(失敗狀態下的子任務也必定是失敗狀態)
- 依賴項不改變(失敗狀態下的依賴項頁必定是失敗狀態)
- STATUS_UNDEFINED -> STATUS_ACTIVE:未定義到執行中
- 當前任務變爲未定義狀態,
- 子任務變爲未定義狀態
- 依賴項變爲未定義狀態
- STATUS_SUSPENDED -> STATUS_ACTIVE:從暫定/掛起到執行中
- 當前任務沒有前置任務且沒有父任務變爲活動狀態,有則沒法變
- 子任務變爲暫停/掛起狀態
- 依賴項變爲暫停/掛起狀態
- STATUS_DONE -> STATUS_ACTIVE:完成到活動
- 當前任務若是沒前置任務和父任務,則變爲活動狀態.若是有父級須要父級爲活動狀態
- 子任務不改變狀態
- 依賴項變爲暫定/掛起狀態
- any status-> STATUS_SUSPENDED:任意狀態到暫停/掛起
- 當前任務變爲暫停/掛起狀態
- 子集變爲暫停/掛起狀態
- 依賴項變爲暫停/掛起狀態
- any status-> STATUS_UNDEFINED:任意狀態到未定義
- 當前任務變爲未定義
- 子集變爲未定義
- 依賴項變爲未定義
- any status-> STATUS_FAILED:任意狀態到失敗
總結一下:
- 想變爲活動須要父任務爲活動,前置任務爲完成
- 修改狀態只會向下影響沒法向上影響(隻影響本身的子任務和依賴項)
- 想要修改狀態須要父級和前置任務的狀態去匹配,基本上是失敗,未定義,暫停/掛起隨便改,活動須要前置任務完成,父任務活動,完成須要父任務活動,當前任務爲活動