甘特图

This commit is contained in:
骆乐 2022-11-05 13:35:16 +08:00
parent ed12e2f634
commit 9a1d82934b
8 changed files with 624 additions and 459 deletions

View File

@ -1,7 +1,6 @@
<!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>
@ -18,72 +17,6 @@
</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">&nbsp;</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">&nbsp;</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">&nbsp;</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>
@ -113,10 +46,10 @@
window.onload = () => {
console.log('window.onload')
var parentUrl = getParentUrl()
console.log('parentUrl',parentUrl)
if(parentUrl.indexOf('dataBoard')!=-1){
console.log('parentUrl', parentUrl)
if (parentUrl.indexOf('dataBoard') != -1) {
document.getElementById('ext-gen3').classList.add('greyBox')
}else{
} else {
document.getElementById('ext-gen3').classList.remove('greyBox')
}
@ -129,6 +62,21 @@
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();
@ -136,61 +84,93 @@
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;
return y + '-' + m + '-' + d
};
//获取列表数据
getListData = () => {
axios.defaults.headers.common['Authorization'] = 'Bearer'+' '+ token;
axios.post(requestUrl + 'xmgl/progressManage/viewProjectProgressManageList', { projectSn }).then(res => {
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)
console.log('查询结果', res.data.result)
let dataArr = res.data.result;
let number = 0;
let type= false;
let type = false;
for (let i = 0; i < dataArr.length; i++) {
let data = {
"UID": dataArr[i].tempBranchId, //任务唯一标识符
"PercentComplete": dataArr[i].progressRatio, //完成百分比
"Duration": dataArr[i].duration, //工期
"Finish": dataArr[i].branchEndTime, //完成日期
"Start": dataArr[i].branchStartTime, //开始日期
"Name": dataArr[i].branchProjectName, //任务名称
"id": dataArr[i].id,
// "UID": dataArr[i].id, //任务唯一标识符
"taskName": dataArr[i].taskName, //任务名称
"progressRatio": dataArr[i].progressRatio, //完成百分比
"duration": dataArr[i].duration, //工期
"Start": dataArr[i].startDate, //计划开始日期
"Finish": dataArr[i].finishDate, //计划完成日期
"actualStartDate": dataArr[i].actualStartDate, //实际开始日期
"actualFinishDate": dataArr[i].actualFinishDate, //实际完成日期
"children": [], //子级
"Note": '', //备注
'branchId': dataArr[i].branchId,
"remark": dataArr[i].remark, //备注
// "PredecessorLink":dataArr[i].predecessorIds,
"PredecessorLink": [
{
"PredecessorUID": dataArr[i].predecessorIds
}
],
}
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 = {
"UID":number,
"Name": dataArr[i].children[j].subitemProjectName, //名称
"Duration": dataArr[i].children[j].duration, //工期
"PercentComplete": dataArr[i].children[j].progressRatio, //进度
"Finish": dataArr[i].children[j].endTime, //完成日期
"Start": dataArr[i].children[j].startTime, //开始日期
"id": dataArr[i].children[j].id,
"UID": number, //任务唯一标识符
"taskName": dataArr[i].children[j].taskName, //任务名称
"progressRatio": 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
}
],
"Note": dataArr[i].children[j].taskDescription //备注
{
"PredecessorUID": dataArr[i].children[j].predecessorIds
}
],
};
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, //任务名称
"progressRatio": 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": [ //前置任务字段
{
"PredecessorUID": threeData[j].children[k].predecessorIds
}
],
};
data.children[0].children.push(children2)
}
}
}
};
console.log(data)
// debugger;
console.log('此时递归后的data数据', data)
number++;
listData.push(data)
}
@ -200,7 +180,6 @@
gantt.loadTasks(listData);
gantt.unmask();
})
}
getListData();
@ -272,9 +251,147 @@
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: "progressRatio",
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({
name: "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)
console.log('右键菜单有哪些', ganttMenu)
gantt.setContextMenu(ganttMenu);
gantt.loading();
//渲染
@ -283,97 +400,55 @@
gantt.loadTasks(data);
gantt.unmask();
}, 3000)
//修改参数时触发
var cellCommitEdit = (e) => {
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)
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'){
if(d=='Start'){
data2.startDate=data[d]
}else if(d=='finishDate'){
data2.startDate=data[d]
}
}else{
data2[d]=data[d]
}
} 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是事件对象, 具体请看每个事件的"参数类型"
};
// 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)
setTimeout(() => {
axios.post(requestUrl + 'xmgl/progressTask/updateProgressTask', data2).then(res => {
console.log('修改返回', res)
if (res.data.code == 200) {
alert('编辑成功!')
}
})
}, 500)
}
//右侧 拖拽
var itemdragcomplete = (e) => {
@ -397,23 +472,23 @@
gantt.on('itemdragcomplete', itemdragcomplete);
}
function getParentUrl(){
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 = ""
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
if (url === "") {
url = document.location.href
}
return url
}
</script>
@ -424,4 +499,4 @@
style="position: absolute; z-index: 1006; display: none; top: 580px; left: 802px; width: 100px;"></div>
</body>
</html>
</html>

