195 lines
4.2 KiB
Vue
Raw Normal View History

<template>
2024-10-24 17:06:24 +08:00
<Card title="项目总体计划">
2024-09-30 18:36:04 +08:00
<div class="fullHeight">
<div class="searchBox whiteBlock">
<div class="rhombus">
2024-10-14 17:36:20 +08:00
图例
<div>
<div class="rhombus_bg"></div>
<div>关键控制点</div>
</div>
<div>
<div class="rhombus_bg1"></div>
<div>重要事件的控制</div>
</div>
<div>
<div class="rhombus_bg2"></div>
<div>作业项目的节点</div>
</div>
<div>
<div class="rhombus_bg3"></div>
<div>非关键路径</div>
</div>
<div>
<div class="rhombus_bg4"></div>
<div>关键路径</div>
</div>
2024-09-30 18:36:04 +08:00
</div>
</div>
<div class="table_wrap whiteBlock">
<GanttChart
2024-10-14 17:36:20 +08:00
:yearList="pageInfo.yearList"
:milestoneList="pageInfo.milestoneList"
:projectItemList="pageInfo.projectItemList"
2024-09-30 18:36:04 +08:00
/>
</div>
</div>
</Card>
</template>
<script setup lang="tsx" name="ProjectSupervisionRecord">
2024-09-30 18:36:04 +08:00
import GanttChart from "./ganttChart.vue";
2024-10-14 17:36:20 +08:00
import dayjs from "dayjs";
import { getMilestoneListApi, getProjectPlanGraphApi } from "@/api/modules/schedulePlan";
import { computed, reactive, ref, onMounted, onBeforeMount, watch } from "vue";
import { GlobalStore } from "@/stores";
import Card from "@/components/card.vue";
const store = GlobalStore();
2024-09-30 18:36:04 +08:00
const pageInfo = reactive({
pageNo: 1,
pageSize: 10,
total: 10,
milestoneList: [],
yearList: [],
projectItemList: [],
2024-10-14 17:36:20 +08:00
projectSn: ""
});
2024-09-30 18:36:04 +08:00
const loadCardData = () => {
2024-10-14 17:36:20 +08:00
let data = {
projectSn: store.sn,
deviceUnitId: "",
pageNo: 1,
pageSize: -1
};
getMilestoneListApi(data).then((res: any) => {
if (res.code == 200) {
2024-09-30 18:36:04 +08:00
pageInfo.yearList = Array.from(
2024-10-14 17:36:20 +08:00
new Set(
res.result.records.map((ele: any) => {
return dayjs(ele.milestoneTime).format("YYYY");
})
)
2024-09-30 18:36:04 +08:00
);
pageInfo.milestoneList = res.result.records.reduce((pre: any[], cur: any, index: number) => {
2024-10-14 17:36:20 +08:00
if (pre.length == 0) {
pre.push({
id: "id-" + Math.random().toString(36).substr(2, 9),
firstQuarterList: []
});
}
pre[0].firstQuarterList.push({
...cur,
yearTime: cur.milestoneTime,
name: cur.milestoneName
});
2024-10-14 17:36:20 +08:00
return pre;
2024-09-30 18:36:04 +08:00
}, []);
2024-10-14 17:36:20 +08:00
2024-09-30 18:36:04 +08:00
// pageInfo.tableData = res.result.records;
pageInfo.total = res.result.total;
console.log(pageInfo.yearList);
2024-10-14 17:36:20 +08:00
}
});
};
2024-10-14 17:36:20 +08:00
const getProjectPlanGraph = () => {
let data = {
projectSn: store.sn
};
getProjectPlanGraphApi(data).then((res: any) => {
if (res.code == 200) {
2024-09-30 18:36:04 +08:00
pageInfo.projectItemList = res.result.reduce((pre: any[], cur: any) => {
2024-10-14 17:36:20 +08:00
console.log(cur, cur.children);
const children = cur.children.map((ele: any) => {
const newRestul = ele.schedules.sort((a: any, b: any) => Date.parse(a.timeNode) - Date.parse(b.timeNode));
console.log(newRestul, ele.schedules);
2024-09-30 18:36:04 +08:00
return {
...ele,
2024-10-14 17:36:20 +08:00
firstQuarterList: newRestul.map((ele: any) => {
return {
...ele,
isShowHidden: true
};
}),
minStartTime: newRestul.length > 0 ? newRestul[0].timeNode : -1,
maxEndTime: newRestul.length > 0 ? newRestul[newRestul.length - 1].timeNode : -1
2024-09-30 18:36:04 +08:00
};
2024-10-14 17:36:20 +08:00
});
pre.push({
...cur,
children: children
});
return pre;
2024-09-30 18:36:04 +08:00
}, []);
console.log(pageInfo.projectItemList);
2024-10-14 17:36:20 +08:00
}
console.log(res);
});
};
2024-09-30 18:36:04 +08:00
onMounted(() => {
loadCardData();
getProjectPlanGraph();
2024-10-14 17:36:20 +08:00
});
2024-09-30 18:36:04 +08:00
</script>
<style lang="scss" scoped>
2024-10-14 17:36:20 +08:00
.searchBox {
height: 40px;
2024-09-30 18:36:04 +08:00
display: flex;
align-items: center;
2024-10-14 17:36:20 +08:00
color: white;
padding: 0 20px;
}
.rhombus {
display: flex;
align-items: center;
> div {
display: flex;
align-items: center;
margin-right: 10px;
> div:last-child {
margin-left: 4px;
font-size: 14px;
}
2024-09-30 18:36:04 +08:00
}
.rhombus_bg {
2024-10-14 17:36:20 +08:00
width: 10px;
height: 10px;
background-color: #ff0000;
transform: rotateZ(45deg) skew(15deg, 15deg);
2024-09-30 18:36:04 +08:00
}
.rhombus_bg1 {
2024-10-14 17:36:20 +08:00
width: 6px;
height: 6px;
background-color: #fff;
border: 2px solid #000000;
transform: rotateZ(45deg) skew(15deg, 15deg);
2024-09-30 18:36:04 +08:00
}
.rhombus_bg2 {
2024-10-14 17:36:20 +08:00
width: 10px;
height: 10px;
background-color: #fff;
border: 2px solid #000000;
border-radius: 50%;
2024-09-30 18:36:04 +08:00
}
.rhombus_bg3 {
2024-10-14 17:36:20 +08:00
width: 30px;
height: 4px;
background-color: #13c865;
2024-09-30 18:36:04 +08:00
}
.rhombus_bg4 {
2024-10-14 17:36:20 +08:00
width: 30px;
height: 4px;
background-color: #ff0000;
2024-09-30 18:36:04 +08:00
}
2024-10-14 17:36:20 +08:00
}
.download {
2024-09-30 18:36:04 +08:00
color: #1684fc;
cursor: pointer;
2024-10-14 17:36:20 +08:00
}
</style>