夫妇交换性3中文字幕A片_欧美喷潮久久久XXXXx_精品人妻大屁股白浆无码_国产特级毛片AAAAAA_无码无套少妇毛多18P_嗯啊开小嫩苞好深啊H服务员_日韩精品人妻系列无码AV东京_手机久草视频分类在线观看_中国videos18高清hd_

普加甘特圖(PlusGantt) 開發(fā)文檔

上海普加軟件有限公司

目錄

  1. PlusGantt
  2. 如何使用?
  3. 甘特圖數(shù)據(jù)結(jié)構(gòu)
  4. 集成到第三方JS框架(jQuery、Ext等)
  5. 語言本地化
  6. PlusGantt API參考
  7. 常見問題
  8. 歷史更新
  9. 獲得支持

PlusGantt

PlusGantt(普加甘特圖)是使用Javascript開發(fā)的、基于Web網(wǎng)頁的甘特圖控件。
可廣泛應(yīng)用于項目管理系統(tǒng)、 ERP 系統(tǒng)、MES系統(tǒng)或其它的任務(wù)資源分配相關(guān)領(lǐng)域。

基于WEB網(wǎng)頁顯示,無需安裝任何插件。
顯示為左側(cè)任務(wù)表格、右側(cè)時間軸刻度條形圖的甘特圖界面。
支持跟蹤甘特圖視圖。可對比“計劃任務(wù)”與“實際任務(wù)”的區(qū)別。
支持分級加載,不一次性加載全部數(shù)據(jù)。這樣可以支持大數(shù)據(jù)量顯示。
支持年/月/日/時/分/秒等不同時間刻度單位。
支持表格列、條形圖外觀、ToolTip提示信息、右鍵菜單等任意自定義。
跨所有瀏覽器顯示,如IE(1.5+)、FireFox、Chrome、Opera、Safari等。
跨任意服務(wù)端平臺,如ASP.NET、ASP、PHP、JSP、ColdFusion、Ruby on Rails等都可以使用。
語言本地化。包括英語、中文、日文和其他任意的語言。

PlusGantt只需要您提供一個簡單的數(shù)據(jù)結(jié)構(gòu),就能在WEB網(wǎng)頁上顯示一個漂亮的甘特圖。
您可以輕松修改它任意部位的外觀,比如單元格、條形圖、提示信息等。

如何使用?

PlusGantt是一個Javascript控件,運行在WEB瀏覽器中。與服務(wù)端平臺和數(shù)據(jù)庫無關(guān)。

使用者需要用Ajax從服務(wù)端獲取甘特圖數(shù)據(jù),是一個簡單的樹形結(jié)構(gòu)。

甘特圖數(shù)據(jù)到達頁面后,使用PlusGantt的loadTasks方法,加載顯示甘特圖界面。

然后,使用者可以做如下自定義處理:

  1. 擴展表格列,比如擴展部門、負(fù)責(zé)人、權(quán)重等列。
  2. 外觀自定義:單元格、條形圖和任務(wù)提示框等。
  3. 其他。如右鍵菜單、時間刻度、條形圖生成、分級加載、語言本地化等處理。

普加甘特圖能很好完成在WEB上顯示甘特圖的功能。
但是如果您需要在WEB上實現(xiàn)一個類似微軟Project功能邏輯的控件,請查看普加項目管理控件PlusProject。

甘特圖數(shù)據(jù)結(jié)構(gòu)

PlusGantt數(shù)據(jù)是一個樹形結(jié)構(gòu)的任務(wù)數(shù)據(jù)。這里是JSON格式的數(shù)據(jù)。
下一級子任務(wù)由"children"屬性體現(xiàn)。
前置任務(wù)由"PredecessorLink"屬性體現(xiàn)。

