import request from "@/utils/request"; import { tryToJson } from "../../utils/tools"; import $dt from "dayjs"; const updateItemState = (it) => { 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.planStartDate) { return; } if (it.endDate) { if (!it.planEndDate) { it.finish = "正常完成"; it.finishState = 3; return; } if (dt4 > dt2) { it.finish = "逾期完成"; it.finishState = 1; } else { it.finish = "正常完成"; it.finishState = 3; } return; } if (it.startDate) { if (!it.planEndDate) { it.finish = "进行中"; it.finishState = 2; return; } if (dt2 < dt0) { it.finish = "逾期" + (dt0 - dt2) / 3600 / 1000 / 24 + "天"; it.finishState = 1; } else { it.finish = "进行中"; it.finishState = 2; } return; } if (!it.startDate) { it.finish = "未开始"; it.finishState = 4; } }; // 节点计划预警 const selectScheduledAlerts = (data) => { return new Promise((resolve) => { request({ url: "bgscreen/projectBuildNode/selectScheduledAlerts", method: "post", data: data, }).then((d) => { let tmps = (d.data || []).map((it) => { it.lvl = it.baseBuildNode.nodeLvl; it.projectName = it.project?.projectName || ""; it.parentLvl = it.lvl.substring(0, it.lvl.length - 2); it.nodeText = it.baseBuildNode.nodeText; it.file = tryToJson(it.files, []); updateItemState(it); return it; }); resolve(tmps); }); }); }; // 获取当前节点及叶子节点 const selectCurrent = (data) => { return request({ url: "bgscreen/projectBuildNode/selectCurrent", method: "post", data: data, }); }; 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); }); }); }; 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) => { updateItemState(it); /* 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 { it.finish = "正常完成"; 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 { it.finish = "未开始"; 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) { it.finish = "未开始"; it.finishState = 4; return it; } if (!it.endDate) { it.finish = "进行中"; it.finishState = 2; } if(it.endDate && !it.planEndDate){ it.finish = "正常完成"; it.finishState = 3; return it; } if(it.endDate && it.planEndDate){ if(dt4>dt2){ it.finishState = 1; it.finish = "逾期" + (dt4 - dt2) / 3600 / 1000 / 24 + "天"; } else { it.finish = "正常完成"; it.finishState = 3; } } } */ return it; }); }; /** * 节点完成率统计 * @param {*} data * @returns */ const countCompletionRate = (data) => { return new Promise((resolve) => { request({ url: "bgscreen/projectBuildNode/countCompletionRate", method: "post", data: data, }).then((d) => { let tmps = (d.data || []).map((it) => { it.lvl = it.baseBuildNode.nodeLvl; it.projectName = it.project?.projectName || ""; it.parentLvl = it.lvl.substring(0, it.lvl.length - 2); it.nodeText = it.baseBuildNode.nodeText; it.file = tryToJson(it.files, []); it.percent = 0; if (+it.id > 0) { it.percent = (((it.nodeId * 100.0) / it.id) * 1.0).toFixed(2); } return it; }); resolve(tmps); }); }); }; const queryByProjectType = (type) => { return new Promise((resolve) => { request({ 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) => { it.lvl = it.baseBuildNode.nodeLvl; it.projectName = it.project?.projectName || ""; it.parentLvl = it.lvl.substring(0, it.lvl.length - 2); it.nodeText = it.baseBuildNode.nodeText; updateItemState(it); return it; }); resolve(tmps); }); }); }; export default { selectScheduledAlerts, selectCurrent, covertData, listByProject, countCompletionRate, queryByProjectType, queryByProjectTypeNoTree, toTree };