提交代码

dev_xd
姜玉琦 2025-05-07 00:37:49 +08:00
parent 8f8d4dbb08
commit 7c416e34ee
16 changed files with 806 additions and 111 deletions

View File

@ -9,6 +9,7 @@ import safety from "./safety";
import tower from "./tower";
import powerIot from "./powerIot";
import aiWarning from "./aiWarning";
import planSchedule from './planSchedule';
export default {
http: axios,
downFile: download,
@ -22,4 +23,5 @@ export default {
tower,
powerIot,
aiWarning,
planSchedule,
};

View File

@ -0,0 +1,23 @@
import request from "@/utils/request";
// 查询计划管理列表
const findAllPlanDatas = (proId) => {
return request({
url: `/manage/plan/findAllPlanDatas/${proId}`,
method: "get",
});
};
// 查询项目进度列表
const findAllSchedule = (data) => {
return request({
url: `/manage/schedule/findAll`,
method: "post",
data:data
});
};
export default {
findAllPlanDatas,
findAllSchedule
};

View File

@ -12,7 +12,7 @@
:height="230"
></project-overview-chart>
</module-one-1-1>
<module-one-1-1 label="预警概况">
<module-one-1-1 label="预警概况" style="position: relative">
<project-overview-chart
:key="'ai2' + overview"
:sp="''"
@ -148,32 +148,51 @@ export default {
overviewTotal: 0,
legendOpt1: {
icon: "rect",
orient: "horizontal",
itemWidth: "50%",
left: 240,
right: "10%",
itemWidth: 20,
itemGap: 20,
itemHeight: 20,
textStyle: {
padding: [0, 0, 0, 0],
fontSize: 10,
color: "#c3dbfd",
fontSize: 15,
align: "center",
rich: {
name: {
color: "#c3dbfd",
padding: [0, 20, 0, 0],
padding: [5, 2, 5, 2],
},
percent: {
color: "#4676FD",
padding: [0, 2, 0, 2],
},
},
},
},
legendOpt2: {
icon: "rect",
orient: "horizontal",
itemWidth: "50%",
left: 240,
right: "10%",
itemWidth: 20,
itemGap: 20,
itemHeight: 20,
textStyle: {
padding: [0, 0, 2, 0],
fontSize: 10,
color: "#c3dbfd",
fontSize: 14,
rich: {
name: {
color: "#c3dbfd",
padding: [0, 20, 0, 0],
padding: [5, 2, 5, 2],
},
percent: {
color: "#4676FD",
padding: [0, 2, 0, 2],
},
},
},
@ -232,7 +251,7 @@ export default {
],
},
intervalTimes: null,
warningData:[]
warningData: [],
};
},
mounted() {
@ -282,23 +301,21 @@ export default {
pageSize: this.listPage.pageSize,
projectId: this.selProject.id,
};
if(this.selDate.length>0){
if (this.selDate.length > 0) {
let _params = {
beginTime: this.selDate[0],
endTime: this.selDate[1]
}
endTime: this.selDate[1],
};
postData.params = _params;
}
if (this.selType != 0) {
postData.alarmType = this.selType;
}
this.$api.aiWarning
.list(postData)
.then((d) => {
this.listPage.total = d.total || 0;
this.listDatas = d.rows || [];
this.listKey++;
});
this.$api.aiWarning.list(postData).then((d) => {
this.listPage.total = d.total || 0;
this.listDatas = d.rows || [];
this.listKey++;
});
},
loadTodayList() {
let postData = {
@ -306,45 +323,47 @@ export default {
pageSize: this.todayPage.pageSize,
projectId: this.selProject.id,
params: {
date: new Date().toLocaleDateString().replaceAll("/","-"),
date: new Date().toLocaleDateString().replaceAll("/", "-"),
},
};
this.$api.aiWarning
.list(postData)
.then((d) => {
this.todayPage.total = d.total || 0;
this.todayList = d.rows || [];
this.todayKey++;
});
this.$api.aiWarning.list(postData).then((d) => {
this.todayPage.total = d.total || 0;
this.todayList = d.rows || [];
this.todayKey++;
});
},
getAiVideoAlertorTypeCount() {
//
this.$api.aiWarning.groupCountByAlarmType(this.selProject.id, "Y").then((response) => {
if (response.data) {
let sum = 0;
response.data.forEach((datum) => {
sum += datum.value;
});
this.overviewTotalDay = sum;
this.typeDistributionDataDay = response.data;
this.overviewDay++;
}
});
this.$api.aiWarning
.groupCountByAlarmType(this.selProject.id, "Y")
.then((response) => {
if (response.data) {
let sum = 0;
response.data.forEach((datum) => {
sum += datum.value;
});
this.overviewTotalDay = sum;
this.typeDistributionDataDay = response.data;
this.overviewDay++;
}
});
//
this.$api.aiWarning.groupCountByAlarmType(this.selProject.id, "N").then((response) => {
if (response.data) {
let sum = 0;
response.data.forEach((datum) => {
sum += datum.value;
});
this.overviewTotal = sum;
this.typeDistributionData = response.data;
this.overview++;
}
});
this.$api.aiWarning
.groupCountByAlarmType(this.selProject.id, "N")
.then((response) => {
if (response.data) {
let sum = 0;
response.data.forEach((datum) => {
sum += datum.value;
});
this.overviewTotal = sum;
this.typeDistributionData = response.data;
this.overview++;
}
});
},
daysTrendView(){
daysTrendView() {
this.$api.aiWarning.getDaysTrendView(this.selProject.id).then((response) => {
if (response.data) {
let _data1 = [];
@ -355,14 +374,19 @@ export default {
});
let _lineData = [];
_lineData.push(_data1);
let _color = ['#0078e7'];
let _legend = ['预警总数'];
let _trendData = {'lineData':_lineData,'color':_color,'legend':_legend,'date':_date8};
let _color = ["#0078e7"];
let _legend = ["预警总数"];
let _trendData = {
lineData: _lineData,
color: _color,
legend: _legend,
date: _date8,
};
this.warningData = _trendData;
}
});
},
initIntervalTimes(){
initIntervalTimes() {
this.intervalTimes = setInterval(this.init, 150000); // 2.5
},
},
@ -370,10 +394,9 @@ export default {
</script>
<style lang="less" scope>
.project-ai-warning {
.project-overview-chart{
.chart-overview-gif{
margin-left: -10px !important;
}
.chart-overview-gif {
top: 63px;
left: 51px;
}
.ai-list {
padding: 0px 24px 8px;
@ -408,4 +431,4 @@ export default {
}
}
}
</style>
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="project-photography main-page">
<div class="project-planSchedule main-page">
<el-col :span="6" class="h100">
<module-one-1-1 label="项目全景">
<div class="photography-list">
@ -45,55 +45,262 @@
</template>
</div>
</module-one-1-1>
<module-one-2-1 label="进行中的计划">
<module-one-2-1 label="进行中的计划" class="chart-plan-module">
<div
v-for="(it, idx) in overviewJxzjh"
:key="idx"
class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"
>
<div class="czz-number-img czz-number-img-blue">
<svg-icon icon-class="notesearch"></svg-icon>
</div>
<div class="czz-number-img czz-number-img-blue">{{ it.scheduleNode }} %</div>
<div>
<div class="equipment-list-data equipment-list-data_div_top">
<span>测试计划名称1</span>
<span>{{ it.taskName }}</span>
</div>
<div class="equipment-list-data equipment-list-data_div_bottom">
<span class="sp-data">{{ it.value || 0 }}</span>
</div>
</div>
</div>
<div
class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"
>
<div class="czz-number-img czz-number-img-blue">
<svg-icon icon-class="notesearch"></svg-icon>
</div>
<div>
<div class="equipment-list-data equipment-list-data_div_top">
<span>测试计划名称2</span>
</div>
<div class="equipment-list-data equipment-list-data_div_bottom">
<span class="sp-data">{{ it.value || 0 }}</span>
计划周期<span class="sp-data"
>{{ it.planStartDate }}-{{ it.planFinishDate }}</span
>
</div>
</div>
</div>
</module-one-2-1>
</el-col>
<el-col :span="18" class="no-title">
<module-one-3-3 :notitle="true">
<template v-if="info">
<div class="right-title">
<span class="sp-title">{{ info.videoDate }}</span>
</div>
<video style="width: 98%" controls>
<source :src="info.videoUrl" type="video/mp4" />
您的浏览器不支持Video标签
</video>
</template>
<div v-else style="text-align: center" class="div-no-data">
<img src="images/nodata.png" style="width: 120px" />
<div style="text-align: center; font-size: 12px; color: #888">暂无数据</div>
</div>
</module-one-3-3>
<el-row>
<el-col :span="8">
<module-one-1-1 label="计划状态">
<project-overview-chart
:key="'ai1' + overview"
:sp="''"
:maintitle="overviewTotal"
:legend-opt="legendOpt"
:typedata="overviewDatas"
:text="overviewText"
:height="230"
></project-overview-chart>
</module-one-1-1>
</el-col>
<el-col :span="8">
<module-one-1-1 label="计划统计">
<div class="equipment-list-max quality-target-index">
<el-row>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-blue">
<svg
class="my-svg-icon-blue"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3054"
>
<path
d="M530.46 269c4.64 0 9.05 2.01 12.09 5.52l109.54 126.3A16.01 16.01 0 0 1 656 411.3V893c0 8.82-7.18 16-16 16H178c-8.82 0-16-7.18-16-16V285c0-8.82 7.18-16 16-16h352.46m0-64H178c-44.18 0-80 35.82-80 80v608c0 44.18 35.82 80 80 80h462c44.18 0 80-35.82 80-80V411.3c0-19.26-6.95-37.87-19.56-52.42L590.9 232.58A80.014 80.014 0 0 0 530.46 205zM819.29 864h-45.92c-17.67 0-32-14.33-32-32s14.33-32 32-32h45.92c25.21 0 45.71-19.94 45.71-44.46V295.17c0-10.61-3.91-20.88-11.01-28.94L747.58 145.52c-8.7-9.87-21.35-15.52-34.7-15.52H370.49c-17.67 0-32-14.33-32-32s14.33-32 32-32h342.38c31.72 0 61.87 13.56 82.71 37.2L902 223.91c17.41 19.75 27 45.06 27 71.26v460.37C929 815.35 879.78 864 819.29 864zM702 468H552.09c-41.96 0-76.09-31.47-76.09-70.15V240.5h64v157.35c0 1.88 4.57 6.15 12.09 6.15H702v64zM898 326H748.09c-41.96 0-76.09-31.47-76.09-70.15V98.5h64v157.35c0 1.88 4.57 6.15 12.09 6.15H898v64zM535.13 784.5H262.88c-17.67 0-32 14.33-32 32s14.33 32 32 32h272.25c17.67 0 32-14.33 32-32s-14.33-32-32-32zM535.13 638.75H262.88c-17.67 0-32 14.33-32 32s14.33 32 32 32h272.25c17.67 0 32-14.33 32-32s-14.33-32-32-32zM535.13 493H262.88c-17.67 0-32 14.33-32 32s14.33 32 32 32h272.25c17.67 0 32-14.33 32-32s-14.33-32-32-32z"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p style="font-size: 12px">任务数</p>
<div><span style="font-size: 12px">1</span></div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-green">
<svg
class="my-svg-icon-green"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="7849"
>
<path
d="M896 64H128c-35.296 0-64 28.704-64 64v768c0 35.296 28.704 64 64 64h592a32 32 0 1 0 0-64H128V128h768v592a32 32 0 1 0 64 0V128c0-35.296-28.704-64-64-64zM791.744 746.496A206.752 206.752 0 0 0 832 624c0-114.688-93.312-208-208-208S416 509.312 416 624s93.312 208 208 208a206.752 206.752 0 0 0 122.496-40.256l110.88 110.88a31.904 31.904 0 0 0 45.248 0 31.968 31.968 0 0 0 0-45.248l-110.88-110.88zM480 624c0-79.392 64.608-144 144-144s144 64.608 144 144-64.608 144-144 144-144-64.608-144-144zM800 264a32 32 0 0 0-32-32H256a32 32 0 0 0 0 64h512a32 32 0 0 0 32-32zM256 422.656a32 32 0 0 0 0 64h96a32 32 0 0 0 0-64H256z"
p-id="7850"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p style="font-size: 12px">已完成</p>
<div>
<span style="font-size: 12px">2</span>
</div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-green">
<svg
class="my-svg-icon-green"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="7849"
>
<path
d="M896 64H128c-35.296 0-64 28.704-64 64v768c0 35.296 28.704 64 64 64h592a32 32 0 1 0 0-64H128V128h768v592a32 32 0 1 0 64 0V128c0-35.296-28.704-64-64-64zM791.744 746.496A206.752 206.752 0 0 0 832 624c0-114.688-93.312-208-208-208S416 509.312 416 624s93.312 208 208 208a206.752 206.752 0 0 0 122.496-40.256l110.88 110.88a31.904 31.904 0 0 0 45.248 0 31.968 31.968 0 0 0 0-45.248l-110.88-110.88zM480 624c0-79.392 64.608-144 144-144s144 64.608 144 144-64.608 144-144 144-144-64.608-144-144zM800 264a32 32 0 0 0-32-32H256a32 32 0 0 0 0 64h512a32 32 0 0 0 32-32zM256 422.656a32 32 0 0 0 0 64h96a32 32 0 0 0 0-64H256z"
p-id="7850"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p style="font-size: 12px">完成率</p>
<div>
<span>3</span>
<span style="font-size: 12px">%</span>
</div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-blue">
<svg
class="my-svg-icon-blue"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="10575"
>
<path
d="M634.593683 354.898336h-189.279113c39.748614-30.284658 71.926063-58.676525 96.532347-87.068391 26.499076 32.177449 58.676525 60.569316 92.746766 87.068391z m30.284658 177.922366h-246.062847v81.390019H662.985549v-81.390019zM984.760041 190.225508v202.528651c0 183.600739-81.390018 355.844732-225.242144 471.304991l-187.386322 151.42329c-5.678373 5.678373-15.142329 7.571165-22.713493 7.571164s-17.03512-1.892791-24.606285-7.571164l-187.386322-151.42329C195.466141 748.598891 114.076122 576.354898 114.076122 392.754159V190.225508c0-15.142329 9.463956-30.284658 24.606285-35.963031l397.486137-151.42329c9.463956-3.785582 18.927911-3.785582 26.499076 0l397.486136 151.42329c15.142329 5.678373 24.606285 20.820702 24.606285 35.963031zM734.911612 464.680222H348.782222v240.384473h70.033272v-24.606285H662.985549v24.606285h70.033272V464.680222z m64.354899-98.425139c-92.746765-39.748614-162.780037-88.961183-210.099816-149.530499l18.927912-22.713493h-98.425139c-41.641405 62.462107-117.35305 121.138632-225.242144 177.922366 17.03512 18.927911 32.177449 39.748614 45.426987 60.569316 22.713494-13.249538 45.426987-26.499076 64.354898-39.748614v30.284658h293.382625v-28.391867c20.820702 13.249538 41.641405 24.606285 62.462107 34.07024 15.142329-18.927911 30.284658-39.748614 49.21257-62.462107z"
fill=""
p-id="10576"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p>进行中</p>
<div><span style="font-size: 12px">4</span></div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-green">
<svg
class="my-svg-icon-green"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="8279"
>
<path
d="M855.13728 187.4176c-105.97376 0-209.34656-36.9152-291.08736-103.936l-40.9344-33.56672-40.94976 33.56672c-81.77152 67.01568-185.15456 103.936-291.09248 103.936H126.49984V622.83264l4.95104 11.90912c67.33824 161.82784 206.54592 289.3824 372.38272 341.2224l19.08224 5.96992 19.11808-5.86752c170.07616-52.16768 305.99168-176.79872 372.92032-341.89824l4.62848-11.43808 0.08704-12.34944 0.03072-3.27168V187.4176h-64.5632z m0 419.22048l-0.03072 3.26144c-58.8544 145.21856-180.87424 258.06848-332.00128 304.44032-148.33664-46.39232-272.86528-162.24256-332.032-304.4096V252.0064c125.99296 0 241.62304-44.46208 332.032-118.56896C613.50912 207.5648 729.088 252.0064 855.13728 252.0064v354.63168z"
fill=""
p-id="8280"
></path>
<path
d="M400.47616 304.95232c57.68192 2.5856 87.78752 39.74656 90.368 111.5136-2.58048 70.50752-33.97632 107.0336-94.21312 109.5936-55.12192-3.85024-84.59264-40.37632-88.43776-109.5936 2.55488-71.76704 33.31584-108.928 92.28288-111.5136z m-1.92 174.96064c26.91584-1.25952 41.0112-23.07072 42.30144-65.37216-1.29024-42.29632-14.7456-64.08192-40.37632-65.37216-28.20608 0-42.29632 22.44096-42.29632 67.29216 1.25952 39.75168 14.72 60.89728 40.3712 63.45216z m207.64672-174.96064h51.91168l-219.18208 417.21856H387.0208l219.18208-417.21856z m40.37632 199.95648c57.68192 2.5856 87.78752 40.37632 90.36288 113.4336-2.58048 66.6624-33.97632 101.23776-94.208 103.82336-56.41728-3.84512-85.88288-38.45632-88.44288-103.82336 2.56-71.77216 33.32096-109.58848 92.288-113.4336z m-1.92512 176.88576c25.63072-1.25952 39.0912-23.71072 40.38144-67.29728-1.29024-41.0112-14.12096-62.16192-38.45632-63.45216-26.91584 0-41.0368 21.81632-42.30144 65.37728 1.26976 41.0368 14.72512 62.81216 40.37632 65.37216z"
fill=""
p-id="8281"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p>已滞后</p>
<div>
<span style="font-size: 12px">5</span>
</div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="equipment-list-min1 quality-target-index-min">
<div class="czz-number-img czz-number-img-green">
<svg
class="my-svg-icon-green"
style="
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="8279"
>
<path
d="M855.13728 187.4176c-105.97376 0-209.34656-36.9152-291.08736-103.936l-40.9344-33.56672-40.94976 33.56672c-81.77152 67.01568-185.15456 103.936-291.09248 103.936H126.49984V622.83264l4.95104 11.90912c67.33824 161.82784 206.54592 289.3824 372.38272 341.2224l19.08224 5.96992 19.11808-5.86752c170.07616-52.16768 305.99168-176.79872 372.92032-341.89824l4.62848-11.43808 0.08704-12.34944 0.03072-3.27168V187.4176h-64.5632z m0 419.22048l-0.03072 3.26144c-58.8544 145.21856-180.87424 258.06848-332.00128 304.44032-148.33664-46.39232-272.86528-162.24256-332.032-304.4096V252.0064c125.99296 0 241.62304-44.46208 332.032-118.56896C613.50912 207.5648 729.088 252.0064 855.13728 252.0064v354.63168z"
fill=""
p-id="8280"
></path>
<path
d="M400.47616 304.95232c57.68192 2.5856 87.78752 39.74656 90.368 111.5136-2.58048 70.50752-33.97632 107.0336-94.21312 109.5936-55.12192-3.85024-84.59264-40.37632-88.43776-109.5936 2.55488-71.76704 33.31584-108.928 92.28288-111.5136z m-1.92 174.96064c26.91584-1.25952 41.0112-23.07072 42.30144-65.37216-1.29024-42.29632-14.7456-64.08192-40.37632-65.37216-28.20608 0-42.29632 22.44096-42.29632 67.29216 1.25952 39.75168 14.72 60.89728 40.3712 63.45216z m207.64672-174.96064h51.91168l-219.18208 417.21856H387.0208l219.18208-417.21856z m40.37632 199.95648c57.68192 2.5856 87.78752 40.37632 90.36288 113.4336-2.58048 66.6624-33.97632 101.23776-94.208 103.82336-56.41728-3.84512-85.88288-38.45632-88.44288-103.82336 2.56-71.77216 33.32096-109.58848 92.288-113.4336z m-1.92512 176.88576c25.63072-1.25952 39.0912-23.71072 40.38144-67.29728-1.29024-41.0112-14.12096-62.16192-38.45632-63.45216-26.91584 0-41.0368 21.81632-42.30144 65.37728 1.26976 41.0368 14.72512 62.81216 40.37632 65.37216z"
fill=""
p-id="8281"
></path>
</svg>
</div>
<div class="equipment-list-data">
<p>滞后率</p>
<div>
<span>6</span>
<span style="font-size: 12px">%</span>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</module-one-1-1>
</el-col>
<el-col :span="8">
<module-one-1-1 label="本月推进明细">
<div
v-for="(it, idx) in overviewMonthjh"
:key="idx"
class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"
>
<div class="czz-number-img czz-number-img-blue">
{{ it.scheduleNode }} %
</div>
<div>
<div class="equipment-list-data equipment-list-data_div_top">
<span>{{ it.taskName }}</span>
</div>
<div class="equipment-list-data equipment-list-data_div_bottom">
计划周期<span class="sp-data"
>{{ it.planStartDate }}-{{ it.planFinishDate }}</span
>
</div>
</div>
</div>
</module-one-1-1>
</el-col>
</el-row>
<el-row>
<module-one-2-3 label="计划施工进度">
<trend-chart-line :height="450" :data="scheduleNodeData"></trend-chart-line>
</module-one-2-3>
</el-row>
</el-col>
</div>
</template>
@ -102,10 +309,45 @@
export default {
data() {
return {
selProject: null,
photographyList: [],
info: null,
activeNames: [],
infoList: {},
jxzjhList: [],
legendOpt: {
icon: "rect",
orient: "horizontal",
itemWidth: "50%",
left: 240,
right: "10%",
itemWidth: 20,
itemGap: 20,
itemHeight: 20,
textStyle: {
padding: [0, 0, 0, 0],
fontSize: 10,
color: "#c3dbfd",
align: "center",
rich: {
name: {
color: "#c3dbfd",
padding: [5, 2, 5, 2],
},
percent: {
color: "#4676FD",
padding: [0, 2, 0, 2],
},
},
},
},
overview: 0,
overviewTotal: 0,
overviewDatas: [],
overviewText: "任务计划",
overviewTask: [],
overviewJxzjh: [], //
overviewYwcjh: [], //
overviewYzhjh: [], //
overviewMonthjh: [], //
scheduleNodeData: [],
};
},
mounted() {
@ -124,18 +366,249 @@ export default {
return;
}
this.initPhotographyList();
this.initAllPlanDatas();
this.initScheduleNodes();
},
initPhotographyList() {
this.$api.detail.photographyList(this.selProject.id).then((d) => {
this.photographyList = d.data;
this.$api.detail.photographyList(this.selProject.id).then((res) => {
this.photographyList = res.data;
});
},
initAllPlanDatas() {
this.$api.planSchedule.findAllPlanDatas(this.selProject.id).then((res) => {
let _jxzjhs = [];
let _ywcjhs = [];
let _yzhjhs = [];
let _rwzttj = [];
let _nowMonth = [];
res.data.forEach((item) => {
if (item.taskStatus == "zcjxz" || item.taskStatus == "zhjxz") {
_jxzjhs.push(item);
}
if (item.taskStatus == "zcwc" || item.taskStatus == "zhwc") {
_ywcjhs.push(item);
}
if (item.taskStatus == "zhwc" || item.taskStatus == "zhjxz") {
_yzhjhs.push(item);
}
if (item.nowMonth == "Y") {
_nowMonth.push(item);
}
});
let _wkss = res.data.filter((ex) => ex.taskStatus === "wks");
let _zcwcs = res.data.filter((ex) => ex.taskStatus === "zcwc");
let _zhwcs = res.data.filter((ex) => ex.taskStatus === "zhwc");
let _zcjxzs = res.data.filter((ex) => ex.taskStatus === "zcjxz");
let _zhjxzs = res.data.filter((ex) => ex.taskStatus === "zhjxz");
_rwzttj.push({ name: "未开始", value: _wkss.length });
_rwzttj.push({ name: "进行中(滞后)", value: _zhwcs.length });
_rwzttj.push({ name: "进行中(正常)", value: _zcwcs.length });
_rwzttj.push({ name: "已完成(滞后)", value: _zhjxzs.length });
_rwzttj.push({ name: "已完成(正常)", value: _zcjxzs.length });
this.overviewDatas = _rwzttj;
this.overview++;
let _tasks = [];
_tasks.push({ name: "任务数", value: res.data.length });
_tasks.push({ name: "已完成", value: _ywcjhs.length });
_tasks.push({
name: "完成率",
value: ((_ywcjhs.length / res.data.length) * 100).toFixed(2),
});
_tasks.push({ name: "进行中", value: _jxzjhs.length });
_tasks.push({ name: "已滞后", value: _yzhjhs.length });
_tasks.push({
name: "滞后率",
value: ((_yzhjhs.length / res.data.length) * 100).toFixed(2),
});
this.overviewTask = [];
(this.overviewJxzjh = _jxzjhs),
(this.overviewYwcjh = _ywcjhs),
(this.overviewYzhjh = _yzhjhs),
(this.overviewMonthjh = _nowMonth);
});
},
initScheduleNodes() {
this.$api.planSchedule
.findAllSchedule({ projectId: this.selProject.id })
.then((res) => {
let _data1 = [];
let _date8 = [];
res.data.forEach((item) => {
_data1.push(item.totalSchedule);
_date8.push(item.createDate);
});
let _lineData = [];
_lineData.push(_data1);
let _color = ["#0078e7"];
let _legend = ["施工进度"];
let _datas = {
lineData: _lineData,
color: _color,
legend: _legend,
unit: "%",
date: _date8,
};
this.scheduleNodeData = _datas;
});
},
},
};
</script>
<style lang="less">
.project-photography {
<style lang="less" scope>
.project-planSchedule {
.photography-list {
width: calc(100% - 4px);
height: calc(100% - 26px);
padding-left: 1px;
.el-carousel {
height: 100%;
}
.photography-video {
width: 100%;
height: calc(100% - 30px);
}
.photography-list-title {
line-height: 20px;
text-align: center;
}
.photography-list-nodata {
background: rgba(255, 255, 255, 0.2);
width: 80%;
height: 80%;
margin-left: 10%;
margin-top: 6%;
display: flex;
align-items: center;
justify-content: center;
flex-flow: column;
.video-play {
width: 80px;
height: 80px;
display: inline-block;
background: rgba(0, 0, 0, 0.4);
line-height: 80px;
text-align: center;
border-radius: 40px;
margin-bottom: 12px;
}
.photography-list-no-title {
color: rgba(255, 255, 255, 0.2);
}
}
}
.equipment-list-data {
position: relative;
}
.quality-target-index-min1 {
padding: 15px 0 15px 0;
}
.problemmodify_list .el-table__body-wrapper::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.problemmodify_list .el-table__body-wrapper::-webkit-scrollbar-thumb {
background-color: #01a9ff;
border-radius: 4px;
}
.problemmodify_list .el-table__body-wrapper tr {
cursor: pointer;
}
.center-image .screen-one-2-1 {
overflow: hidden;
}
.equipment-list-data {
position: relative;
}
.my-svg-icon-blue,
.my-svg-icon-green {
width: 28px;
height: 28px;
position: relative;
top: -10px;
}
.my-svg-icon-green * {
fill: #63f8bc;
}
.fgreen {
color: #63f8bc !important;
}
.my-svg-icon {
width: 40px;
height: 40px;
margin-bottom: 20px;
}
.my-svg-icon *,
.my-svg-icon-blue * {
fill: #389de3;
}
.people-number-con div:nth-child(3) {
background: none;
}
.labour-education .number-unit {
position: relative;
bottom: -8px;
}
.bottom-line,
.bottom-line2 {
border: none !important;
position: relative;
}
.chart-plan-module {
.czz-number-img {
display: flex;
width: 80px;
height: 80px;
align-items: center;
justify-content: center;
svg {
width: 30px !important;
height: 30px !important;
fill: #00aaff59 !important;
}
}
.equipment-list-data_div_top {
span {
font-size: 14px;
color: #cbdaff;
font-weight: normal;
}
}
.equipment-list-data_div_bottom {
margin-top: 10px;
.sp-data {
font-size: 20px;
}
.sp-unit {
font-size: 14px;
color: #cbdaff;
font-weight: normal;
}
}
}
.div-no-data {
text-align: center;
height: 600px;

View File

@ -128,6 +128,10 @@ public class ProPlan extends BaseEntity
@Excel(name = "是否有效")
private Long isDel;
/** 任务状态 */
private String taskStatus;
private String nowMonth;
public void setId(Long id)
{
this.id = id;
@ -327,6 +331,22 @@ public class ProPlan extends BaseEntity
return isDel;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public String getNowMonth() {
return nowMonth;
}
public void setNowMonth(String nowMonth) {
this.nowMonth = nowMonth;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -108,6 +108,10 @@ public class ProPlanSchedule extends BaseEntity
@Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date updateDate;
/** 总进度 */
@Excel(name = "总进度")
private String totalSchedule;
public void setId(Long id)
{
this.id = id;
@ -303,6 +307,14 @@ public class ProPlanSchedule extends BaseEntity
this.projectName = projectName;
}
public String getTotalSchedule() {
return totalSchedule;
}
public void setTotalSchedule(String totalSchedule) {
this.totalSchedule = totalSchedule;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -130,4 +130,9 @@ public interface ProPlanMapper
* @return
*/
public ProPlan findRecursionPlan(ProPlan proPlan);
/**
*
*/
public List<ProPlan> findAllPlanDatasByProId(Long proId);
}

View File

@ -2,6 +2,7 @@ package com.yanzhu.manage.mapper;
import java.util.List;
import com.yanzhu.manage.domain.ProPlanSchedule;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
@ -65,4 +66,11 @@ public interface ProPlanScheduleMapper
* @return
*/
public ProPlanSchedule findPreviousScheduleByPlanId(Long taskId);
/**
*
* @param proId
* @param totalschedule
*/
public void updateProPlanTotalSchedule(@Param("proId") Long proId, @Param("totalschedule") String totalschedule);
}

View File

@ -34,6 +34,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="compName" column="comp_name"/>
<result property="projectName" column="project_name"/>
<result property="remark" column="remark" />
<result property="taskStatus" column="task_status" />
<result property="nowMonth" column="nowMonth" />
</resultMap>
<sql id="selectProPlanVo">
@ -71,6 +73,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="groupName != null and groupName != ''"> and pp.group_name like concat('%', #{groupName}, '%')</if>
<if test="isDel != null "> and pp.is_del = #{isDel}</if>
</where>
order by pp.id
</select>
<select id="selectProPlanListView" parameterType="ProPlan" resultMap="ProPlanResult">
@ -280,4 +283,73 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="findAllPlanDatasByProId" parameterType="Long" resultMap="ProPlanResult">
SELECT
pp.id,
CASE
WHEN pp.start_date IS NULL THEN
'wks'
WHEN pp.start_date IS NOT NULL
AND pp.finish_date IS NOT NULL
AND pp.plan_finish_date <![CDATA[ >= ]]> pp.finish_date THEN
'zcwc'
WHEN pp.start_date IS NOT NULL
AND pp.finish_date IS NOT NULL
AND pp.plan_finish_date <![CDATA[ < ]]> pp.finish_date THEN
'zhwc'
WHEN pp.start_date IS NOT NULL
AND pp.finish_date IS NULL
AND pp.plan_finish_date <![CDATA[ >= ]]> NOW() THEN
'zcjxz'
WHEN pp.start_date IS NOT NULL
AND pp.finish_date IS NULL
AND pp.plan_finish_date <![CDATA[ < ]]> NOW() THEN
'zhjxz'
END AS task_status,
CASE
WHEN (
pp.start_date IS NOT NULL
AND DATE_FORMAT(pp.start_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m')
)
OR (
pp.finish_date IS NOT NULL
AND DATE_FORMAT(pp.finish_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m')
)
THEN 'Y' ELSE 'N' END as nowMonth,
pp.comid,
pp.project_id,
pp.task_id,
pp.task_unique_id,
pp.parent_id,
pp.task_type,
pp.task_outline_level,
pp.task_name,
pp.task_duation,
pp.start_date,
pp.finish_date,
pp.predecessors,
pp.plan_start_date,
pp.plan_finish_date,
pp.bim_id,
pp.operator,
pp.operator_id,
pp.group_id,
pp.group_name,
pp.schedule_node,
pp.is_del,
pp.create_by,
pp.create_time,
pp.update_by,
pp.update_time,
pp.remark,
dp.`dept_name` comp_name,
pi.`project_name`
FROM
pro_plan pp
LEFT JOIN sys_dept dp ON pp.`comid` = dp.`dept_id`
LEFT JOIN pro_project_info pi ON pp.`project_id` = pi.`id`
WHERE
pp.project_id = #{proId}
AND pp.task_outline_level <![CDATA[ > ]]> 1 and pp.is_del = 0
</select>
</mapper>

View File

@ -29,10 +29,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createDate" column="create_date" />
<result property="updateBy" column="update_by" />
<result property="updateDate" column="update_date" />
<result property="totalSchedule" column="total_schedule" />
</resultMap>
<sql id="selectProPlanScheduleVo">
select pps.id, (select max(mp.id) from pro_plan_schedule mp where mp.project_id = pps.project_id and mp.is_del=0) as max_id, pps.com_id, sd.dept_name as com_name, pps.project_id, pi.project_name, pps.plan_id, pps.task_id, pps.task_unique_id, pps.task_name, pps.bim_id, pps.schedule_percent, pp.task_duation, pp.plan_start_date, pp.plan_finish_date, pps.finish_date, pps.description, pps.images, pps.is_del, pps.create_by, pps.create_user_id, pps.create_date, pps.update_by, pps.update_date
select pps.id, (select max(mp.id) from pro_plan_schedule mp where mp.project_id = pps.project_id and mp.is_del=0) as max_id, pps.com_id, sd.dept_name as com_name, pps.project_id, pi.project_name, pps.plan_id, pps.task_id, pps.task_unique_id, pps.task_name, pps.bim_id, pps.schedule_percent, pp.task_duation, pp.plan_start_date, pp.plan_finish_date, pps.finish_date, pps.description, pps.images, pps.is_del, pps.create_by, pps.create_user_id, pps.create_date, pps.update_by, pps.update_date, pps.total_schedule
from pro_plan_schedule pps
left join pro_project_info pi on pi.id = pps.project_id
left join sys_dept sd on sd.dept_id = pps.com_id
@ -54,9 +55,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bimId != null and bimId != ''"> and pps.bim_id = #{bimId}</if>
<if test="isDel != null "> and pps.is_del = #{isDel}</if>
<if test="createUserId != null "> and pps.create_user_id = #{createUserId}</if>
<if test="params.beginTime != null and params.beginTime != '' and params.endTime != null and params.endTime != ''"> and date(pps.create_date) between #{params.beginTime} and #{params.endTime}</if>
and pps.is_del != 2
</where>
order by pps.id desc
<if test="id != null "> order by pps.id</if>
<if test="id == null "> order by pps.id desc</if>
</select>
<select id="selectProPlanScheduleById" parameterType="Long" resultMap="ProPlanScheduleResult">
@ -84,6 +87,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createDate != null">create_date,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateDate != null">update_date,</if>
<if test="totalSchedule != null">total_schedule,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="comId != null">#{comId},</if>
@ -103,6 +107,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createDate != null">#{createDate},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateDate != null">#{updateDate},</if>
<if test="totalSchedule != null">#{totalSchedule},</if>
</trim>
</insert>
@ -126,6 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createDate != null">create_date = #{createDate},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateDate != null">update_date = #{updateDate},</if>
<if test="totalSchedule != null">total_schedule = #{totalSchedule},</if>
</trim>
where id = #{id}
</update>
@ -146,4 +152,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where pps.plan_id = #{taskId} and pps.is_del = 0 order by pps.id desc limit 1
</select>
<update id="updateProPlanTotalSchedule">
update pro_plan_schedule as a
join (
select max(id) as max_id
from pro_plan_schedule
where project_id = #{proid}
and is_del = '0'
) as b on a.id = b.max_id
set a.total_schedule = #{totalschedule}
</update>
</mapper>

View File

@ -128,7 +128,6 @@ public class DevAiProjectDataController extends BaseController
params.put("endTime",todayAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
dataQuery.setParams(params);
List<Map<String, Object>> list = devAiProjectDataService.findDaysTrendView(dataQuery);
/**List<Map<String, Object>> daysTrendList = new ArrayList<>();
for (LocalDate date = todayAgo; !date.isAfter(today); date = date.plusDays(1)) {
Map<String, Object> dayMap = new HashMap<>();
@ -137,14 +136,12 @@ public class DevAiProjectDataController extends BaseController
dayMap.put("total",0);
daysTrendList.add(dayMap);
}
for (Map<String, Object> date : daysTrendList) {
List<Map<String, Object>> _list = list.stream().filter(map -> StringUtils.eqObj(map.get("create_time"),date.get("createTime"))).collect(Collectors.toList());
if (_list.size()>0) {
date.put("total", _list.get(0).get("total"));
}
}*/
redisService.setCacheObject(key, list, 2L, TimeUnit.MINUTES);
return success(list);
}

View File

@ -238,4 +238,13 @@ public class ProPlanController extends BaseController
plan.setTaskName(parents.getTaskName());
return success(plan);
}
/**
*
*/
@GetMapping(value = "/findAllPlanDatas/{proId}")
public AjaxResult findAllPlanDatas(@PathVariable("proId") Long proId){
List<ProPlan> plans = proPlanService.findAllPlanDatasByProId(proId);
return success(plans);
}
}

View File

@ -105,4 +105,15 @@ public class ProPlanScheduleController extends BaseController
return success(proPlanScheduleService.findPreviousScheduleByPlanId(planId));
}
/**
*
*/
@PostMapping("/findAll")
public AjaxResult findAll(@RequestBody ProPlanSchedule proPlanSchedule)
{
proPlanSchedule.setId(0L);
List<ProPlanSchedule> list = proPlanScheduleService.selectProPlanScheduleList(proPlanSchedule);
return success(list);
}
}

View File

@ -92,4 +92,9 @@ public interface IProPlanService
* @return
*/
public ProPlan findRecursionPlan(ProPlan proPlan);
/**
*
*/
public List<ProPlan> findAllPlanDatasByProId(Long proId);
}

View File

@ -216,6 +216,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
entity.setScheduleNode(String.format("%.2f", _cn));
}
}
// 更新总进度
if(entity.getTaskOutlineLevel()==1){
proPlanScheduleMapper.updateProPlanTotalSchedule(entity.getProjectId(),entity.getScheduleNode());
}
System.out.println("RecursionEditStartDate.entity.getScheduleNode()..."+entity.getScheduleNode());
entity.setStartDate(plan.getStartDate());
RecursionEditStartDate(entity);
@ -254,6 +258,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
entity.setScheduleNode(String.format("%.2f", _cn));
}
}
// 更新总进度
if(entity.getTaskOutlineLevel()==1){
proPlanScheduleMapper.updateProPlanTotalSchedule(entity.getProjectId(),entity.getScheduleNode());
}
System.out.println("RecursionEditStartDate.entity.getScheduleNode()..."+entity.getScheduleNode());
entity.setStartDate(plan.getStartDate());
RecursionEditStartDate(entity);
@ -285,13 +293,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
for(ProPlan item:belows){
Float sNode = Convert.toFloat(item.getScheduleNode(),0.0F);
if(sNode>0){
System.out.println("RecursionEditFinishDate.sNodesNode==>"+sNode);
if(sNode==100){
Finished += Convert.toFloat(item.getTaskDuation(),0.0F);
System.out.println("RecursionEditFinishDate.FinishedFinished1==>"+Finished);
}else{
Finished += Convert.toFloat(item.getTaskDuation()*(sNode/100));
System.out.println("RecursionEditFinishDate.FinishedFinished2==>"+Finished);
}
}
}
@ -309,6 +314,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
entity.setScheduleNode(String.format("%.2f", _cn));
}
}
// 更新总进度
if(entity.getTaskOutlineLevel()==1){
proPlanScheduleMapper.updateProPlanTotalSchedule(entity.getProjectId(),entity.getScheduleNode());
}
System.out.println("RecursionEditFinishDate.entity.getScheduleNode()..."+entity.getScheduleNode());
entity.setFinishDate(plan.getFinishDate());
RecursionEditFinishDate(entity);
@ -327,13 +336,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
for(ProPlan item:belows){
Float sNode = Convert.toFloat(item.getScheduleNode(),0.0F);
if(sNode>0){
System.out.println("RecursionEditFinishDate.sNodesNode==>"+sNode);
if(sNode==100){
Finished += Convert.toFloat(item.getTaskDuation(),0.0F);
System.out.println("RecursionEditFinishDate.FinishedFinished1==>"+Finished);
}else{
Finished += Convert.toFloat(item.getTaskDuation()*(sNode/100));
System.out.println("RecursionEditFinishDate.FinishedFinished1==>"+Finished);
}
}
}
@ -351,6 +357,10 @@ public class ProPlanScheduleServiceImpl implements IProPlanScheduleService
entity.setScheduleNode(String.format("%.2f", _cn));
}
}
// 更新总进度
if(entity.getTaskOutlineLevel()==1){
proPlanScheduleMapper.updateProPlanTotalSchedule(entity.getProjectId(),entity.getScheduleNode());
}
System.out.println("RecursionEditFinishDate.entity.getScheduleNode()..."+entity.getScheduleNode());
entity.setFinishDate(plan.getFinishDate());
RecursionEditFinishDate(entity);

View File

@ -210,4 +210,12 @@ public class ProPlanServiceImpl implements IProPlanService
return proPlan;
}
}
/**
*
*/
@Override
public List<ProPlan> findAllPlanDatasByProId(Long proId){
return proPlanMapper.findAllPlanDatasByProId(proId);
}
}