2023-08-20 00:25:52 +08:00
|
|
|
import request from "@/utils/request";
|
|
|
|
import { tryToJson } from "../../utils/tools";
|
|
|
|
import $dt from "dayjs";
|
|
|
|
|
2023-08-26 12:46:38 +08:00
|
|
|
const updateItemState = (it) => {
|
2023-08-23 00:03:22 +08:00
|
|
|
let dt0 = +$dt($dt(new Date()).format("YYYY-MM-DD")); //当时时间
|
|
|
|
let dt1 = it.planStartDate ? +$dt(it.planStartDate) : 0; //计划开始
|
|
|
|
let dt2 = it.planEndDate ? +$dt(it.planEndDate) : 0; //计划结束
|
|
|
|
let dt3 = it.startDate ? +$dt(it.startDate) : 0; //实际开始
|
|
|
|
let dt4 = it.endDate ? +$dt(it.endDate) : 0; //实际结束
|
2023-08-26 12:46:38 +08:00
|
|
|
if (!it.planStartDate) {
|
|
|
|
return;
|
2023-08-23 00:03:22 +08:00
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
if (it.endDate) {
|
|
|
|
if (!it.planEndDate) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "正常完成";
|
|
|
|
it.finishState = 3;
|
|
|
|
return;
|
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
if (dt4 > dt2) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "逾期完成";
|
|
|
|
it.finishState = 1;
|
2023-08-26 12:46:38 +08:00
|
|
|
} else {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "正常完成";
|
|
|
|
it.finishState = 3;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
if (it.startDate) {
|
|
|
|
if (!it.planEndDate) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "进行中";
|
|
|
|
it.finishState = 2;
|
|
|
|
return;
|
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
if (dt2 < dt0) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "逾期" + (dt0 - dt2) / 3600 / 1000 / 24 + "天";
|
|
|
|
it.finishState = 1;
|
2023-08-26 12:46:38 +08:00
|
|
|
} else {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "进行中";
|
|
|
|
it.finishState = 2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
|
|
|
|
if (!it.startDate) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "未开始";
|
|
|
|
it.finishState = 4;
|
|
|
|
}
|
2023-08-26 12:46:38 +08:00
|
|
|
};
|
2023-08-23 00:03:22 +08:00
|
|
|
|
2023-08-20 00:25:52 +08:00
|
|
|
// 节点计划预警
|
|
|
|
const selectScheduledAlerts = (data) => {
|
2023-08-26 12:46:38 +08:00
|
|
|
return new Promise((resolve) => {
|
|
|
|
request({
|
|
|
|
url: "bgscreen/projectBuildNode/selectScheduledAlerts",
|
|
|
|
method: "post",
|
|
|
|
data: data,
|
|
|
|
}).then((d) => {
|
|
|
|
let tmps = (d.data || []).map((it) => {
|
2023-08-20 12:49:08 +08:00
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
2023-08-26 12:46:38 +08:00
|
|
|
it.projectName = it.project?.projectName || "";
|
2023-08-20 12:49:08 +08:00
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
it.file = tryToJson(it.files, []);
|
|
|
|
updateItemState(it);
|
|
|
|
return it;
|
2023-08-26 12:46:38 +08:00
|
|
|
});
|
|
|
|
resolve(tmps);
|
2023-08-20 12:49:08 +08:00
|
|
|
});
|
2023-08-20 00:25:52 +08:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
// 获取当前节点及叶子节点
|
|
|
|
const selectCurrent = (data) => {
|
|
|
|
return request({
|
|
|
|
url: "bgscreen/projectBuildNode/selectCurrent",
|
|
|
|
method: "post",
|
|
|
|
data: data,
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2023-08-26 12:46:38 +08:00
|
|
|
const toTree = (nodes) => {
|
|
|
|
let tmps = nodes.map((it) => {
|
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
it.file = tryToJson(it.files, []);
|
|
|
|
it.expend = true;
|
|
|
|
updateItemState(it);
|
|
|
|
return it;
|
|
|
|
});
|
|
|
|
let objs = tmps.filter((d) => d.parentLvl.length == 0);
|
|
|
|
objs.forEach((it) => {
|
|
|
|
it.children = tmps.filter((item) => item.parentLvl == it.lvl);
|
|
|
|
it.children.forEach((item) => {
|
|
|
|
item.children = tmps.filter(
|
|
|
|
(item3) => item3.planStartDate && item3.parentLvl == item.lvl
|
|
|
|
);
|
|
|
|
});
|
|
|
|
it.children = it.children.filter(
|
|
|
|
(item) => item.children.length > 0 || item.planStartDate
|
|
|
|
);
|
|
|
|
});
|
|
|
|
return objs;
|
|
|
|
};
|
|
|
|
|
|
|
|
const listByProject = (projectId) => {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
request({
|
|
|
|
url: `bgscreen/projectBuildNode/listByProject?projectId=${projectId}`,
|
|
|
|
method: "get",
|
|
|
|
}).then((d) => {
|
|
|
|
let tmps = (d.data || []).map((it) => {
|
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
it.file = tryToJson(it.files, []);
|
|
|
|
it.expend = true;
|
|
|
|
updateItemState(it);
|
|
|
|
return it;
|
|
|
|
});
|
|
|
|
let objs = tmps.filter((d) => d.parentLvl.length == 0);
|
|
|
|
objs.forEach((it) => {
|
|
|
|
it.children = tmps.filter((item) => item.parentLvl == it.lvl);
|
|
|
|
it.children.forEach((item) => {
|
|
|
|
item.children = tmps.filter(
|
|
|
|
(item3) => item3.planStartDate && item3.parentLvl == item.lvl
|
|
|
|
);
|
|
|
|
});
|
|
|
|
it.children = it.children.filter(
|
|
|
|
(item) => item.children.length > 0 || item.planStartDate
|
|
|
|
);
|
|
|
|
});
|
|
|
|
resolve(objs);
|
2023-08-20 00:25:52 +08:00
|
|
|
});
|
2023-08-26 12:46:38 +08:00
|
|
|
});
|
|
|
|
};
|
2023-08-20 00:25:52 +08:00
|
|
|
|
|
|
|
const covertData = (objs) => {
|
|
|
|
let tmps = objs.map((it) => {
|
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
it.file = tryToJson(it.files, []);
|
|
|
|
return it;
|
|
|
|
});
|
|
|
|
return tmps.map((it) => {
|
2023-08-23 00:03:22 +08:00
|
|
|
updateItemState(it);
|
|
|
|
/*
|
2023-08-20 00:25:52 +08:00
|
|
|
let dt0 = +$dt($dt(new Date()).format("YYYY-MM-DD")); //当时时间
|
|
|
|
let dt1 = it.planStartDate ? +$dt(it.planStartDate) : 0; //计划开始
|
|
|
|
let dt2 = it.planEndDate ? +$dt(it.planEndDate) : 0; //计划结束
|
|
|
|
let dt3 = it.startDate ? +$dt(it.startDate) : 0; //实际开始
|
|
|
|
let dt4 = it.endDate ? +$dt(it.endDate) : 0; //实际结束
|
|
|
|
if (it.lvl.length == 2) {
|
|
|
|
if (!it.planStartDate || !it.planEndDate) {
|
|
|
|
it.finish = "";
|
|
|
|
it.finishState = -1;
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
if (it.endDate) {
|
|
|
|
if (dt4 > dt2) {
|
|
|
|
it.finishState = 1;
|
|
|
|
it.finish = "逾期" + (dt4 - dt2) / 3600 / 1000 / 24 + "天";
|
|
|
|
} else {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "正常完成";
|
2023-08-20 00:25:52 +08:00
|
|
|
it.finishState = 3;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (it.startDate) {
|
|
|
|
if (dt2 >= dt0) {
|
|
|
|
it.finish = "进行中";
|
|
|
|
it.finishState = 2;
|
|
|
|
} else {
|
|
|
|
it.finishState = 1;
|
|
|
|
it.finish = "逾期" + (dt2 - dt0) / 3600 / 1000 / 24 + "天";
|
|
|
|
}
|
|
|
|
} else {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "未开始";
|
2023-08-20 00:25:52 +08:00
|
|
|
it.finishState = 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (!it.planStartDate &&!it.planEndDate &&!it.startDate &&!it.endDate) {
|
|
|
|
it.finish = "";
|
|
|
|
it.finishState = -1;
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
if (it.planStartDate && !it.startDate) {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "未开始";
|
2023-08-20 00:25:52 +08:00
|
|
|
it.finishState = 4;
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
if (!it.endDate) {
|
|
|
|
it.finish = "进行中";
|
|
|
|
it.finishState = 2;
|
|
|
|
}
|
|
|
|
if(it.endDate && !it.planEndDate){
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "正常完成";
|
2023-08-20 00:25:52 +08:00
|
|
|
it.finishState = 3;
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
if(it.endDate && it.planEndDate){
|
|
|
|
if(dt4>dt2){
|
|
|
|
it.finishState = 1;
|
|
|
|
it.finish = "逾期" + (dt4 - dt2) / 3600 / 1000 / 24 + "天";
|
|
|
|
} else {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.finish = "正常完成";
|
2023-08-20 00:25:52 +08:00
|
|
|
it.finishState = 3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-08-23 00:03:22 +08:00
|
|
|
*/
|
2023-08-20 00:25:52 +08:00
|
|
|
return it;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2023-08-20 12:49:08 +08:00
|
|
|
/**
|
|
|
|
* 节点完成率统计
|
2023-08-26 12:46:38 +08:00
|
|
|
* @param {*} data
|
|
|
|
* @returns
|
2023-08-20 12:49:08 +08:00
|
|
|
*/
|
2023-08-26 12:46:38 +08:00
|
|
|
const countCompletionRate = (data) => {
|
|
|
|
return new Promise((resolve) => {
|
2023-08-20 12:49:08 +08:00
|
|
|
request({
|
2023-08-26 12:46:38 +08:00
|
|
|
url: "bgscreen/projectBuildNode/countCompletionRate",
|
|
|
|
method: "post",
|
|
|
|
data: data,
|
|
|
|
}).then((d) => {
|
|
|
|
let tmps = (d.data || []).map((it) => {
|
2023-08-20 12:49:08 +08:00
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
2023-08-26 12:46:38 +08:00
|
|
|
it.projectName = it.project?.projectName || "";
|
2023-08-20 12:49:08 +08:00
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
it.file = tryToJson(it.files, []);
|
2023-08-26 12:46:38 +08:00
|
|
|
it.percent = 0;
|
|
|
|
if (+it.id > 0) {
|
|
|
|
it.percent = (((it.nodeId * 100.0) / it.id) * 1.0).toFixed(2);
|
2023-08-20 12:49:08 +08:00
|
|
|
}
|
|
|
|
return it;
|
2023-08-26 12:46:38 +08:00
|
|
|
});
|
2023-08-20 12:49:08 +08:00
|
|
|
resolve(tmps);
|
2023-08-26 12:46:38 +08:00
|
|
|
});
|
2023-08-20 12:49:08 +08:00
|
|
|
});
|
2023-08-26 12:46:38 +08:00
|
|
|
};
|
2023-08-20 12:49:08 +08:00
|
|
|
|
2023-08-26 12:46:38 +08:00
|
|
|
const queryByProjectType = (type) => {
|
|
|
|
return new Promise((resolve) => {
|
2023-08-23 00:03:22 +08:00
|
|
|
request({
|
2023-08-26 12:46:38 +08:00
|
|
|
url: "bgscreen/projectBuildNode/queryByProjectType?type=" + type,
|
|
|
|
method: "get",
|
|
|
|
}).then((d) => {
|
|
|
|
resolve(toTree(d.data || []));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const queryByProjectTypeNoTree = (type) => {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
request({
|
|
|
|
url: "bgscreen/projectBuildNode/queryByProjectType?type=" + type,
|
|
|
|
method: "get",
|
|
|
|
}).then((d) => {
|
|
|
|
let tmps = (d.data || []).map((it) => {
|
2023-08-23 00:03:22 +08:00
|
|
|
it.lvl = it.baseBuildNode.nodeLvl;
|
2023-08-26 12:46:38 +08:00
|
|
|
it.projectName = it.project?.projectName || "";
|
2023-08-23 00:03:22 +08:00
|
|
|
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
|
|
|
|
it.nodeText = it.baseBuildNode.nodeText;
|
|
|
|
updateItemState(it);
|
|
|
|
return it;
|
2023-08-26 12:46:38 +08:00
|
|
|
});
|
|
|
|
resolve(tmps);
|
2023-08-23 00:03:22 +08:00
|
|
|
});
|
|
|
|
});
|
2023-08-26 12:46:38 +08:00
|
|
|
};
|
2023-08-20 00:25:52 +08:00
|
|
|
export default {
|
|
|
|
selectScheduledAlerts,
|
|
|
|
selectCurrent,
|
|
|
|
covertData,
|
2023-08-20 12:49:08 +08:00
|
|
|
listByProject,
|
2023-08-23 00:03:22 +08:00
|
|
|
countCompletionRate,
|
2023-08-26 12:46:38 +08:00
|
|
|
queryByProjectType,
|
|
|
|
queryByProjectTypeNoTree,
|
|
|
|
toTree
|
2023-08-20 00:25:52 +08:00
|
|
|
};
|