列表結(jié)構(gòu)(UID、ParentTaskUID):
[{
    "UID": "1",
    "Name": "項目范圍規(guī)劃",
    "Duration": 8,
    "Start": "2007-01-01T00:00:00",
    "Finish": "2007-01-10T00:00:00",
    "PercentComplete": 0,
    "Summary": 1,
    "Critical": 0,
    "Milestone": 0,
    "PredecessorLink": [],
    "ParentTaskUID": -1
},
{
    "UID": "2",
    "Name": "確定項目范圍",
    "Duration": 1,
    "Start": "2007-01-01T00:00:00",
    "Finish": "2007-01-01T23:23:59",
    "PercentComplete": 0,
    "Summary": 0,
    "Critical": 0,
    "Milestone": 0,
    "PredecessorLink": [],
    "ParentTaskUID": "1"
},
{
    "UID": "3",
    "Name": "獲得項目所需資金",
    "Duration": 2,
    "Start": "2007-01-02T00:00:00",
    "Finish": "2007-01-03T23:23:59",
    "PercentComplete": 0,
    "Summary": 0,
    "Critical": 0,
    "Milestone": 0,
    "PredecessorLink": [{
        "Type": 1,
        "PredecessorUID": "2" 
    }],
    "ParentTaskUID": "1"
},
...
]
樹形結(jié)構(gòu)(children):
[
    {
        UID: "1",                      //任務(wù)唯一標(biāo)識符
        Name: "項目范圍規(guī)劃",            //任務(wù)名稱
        Duration: 4,                   //工期
        Start: "2007-01-01T00:00:00",   //開始日期
        Finish: "2007-01-04T23:59:59",  //完成日期
        PercentComplete: 14,            //完成百分比
        Summary: 1,                     //摘要任務(wù)
        Critical: 1,                    //關(guān)鍵任務(wù)    
        Milestone: 0,                   //里程碑    
        PredecessorLink: [],            //前置任務(wù)
        children: [
             {
                UID: "2",
                Duration: 4,
                Start: "2007-01-01T08:00:00",                
                Finish: "2007-01-01T12:00:00",
                PercentComplete: 100,
                Summary: 0,
                Critical: 1,
                Name: "確定項目范圍",
                Milestone: 0,
                PredecessorLink: []
            },
            {
                UID: "3",
                Duration: 8,
                Start: "2007-01-01T13:00:00",                
                Finish: "2007-01-02T12:00:00",
                PercentComplete: 0,
                Summary: 0,
                Critical: 1,
                Name: "獲得項目所需資金",
                Milestone: 0,
                PredecessorLink: [          //前置任務(wù)
                    {               
                        PredecessorUID: "2",
                        Type": 1
                    }
                ]
            },
            ....//更多子任務(wù)
        ]
    },
    .... //更多任務(wù)
]

任務(wù)屬性描述如下:

集成到第三方JS框架(jQuery、Ext等)

首先,對于jQuery, YUI, Prototype.js等框架來說,它們對頁面的操作基于原始Dom元素的。
所以,你可以不用做任何額外的處理,按PlusProject正常的例子,把項目甘特圖對象加入到頁面元素就可以了。

其次,對于ExtJS這樣封裝度很高的框架,可以從Ext對象找到它的dom,然后render加入即可。使用代碼如下:

//獲取ext控件對象
var extControl = Ext.get(id);

//設(shè)置尺寸為100%自適應(yīng)
gantt.setStyle("width:100%;height:100%");

//把project加入到ext控件對象的dom屬性中
gantt.render(extControl.dom);

只需要這樣設(shè)置后,PlusProject就能在Ext的布局面板中自動調(diào)整尺寸大小,看上去跟Ext原生的控件一樣了。

語言本地化

如果要顯示他語言界面,只需要引用locale文件夾下資源js文件即可,例如英文資源包使用如下:

<script src="../scripts/miniui/locale/en_US.js" type="text/javascript"></script>

語言本地化(英語)示例,請查看這里。

PlusGantt ( API )

屬性

屬性可以從對象直接讀取,但是不能進行賦值操作。如果想對屬性進行賦值,必須使用提供的方法。

	    var gantt = new PlusGantt();
	    var visible= gantt.visible;         //正確
	    gantt.visible= true;           //錯誤!!!
	    gantt.setVisible(true);            //正確
	
