update code

dev-login
haha 2023-08-26 12:46:38 +08:00
parent db074a8c34
commit 7915221e81
4 changed files with 212 additions and 105 deletions

View File

@ -2,74 +2,72 @@ import request from "@/utils/request";
import { tryToJson } from "../../utils/tools";
import $dt from "dayjs";
const updateItemState=it=>{
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.planStartDate) {
return;
}
if(it.endDate){
if(!it.planEndDate){
if (it.endDate) {
if (!it.planEndDate) {
it.finish = "正常完成";
it.finishState = 3;
return;
}
if(dt4>dt2){
if (dt4 > dt2) {
it.finish = "逾期完成";
it.finishState = 1;
}else{
} else {
it.finish = "正常完成";
it.finishState = 3;
}
return;
}
if(it.startDate){
if(!it.planEndDate){
if (it.startDate) {
if (!it.planEndDate) {
it.finish = "进行中";
it.finishState = 2;
return;
}
if(dt2<dt0){
if (dt2 < dt0) {
it.finish = "逾期" + (dt0 - dt2) / 3600 / 1000 / 24 + "天";
it.finishState = 1;
}else{
} else {
it.finish = "进行中";
it.finishState = 2;
}
return;
}
if(!it.startDate){
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 => {
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.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);
});
resolve(tmps);
});
});
};
// 获取当前节点及叶子节点
@ -81,34 +79,62 @@ const selectCurrent = (data) => {
});
};
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 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) => {
@ -191,59 +217,70 @@ const covertData = (objs) => {
/**
* 节点完成率统计
* @param {*} data
* @returns
* @param {*} data
* @returns
*/
const countCompletionRate=data=>{
return new Promise(resolve=>{
const countCompletionRate = (data) => {
return new Promise((resolve) => {
request({
url: "bgscreen/projectBuildNode/countCompletionRate",
method: "post",
data: data,
}).then(d=>{
let tmps=(d.data||[]).map(it=>{
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.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);
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=>{
const queryByProjectType = (type) => {
return new Promise((resolve) => {
request({
url: "bgscreen/projectBuildNode/queryByProjectType?type="+type,
method: "get"
}).then(d=>{
let tmps = (d.data || []).map(it => {
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.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);
});
resolve(tmps);
});
});
}
};
export default {
selectScheduledAlerts,
selectCurrent,
covertData,
listByProject,
countCompletionRate,
queryByProjectType
queryByProjectType,
queryByProjectTypeNoTree,
toTree
};

View File

@ -47,7 +47,7 @@
</module-one-2-1>
<el-row>
<el-col :span="12">
<module-one-1-1 label="人员统计">
<module-one-1-1 label="人员统计" :key="elDeptWorks">
<div class="warning-info-title" style="padding-left: 20px;">
<div :class="infoNav == 0 ? 'active' : ''" @click="onWarningInfoNav(0)"></div>
<div :class="infoNav == 1 ? 'active' : ''" @click="onWarningInfoNav(1)"></div>
@ -231,6 +231,7 @@ export default {
},
data() {
return {
elDeptWorks:0,
prj:{},
prjs:[],
elSumKey:0,
@ -604,7 +605,7 @@ export default {
let deptId = this.deptInfo?.id||0;
if (this.infoNav == 0) {
//
this.$api.attendance.getDeptWorksList(deptId).then(d => {
this.$api.attendance.getDeptWorksList(deptId,this.prj.id).then(d => {
this.laborPersonnelTotal=0;
this.laborPersonnelData=[{text: "劳务人员", value: 0},{text: "监理人员", value: 0},{text: "总包人员", value: 0}];
if(d.rows.length>0 && d.rows[0]!=null){
@ -615,7 +616,8 @@ export default {
this.laborPersonnelData.push({text: "监理人员", value: d.rows[0].supervisorPersonnel});
this.laborPersonnelTotal += d.rows[0].contractorPersonnel;
this.laborPersonnelData.push({text: "总包人员", value: d.rows[0].contractorPersonnel});
}
}
this.elDeptWorks++;
});
} else {
//
@ -631,6 +633,7 @@ export default {
this.laborPersonnelTotal += d.rows[0].contractorPersonnel;
this.laborPersonnelData.push({text: "总包人员", value: d.rows[0].contractorPersonnel});
}
this.elDeptWorks++;
});
}
},

View File

@ -64,13 +64,34 @@
{{ it.constructionProgress }}
</div>
</div>
<div class="data-row" v-else>
<img src="images/title_icon.png"><span class="sp-lbl">目前进展:</span>
<div class="div-text node-list">
<span v-for="(d,idx) in it.nodes" :key="idx" v-if="it.nodes && it.nodes.length>0" class="node-item">
{{ d.nodeText}}:<span :class="'finish-'+d.finishState">{{d.finish }}</span>
</span>
<div class="data-row data-node scroll" v-else style="display: block;overflow-y: auto;">
<div><img src="images/title_icon.png"><span class="sp-lbl">目前进展:</span></div>
<div class="div-text node-list" v-if="it.nodes && it.nodes.length>0" :style="fontSize==0?'display: flex;':''">
<template >
<table v-for="(d,idx) in it.nodes" :key="idx" class="table-lvl1">
<tr>
<td class="td-lvl1">
<div><img src="images/title_icon.png">{{d.nodeText}}:<span :class="'finish-'+d.finishState">{{d.finish }}</span></div>
<table v-for="(dd,idxx) in d.children" :key="idxx" v-if="d.children && d.children.length>0" class="table-lvl2">
<tr>
<td class="td-lvl2">
<div><img src="images/title_icon.png" v-if="dd.children && dd.children.length>0">{{dd.nodeText}}:<span :class="'finish-'+dd.finishState">{{dd.finish }}</span></div>
<table v-for="(ddd,idxxx) in dd.children" :key="idxxx" v-if="dd.children && dd.children.length>0" class="table-lvl3">
<tr>
<td class="td-lvl3" >
<div>{{ddd.nodeText}}:<span :class="'finish-'+ddd.finishState">{{ddd.finish }}</span></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</template>
</div>
<div v-if="!it.nodes || it.nodes.length==0">
暂无.
</div>
@ -181,13 +202,13 @@ export default {
quarterly:q
}),
this.$api.schedule.selectByProjectType(n),
this.$api.buildNode.queryByProjectType(n)
this.$api.buildNode.queryByProjectTypeNoTree(n)
];
this.$api.http.all(ajaxs).then(res=>{
let prjs=res[0].data||[];
let tmps=res[1].data||[];
let nodes=res[2]||[];
let findNodes=['01','02','03','04','05']
let findNodes=['01','02','03','04','05'];
this.tableData=prjs.map(it=>{
it.projectName=it.project?.projectName||'';
it.projectSchedule=it.project?.projectSchedule||'1';
@ -195,7 +216,8 @@ export default {
if(objs.length>0){
it.existingProblem=objs[0].existingProblem||'';
}
it.nodes=nodes.filter(item=>item.finish && item.projectId==it.id && findNodes.includes(item.lvl.substring(0,2)));
let nds=nodes.filter(item=>item.finish && item.projectId==it.id && findNodes.includes(item.lvl.substring(0,2)));
it.nodes=this.$api.buildNode.toTree(nds);
return it;
})
})
@ -252,11 +274,10 @@ export default {
line-height: 64px;
}
.sp-lbl {
width: 140px;
.sp-lbl {
white-space: nowrap;
&.sp-lbl2 {
width: 218px;
white-space: nowrap;
}
}
@ -268,6 +289,12 @@ export default {
.data-row {
line-height: 64px;
.td-lvl2{
padding-left: 36px;
}
.td-lvl3{
padding-left: 72px;
}
}
}
}
@ -287,10 +314,10 @@ export default {
}
.sp-lbl {
width: 140px;
white-space: nowrap;
&.sp-lbl2 {
width: 218px;
white-space: nowrap;
}
}
@ -302,6 +329,12 @@ export default {
.data-row {
line-height: 48px;
.td-lvl2{
padding-left: 24px;
}
.td-lvl3{
padding-left: 48px;
}
}
}
}
@ -324,7 +357,7 @@ export default {
}
.popup-project-introduction-min {
transform: translateY(100px);
.node-list{
.node-list{
.node-item{
&::after{
content: ",";
@ -335,6 +368,14 @@ export default {
}
}
}
.table-lvl1{
border-collapse: collapse;
border:solid 1px #fff;
td{
vertical-align: top;
white-space: nowrap;
}
}
}
.data-item {
border-bottom: solid 1px #fff;
@ -344,6 +385,7 @@ export default {
.sp-lbl {
display: inline-block;
color: aquamarine;
white-space: nowrap;
}
.data-row {
@ -364,6 +406,17 @@ export default {
border-bottom: solid 1px rgba(255, 255, 255, 0.1);
padding: 4px 0px;
&.data-node{
img{
top:4px;
}
}
.td-lvl2{
padding-left: 12px;
}
.td-lvl3{
padding-left: 24px;
}
}
img {

View File

@ -138,11 +138,12 @@
<rank-chart :data="mechanicalData" :showval="true" :height="224"></rank-chart>
</module-one-1-1>
<module-one-1-1 label="实测实量" :key="elCheck">
<div class="warning-info-title" style="padding-left: 20px;">
<div class="warning-info-title measured-data-list" style="padding-left: 20px;">
<div :class="measuredNav==1?'active':''" @click="doMeasuredNav(1,'混泥土工程')"></div>
<div :class="measuredNav==2?'active':''" @click="doMeasuredNav(2,'二次构建工程')"></div>
<div :class="measuredNav==3?'active':''" @click="doMeasuredNav(3,'房间尺寸')"></div>
<div :class="measuredNav==4?'active':''" @click="doMeasuredNav(4,'抹灰工程')"></div>
<div :class="measuredNav==5?'active':''" @click="doMeasuredNav(5,'其它')"></div>
</div>
<project-overview-chart :key="measuredNav"
:legend-opt="legendOptCheck"
@ -234,7 +235,7 @@ export default {
{value: 1,prop: '12.5', text: '小轿车'},
],
measuredNav:0,
measuredTotal:7,
measuredTotal:0,
measuredText:" 全部",
measuredData:[],
//
@ -255,6 +256,10 @@ export default {
},
legendOptCheck: {
icon: "rect",
orient:'vertical',
itemWidth:'40%',
right:'15%',
itemWidth:50,
textStyle: {
fontSize: 14,
rich: {
@ -264,7 +269,7 @@ export default {
},
percent: {
color: "#4676FD",
padding: [5, 5, 20, 5],
padding: [0, 5, 0, 5],
},
},
},
@ -394,6 +399,10 @@ export default {
value:it.id
}
});
this.measuredTotal=0;
this.measuredData.forEach(it=>{
this.measuredTotal+=it.value;
})
this.elCheck++;
})
},
@ -615,5 +624,10 @@ export default {
.hide-scroll>.screen-one-3-1{
overflow: hidden;
}
.measured-data-list{
&>div{
padding:0px 8px;
}
}
}
</style>