View File

@ -1,101 +1,151 @@
var GanttMenu = function () {
GanttMenu.superclass.constructor.call(this);
}
var GanttMenu = function() {
GanttMenu.superclass.constructor.call(this);
};
mini.extend(GanttMenu, mini.Menu, {
_create: function () {
GanttMenu.superclass._create.call(this);
_create: function() {
GanttMenu.superclass._create.call(this);
var menuItems = [
{ type: "menuitem", iconCls: "icon-goto", text: mini.Gantt.Goto_Text, name: "goto"},
'-',
{ type: "menuitem", iconCls: "icon-upgrade", text: mini.Gantt.UpGrade_Text, name: "upgrade" },
{ type: "menuitem", iconCls: "icon-downgrade", text: mini.Gantt.DownGrade_Text, name: "downgrade" },
'-',
{ type: "menuitem", iconCls: "icon-add", text: mini.Gantt.Add_Text, name: "add" },
{ type: "menuitem", iconCls: "icon-edit", text: mini.Gantt.Edit_Text, name: "edit" },
{ type: "menuitem", iconCls: "icon-remove", text: mini.Gantt.Remove_Text, name: "remove" },
'-',
{ type: "menuitem", iconCls: "icon-zoomin", text: mini.Gantt.ZoomIn_Text, name: "zoomin" },
{ type: "menuitem", iconCls: "icon-zoomout", text: mini.Gantt.ZoomOut_Text, name: "zoomout" }
];
this.setItems(menuItems);
var menuItems = [
// { type: "menuitem", iconCls: "icon-goto", text: mini.Gantt.Goto_Text, name: "goto"},
// '-',
// { type: "menuitem", iconCls: "icon-upgrade", text: mini.Gantt.UpGrade_Text, name: "upgrade" },
// { type: "menuitem", iconCls: "icon-downgrade", text: mini.Gantt.DownGrade_Text, name: "downgrade" },
// '-',
{
type: "menuitem",
iconCls: "icon-add",
text: mini.Gantt.Add_Text,
name: "add",
},
{
type: "menuitem",
iconCls: "icon-edit",
text: mini.Gantt.Edit_Text,
name: "edit",
},
{
type: "menuitem",
iconCls: "icon-remove",
text: mini.Gantt.Remove_Text,
name: "remove",
},
"-",
{
type: "menuitem",
iconCls: "icon-zoomin",
text: mini.Gantt.ZoomIn_Text,
name: "zoomin",
},
{
type: "menuitem",
iconCls: "icon-zoomout",
text: mini.Gantt.ZoomOut_Text,
name: "zoomout",
},
];
this.setItems(menuItems);
this.goto = mini.getbyName("goto", this);
this.zoomIn = mini.getbyName("zoomin", this);
this.zoomOut = mini.getbyName("zoomout", this);
// this.goto = mini.getbyName("goto", this);
this.zoomIn = mini.getbyName("zoomin", this);
this.zoomOut = mini.getbyName("zoomout", this);
this.upgrade = mini.getbyName("upgrade", this);
this.downgrade = mini.getbyName("downgrade", this);
this.add = mini.getbyName("add", this);
this.edit = mini.getbyName("edit", this);
this.remove = mini.getbyName("remove", this);
// this.upgrade = mini.getbyName("upgrade", this);
// this.downgrade = mini.getbyName("downgrade", this);
this.add = mini.getbyName("add", this);
this.edit = mini.getbyName("edit", this);
this.remove = mini.getbyName("remove", this);
this.goto.on("click", this.__OnGoto, this);
this.zoomIn.on("click", this.__OnZoomIn, this);
this.zoomOut.on("click", this.__OnZoomOut, this);
this.upgrade.on("click", this.__OnUpgrade, this);
this.downgrade.on("click", this.__OnDowngrade, this);
this.add.on("click", this.__OnAdd, this);
this.edit.on("click", this.__OnEdit, this);
this.remove.on("click", this.__OnRemove, this);
},
__OnGoto: function (e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (task) {
gantt.scrollIntoView(task);
}
},
__OnZoomIn: function (e) {
var gantt = this.owner;
gantt.zoomIn();
},
__OnZoomOut: function (e) {
var gantt = this.owner;
gantt.zoomOut();
},
__OnUpgrade: function (e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (task) {
gantt.upgradeTask(task);
}
},
__OnDowngrade: function (e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (task) {
gantt.downgradeTask(task);
}
},
__OnAdd: function (e) {
console.log('执行');
var gantt = this.owner;
var targetTask = gantt.getSelected();
var task = gantt.newTask();
//加到选中任务之前
gantt.addTask(task, "before", targetTask);
//加到子任务
//gantt.addTask(task, "append", targetTask);
},
__OnEdit: function (e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (task) {
}
},
__OnRemove: function (e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (task) {
if (confirm("确定删除任务 \"" + task.Name + "\" ")) {
gantt.removeTask(task);
}
} else {
alert("请选择要删除的任务");
}
// this.goto.on("click", this.__OnGoto, this);
this.zoomIn.on("click", this.__OnZoomIn, this);
this.zoomOut.on("click", this.__OnZoomOut, this);
// this.upgrade.on("click", this.__OnUpgrade, this);
// this.downgrade.on("click", this.__OnDowngrade, this);
this.add.on("click", this.__OnAdd, this);
this.edit.on("click", this.__OnEdit, this);
this.remove.on("click", this.__OnRemove, this);
},
// __OnGoto: function (e) {
// var gantt = this.owner;
// var task = gantt.getSelected();
// if (task) {
// gantt.scrollIntoView(task);
// }
// },
__OnZoomIn: function(e) {
var gantt = this.owner;
gantt.zoomIn();
},
__OnZoomOut: function(e) {
var gantt = this.owner;
gantt.zoomOut();
},
// __OnUpgrade: function (e) {
// var gantt = this.owner;
// var task = gantt.getSelected();
// if (task) {
// gantt.upgradeTask(task);
// }
// },
// __OnDowngrade: function (e) {
// var gantt = this.owner;
// var task = gantt.getSelected();
// if (task) {
// gantt.downgradeTask(task);
// }
// },
__OnAdd: function(e) {
console.log("点击新增执行");
var gantt = this.owner;
var targetTask = gantt.getSelected();
var task = gantt.newTask();
console.log("=====添加", task);
//加到选中任务之后
// gantt.addTask(task, "after", targetTask);
// 新增弹窗
// 没有父级的时候
if (!targetTask) {
// var x;
// var name=prompt("请输入任务名称",""); //显示默认文本 ""
// var duration=prompt("请输入工期",""); //显示默认文本 ""
// var duration=prompt("请输入工期",""); //显示默认文本 ""
// var dutyUserName=prompt("请输入负责人名称",""); //显示默认文本 ""
// console.log('name',name,duration,dutyUserName,)
}
},
__OnEdit: function(e) {
var gantt = this.owner;
var task = gantt.getSelected();
if (!task) {
alert("请先选中任务再编辑哦!");
}
},
__OnRemove: function(e) {
var gantt = this.owner;
var task = gantt.getSelected();
//获取请求地址
let url = window.parent.document.getElementById("iframe").contentWindow
.location.search;
var parameter = url.split("="); //所有参数
var requestUrl = parameter[1].split("&")[0]; //请求服务器的地址
console.log("=======task", task);
if (task) {
if (confirm('确定删除任务 "' + task.taskName + '" ')) {
gantt.removeTask(task);
axios
.get(requestUrl + "xmgl/progressTask/deleteById", {
params: { id: task.id },
})
.then((res) => {
console.log("删除", res);
if (res.data.code == 200) {
alert("删除成功!");
}
});
}
} else {
alert("请选择要删除的任务");
}
},
});

View File

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="editWindow" class="mini-window" title="Window" style="width:650px;"
showModal="true" allowResize="true" allowDrag="true">
<div id="editform" class="form" >
<input class="mini-hidden" name="id"/>
<table style="width:100%;">
<tr>
<td style="width:80px;">员工帐号:</td>
<td style="width:150px;"><input name="loginname" class="mini-textbox" /></td>
<td style="width:80px;">姓名:</td>
<td style="width:150px;"><input name="name" class="mini-textbox" /></td>
<td style="width:80px;">薪资:</td>
<td style="width:150px;"><input name="salary" class="mini-textbox" /></td>
</tr>
<tr>
<td>性别:</td>
<td><input name="gender" class="mini-combobox" url="mini_JSPath + '../../demo/data/genders.txt'"/></td>
<td>年龄:</td>
<td><input name="age" class="mini-spinner" minValue="0" maxValue="200" value="25" /></td>
<td>出生日期:</td>
<td><input name="birthday" class="mini-datepicker" /></td>
</tr>
<tr>
<td style="text-align:right;padding-top:5px;padding-right:20px;" colspan="6">
<a class="Update_Button" href="javascript:updateRow()">Update</a>
<a class="Cancel_Button" href="javascript:cancelRow()">Cancel</a>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>

View File

@ -16,13 +16,14 @@ export const deletetProgressItemApi = data => post('/xmgl/progressItem/delete',
// 分布分项管理2 -- 页面
export const getProgressListDataApi = data => get('/xmgl/progressTask/getParentChildList', data);// 获取列表
export const editProgressListDataApi = data => post('/xmgl/progressTask/updateProgressTask', data);// 编辑
export const getProgressTaskApi = data => get('/xmgl/progressTask/getById', data);// 查看详情
export const getProgressTaskApi = data => get('/xmgl/progressTask/getDetailsById', data);// 查看详情
//进度预警--页面
export const getWarningListDataApi = data => post('/xmgl/progressItem/selectProjectProgressWarningList', data);// 列表查询
export const getTaskAlarmApi = data => get('/progressTaskAlarm/selectPage', data);// 列表查询
//分布详情--组件
export const getDetailInfoApi = data => post('/xmgl/progressItem/getProjectProgressItemDetail', data);// 获取详情信息

View File

@ -27,6 +27,24 @@ export default {
tasks: {
data: [],
links: []
// data: [
// {
// id: 1, text: "Project #2", start_date: "01-04-2018", duration: 18, order: 10,
// progress: 0.4, open: true
// },
// {
// id: 2, text: "Task #1", start_date: "02-04-2018", duration: 8, order: 10,
// progress: 0.6, parent: 1
// },
// {
// id: 3, text: "Task #2", start_date: "11-04-2018", duration: 8, order: 20,
// progress: 0.6, parent: 1
// }
// ],
// links: [
// {id: 1, source: 1, target: 2, type: "1"},
// {id: 2, source: 2, target: 3, type: "0"}
// ]
},
projectSn:''
};
@ -41,7 +59,7 @@ export default {
//
gantt.config.autofit = true;
//
gantt.config.grid_width = 500;
gantt.config.grid_width = 800;
//线
gantt.config.drag_links = false;
//
@ -113,6 +131,13 @@ export default {
section_text: "计划名称:",
section_color: "颜色:",
section_duration: "工期",
section_actualStartDate: "实际开始时间",
section_actualFinishDate: "实际结束时间",
section_progressRatio: "进度比例",
section_remark: "备注",
/* grid columns */
column_text: "计划名称",
@ -120,6 +145,9 @@ export default {
column_duration: "持续时间",
column_add: "",
//
/* link confirmation */
link: "关联",
@ -139,9 +167,9 @@ export default {
years: "年",
},
};
//
//
gantt.config.columns = [
{ name: "text", label: "计划名称", tree: true, width: "*" },
{ name: "taskName", label: "计划名称", tree: true, width: "*" },
{ name: "startDate", label: "预计开始时间", align: "center" },
{ name: "finishDate", label: "预计结束时间", align: "center" },
{ name: "actualStartDate", label: "实际开始时间", align: "center" },
@ -159,39 +187,20 @@ export default {
];
//
gantt.config.lightbox.sections = [
{
name: "text",
height: 70,
map_to: "text",
type: "textarea",
focus: true,
width: 200,
},
{
name: "time",
height: 30,
map_to: "auto",
type: "time",
time_format: ["%Y", "%m", "%d"],
},
{
name: "color",
height: 30,
map_to: "color",
type: "select",
options: [
{name: "text",height: 70,map_to: "text",type: "textarea",focus: true, width: 200,}, //
{name: "duration",height: 70,map_to: "text",type: "text",focus: true, width: 200,},
{name: "actualStartDate", height: 40, map_to: "auto",type:"time", time_format: ["%Y", "%m", "%d"], focus: true},
{name: "actualFinishDate", height: 40, map_to: "auto",type:"time", time_format: ["%Y", "%m", "%d"], focus: true},
{name: "progressRatio", height: 40, map_to: "text", type: "textarea", focus: true},
{name: "remark", height: 40, map_to: "text", type: "textarea", focus: true},
{name: "time",height: 30,map_to: "auto",type: "time",time_format: ["%Y", "%m", "%d"]},
{name: "color",height: 30,map_to: "color",type: "select",options: [
{ key: "#3db9d3", label: "蓝色" },
{ key: "#33cc33", label: "绿色" },
{ key: "#FF8247", label: "橙色" },
{ key: "#ff6633", label: "红色" },
],
},
{
name: "description",
height: 70,
map_to: "description",
type: "textarea",
},
];
//
gantt.templates.task_time = function (start, end, task) {
@ -202,7 +211,8 @@ export default {
);
};
//
gantt.templates.task_text = function (start, end, task) {
gantt.templates.task_text = function (start, end, task,a,b,c,d) {
console.log('start, end, task',start, end, task,a,b,c,d)
return task.text;
};
gantt.init(this.$refs.gantt);
@ -267,12 +277,12 @@ export default {
},
changeTask() {
const taskCount = gantt.getTaskCount();
console.log('看一下',taskCount)
let taskData = [];
let openTask = [];
for (let i = 0; i < taskCount; i++) {
let taskOne = {};
const obj = gantt.getTaskByIndex(i);
console.log('======obj',obj)
//
if (obj.$open == true) {
openTask.push(obj.id);

View File

@ -52,38 +52,36 @@
{{$t('message.projectManage.completed')}}
</el-button>
</div>
<el-form ref="form" label-width="150px" style="width: 80%">
<el-form ref="form" :model="itemForm" label-width="150px" style="width: 80%">
<!-- 分部分项工程名称 -->
<el-form-item :label="$t('message.projectManage.NameOfSubProject')+':'">{{
itemForm.branchProjectName
<el-form-item prop="taskName" :label="$t('message.projectManage.NameOfSubProject')+':'">
{{itemForm.taskName}}
</el-form-item>
<el-form-item prop="startDate" label="计划开始时间:">{{
itemForm.startDate
}}</el-form-item>
<!-- 施工位置 -->
<el-form-item :label="$t('message.projectManage.constructionLocation')+':'">{{
itemForm.buildPosition
<el-form-item prop="actualStartDate" label="实际开始时间:">{{
itemForm.actualStartDate
}}</el-form-item>
<!-- 开始日期 -->
<el-form-item :label="$t('message.projectManage.startData')+':'">{{
itemForm.startTime
<el-form-item prop="actualFinishDate" label="实际完成时间:">{{
itemForm.actualFinishDate
}}</el-form-item>
<!-- 截止完成日期 -->
<el-form-item :label="$t('message.projectManage.completionDate')+':'">{{
itemForm.endTime
<el-form-item prop="dutyUserName" label="负责人名称:">{{
itemForm.dutyUserName
}}</el-form-item>
<!-- 重要程度 -->
<!-- "一般" -->
<!-- "重要" -->
<!-- "很重要" -->
<el-form-item :label="$t('message.projectManage.degreeOfImportance')+':'">{{
itemForm.importance == "1"
? $t('message.projectManage.ordinary')
: itemForm.importance == "2"
? $t('message.projectManage.importent')
: $t('message.projectManage.veryImportent')
<el-form-item prop="isOverdue" label="是否预期:">
{{itemForm.isOverdue == '0' ? '否' : itemForm.isOverdue == '1' ? '是' :'逾期已处理' }}
</el-form-item>
<el-form-item prop="progressRatio" label="进度比例:">{{
itemForm.progressRatio
}}</el-form-item>
<!-- 负责人 -->
<el-form-item :label="$t('message.projectManage.principal')+':'">{{
itemForm.personChargeName
<el-form-item prop="resourceName" label="资源名称:">{{
itemForm.resourceName
}}</el-form-item>
<el-form-item prop="taskTypeId" label="任务模式:">
{{itemForm.taskTypeId == '0' ? '手动' : '自动'}}
</el-form-item>
<!-- 上传的附件 -->
<el-form-item :label="$t('message.projectManage.uploadedAttachments')+':'">
<img
@ -94,16 +92,8 @@
style="height: 50px; width: auto; margin-right: 10px; cursor: pointer;"
/>
</el-form-item>
<!-- <el-form-item label="创建人:">{{
itemForm.createrUser
}}</el-form-item> -->
<!-- 创建日期 -->
<el-form-item :label="$t('message.projectManage.createDate')+':'">{{
itemForm.createTime
}}</el-form-item>
<!-- 任务描述 -->
<el-form-item :label="$t('message.projectManage.taskDescription')+':'">{{
itemForm.taskDescription
<el-form-item prop="remark" label="备注:">{{
itemForm.remark
}}</el-form-item>
</el-form>
</div>
@ -256,7 +246,7 @@
</div>
</template>
<script>
import { getProgressTaskApi,getDetailInfoApi, addPlanInfoApi } from "@/assets/js/api/scheduleInfo";
import { getProgressTaskApi, addPlanInfoApi } from "@/assets/js/api/scheduleInfo";
export default {
props: ["id"],
mounted() {},
@ -266,7 +256,9 @@ export default {
projectSn: "",
uploadUrl: "",
fileUrl: "",
itemForm: {},
itemForm: {
taskName:"",
},
planList: [],
fileList: [],
dialogVisible: false,
@ -346,8 +338,8 @@ export default {
getProgressTaskApi(data).then((res) => {
if (res.code == 200) {
console.log('查看详情',res)
// this.itemForm = res.result.itemDetail;
// this.planList = res.result.feedbackList;
this.itemForm = res.result
this.planList = res.result.feedbackList;
// //
// this.fileList = res.result.itemDetail.fileUrl
// ? [JSON.parse(res.result.itemDetail.fileUrl)]

View File

@ -165,6 +165,7 @@
prop="startDate"
>
<el-date-picker
@change="time1"
v-model="workerInfo.startDate"
type="date"
placeholder="计划开始日期"
@ -178,6 +179,7 @@
prop="finishDate"
>
<el-date-picker
@change="time2"
v-model="workerInfo.finishDate"
type="date"
placeholder="计划完成时间"
@ -208,17 +210,16 @@
<!-- 负责人 -->
<el-form-item
:label="$t('message.projectManage.principal')"
prop="personCharge"
prop="dutyUserName"
>
<el-select
v-model="workerInfo.personCharge"
filterable
<el-select
v-model="workerInfo.dutyUserId"
:placeholder="$t('message.projectManage.pleaseChoose')"
>
<el-option
v-for="item in principalLsit"
:key="item.userId"
:label="item.workerName"
:label="item.realName"
:value="item.userId"
>
</el-option>
@ -292,6 +293,7 @@
size="medium"
>{{ $t("message.personnelPosition.cancel") }}
</el-button>
<!-- 确定 -->
<el-button
type="primary"
icon="el-icon-circle-check"
@ -318,16 +320,9 @@
import {
getProgressListDataApi,
editProgressListDataApi,
addProgressManageApi,
addProgressItemApi,
getPrincipalLsitApi,
editProgressManageApi,
editProgressItemApi,
deleteProgressManageApi,
deletetProgressItemApi,
} from "@/assets/js/api/scheduleInfo";
import detailpage from "./projectNodeDetail";
import axios from "axios";
export default {
components: {
detailpage,
@ -354,6 +349,7 @@ export default {
status: "",
taskTypeId: "",
progressRatio: "",
dutyUserId:"",
fileUrl: "",
duration: "",
remark: "",
@ -400,6 +396,12 @@ export default {
this.getProgressListData();
},
methods: {
time1(val){
console.log('开始时间',val)
},
time2(val){
console.log('结束时间',val)
},
//
downloadFn() {
this.downUrl =
@ -438,7 +440,7 @@ export default {
};
getProgressListDataApi(data).then((res) => {
if (res.code == 200) {
console.log("获取到的列表", res);
// console.log("", res);
this.listData = res.result;
}
});
@ -450,7 +452,6 @@ export default {
};
getPrincipalLsitApi(data).then((res) => {
if (res.code == 200) {
console.log("负责人", res);
this.principalLsit = res.result;
}
});
@ -481,10 +482,11 @@ export default {
//
editBefore(val) {
console.log("=====", val);
this.workerInfo = JSON.parse(JSON.stringify(val));
console.log('当前点击的行',val)
this.fileList = val.fileUrl ? JSON.parse(val.fileUrl) : [];
this.dialogVisible = true;
this.getPrincipalLsit()
},
//
submitBtn() {
@ -502,9 +504,8 @@ export default {
//
let data = this.workerInfo;
data.projectSn = this.projectSn;
console.log('编辑的参数',data)
// console.log('',data)
editProgressListDataApi(data).then((res)=>{
console.log('编辑成功了吗',res)
if(res.code == 200){
this.$message.success("编辑成功!");
this.dialogVisible = false
@ -529,5 +530,9 @@ export default {
display: inline-block !important;
margin-right: 10px;
}
.table_wrap{
height: 800px;
overflow: auto;
}
</style>

View File

@ -30,47 +30,43 @@
</el-form>
</div>
<div class="table_wrap whiteBlock">
<el-table class="tables" :data="tableList">
<!-- 序号 -->
<el-table-column
type='index'
:label="$t('message.projectManage.serialNumber')"
align="center"
width="50"
>
</el-table-column>
<!-- 分布分项工程名称 -->
<el-table-column
width="200"
prop="subitemProjectName"
align="center"
:label="$t('message.projectManage.NameOfSubProject2')"
></el-table-column>
<!-- 责任人 -->
<el-table-column
prop="personCharge"
:label="$t('message.projectManage.principal2')"
align="center"
></el-table-column>
<!-- 开始日期 -->
<el-table-column
prop="startTime"
:label="$t('message.projectManage.startData')"
align="center"
></el-table-column>
<!-- 预计截止日期 -->
<el-table-column
prop="endTime"
:label="$t('message.projectManage.predictDate')"
align="center"
></el-table-column>
<!-- 逾期天数 -->
<el-table-column
prop="daynum"
:label="$t('message.projectManage.daysOverdue')"
align="center"
></el-table-column>
</el-table>
<vue-scroll>
<el-table class="tables" :data="tableList">
<el-table-column
type="index"
:label="$t('message.projectManage.serialNumber')"
align="center"
width="50"
>
</el-table-column>
<el-table-column
prop="taskName"
align="center"
label="任务名称"
></el-table-column>
<el-table-column
prop="alarmDetails"
width="500"
align="center"
label="报警详情"
></el-table-column>
<el-table-column prop="alarmType" align="center" label="报警类型">
<template slot-scope="scope">
{{scope.row.alarmType == 1 ? '逾期未开始' : scope.row.alarmType == 2 ? '逾期未完成' :'前置任务未完成' }}
</template>
</el-table-column>
<el-table-column
prop="createDate"
align="center"
label="创建时间"
></el-table-column>
<el-table-column
prop="updateDate"
align="center"
label="更新时间"
></el-table-column>
</el-table>
</vue-scroll>
<el-pagination
class="pagerBox"
@size-change="SizeChange"
@ -86,19 +82,14 @@
</div>
</template>
<script>
import {
getWarningListDataApi
} from "@/assets/js/api/scheduleInfo";
import { getTaskAlarmApi } from "@/assets/js/api/scheduleInfo";
export default {
mounted() {
},
mounted() {},
data() {
return {
projectSn: "",
tableList:[],
projectSn: "",
tableList: [],
deviceIdArr: [],
queryInfo: {},
pagInfo: {
@ -107,27 +98,28 @@ export default {
total: 0, //
},
List: [],
daterange:[]
daterange: [],
};
},
created(){
this.projectSn = this.$store.state.projectSn;
this.getWarningListData();
created() {
this.projectSn = this.$store.state.projectSn;
this.getWarningListData();
},
methods: {
//
getWarningListData(){
getWarningListData() {
let data = {
projectSn:this.projectSn,
pageNo:this.pagInfo.pageNo,
pageSize:this.pagInfo.pageSize,
}
getWarningListDataApi(data).then(res=>{
if(res.code==200){
projectSn: this.projectSn,
pageNo: this.pagInfo.pageNo,
pageSize: this.pagInfo.pageSize,
};
getTaskAlarmApi(data).then((res) => {
console.log("返回的值", res);
if (res.code == 200) {
this.tableList = res.result.records;
this.pagInfo.total = res.result.total;
}
})
});
},
//
refresh() {
@ -137,8 +129,6 @@ export default {
this.getWarningListData();
},
SizeChange(val) {
this.pagInfo.pageSize = val;
this.getWarningListData();