屬性類型描述
readOnly Boolean 是否只讀。
visible Boolean 是否顯示。
style String 樣式。
width Number 寬度。
height Number 高度。
showTableView Boolean 是否顯示任務(wù)表格。
showGanttView Boolean 是否顯示條形圖。
showLinkLines Boolean 是否顯示箭頭連線。
showCritical Boolean 是否顯示關(guān)鍵路徑
showGridLines Boolean 是否條形圖表格線。
timeLines Array 時間線數(shù)組。
[
    {date: new Date(2007, 0, 3), text: "時間線"},
    {date: new Date(2007, 0, 5), text: "時間線2", 
        style: "width:2px;background:red;"}
]
rowHeight Number 行高。
allowDragDrop Boolean 是否允許任務(wù)行拖拽。
multiSelect Boolean 是否允許多選任務(wù)。
allowResize Boolean 是否允許拖拽調(diào)整甘特圖。

方法

方法參數(shù)類型描述
setStyle(String)
 
設(shè)置樣式,比如:gantt.setStyle("width:100%;height:400px")。
loadTasks(Array)
 
加載任務(wù)集合(樹形)。
getTaskTree()
 
返回任務(wù)樹形集合。
getTaskList()
 
返回任務(wù)列表集合。
getRemovedTasks() 返回被刪除的任務(wù)集合。
acceptChanges() 恢復(fù)任務(wù)狀態(tài)(撤銷任務(wù)增加、刪除、修改標(biāo)記)。
setColumns( Array ) 設(shè)置表格列集合。
setTreeColumn( String ) 設(shè)置樹形節(jié)點列。
findTasks(field, value) field:String。如"Duration"。
value:Object。屬性值。
返回符合條件的任務(wù)集合。
getTask(taskUID) 根據(jù)任務(wù)UID,獲取任務(wù)。
getTaskByID(taskID) 根據(jù)任務(wù)ID,獲取任務(wù)。
project.filter(function(task){
    if(task.Duration == 2) return true;
    else return false;
});
clearFilter() 取消過濾任務(wù)
getSelected()
 
獲取選中的任務(wù)。
getSelecteds()
 
獲取選中的任務(wù)集合。
isSelected(task)
 
判斷是否選中任務(wù)。
select(task)
 
選中任務(wù)。
deselect(task) 取消選中任務(wù)。
selects(Array)
 
選中多個任務(wù)。
deselects(Array) 取消選中多個任務(wù)。
selectAll()
 
選中所有任務(wù)。
deselectAll() 取消選中所有任務(wù)。
getParentTask(task) 獲取父任務(wù)對象。
getChildTasks(task) //下一級任務(wù)
獲取子任務(wù)數(shù)組。
getAllChildTasks(task) 獲取所有子任務(wù)數(shù)組。
getAncestorTasks(task) 獲取父級任務(wù)數(shù)組。
isAncestor(parentTask, task) 判斷兩任務(wù)之間是否有父子關(guān)系。
eachChild(task, fn, scope) 遍歷下一級子節(jié)點。
cascadeChild(task, fn, scope) 遍歷所有子節(jié)點。
bubbleParent(task, fn, scope) 遍歷父級子節(jié)點。
addTask(task)
addTask(task, index)
addTask(task, action, parentTask)
task:Object。新任務(wù)對象。
index:Number。加入的索引位置。
action:String。加入的方式,before/after/add。
parentTask:父任務(wù)。
新增任務(wù)。
removeTask(task) 刪除任務(wù)。
updateTask(task, property, value)
updateTask(task, keyValues)
property:String。任務(wù)屬性名,如"Start"。
value:Object。屬性值。
keyValues:Object。鍵值對,如{Name:'測試完成', PercentComplete: 0}
更新任務(wù)屬性。
moveTask(task, targetTask, action) action:String。"before"/"after"/"add"
targetTask:目標(biāo)任務(wù)
action:移動方式
移動任務(wù)。
upgradeTask(task)
 
升級任務(wù)。
downgradeTask(task)
 
降級任務(wù)。
addTasks(tasks, index, parentTasks) addTasks(tasks, action, parentTasks)
tasks:Array。新任務(wù)數(shù)組。
index:Number/"before"/"after"/"add"。加入方式。
parentTasks:Array。父任務(wù)數(shù)組。
批量新增任務(wù)。
removeTasks(tasks) 批量刪除任務(wù)。
updateTasks(tasks, keyValues)
tasks:Array。任務(wù)數(shù)組。
keyValues:Object。鍵值對,如{Name:'測試完成', PercentComplete: 0}
批量修改任務(wù)。
collapseAll ( )
 
