|
|
|
@ -4,56 +4,199 @@ |
|
|
|
|
<div class="gradient"> |
|
|
|
|
辽沈集团新火工区项目智慧工地数据看板 |
|
|
|
|
</div> |
|
|
|
|
<div class="xitong" @click="Jump()"></div> |
|
|
|
|
<div class="leftmenu"> |
|
|
|
|
<div style="background: none;justify-content: flex-start;line-height: 0rem;"> |
|
|
|
|
<span style="margin-top: .625rem;"> |
|
|
|
|
{{ state.time }} |
|
|
|
|
</span> |
|
|
|
|
</div> |
|
|
|
|
<div :class="item.path == $route.path ? 'activeMenu' : ''" @click="resolvePath(item)" |
|
|
|
|
v-for="item, index in meunList().slice(0, 2)">{{ item.meta.title }} |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="rightmenu"> |
|
|
|
|
<div @click="resolvePath(item)" v-for="item, index in meunList().slice(-3)">{{ item.meta.title }}</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- <div class="xitong" @click="Jump()"></div> --> |
|
|
|
|
</div> |
|
|
|
|
<div class="main-box"> |
|
|
|
|
<div class="top-box"> |
|
|
|
|
<div class="bottom-box"> |
|
|
|
|
<!-- 项目介绍 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">项目介绍</div> |
|
|
|
|
<div class="boxcontent" style="display: flex;flex-direction: column;padding: .9375rem 1.25rem;"> |
|
|
|
|
<div class="displaybox" style="margin-bottom: .625rem;"> |
|
|
|
|
<div class="diamond"></div>项目名称: 新火工区建设项目 |
|
|
|
|
<div class="right-top-item" style="overflow: hidden;"> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle"> 项目介绍</div> |
|
|
|
|
<div class="boxcontent" style="display: flex;flex-direction: column;padding: .9375rem 1.25rem;"> |
|
|
|
|
<div class="displaybox" style="margin-bottom: .625rem;"> |
|
|
|
|
<div class="diamond"></div>项目名称: 新火工区建设项目 |
|
|
|
|
</div> |
|
|
|
|
<div class="displaybox" style="margin-bottom: .75rem;"> |
|
|
|
|
<div class="diamond" style="background-color: #FFAE3C;"></div>工地负责人:xxx |
|
|
|
|
</div> |
|
|
|
|
<div class="chaochu" style="flex: 1;font-size: .8125rem;"> |
|
|
|
|
项目简介:本项目拟新建单体包括一期:5305#、5601#、5806#、5826#、5827#、7310#等6栋单体建筑,二期:5602#、5606#、5607#、5606#、5609#、5610#、5701#、5801#、5801-1#、5802#、5802-1#、5803#、5805#、5807#、5808#、5810#、5810-1#、5811#、5811-1#、5812#、5813#、5815#、5816#、5816-1#、5817#、5818#、5821#、5822#、5828#、5829#、5830#、5831#、5909#等34栋单体建筑,建筑物基础形式为杯形基础、独立基础、条形基础,主体结构为框架结构、排架结构。抗爆间室、屏院墙体为钢筋混凝土剪力墙结构。 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="displaybox" style="margin-bottom: .75rem;"> |
|
|
|
|
<div class="diamond" style="background-color: #FFAE3C;"></div>工地负责人:xxx |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
<!-- 工程日志 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">工程日志</div> |
|
|
|
|
<div class="boxcontent" |
|
|
|
|
style="display: flex;flex-direction: column;justify-content: space-around;padding: .9375rem 1.25rem;"> |
|
|
|
|
<div class="log-top"> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/riqi.png" alt=""> |
|
|
|
|
<span>日期</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].date |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/wd.png" alt=""> |
|
|
|
|
<span>温度</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ |
|
|
|
|
state.logList[0].temperature |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/fl.png" alt=""> |
|
|
|
|
<span>风力</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].wind |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/tq.png" alt=""> |
|
|
|
|
<span>天气</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].weather |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
<table class="construction-table"> |
|
|
|
|
<thead> |
|
|
|
|
<tr> |
|
|
|
|
<th width="25%">现场负责人</th> |
|
|
|
|
<th width="25%">联系方式</th> |
|
|
|
|
<th width="50%">施工情况</th> |
|
|
|
|
</tr> |
|
|
|
|
</thead> |
|
|
|
|
<tbody> |
|
|
|
|
<tr> |
|
|
|
|
<td width="25%">{{ state.logList && state.logList.length > |
|
|
|
|
0 ? state.logList[0].principalName : '-' }}</td> |
|
|
|
|
<td width="25%">{{ state.logList && state.logList.length > |
|
|
|
|
0 ? state.logList[0].principalTel : '-' }}</td> |
|
|
|
|
<td width="50%"> |
|
|
|
|
<el-tooltip v-if="state.logList && state.logList.length > 0" |
|
|
|
|
class="box-item" effect="dark" |
|
|
|
|
:content="state.logList[0].constructionSituation" placement="top"> |
|
|
|
|
<div style="width: 10rem;" class="chaochutwo"> |
|
|
|
|
{{ state.logList[0].constructionSituation }}</div> |
|
|
|
|
</el-tooltip> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</td> |
|
|
|
|
</tr> |
|
|
|
|
</tbody> |
|
|
|
|
</table> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="chaochu" style="flex: 1;font-size: .8125rem;"> |
|
|
|
|
项目简介:本项目拟新建单体包括一期:5305#、5601#、5806#、5826#、5827#、7310#等6栋单体建筑,二期:5602#、5606#、5607#、5606#、5609#、5610#、5701#、5801#、5801-1#、5802#、5802-1#、5803#、5805#、5807#、5808#、5810#、5810-1#、5811#、5811-1#、5812#、5813#、5815#、5816#、5816-1#、5817#、5818#、5821#、5822#、5828#、5829#、5830#、5831#、5909#等34栋单体建筑,建筑物基础形式为杯形基础、独立基础、条形基础,主体结构为框架结构、排架结构。抗爆间室、屏院墙体为钢筋混凝土剪力墙结构。 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- 视频监控 --> |
|
|
|
|
<div class="center-top-item"> |
|
|
|
|
<div class="boxtitle changtitle">视频监控</div> |
|
|
|
|
<div class="center-item bigbj"> |
|
|
|
|
<myVideo></myVideo> |
|
|
|
|
<!-- <div class="alarm-table-header"> |
|
|
|
|
<div>序号</div> |
|
|
|
|
<div>姓名</div> |
|
|
|
|
<div>进出门类型</div> |
|
|
|
|
<div>刷卡时间</div> |
|
|
|
|
<div>人员类型</div> |
|
|
|
|
<div>是否佩戴口罩</div> |
|
|
|
|
<div>是否超温</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="scooll-box" ref="Access"> |
|
|
|
|
<vue3-seamless-scroll :copyNum="10" :wheel="true" style="height: 100%;overflow: hidden;" |
|
|
|
|
:scrollbar="{ |
|
|
|
|
type: 'mini', |
|
|
|
|
invert: false, |
|
|
|
|
}" :list="state.tableData" :hoverStop="true" :hover="true" :step="0.3"> |
|
|
|
|
<div v-for="item, index in state.tableData" :key="index" |
|
|
|
|
:class="index % 2 != 0 ? 'dark' : 'light'" class="table-item"> |
|
|
|
|
<div>{{ index + 1 }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.personName }} |
|
|
|
|
</div> |
|
|
|
|
<div>{{ stausList().find((res) => |
|
|
|
|
res.value == item.openType)?.label || '-' }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.startSwingTime }} |
|
|
|
|
</div> |
|
|
|
|
<div>{{ item.imageType == 1 ? '内部人员' : item.imageType == 2 ? '访客' : '-' }}</div> |
|
|
|
|
<div |
|
|
|
|
:style="{ color: item.maskState == 2 ? '#FF0A0A' : item.maskState == 3 ? '#00E287' : '#fff' }"> |
|
|
|
|
{{ item.maskState == 3 ? '带口罩' : item.maskState == 2 ? '没带口罩' : '未识别' }} |
|
|
|
|
</div> |
|
|
|
|
<div :style="{ color: item.overTemp ? '#FF0A0A' : '#00E287' }"> |
|
|
|
|
{{ item.overTemp ? '是' : '否' }} |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="zanwu" v-if="state.tableData.length == 0"> |
|
|
|
|
<img style="width: 12.5rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zwtext"> |
|
|
|
|
暂无门禁记录 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</vue3-seamless-scroll> |
|
|
|
|
</div> --> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- 数据概览 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">数据概览</div> |
|
|
|
|
<div class="boxcontent"> |
|
|
|
|
<div class="overview-top"> |
|
|
|
|
<div class="data-font"> |
|
|
|
|
<span class="number-font">{{ state.gk.list }} <span>天</span></span> |
|
|
|
|
<span>总工期</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ parseFloat(state.gk.gcjd).toFixed(0) |
|
|
|
|
}}<span>%</span></span> |
|
|
|
|
<span>工程进度</span> |
|
|
|
|
<!-- 数据概览 and 施工人员工种分析 --> |
|
|
|
|
<div class="right-top-item"> |
|
|
|
|
<div class="top-item" style="overflow: hidden;"> |
|
|
|
|
|
|
|
|
|
<div class="boxtitle">数据概览</div> |
|
|
|
|
<div class="boxcontent"> |
|
|
|
|
<div class="overview-top"> |
|
|
|
|
<div class="data-font"> |
|
|
|
|
<span class="number-font">{{ state.gk.list }} <span>天</span></span> |
|
|
|
|
<span>总工期</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ parseFloat(state.gk.gcjd).toFixed(0) |
|
|
|
|
}}<span>%</span></span> |
|
|
|
|
<span>工程进度</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ state.gk.ysg }}<span>天</span></span> |
|
|
|
|
<span>已施工</span> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ state.gk.ysg }}<span>天</span></span> |
|
|
|
|
<span>已施工</span> |
|
|
|
|
<div class="overview-top" style="grid-template-columns: repeat(2, 1fr);border-bottom: 0;"> |
|
|
|
|
<div class="data-font "> |
|
|
|
|
<span class="number-font">{{ state.gk.sg }}<span>人</span></span> |
|
|
|
|
<span>施工人员</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ state.gk.gl }}<span>人</span></span> |
|
|
|
|
<span>管理人员</span> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="overview-top" style="grid-template-columns: repeat(2, 1fr);border-bottom: 0;"> |
|
|
|
|
<div class="data-font "> |
|
|
|
|
<span class="number-font">{{ state.gk.sg }}<span>人</span></span> |
|
|
|
|
<span>施工人员</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="data-font jbborder"> |
|
|
|
|
<span class="number-font">{{ state.gk.gl }}<span>人</span></span> |
|
|
|
|
<span>管理人员</span> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">施工人员工种分析</div> |
|
|
|
|
<div class="boxcontent" id="staff"> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="top-box"> |
|
|
|
|
<!-- 智能资源调度 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">智能资源调度</div> |
|
|
|
@ -83,209 +226,91 @@ |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
<!-- 工程日志 --> |
|
|
|
|
<!-- 进度预警 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">工程日志</div> |
|
|
|
|
<div class="boxcontent" |
|
|
|
|
style="display: flex;flex-direction: column;justify-content: space-around;padding: .9375rem 1.25rem;"> |
|
|
|
|
<div class="log-top"> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/riqi.png" alt=""> |
|
|
|
|
<span>日期</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].date |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/wd.png" alt=""> |
|
|
|
|
<span>温度</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].temperature |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/fl.png" alt=""> |
|
|
|
|
<span>风力</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].wind |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</div> |
|
|
|
|
<div class="tq-box"> |
|
|
|
|
<img src="../../assets/images/tq.png" alt=""> |
|
|
|
|
<span>天气</span> |
|
|
|
|
<span v-if="state.logList && state.logList.length > 0">{{ state.logList[0].weather |
|
|
|
|
}}</span> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
<div class="boxtitle">进度预警</div> |
|
|
|
|
<div class="boxcontent" v-if="state.warnList.length == 0"> |
|
|
|
|
<div class="zanwu"> |
|
|
|
|
<img style="width: 9.375rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zwtext"> |
|
|
|
|
暂无进度预警 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
<table class="construction-table"> |
|
|
|
|
<thead> |
|
|
|
|
<tr> |
|
|
|
|
<th width="25%">现场负责人</th> |
|
|
|
|
<th width="25%">联系方式</th> |
|
|
|
|
<th width="50%">施工情况</th> |
|
|
|
|
</tr> |
|
|
|
|
</thead> |
|
|
|
|
<tbody> |
|
|
|
|
<tr> |
|
|
|
|
<td width="25%">{{ state.logList && state.logList.length > |
|
|
|
|
0 ? state.logList[0].principalName : '-' }}</td> |
|
|
|
|
<td width="25%">{{ state.logList && state.logList.length > |
|
|
|
|
0 ? state.logList[0].principalTel : '-' }}</td> |
|
|
|
|
<td width="50%"> |
|
|
|
|
<el-tooltip v-if="state.logList && state.logList.length > 0" |
|
|
|
|
class="box-item" effect="dark" |
|
|
|
|
:content="state.logList[0].constructionSituation" placement="top"> |
|
|
|
|
<div style="width: 10rem;" class="chaochutwo"> |
|
|
|
|
{{ state.logList[0].constructionSituation }}</div> |
|
|
|
|
</el-tooltip> |
|
|
|
|
<span v-else>-</span> |
|
|
|
|
</td> |
|
|
|
|
</tr> |
|
|
|
|
</tbody> |
|
|
|
|
</table> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="bottom-box"> |
|
|
|
|
<div class="right-top-item" style="overflow: hidden;"> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">进度预警</div> |
|
|
|
|
<div class="boxcontent" v-if="state.warnList.length == 0"> |
|
|
|
|
<div class="zanwu"> |
|
|
|
|
<img style="width: 9.375rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zwtext"> |
|
|
|
|
暂无进度预警 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div v-else class="boxcontent" |
|
|
|
|
style="display: grid;grid-template-columns: 1fr 1fr ;grid-gap: .75rem;padding: 1.5625rem 1.3125rem;"> |
|
|
|
|
<div class="yj-box" v-for="item, index in state.warnList.slice(0, 2)" :key="index"> |
|
|
|
|
<img v-if="index == 0" class="jgbj" src="../../assets/images/jglv.png" alt=""> |
|
|
|
|
<img v-else class="jgbj" src="../../assets/images/jgred.png" alt=""> |
|
|
|
|
<div style="text-align: center;font-size: .875rem;">{{ item.planName }}</div> |
|
|
|
|
<div>开始时间:{{ item.startTime }}</div> |
|
|
|
|
<div>计划结束时间:{{ item.endTime }}</div> |
|
|
|
|
<div style="display: flex;align-items: center;">当前进度:<div style="flex: 1;"> <el-progress |
|
|
|
|
color="#0AA0FE" :stroke-width="8" |
|
|
|
|
:percentage="Number(item.currentProgress ? item.currentProgress : 0)" |
|
|
|
|
class="jd"> |
|
|
|
|
</el-progress> |
|
|
|
|
</div> |
|
|
|
|
<div v-else class="boxcontent" |
|
|
|
|
style="display: grid;grid-template-columns: 1fr 1fr ;grid-gap: .75rem;padding: 1.5625rem 1.3125rem;"> |
|
|
|
|
<div class="yj-box" v-for="item, index in state.warnList.slice(0, 2)" :key="index"> |
|
|
|
|
<img v-if="index == 0" class="jgbj" src="../../assets/images/jglv.png" alt=""> |
|
|
|
|
<img v-else class="jgbj" src="../../assets/images/jgred.png" alt=""> |
|
|
|
|
<div style="text-align: center;font-size: .875rem;">{{ item.planName }}</div> |
|
|
|
|
<div>开始时间:{{ item.startTime }}</div> |
|
|
|
|
<div>计划结束时间:{{ item.endTime }}</div> |
|
|
|
|
<div style="display: flex;align-items: center;">当前进度:<div style="flex: 1;"> <el-progress |
|
|
|
|
color="#0AA0FE" :stroke-width="8" |
|
|
|
|
:percentage="Number(item.currentProgress ? item.currentProgress : 0)" |
|
|
|
|
class="jd"> |
|
|
|
|
</el-progress> |
|
|
|
|
</div> |
|
|
|
|
<div>备注:{{ item.warnInfo ? item.warnInfo : '-' }}</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- 进度监控 --> |
|
|
|
|
<div class="top-item" style="overflow: hidden;"> |
|
|
|
|
<div class="boxtitle">进度监控</div> |
|
|
|
|
<div class="center-item"> |
|
|
|
|
<div class="alarm-table-header" style=" grid-template-columns: 1.5fr 2.5fr 3fr 2.5fr;"> |
|
|
|
|
<div>序号</div> |
|
|
|
|
<div>任务</div> |
|
|
|
|
<div>时间</div> |
|
|
|
|
<div>累计进度</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="scooll-box" ref="monitor"> |
|
|
|
|
<vue3-seamless-scroll :copyNum="10" :wheel="true" style="height: 100%;overflow: hidden;" |
|
|
|
|
:scrollbar="{ |
|
|
|
|
type: 'mini', |
|
|
|
|
invert: false, |
|
|
|
|
}" :list="state.monitorList" :hoverStop="true" :hover="true" :step="0.3"> |
|
|
|
|
<div v-for="item, index in state.monitorList" :key="index" |
|
|
|
|
:class="index % 2 != 0 ? 'dark' : 'light'" class="table-item" |
|
|
|
|
style=" grid-template-columns: 1.5fr 2.5fr 3fr 2.5fr;"> |
|
|
|
|
<div>{{ index + 1 }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.planName }} |
|
|
|
|
</div> |
|
|
|
|
<div>{{ item.keystageTime }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.accumulativeProgress ? item.accumulativeProgress : 0 }}% |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="zanwu" v-if="state.monitorList.length == 0"> |
|
|
|
|
<img style="width: 9.375rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zwtext"> |
|
|
|
|
暂无进度监控 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</vue3-seamless-scroll> |
|
|
|
|
</div> |
|
|
|
|
<div>备注:{{ item.warnInfo ? item.warnInfo : '-' }}</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- 门禁记录 --> |
|
|
|
|
<div class="center-top-item"> |
|
|
|
|
<myVideo></myVideo> |
|
|
|
|
<!-- <div class="boxtitle">门禁记录</div> |
|
|
|
|
<!-- 进度监控 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">进度监控</div> |
|
|
|
|
<div class="center-item"> |
|
|
|
|
<div class="alarm-table-header"> |
|
|
|
|
<div class="alarm-table-header" style=" grid-template-columns: 1.5fr 2.5fr 3fr 2.5fr;"> |
|
|
|
|
<div>序号</div> |
|
|
|
|
<div>姓名</div> |
|
|
|
|
<div>进出门类型</div> |
|
|
|
|
<div>刷卡时间</div> |
|
|
|
|
<div>人员类型</div> |
|
|
|
|
<div>是否佩戴口罩</div> |
|
|
|
|
<div>是否超温</div> |
|
|
|
|
<div>任务</div> |
|
|
|
|
<div>时间</div> |
|
|
|
|
<div>累计进度</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="scooll-box" ref="Access"> |
|
|
|
|
<div class="scooll-box" ref="monitor"> |
|
|
|
|
<vue3-seamless-scroll :copyNum="10" :wheel="true" style="height: 100%;overflow: hidden;" |
|
|
|
|
:scrollbar="{ |
|
|
|
|
type: 'mini', |
|
|
|
|
invert: false, |
|
|
|
|
}" :list="state.tableData" :hoverStop="true" :hover="true" :step="0.3"> |
|
|
|
|
<div v-for="item, index in state.tableData" :key="index" |
|
|
|
|
:class="index % 2 != 0 ? 'dark' : 'light'" class="table-item"> |
|
|
|
|
}" :list="state.monitorList" :hoverStop="true" :hover="true" :step="0.3"> |
|
|
|
|
<div v-for="item, index in state.monitorList" :key="index" |
|
|
|
|
:class="index % 2 != 0 ? 'dark' : 'light'" class="table-item" |
|
|
|
|
style=" grid-template-columns: 1.5fr 2.5fr 3fr 2.5fr;"> |
|
|
|
|
<div>{{ index + 1 }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.personName }} |
|
|
|
|
{{ item.planName }} |
|
|
|
|
</div> |
|
|
|
|
<div>{{ stausList().find((res) => |
|
|
|
|
res.value == item.openType)?.label || '-' }}</div> |
|
|
|
|
<div>{{ item.keystageTime }}</div> |
|
|
|
|
<div> |
|
|
|
|
{{ item.startSwingTime }} |
|
|
|
|
</div> |
|
|
|
|
<div>{{ item.imageType == 1 ? '内部人员' : item.imageType == 2 ? '访客' : '-' }}</div> |
|
|
|
|
<div |
|
|
|
|
:style="{ color: item.maskState == 2 ? '#FF0A0A' : item.maskState == 3 ? '#00E287' : '#fff' }"> |
|
|
|
|
{{ item.maskState == 3 ? '带口罩' : item.maskState == 2 ? '没带口罩' : '未识别' }} |
|
|
|
|
</div> |
|
|
|
|
<div :style="{ color: item.overTemp ? '#FF0A0A' : '#00E287' }"> |
|
|
|
|
{{ item.overTemp ? '是' : '否' }} |
|
|
|
|
{{ item.accumulativeProgress ? item.accumulativeProgress : 0 }}% |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="zanwu" v-if="state.tableData.length == 0"> |
|
|
|
|
<img style="width: 12.5rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zanwu" v-if="state.monitorList.length == 0"> |
|
|
|
|
<img style="width: 9.375rem;" src="../../assets/images/zw.png" alt=""> |
|
|
|
|
<div class="zwtext"> |
|
|
|
|
暂无门禁记录 |
|
|
|
|
暂无进度监控 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</vue3-seamless-scroll> |
|
|
|
|
</div> |
|
|
|
|
</div> --> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
<!-- 施工人员工种分析 and 车辆机械设备统计 --> |
|
|
|
|
<div class="right-top-item"> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">施工人员工种分析</div> |
|
|
|
|
<div class="boxcontent" id="staff"> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
<div class="boxtitle">车辆机械设备统计</div> |
|
|
|
|
<div class="boxcontent" id="car"> |
|
|
|
|
<!-- 车辆机械设备统计 --> |
|
|
|
|
<div class="top-item"> |
|
|
|
|
|
|
|
|
|
<div class="boxtitle">车辆机械设备统计</div> |
|
|
|
|
<div class="boxcontent" id="car"> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
<promptfrom></promptfrom> |
|
|
|
|
</div> |
|
|
|
@ -298,6 +323,7 @@ import { echartsZhu, echartsBing } from "./echartsOptions"; |
|
|
|
|
import { echart } from "../../echarts"; |
|
|
|
|
import { stausList } from './options' |
|
|
|
|
import { retryAndRepeatRequest } from "@/utils/vctgo"; |
|
|
|
|
import { meunList } from './options' |
|
|
|
|
import { getRecordPage, iengineerlogList, iuserworkerType, iresourcescheduleList, vehiclestat, statistics, dataOverview, iwarnlist } from './api' |
|
|
|
|
const { proxy } = getCurrentInstance(); |
|
|
|
|
const tableTrue = ref(false); |
|
|
|
@ -454,12 +480,14 @@ const state = reactive({ |
|
|
|
|
"ysg": 0, |
|
|
|
|
gcjd: "" |
|
|
|
|
}, |
|
|
|
|
requestController: null |
|
|
|
|
requestController: null, |
|
|
|
|
time: null, |
|
|
|
|
}) |
|
|
|
|
onUnmounted(() => { |
|
|
|
|
if (state.requestController) state.requestController.stop(); |
|
|
|
|
}); |
|
|
|
|
onMounted(async () => { |
|
|
|
|
getTime() |
|
|
|
|
if (state.requestController) { |
|
|
|
|
state.requestController.stop(); |
|
|
|
|
state.requestController = null |
|
|
|
@ -493,6 +521,17 @@ onMounted(async () => { |
|
|
|
|
state.requestController = retryAndRepeatRequest(requestFn, 3, 30000, 300000); |
|
|
|
|
state.loading = false |
|
|
|
|
}) |
|
|
|
|
function getTime() { |
|
|
|
|
state.time = proxy.parseTime(new Date()); |
|
|
|
|
setTimeout(() => { |
|
|
|
|
getTime(); |
|
|
|
|
}, 1000); |
|
|
|
|
} |
|
|
|
|
function resolvePath(item) { |
|
|
|
|
router.push({ |
|
|
|
|
path: item.children && item.children.length > 0 ? (item.path + '/' + item.children[0].path) : item.path |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
function Jump() { |
|
|
|
|
router.push({ |
|
|
|
|
path: "/constructionScheduling/productionPlan" |
|
|
|
@ -574,6 +613,46 @@ function engineeringLog(params) { |
|
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
<style scoped lang='scss'> |
|
|
|
|
.leftmenu { |
|
|
|
|
width: 32.5rem; |
|
|
|
|
height: 2.5rem; |
|
|
|
|
position: absolute; |
|
|
|
|
left: 1.25rem; |
|
|
|
|
bottom: -.3125rem; |
|
|
|
|
display: grid; |
|
|
|
|
grid-template-columns: 1fr 1fr 1fr; |
|
|
|
|
font-size: .9375rem; |
|
|
|
|
color: #fff; |
|
|
|
|
line-height: 2.5rem; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.rightmenu>div, |
|
|
|
|
.leftmenu>div { |
|
|
|
|
background: url('../../assets/images/menu.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
cursor: pointer; |
|
|
|
|
display: flex; |
|
|
|
|
align-items: center; |
|
|
|
|
justify-content: center; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.activeMenu { |
|
|
|
|
background: url('../../assets/images/menutwo.png') no-repeat !important; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.rightmenu { |
|
|
|
|
line-height: 2.5rem; |
|
|
|
|
width: 32.5rem; |
|
|
|
|
height: 2.5rem; |
|
|
|
|
position: absolute; |
|
|
|
|
right: 1.25rem; |
|
|
|
|
bottom: -.3125rem; |
|
|
|
|
display: grid; |
|
|
|
|
grid-template-columns: 1fr 1fr 1fr; |
|
|
|
|
font-size: .9375rem; |
|
|
|
|
color: #fff; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.xitong { |
|
|
|
|
width: 6.25rem; |
|
|
|
|
height: 2.1875rem; |
|
|
|
@ -698,18 +777,24 @@ function engineeringLog(params) { |
|
|
|
|
height: calc(100% - 3rem); |
|
|
|
|
width: 100%; |
|
|
|
|
margin-top: .5rem; |
|
|
|
|
background: url('../../assets/images/cneterbj.png') no-repeat; |
|
|
|
|
background: url('../../assets/images/datacontentbj.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
overflow: hidden; |
|
|
|
|
padding: 1.25rem; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.bigbj { |
|
|
|
|
background: url('../../assets/images/bigbj.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
padding-left: .625rem; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.dark { |
|
|
|
|
background: rgba(50, 165, 210, 0.15); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.light { |
|
|
|
|
background: rgba(50, 165, 210, 0.05); |
|
|
|
|
background: none; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.right-top-item { |
|
|
|
@ -727,7 +812,7 @@ function engineeringLog(params) { |
|
|
|
|
.bottom-box { |
|
|
|
|
width: 100%; |
|
|
|
|
height: calc(66.66% - 1.25rem); |
|
|
|
|
margin-top: 1.25rem; |
|
|
|
|
|
|
|
|
|
display: grid; |
|
|
|
|
grid-template-columns: 1fr 2fr 1fr; |
|
|
|
|
grid-gap: 1.25rem; |
|
|
|
@ -740,7 +825,7 @@ function engineeringLog(params) { |
|
|
|
|
font-weight: 400; |
|
|
|
|
font-size: .875rem; |
|
|
|
|
color: #FFFFFF; |
|
|
|
|
background-color: #08223b; |
|
|
|
|
// background: rgba(50,165,210,0.4); |
|
|
|
|
/* 深蓝色背景,可根据实际需求调整颜色值 */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -893,15 +978,17 @@ function engineeringLog(params) { |
|
|
|
|
.boxtitle { |
|
|
|
|
width: 100%; |
|
|
|
|
height: 2.5rem; |
|
|
|
|
line-height: 2.5rem; |
|
|
|
|
background: url('../../assets/images/datatitle.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
font-family: Source Han Sans CN, Source Han Sans CN; |
|
|
|
|
font-weight: bold; |
|
|
|
|
font-size: 1rem; |
|
|
|
|
color: #FFFFFF; |
|
|
|
|
display: flex; |
|
|
|
|
align-items: center; |
|
|
|
|
padding: 0 1.5625rem; |
|
|
|
|
padding: 0 2.375rem; |
|
|
|
|
font-family: 'Alibaba-PuHuiTi-Heavytwo'; |
|
|
|
|
font-style: italic; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.top-item { |
|
|
|
@ -912,6 +999,7 @@ function engineeringLog(params) { |
|
|
|
|
.top-box { |
|
|
|
|
width: 100%; |
|
|
|
|
height: 33.33%; |
|
|
|
|
margin-top: 1.25rem; |
|
|
|
|
display: grid; |
|
|
|
|
grid-template-columns: repeat(4, 1fr); |
|
|
|
|
grid-gap: 1.25rem; |
|
|
|
@ -927,7 +1015,8 @@ function engineeringLog(params) { |
|
|
|
|
|
|
|
|
|
.topheader { |
|
|
|
|
width: 100%; |
|
|
|
|
height: 6.25rem; |
|
|
|
|
height: 4.6875rem; |
|
|
|
|
margin-bottom: 1.5625rem; |
|
|
|
|
background: url('../../assets/images/datatopbj.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
display: flex; |
|
|
|
@ -942,13 +1031,21 @@ function engineeringLog(params) { |
|
|
|
|
background: linear-gradient(270.0000000000008deg, #F2F7FF 0%, #D4F7FF 50%, #F2F7FF 100%); |
|
|
|
|
-webkit-background-clip: text; |
|
|
|
|
-webkit-text-fill-color: transparent; |
|
|
|
|
font-size: 2rem; |
|
|
|
|
font-size: 2.125rem; |
|
|
|
|
font-weight: bold; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.changtitle { |
|
|
|
|
background: url('../../assets/images/changtitle.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.data-screen { |
|
|
|
|
width: 100%; |
|
|
|
|
height: 100vh; |
|
|
|
|
background: #040614; |
|
|
|
|
background: url('../../assets/images/databj.png') no-repeat; |
|
|
|
|
background-size: 100% 100%; |
|
|
|
|
background-color: black; |
|
|
|
|
// height: 67.5rem; |
|
|
|
|
} |
|
|
|
|
</style> |