zhgdyun/public/doc/ExtGantt/Ext甘特图.html
2022-11-08 13:53:49 +08:00

662 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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">
<!--引入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/GanttService.js"
type="text/javascript"
></script>
<script
src="./Ext甘特图_files/GanttMenu.js"
type="text/javascript"
></script>
<script
src="./Ext甘特图_files/GanttSchedule.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">
// 父级传过来的参数
window.addEventListener('message', function(e) {
console.log(e.data, '父级页面传来的数据')
localStorage.setItem('id',e.data)
})
//页面加载就绪
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 token = parameter[3];
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;
// };
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;
return y + "-" + m + "-" + d;
}
getListData = () => {
axios.defaults.headers.common["Authorization"] =
"Bearer" + " " + token;
axios
.get(requestUrl + "xmgl/progressTask/getParentChildList", {
params: { projectSn: projectSn },
})
.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 = {
id: dataArr[i].id,
// "UID": dataArr[i].id, //任务唯一标识符
taskName: dataArr[i].taskName, //任务名称
PercentComplete: dataArr[i].progressRatio, //完成百分比
duration: dataArr[i].duration, //工期
Start: dataArr[i].startDate, //计划开始日期
Finish: dataArr[i].finishDate, //计划完成日期
actualStartDate: dataArr[i].actualStartDate, //实际开始日期
actualFinishDate: dataArr[i].actualFinishDate, //实际完成日期
children: [], //子级
remark: dataArr[i].remark, //备注
// "PredecessorLink":dataArr[i].predecessorIds,
// PredecessorLink: [
// {
// Type: 1,
// PredecessorUID: number-1
// },
// ],
};
// console.log("参数传进去了吗", data.PredecessorLink);
if (dataArr[i].children.length > 0) {
let threeData = dataArr[i].children;
let threeNum = 0;
for (let j = 0; j < dataArr[i].children.length; j++) {
// console.log(
// "有关联的前置任务嘛",
// dataArr[i].children[j].predecessorIds
// );
number++;
let children = {
id: dataArr[i].children[j].id,
UID: number, //任务唯一标识符
taskName: dataArr[i].children[j].taskName, //任务名称
PercentComplete: dataArr[i].children[j].progressRatio, //完成百分比
duration: dataArr[i].children[j].duration, //工期
Start: dataArr[i].children[j].startDate, //计划开始日期
Finish: dataArr[i].children[j].finishDate, //计划完成日期
actualStartDate: dataArr[i].children[j].actualStartDate, //实际开始日期
actualFinishDate:
dataArr[i].children[j].actualFinishDate, //实际完成日期
children: [], //子级
remark: dataArr[i].children[j].remark, //备注
// "PredecessorLink":dataArr[i].children[j].predecessorIds,
// PredecessorLink: [
// //前置任务字段
// {
// Type: 1,
// PredecessorUID:number-1
// },
// ],
};
console.log(
"参数传进去了吗2222",
children.PredecessorLink
);
data.children.push(children);
if (threeData[j].children.length > 0) {
for (let k = 0; k < threeData[j].children.length; k++) {
number++;
console.log(
"threeData[j].children",
threeData[j].children[k]
);
let children2 = {
id: threeData[j].children[k].id,
UID: number,
taskName: threeData[j].children[k].taskName, //任务名称
PercentComplete:
threeData[j].children[k].progressRatio, //完成百分比
duration: threeData[j].children[k].duration, //工期
Start: threeData[j].children[k].startDate, //计划开始日期
Finish: threeData[j].children[k].finishDate, //计划完成日期
actualStartDate:
threeData[j].children[k].actualStartDate, //实际开始日期
actualFinishDate:
threeData[j].children[k].actualFinishDate, //实际完成日期
children: [], //子级
remark: threeData[j].children[k].remark, //备注
// "PredecessorLink":threeData[j].children[k].predecessorIds,
PredecessorLink: [
//前置任务字段
{
Type: 1,
PredecessorUID:number-1
},
],
};
data.children[0].children.push(children2);
}
}
}
}
console.log("此时递归后的data数据", data);
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.render(extControl.dom);
var columns = [];
var idColumn = {
name: "id",
field: "id",
header: "ID<br/>String",
width: 50,
editor: {
type: "textbox",
},
};
columns.push(idColumn);
var stringColumn = {
name: "name",
header: "任务名称<br/>String",
field: "taskName",
width: 150,
editor: {
type: "textbox",
},
};
columns.push(stringColumn);
var linkColumn = {
name: "predecessorLink",
header: "前置任务<br/>Array",
field: "predecessorLink",
width: 150,
editor: {
type: "textbox",
},
// renderer: function (e) {
// console.log('前置任务',e)
// console.log('====e.value',e.value)
// if (!e.value) return "";
// },
};
columns.push(linkColumn);
var dateColumn1 = {
header: "计划开始日期<br/>Date",
field: "Start",
width: 100,
renderer: function(e) {
var date = e.value;
if (!date) return "";
return formatDateTime(e.value);
},
editor: {
type: "datepicker",
},
};
columns.push(dateColumn1);
var dateColumn2 = {
header: "计划完成日期<br/>Date",
field: "Finish",
width: 100,
renderer: function(e) {
var date = e.value;
if (!date) return "";
return formatDateTime(e.value);
},
editor: {
type: "datepicker",
},
};
columns.push(dateColumn2);
var dateColumn3 = {
header: "实际开始日期<br/>Date",
field: "actualStartDate",
width: 100,
renderer: function(e) {
var date = e.value;
if (!date) return "";
return formatDateTime(e.value);
},
editor: {
type: "datepicker",
},
};
columns.push(dateColumn3);
var dateColumn4 = {
header: "实际完成日期<br/>Date",
field: "actualFinishDate",
width: 100,
renderer: function(e) {
var date = e.value;
if (!date) return "";
return formatDateTime(e.value);
},
editor: {
type: "datepicker",
},
};
columns.push(dateColumn4);
var durationColumn = {
name: "duration",
header: "工期<br/>String",
field: "duration",
width: 60,
editor: {
type: "textbox",
},
};
columns.push(durationColumn);
var proColumn = {
name: "percentComplete",
header: "进度比例<br/>String",
field: "PercentComplete",
width: 60,
editor: {
type: "textbox",
},
};
columns.push(proColumn);
var remarkColumn = {
name: "remark",
header: "备注<br/>String",
field: "remark",
width: 150,
editor: {
type: "textbox",
},
};
columns.push(remarkColumn);
//将列集合数组设置给甘特图
gantt.setColumns(columns);
gantt.setTreeColumn("name");
gantt.addTask({
taskName: "11111",
});
// // 新增时触发
// var cellCommitAdd = (e) => {
// let uid = e.task.UID; //修改行的id
// let text = e.text; //修改 作用于时间
// let field = e.field; //修改的字段
// let value = e.value; //修改的内容
// var task = e.task; //修改的内容
// }
// console.log('====新增的参数',cellCommitAdd)
//右键菜单
var ganttMenu = new GanttMenu();
console.log("右键菜单有哪些", ganttMenu);
gantt.setContextMenu(ganttMenu);
gantt.loading();
//渲染
setTimeout(() => {
var data = listData;
gantt.loadTasks(data);
gantt.unmask();
}, 3000);
var cellCommitEdit = (e) => {
console.log("eeeeeeee编辑行的信息", e);
var data = {
taskName: e.task.taskName,
Start: e.task.Start,
Finish: e.task.Finish,
actualStartDate: e.task.actualStartDate,
actualFinishDate: e.task.actualFinishDate,
duration: e.task.duration,
progressRatio: e.task.progressRatio,
remark: e.task.remark,
id: e.task.id,
projectSn: projectSn,
};
data[e.field] = e.value;
let data2 = {};
for (let d in data) {
if (d == "Start" || d == "Finish" || d == "PercentComplete") {
if (d == "Start") {
data2.startDate = data[d];
} else if (d == "Finish") {
data2.finishDate = data[d];
}else if( d == "PercentComplete"){
data2.progressRatio = data[d];
}
} else {
data2[d] = data[d];
}
}
// let {Start:startDate,Finish:finishDate}=data
// let startDate=data.
// let uid = e.task.UID; //修改行的id
// let text = e.text; //修改 作用于时间
// let field = e.field; //修改的字段
// let value = e.value; //修改的内容
// var task = e.task; //修改的内容
// // 请求接口的参数
console.log("参数", data2);
if (e.task.hasOwnProperty("id")) {
setTimeout(() => {
axios
.post(
requestUrl + "xmgl/progressTask/updateProgressTask",
data2
)
.then((res) => {
console.log("修改返回", res);
if (res.data.code == 200) {
alert("编辑成功!");
}
});
}, 500);
}
};
//右侧 拖拽
var itemdragcomplete = (e) => {
let requestData = {
id: e.item.id,
projectSn: projectSn,
taskName:e.item.taskName,
progressRatio:e.item.PercentComplete
};
let startTime = formatDateTime(e.item.Start).substring(0, 10);
let endTime = formatDateTime(e.item.Finish).substring(0, 10);
requestData.startDate = startTime;
requestData.finishDate = endTime;
axios
.post(requestUrl + "xmgl/progressTask/updateProgressTask", requestData)
.then((res) => {
// console.log('=======',res)
if (res.data.code == 200) {
}
});
// var project = e.source;
// var task = e.task;
//e是事件对象, 具体请看每个事件的"参数类型"
};
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;"
>
&nbsp;
</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>
<div class="addDiv" id="addDiv">
<div class="addbox">
<div class="row">
<p>任务名称:</p><input id="taskName" type="input">
</div>
<div class="row">
<p>工期:</p><input id="duration" type="input">
</div>
<div class="row">
<p>前置任务:</p><input id="predecessorIds" type="input">
</div>
<div class="row">
<p>进度比例:</p><input id="progressRatio" type="input">
</div>
<div class="row">
<p>计划开始日期:</p><input id="startDate" type="text" placeholder="yyyy-MM-dd格式">
</div>
<div class="row">
<p>计划完成日期:</p><input id="finishDate" type="text" placeholder="yyyy-MM-dd格式">
</div>
<div class="row">
<p>实际开始时间:</p><input id="actualStartDate" type="text" placeholder="yyyy-MM-dd格式">
</div>
<div class="row">
<p>实际完成时间:</p><input id="actualFinishDate" type="text" placeholder="yyyy-MM-dd格式">
</div>
<div class="row">
<p>备注:</p><input id="remark" type="input">
</div>
</div>
<button id="cancel" class="btn cancel">取消</button>
<button id="submit" class="btn submit">确定</button>
</div>
</div>
</body>
<style>
.addDiv{
display: none;
position:absolute;
top: 20%;
left: 30%;
z-index: 999;
width: 400px;
height: 400px;
border: 1px solid #000;
background-color: #fff;
}
.addbox{
margin: 20px;
}
.row{
margin-top: 10px;
}
p{
display: inline-block;
}
.btn{
width:80px;
height: 30px;
margin-top: 20px;
margin-left: 80px;
}
</style>
</html>