折疊所有任務(wù)。
expandAll ( )
 
展開所有任務(wù)。
collapseLevel( Number )
 
折疊某層級任務(wù)。
expandLevel( Number )
 
展開某層級任務(wù)。
collapse(task)
 
折疊任務(wù)。
expand(task)
 
展開任務(wù)。
setShowTableView( Boolean )
 
設(shè)置表格是否顯示。
setShowGanttView( Boolean )
 
設(shè)置條形圖是否顯示。
setTableViewExpanded( Boolean )
 
設(shè)置表格折疊。
setGanttViewExpanded( Boolean )
 
設(shè)置條形圖折疊。
setTableViewWidth( Number )
 
設(shè)置表格寬度。
setGanttViewWidth( Number )
 
設(shè)置條形圖寬度。
setShowLinkLines( Boolean )
 
設(shè)置是否顯示箭頭連線。
setShowCritical( Boolean )
 
設(shè)置是否顯示關(guān)鍵路徑
setShowGridLines( Boolean )
 
設(shè)置是否顯示條形圖背景表格線。
setTimeLines( Array )
 
設(shè)置項目時間線。
setRowHeight( Number )
 
設(shè)置行高。
setMultiSelect( Boolean )
 
設(shè)置是否多選任務(wù)。
setAllowDragDrop( Boolean )
 
設(shè)置是否允許任務(wù)行拖拽。
setTopTimeScale( String ) String:時間刻度。
"year/halfyear/quarter/month/week/day/hour"
設(shè)置頂層時間刻度。
setBottomTimeScale( String )
同上 
設(shè)置底層時間刻度。(底層必須比頂層要小)
zoomIn( ) 放大時間刻度
zoomOut( ) 縮小時間刻度
scrollIntoView(task)
 
定位顯示任務(wù)。

事件

通過如下方式監(jiān)聽事件:

	    functon onTaskDblClick(e){
	        var project = e.source;
            var task = e.task;
	        //e是事件對象, 具體請看每個事件的"參數(shù)類型"
	    }
	    gantt.on('taskdblclick', onTaskDblClick);
	
事件名稱事件對象描述
drawcell
{
    source: Object, //甘特圖對象
    record: Object, //任務(wù)對象
    column: Object, //列對象
    field: String,  //屬性名
    value: Object,  //單元格值
    cellHtml: Stirng//單元格內(nèi)容HTML
}
	            
繪制單元格時發(fā)生。
drawitem
{
    source: Object, //甘特圖對象
    item: Object,   //條形圖,任務(wù)對象
    itemBox: Object, //條形圖的坐標(biāo)尺寸
    itemHtml: Stirng//單元格內(nèi)容HTML
}
	            
繪制條形圖時發(fā)生。
taskclick
{
    source: Object, //甘特圖對象
    task: Object    //任務(wù)對象
}    
	            
單擊任務(wù)時發(fā)生。
taskdblclick
{
    source: Object, //甘特圖對象
    task: Object    //任務(wù)對象
}    
	            
雙擊任務(wù)時發(fā)生。
taskdragdrop
{
    source: Object,     //甘特圖對象
    tasks: Array,       //被拖拽的任務(wù)集合
    targetTask: Object, //目標(biāo)任務(wù)
    action: String,     //投放方式:before,after,append
    cancel: Boolean     //是否取消操作
}
	            
拖拽行釋放時發(fā)生。
cellbeginedit
{
    source: Object,     //甘特圖對象    
    record: Object,       //任務(wù)對象
    column: Object, //列對象
    field: String,  //屬性名
    value: Object,  //單元格值
    cancel: Boolean     //是否取消操作
}
	            
單元格開始編輯時發(fā)生
CellCommitEdit
{
    source: Object,     //甘特圖對象    
    record: Object,       //任務(wù)對象
    column: Object, //列對象
    field: String,  //屬性名
    value: Object,  //單元格值
    cancel: Boolean     //是否取消操作
}
	            
