488 lines
24 KiB
HTML
488 lines
24 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0049)http://www.plusgantt.com/gantt/demo/ExtGantt.html -->
|
||
<html xmlns="http://www.w3.org/1999/xhtml" class=" ext-strict x-viewport">
|
||
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Ext甘特图</title>
|
||
|
||
<meta name="keywords" content="extgantt,extjs,gantt,甘特图">
|
||
<meta name="description" content="普加甘特图可以与ExtJS无缝集成">
|
||
<!--extjs css-->
|
||
<link href="./Ext甘特图_files/ext-all.css" rel="stylesheet" type="text/css">
|
||
<link href="./Ext甘特图_files/icons.css" rel="stylesheet" type="text/css">
|
||
<link href="./Ext甘特图_files/miniui.css" rel="stylesheet" type="text/css">
|
||
<link href="./Ext甘特图_files/skin.css" rel="stylesheet" type="text/css">
|
||
<!-- <link href="./Ext甘特图_files/skin.css" rel="stylesheet" type="text/css"> -->
|
||
|
||
</head>
|
||
|
||
<body class="ext-webkit ext-chrome ext-mac x-border-layout-ct" id="ext-gen3">
|
||
<!-- <div id="ext-comp-1001" class=" x-border-panel" style="height: 32px; left: 0px; top: 0px; width: 1920px;"><b
|
||
style="padding:8px;">Ext甘特图集成示例</b></div>
|
||
<div id="west-panel" class=" x-panel x-border-panel" style="width: 200px; left: 5px; top: 32px;">
|
||
<div class="x-panel-header x-unselectable" id="ext-gen4">
|
||
<div class="x-tool x-tool-toggle x-tool-collapse-west" id="ext-gen7"> </div><span
|
||
class="x-panel-header-text" id="ext-gen8">West</span>
|
||
</div>
|
||
<div class="x-panel-bwrap" id="ext-gen5">
|
||
<div class="x-panel-body" id="ext-gen6" style="width: 198px; height: 862px;">
|
||
<div id="ext-comp-1004" class=" x-panel x-panel-noborder" style="width: auto;">
|
||
<div class="x-panel-header x-panel-header-noborder x-unselectable x-accordion-hd" id="ext-gen18"
|
||
style="cursor: pointer;">
|
||
<div class="x-tool x-tool-toggle" id="ext-gen21"> </div><img
|
||
src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
|
||
class="x-panel-inline-icon nav"><span class="x-panel-header-text"
|
||
id="ext-gen22">Navigation</span>
|
||
</div>
|
||
<div class="x-panel-bwrap" id="ext-gen19">
|
||
<div class="x-panel-body x-panel-body-noborder" id="ext-gen20"
|
||
style="width: auto; height: 814px;"></div>
|
||
</div>
|
||
</div>
|
||
<div id="ext-comp-1005" class=" x-panel x-panel-noborder x-panel-collapsed" style="width: auto;">
|
||
<div class="x-panel-header x-panel-header-noborder x-unselectable x-accordion-hd" id="ext-gen23"
|
||
style="cursor: pointer;">
|
||
<div class="x-tool x-tool-toggle" id="ext-gen26"> </div><img
|
||
src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
|
||
class="x-panel-inline-icon settings"><span class="x-panel-header-text"
|
||
id="ext-gen27">Settings</span>
|
||
</div>
|
||
<div class="x-panel-bwrap" id="ext-gen24" style="display: none;">
|
||
<div class="x-panel-body x-panel-body-noborder" id="ext-gen25">
|
||
<p>Some settings in here.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="ext-comp-1002" class=" x-tab-panel x-border-panel" style="left: 210px; top: 32px; width: 1710px;">
|
||
<div class="x-tab-panel-header x-unselectable" id="ext-gen10" style="width: 1708px;">
|
||
<div class="x-tab-strip-wrap" id="ext-gen13" style="width: 1708px;">
|
||
<ul class="x-tab-strip x-tab-strip-top" id="ext-gen15">
|
||
<li class=" x-tab-strip-active" id="ext-comp-1002__extwrap"><a class="x-tab-strip-close"
|
||
onclick="return false;"></a><a class="x-tab-right"
|
||
href="http://www.plusgantt.com/gantt/demo/ExtGantt.html#" onclick="return false;"><em
|
||
class="x-tab-left"><span class="x-tab-strip-inner"><span
|
||
class="x-tab-strip-text ">普加甘特图</span></span></em></a></li>
|
||
<li class="x-tab-edge" id="ext-gen16"></li>
|
||
<div class="x-clear" id="ext-gen17"></div>
|
||
</ul>
|
||
</div>
|
||
<div class="x-tab-strip-spacer" id="ext-gen14"></div>
|
||
</div>
|
||
<div class="x-tab-panel-bwrap" id="ext-gen11">
|
||
<div class="x-tab-panel-body x-tab-panel-body-top" id="ext-gen12"
|
||
style="overflow: auto; width: 1708px; height: 857px;">
|
||
<div id="extwrap" style="width: 1708px; height: 857px;">
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div> -->
|
||
|
||
|
||
|
||
<!--引入ExtJS-->
|
||
|
||
<script type="text/javascript" src="./Ext甘特图_files/ext-base.js"></script>
|
||
<script type="text/javascript" src="./Ext甘特图_files/ext-all.js"></script>
|
||
<script src="./Ext甘特图_files/boot.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/jquery.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/miniui.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/zh_CN.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/CalendarWindow.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/ProjectMenu.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/StatusColumn.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/TaskWindow.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/ResourcesWindow.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/ProjectServices.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/swfobject.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/GanttService2.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/GanttMenu.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/GanttSchedule2.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/RGanttMenu.js" type="text/javascript"></script>
|
||
<script src="./Ext甘特图_files/RGanttSchedule.js" type="text/javascript"></script>
|
||
|
||
<!-- 引入axios -->
|
||
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
|
||
|
||
|
||
<script type="text/javascript">
|
||
function getDaysBetween(dateString1,dateString2){
|
||
var startDate = Date.parse(dateString1);
|
||
var endDate = Date.parse(dateString2);
|
||
if (startDate>endDate){
|
||
return 0;
|
||
}
|
||
if (startDate==endDate){
|
||
return 1;
|
||
}
|
||
var days=(endDate - startDate)/(1*24*60*60*1000);
|
||
return days;
|
||
}
|
||
function dateAddDays(dateStr,dayCount) {
|
||
var tempDate=new Date(dateStr.replace(/-/g,"/"));//把日期字符串转换成日期格式
|
||
var resultDate=new Date((tempDate/1000+(86400*dayCount))*1000);//增加n天后的日期
|
||
var resultDateStr=resultDate.getFullYear()+"-"+(resultDate.getMonth()+1)+"-"+(resultDate.getDate());//将日期转化为字符串格式
|
||
return resultDateStr;
|
||
}
|
||
//页面加载就绪
|
||
window.onload = () => {
|
||
console.log('window.onload')
|
||
var parentUrl = getParentUrl()
|
||
console.log('parentUrl',parentUrl)
|
||
if(parentUrl.indexOf('dataBoard')!=-1){
|
||
document.getElementById('ext-gen3').classList.add('greyBox')
|
||
}else{
|
||
document.getElementById('ext-gen3').classList.remove('greyBox')
|
||
}
|
||
|
||
//获取请求地址
|
||
let url = window.parent.document.getElementById("iframe").contentWindow.location.search;
|
||
var parameter = url.split('='); //所有参数
|
||
var requestUrl = parameter[1].split('&')[0]; //请求服务器的地址
|
||
var projectSn = parameter[2].split('&')[0]; //projectSn
|
||
var buildingId = parameter[3].split('&')[0];
|
||
// console.log(buildingId);
|
||
var token = parameter[4]
|
||
var listData = [];
|
||
|
||
//转换时间戳
|
||
function formatDateTime(inputTime) {
|
||
var date = new Date(inputTime);
|
||
var y = date.getFullYear();
|
||
var m = date.getMonth() + 1;
|
||
m = m < 10 ? ('0' + m) : m;
|
||
var d = date.getDate();
|
||
d = d < 10 ? ('0' + d) : d;
|
||
var h = date.getHours();
|
||
h = h < 10 ? ('0' + h) : h;
|
||
var minute = date.getMinutes();
|
||
var second = date.getSeconds();
|
||
minute = minute < 10 ? ('0' + minute) : minute;
|
||
second = second < 10 ? ('0' + second) : second;
|
||
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
|
||
};
|
||
|
||
|
||
//获取列表数据
|
||
getListData = () => {
|
||
axios.defaults.headers.common['Authorization'] = 'Bearer'+' '+token;
|
||
axios.post(requestUrl + 'xmgl/progressBuildingNodeDetail/list', { buildingId }).then(res => {
|
||
if (res.data.code == 200) {
|
||
console.log(res.data.result)
|
||
let dataArr = res.data.result;
|
||
let number = 0;
|
||
let type= false;
|
||
for (let i = 0; i < dataArr.length; i++) {
|
||
let data
|
||
if (dataArr[i].nodeState == 4){
|
||
data = {
|
||
"UID": dataArr[i].id, //任务唯一标识符
|
||
// "PercentComplete": 100, //完成百分比
|
||
'plannedCompletionTime':dataArr[i].plannedFinishDate,//计划完成时间,
|
||
'estimatedCompletionDate':dataArr[i].predictFinishDate,//预计完成日期,
|
||
// "Duration": getDaysBetween(dataArr[i].createDate,dataArr[i].plannedFinishDate), //工期
|
||
'actualFinishDate':dataArr[i].actualFinishDate,//实际完成日期
|
||
"Finish":dateAddDays(dataArr[i].plannedFinishDate,10) , //完成日期
|
||
'deferDiffDay':dataArr[i].deferDiffDay,//逾期
|
||
'beforeCompleteDiffDay':dataArr[i].beforeCompleteDiffDay,//提前
|
||
'deferCompleteDiffDay':dataArr[i].deferCompleteDiffDay,//逾期多少天
|
||
"Start":dataArr[i].actualFinishDate?dataArr[i].actualFinishDate:dataArr[i].plannedFinishDate, //开始日期
|
||
// "Name": dataArr[i].nodeName, //任务名
|
||
"nodeName": dataArr[i].nodeName, //任务名
|
||
"nodeState":dataArr[i].nodeState,
|
||
"children": [], //子级
|
||
// "ceshi":2,
|
||
"Note": '', //备注
|
||
'branchId': dataArr[i].branchId,
|
||
}
|
||
}else {
|
||
data = {
|
||
"UID": dataArr[i].id, //任务唯一标识符
|
||
// "PercentComplete": 100, //完成百分比
|
||
'plannedCompletionTime':dataArr[i].plannedFinishDate,//计划完成时间,
|
||
'estimatedCompletionDate':dataArr[i].predictFinishDate,//预计完成日期,
|
||
// "Duration": getDaysBetween(dataArr[i].createDate,dataArr[i].plannedFinishDate), //工期
|
||
'actualFinishDate':dataArr[i].actualFinishDate,//实际完成日期
|
||
// dateAddDays(dataArr[i].plannedFinishDate,10)
|
||
"Finish":dataArr[i].actualFinishDate?dateAddDays(dataArr[i].actualFinishDate,10):dateAddDays(dataArr[i].plannedFinishDate,10), //完成日期
|
||
"Start":dataArr[i].plannedFinishDate, //开始日期
|
||
// "Name": dataArr[i].nodeName, //任务名
|
||
"nodeName": dataArr[i].nodeName, //任务名
|
||
'deferDiffDay':dataArr[i].deferDiffDay,//逾期
|
||
'beforeCompleteDiffDay':dataArr[i].beforeCompleteDiffDay,//提前
|
||
'deferCompleteDiffDay':dataArr[i].deferCompleteDiffDay,//逾期多少天
|
||
"children": [], //子级
|
||
"nodeState":dataArr[i].nodeState,
|
||
// "ceshi":2,
|
||
"Note": '', //备注
|
||
'branchId': dataArr[i].branchId,
|
||
}
|
||
}
|
||
if(dataArr[i].children){
|
||
if (dataArr[i].children.length > 0) {
|
||
for (let j = 0; j < dataArr[i].children.length; j++) {
|
||
number++;
|
||
let children = {
|
||
"UID":number,
|
||
"Name": dataArr[i].children[j].subitemProjectName, //名称
|
||
"Duration": dataArr[i].children[j].duration, //工期
|
||
"PercentComplete": 100, //进度
|
||
"Finish": dataArr[i].children[j].endTime, //完成日期
|
||
"Start": dataArr[i].children[j].startTime, //开始日期
|
||
"PredecessorLink": [ //前置任务字段
|
||
{
|
||
"Type": 1,
|
||
"PredecessorUID": number-1
|
||
}
|
||
],
|
||
"Note": dataArr[i].children[j].taskDescription //备注
|
||
};
|
||
|
||
data.children.push(children);
|
||
}
|
||
};
|
||
}
|
||
// console.log(data)
|
||
// debugger;
|
||
number++;
|
||
listData.push(data)
|
||
}
|
||
} else {
|
||
alert(res.data.message)
|
||
}
|
||
gantt.loadTasks(listData);
|
||
gantt.unmask();
|
||
})
|
||
|
||
}
|
||
getListData();
|
||
|
||
//创建ext面板
|
||
var viewport = new Ext.Viewport({
|
||
layout: 'border',
|
||
items: [
|
||
new Ext.BoxComponent({
|
||
region: 'north',
|
||
height: 0,
|
||
// autoEl: {
|
||
// tag: 'div',
|
||
// html: '<b style="padding:8px;">Ext甘特图集成示例</b>'
|
||
// }
|
||
}), {
|
||
region: 'west',
|
||
id: 'west-panel',
|
||
title: 'West',
|
||
split: false,
|
||
width: 0,
|
||
minSize: 175,
|
||
maxSize: 400,
|
||
collapsible: true,
|
||
margins: '0 0 0 0',
|
||
layout: {
|
||
type: 'accordion',
|
||
animate: true
|
||
},
|
||
items: [{
|
||
title: 'Navigation',
|
||
border: false,
|
||
iconCls: 'nav'
|
||
}, {
|
||
title: 'Settings',
|
||
html: '<p>Some settings in here.</p>',
|
||
border: false,
|
||
iconCls: 'settings'
|
||
}]
|
||
},
|
||
new Ext.TabPanel({
|
||
region: 'center', //部署的区域,参考上图,center是中间显示页面区域
|
||
autoScroll: true,
|
||
animScroll: true,
|
||
resizTabs: true,
|
||
enableTabScroll: true,
|
||
activeTab: 0,
|
||
deferredRender: false,
|
||
defaults: {
|
||
autoScroll: true
|
||
},
|
||
tabMargin: 0,
|
||
items: [
|
||
new Ext.BoxComponent({
|
||
id: "extwrap",
|
||
title: "甘特图",
|
||
region: "center",
|
||
})
|
||
]
|
||
|
||
})
|
||
]
|
||
});
|
||
////////////////////////////////////////////
|
||
var extControl = Ext.get("extwrap");
|
||
|
||
//创建PlusGantt之后,
|
||
var gantt = new CreateGantt();
|
||
gantt.setStyle("width:100%;height:100%");
|
||
// gantt.setTopTimeScale( 'year' )
|
||
gantt.render(extControl.dom);
|
||
//右键菜单
|
||
|
||
// var ganttMenu = new GanttMenu();
|
||
// gantt.setContextMenu(ganttMenu);
|
||
|
||
gantt.loading();
|
||
// setTimeout(() => {
|
||
// var data = listData;
|
||
// gantt.loadTasks(data);
|
||
// gantt.unmask();
|
||
// }, 200)
|
||
|
||
//修改参数时触发
|
||
var cellCommitEdit = (e) => {
|
||
console.log(e,listData)
|
||
let uid = e.task.UID; //修改行的id
|
||
let text = e.text; //修改 作用于时间
|
||
let field = e.field; //修改的字段
|
||
let value = e.value; //修改的内容
|
||
var task = e.task; //修改的内容
|
||
let stair = typeof (uid) != 'number' && uid.indexOf('b') == 0 ? true : false; //是不是一级
|
||
let branchId = '';
|
||
//是一级 循环获取一级的id;
|
||
if (stair) {
|
||
if(field == 'PercentComplete'){
|
||
alert('这里修改进度无效,将不会保存')
|
||
return
|
||
}
|
||
if(field == 'Note'){
|
||
alert('一级修改备注无效,将不会保存')
|
||
return
|
||
}
|
||
if(field == 'PredecessorLink'){
|
||
alert('一级设置前置任务无效,将不会保存')
|
||
return
|
||
}
|
||
for (let i = 0; i < listData.length; i++) {
|
||
if (listData[i].UID == uid) {
|
||
branchId = listData[i].branchId;
|
||
}
|
||
}
|
||
//请求的内容
|
||
let requestData = {
|
||
id: branchId,
|
||
projectSn: projectSn
|
||
}
|
||
field == 'Name' ? requestData.branchProjectName = value : '';
|
||
// field == 'Note' ? requestData.taskDescription = value : '';
|
||
// field == 'PercentComplete' ? requestData.progressRatio = value : '';
|
||
setTimeout(() => {
|
||
axios.post(requestUrl + 'xmgl/progressManage/edit', requestData).then(res => {
|
||
if (res.data.code == 200) {
|
||
}
|
||
})
|
||
}, 200)
|
||
|
||
} else {
|
||
//二级修改
|
||
let requestData = {
|
||
id: uid,
|
||
projectSn: projectSn
|
||
};
|
||
//修改的是工期时
|
||
if (field == 'Duration') {
|
||
setTimeout(() => {
|
||
let startTime = formatDateTime(task.Start).substring(0, 10);
|
||
let endTime = formatDateTime(task.Finish).substring(0, 10);
|
||
requestData.duration = value;
|
||
requestData.startTime = startTime;
|
||
requestData.endTime = endTime;
|
||
}, 100)
|
||
}
|
||
//修改开始时间 或 结束时间
|
||
if (field == 'Start' || field == 'Finish') {
|
||
setTimeout(() => {
|
||
let startTime = formatDateTime(task.Start).substring(0, 10);
|
||
let endTime = formatDateTime(task.Finish).substring(0, 10);
|
||
requestData.startTime = startTime;
|
||
requestData.endTime = endTime;
|
||
}, 100)
|
||
}
|
||
|
||
if(field == 'PercentComplete'){
|
||
alert('这里修改进度无效,将不会保存')
|
||
return
|
||
}
|
||
|
||
field == 'Name' ? requestData.branchProjectName = value : '';
|
||
field == 'PredecessorLink' ? requestData.predecessoruid = value : '';
|
||
|
||
field == 'Note' ? requestData.taskDescription = value : '';
|
||
|
||
setTimeout(() => {
|
||
axios.post(requestUrl + 'xmgl/progressItem/edit', requestData).then(res => {
|
||
if (res.data.code == 200) {
|
||
}
|
||
})
|
||
}, 200)
|
||
}
|
||
|
||
// var project = e.source;
|
||
// var task = e.task;
|
||
//e是事件对象, 具体请看每个事件的"参数类型"
|
||
};
|
||
|
||
//右侧 拖拽
|
||
var itemdragcomplete = (e) => {
|
||
let requestData = {
|
||
id: e.item.UID,
|
||
projectSn: projectSn
|
||
};
|
||
let startTime = formatDateTime(e.item.Start).substring(0, 10);
|
||
let endTime = formatDateTime(e.item.Finish).substring(0, 10);
|
||
requestData.startTime = startTime;
|
||
requestData.endTime = endTime;
|
||
axios.post(requestUrl + 'xmgl/progressItem/edit', requestData).then(res => {
|
||
if (res.data.code == 200) {
|
||
}
|
||
})
|
||
// var project = e.source;
|
||
// var task = e.task;
|
||
//e是事件对象, 具体请看每个事件的"参数类型"
|
||
};
|
||
var taskclick = (e) => {
|
||
console.log(e);
|
||
}
|
||
gantt.on('taskclick', taskclick);
|
||
gantt.on('CellCommitEdit', cellCommitEdit);
|
||
// gantt.on('itemdragcomplete', itemdragcomplete);
|
||
}
|
||
function getParentUrl(){
|
||
var url = "";
|
||
try {
|
||
url = window.top.document.location.href
|
||
} catch(M) {
|
||
if (window.parent) {
|
||
try {
|
||
url = window.parent.document.location.href
|
||
} catch(L) {
|
||
url = ""
|
||
}
|
||
}
|
||
}
|
||
if (url === "") {
|
||
url = document.location.href
|
||
}
|
||
return url
|
||
}
|
||
</script>
|
||
|
||
<div class="x-layout-split x-layout-split-west x-splitbar-h" id="west-panel-xsplit"
|
||
style="left: 205px; top: 32px; height: 889px;"> </div>
|
||
<div id="ext-gen9" class="x-unselectable x-splitbar-proxy x-splitbar-proxy-h"></div>
|
||
<div class="mini-supergrid-editwrap" style="position: absolute; z-index: 1006; display: none; top: 580px; left: 802px; width: 100px;"></div>
|
||
</body>
|
||
|
||
</html>
|