單元格提交編輯值時發(fā)生
itemdragstart
{
    source: Object,     //甘特圖對象    
    item: Object,       //任務(wù)對象
    action: String,     //拖拽操作:
move, start, finish, percentcomplete cancel: Boolean //是否取消操作 }
條形圖開始拖拽時發(fā)生。
itemdragcomplete
{
    source: Object,     //甘特圖對象    
    item: Object,       //任務(wù)對象
    action: String,     //拖拽操作:
move, start, finish, percentcomplete value: Object //拖拽調(diào)節(jié)的值。日期Date或者數(shù)字Number類型。 }
條形圖完成拖拽時發(fā)生。

常見問題

自定義列

開發(fā)者可以根據(jù)自己擴展的任務(wù)屬性類型,來創(chuàng)建自己的列。

具體請參考"自定義列示例"。

自定義單元格

通過監(jiān)聽處理"drawcell"事件,可以根據(jù)任務(wù)信息,設(shè)置行、單元格樣式,以及自定義單元格Html內(nèi)容。

gantt.on("drawcell", function (e) {
    var task = e.record, column = e.column, field = e.field;

    //單元格樣式
    if (column.name == "Name") {
        e.cellCls = "mycellcls";
    }

    //行樣式
    if (task.Summary == 1) {
        e.rowCls = "myrowcls";
    }

    ////自定義單元格Html。如果是工期列, 并且工期大與5天, 顯示紅色
    if (field == "Name" && task.Duration > 5) {
        e.cellHtml = '<b style="color:red;">' + task.Name + '</b>';
    }
    if (field == "Name" && task.Duration <= 2) {
        e.cellHtml = '<span style="color:blue;">' + task.Name + '</span>';
    }

    if (task.Duration == 0) {
        e.rowCls = "deletetask";
    }
});

示例請參考"自定義單元格"

自定義條形圖外觀

開發(fā)者可以控制右側(cè)條形圖的HTML外觀,達到任意的條形圖效果:

//1)自定義條形圖外觀顯示
gantt.on("drawitem", function (e) {
    var item = e.item;
    var left = e.itemBox.left,
        top = e.itemBox.top,
        width = e.itemBox.width,
        height = e.itemBox.height;

    if (!item.Summary && !item.Milestone) {
        var percentWidth = width * (item.PercentComplete / 100);

        e.itemHtml = '<div id="' + item._id + '" class="myitem" style="left:' + left + 'px;top:' + top + 'px;width:' + width + 'px;height:' + (height) + 'px;">';
        e.itemHtml += '<div style="width:' + (percentWidth) + 'px;" class="percentcomplete"></div>';
        e.itemHtml += '</div>';

        //e.ItemHtml = '<a  style="left:'+left+'px;top:'+top+'px;width:'+width+'px;height:'+(height-2)+'px;" class="myitem">111</a>';
    }
});
//2)自定義條形圖提示信息
gantt.on('itemtooltipneeded', function (e) {
    var task = e.task;
    e.tooltip = "<div>任務(wù):" + task.Name + "</div>"
    //                +   "<div ><div style='float:left;'>進度:<b>"+task.PercentComplete + "%</b></div>"
    //                +   "<div style='float:right;'>工期:"+task.Duration + "日</div></div>"
                + "<div style='clear:both;'>開始日期:" + mini.formatDate(task.Start, 'yyyy-MM-dd') + "</div>"
                + "<div>完成日期:" + mini.formatDate(task.Finish, 'yyyy-MM-dd') + "</div>";
});

示例請參考"自定義顯示條形圖"

自定義單元格可編輯

通過監(jiān)聽表格的"cellbeginedit"事件,可以控制每個行、每個單元格是否可編輯。

//控制單元格是否可編輯
gantt.on("cellbeginedit", function (e) {
    var task = e.record, column = e.column, field = e.field;

    if (task.Summary == 1) {
        e.cancel = true;
    }

    if (field == 'Duration') {
        e.cancel = true;
    }
});

示例請參考"控制單元格可編輯"