2023-09-08 16:53:53 +08:00

516 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="rightBox">
<div class="title"><i>设备监控信息</i></div>
<div class="content">
<div class="selectRight">
<el-select v-model="lifeValue" class="m-2" placeholder="Select" size="small">
<el-option
v-for="(item, index) in noiseList"
:key="index"
:label="item.devName"
:value="item.id"
@click="checkItem(item)"
/>
</el-select>
</div>
<div class="contentSmall">
<div class="top">
<div class="leftTowerImg">
<div class="centerEleImg">
<img src="@/assets/images/elevatorMonitoring/elevatorBg.png" alt="" />
</div>
<div class="lineA"><img src="@/assets/images/elevatorMonitoring/lineA.png" alt="" /></div>
<div class="lineAdata">
<div>载重</div>
<div style="color: #65d7f9">{{ elevatorList.loading || 0 }}kg</div>
</div>
<div class="lineAdata" style="left: 62%">
<div>速度</div>
<div style="color: #65d7f9">{{ elevatorList.speed || 0 }}m/s</div>
</div>
<div class="lineB"><img src="@/assets/images/elevatorMonitoring/lineB.png" alt="" /></div>
<div class="lineBdata">
<div>X倾角</div>
<div style="color: #ec6266">{{ elevatorList.dipAngleX || 0 }}°</div>
</div>
<div class="lineBdata" style="left: 58%">
<div>Y倾角</div>
<div style="color: #ec6266">{{ elevatorList.dipAngleY }}°</div>
</div>
</div>
<div class="rightVideo">
<div class="video">
<Monitor></Monitor>
</div>
<div class="devInfo">
<div class="leftInfo">
<div class="titleStatus">运行状态</div>
<div class="infoBox">
<!-- <div style="color: #65d7f9">人脸识别系统</div> -->
<div><span class="textColor"> 今日工作时长</span>{{ lifeList.workTimeName || 0 }}</div>
<div><span class="textColor"> 今日装载次数</span>{{ lifeList.loadingNum || 0 }}</div>
<div><span class="textColor"> 今日装载工效</span>{{ lifeList.loadingErgonomic || 0 }}kg/h</div>
<div><span class="textColor"> 今日装载重量</span>{{ lifeList.loadingWeight || 0 }}kg</div>
<div><span class="textColor"> 今日违章次数</span>{{ lifeList.violationNum || 0 }}</div>
</div>
</div>
<div class="rightInfo">
<div class="titleStatus">
<span style="color:#fff;cursor: pointer" v-if="isShow==false" @click="infoBtn">司机信息</span>
<span style="color:#ccc;cursor: pointer" v-else @click="infoBtn">司机信息</span>
<span
><img style="margin-left: 4%; width: 6%" src="@/assets/images/towerCraneMonitoring/setUp.png" alt="" />
</span>
<span v-if="isShow == true" style="margin-left: 6%; color: #fff; cursor: pointer" @click="deviceInf"
>设备信息</span
>
<span v-else style="margin-left: 6%; color: #ccc; cursor: pointer" @click="deviceInf">设备信息</span>
</div>
<!-- 司机信息 -->
<div class="infoBox" v-show="isShowTime">
<!-- <div><span class="textColor">认证状态</span>-</div> -->
<div><span class="textColor"> 姓名</span>{{ driverInfo.workerName || "未知" }}</div>
<div>
<span class="textColor"> 性别</span>{{ driverInfo.sex == 1 ? "男" : driverInfo.sex == 2 ? "女" : "未知" }}
</div>
<div><span class="textColor"> 年龄</span>{{ driverInfo.age || "未知" }}</div>
<div><span class="textColor"> 本次连续工作时长</span>{{ driverInfo.continuousWorkingTimeName || 0 }}</div>
<div style="width: 95%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
<span class="textColor" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
身份证号:</span
>{{ driverInfo.idCard || "未知" }}
</div>
<div style="width: 96%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
<span class="textColor" style="width: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
特种资格证书编号:</span
>{{ driverInfo.specialCertificateNumber || "未知" }}
</div>
<div>
<span class="textColor"> 资格证书</span>
<a style="color: #64d6f8; cursor: pointer" @click="driverDetail">{{ "查看详情" }}</a>
</div>
</div>
<div class="driverPhoto"><img :src="driverInfo.imageUrl" alt="" /></div>
<!-- 设备信息 -->
<div class="infoBox" v-show="isShow">
<div style="width: 98%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
<span class="textColor" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
设备名称</span
>{{ towerDetail.devName || "未知" }}
</div>
<div style="width: 96%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
<span class="textColor"> 设备编号</span>{{ towerDetail.devSn || "未知" }}
</div>
<div><span class="textColor"> 机械设备备案号</span>{{ towerDetail.filingNo || "未知" }}</div>
<div><span class="textColor"> 最大高度</span>{{ towerDetail.maxHeight || "未知" }}</div>
<div>
<span class="textColor" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
工作循环最大载重</span
>{{ towerDetail.maxLoad || "未知" }}
</div>
<div>
<span class="textColor" style="width: 10%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
总楼层数</span
>{{ towerDetail.totalFloor || "未知" }}
</div>
<!-- <div>
<span
class="textColor"
style="width: 10%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap"
>
拆除单位</span
>{{ towerDetailData.demolitionUnit || "未知" }}
</div> -->
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="bottomList">
<p>防冲顶</p>
<p class="number">{{ elevatorList.topAlarm == 1 ? "报警" : "正常" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>下限位</p>
<p class="number">{{ elevatorList.bottomAlarm == 1 ? "报警" : "正常" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>速度</p>
<p class="number">{{ elevatorList.speed || 0 }}m/s</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>载重</p>
<p class="number">{{ elevatorList.loading || 0 }}kg</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>X倾角</p>
<p class="number">{{ elevatorList.dipAngleX || 0 }}°</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>Y倾角</p>
<p class="number">{{ elevatorList.dipAngleY || 0 }}°</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>前门锁</p>
<p class="number">{{ elevatorList.frontDoorState == 1 ? "关" : "开" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>后门锁</p>
<p class="number">{{ elevatorList.backDoorState == 1 ? "关" : "开" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>在线状态</p>
<p class="number">{{ elevatorList.isOnline == 0 ? "不在线" : "在线" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>报警状态</p>
<p class="number">{{ elevatorList.noAlarm == 1 ? "无任何报警" : "有报警" }}</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>高度</p>
<p class="number">{{ elevatorList.height }}m</p>
<div class="bg"></div>
</div>
<div class="bottomList">
<p>当前楼层</p>
<p class="number">{{ elevatorList.floorNum }}</p>
<div class="bg"></div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import mitts from "@/utils/bus"; //兄弟组件传值
import Monitor from "@/views/sevenLargeScreen/elevatorMonitoring/eleMonitor.vue";
import {
getLifterListApi,
getNewestLifterApi,
getQueryTodayOperatingApi,
getRelatedInfoApi,
getLifterQueryByIdApi
} from "@/api/modules/elevator";
import { ref, reactive, onMounted } from "vue";
import { GlobalStore } from "@/stores";
const store = GlobalStore();
const lifeValue = ref("" as any);
const noiseList = ref([] as any);
let lifterDevSn = ref("" as any);
let isShowTime = ref(true); //司机信息
let isShow = ref(false); //设备信息
//司机点击
const infoBtn=()=>{
isShowTime.value=true
isShow.value=false
}
//设备信息
const deviceInf = () => {
isShow.value=true
isShowTime.value=false
};
// 下拉框选中
function checkItem(val: any) {
console.log("下拉框选中", val);
lifterDevSn.value = val.devSn;
mitts.emit("elevaTorSelectId", val.id);
console.log("发送的id", val.id);
// getLifterList()
getLifterData();
getSelectTower();
getDriverInfoList(lifterDevSn.value);
getTowerData(val.id);
}
// 获取设备信息数据
const towerDetail = ref({} as any);
const getTowerData = async (data: any) => {
console.log("接收设备信息desn", data);
const res = await getLifterQueryByIdApi({
id: data
});
if (res.result) {
towerDetail.value = res.result;
console.log("获取设备信息数据res.result", towerDetail.vaule);
console.log("获取设备信息取值", towerDetail.valuedevName);
}
};
//获取设备下拉列表
const getLifterList = async () => {
const res = await getLifterListApi({
projectSn: store.sn
});
if (res.result) {
noiseList.value = res.result;
lifeValue.value = res.result[0].id;
lifterDevSn.value = res.result[0].devSn;
}
await getLifterData();
await getSelectTower();
await getDriverInfoList(lifterDevSn.value);
getTowerData(lifeValue.value);
};
//获取升降机实时数据
let elevatorList = ref({} as any);
const getLifterData = async () => {
const res = await getNewestLifterApi({
devSn: lifterDevSn.value
});
if (res.result) {
elevatorList.value = res.result;
}
console.log("获取升降机实时数据", elevatorList.value);
};
//获取运行状态
let lifeList = ref({} as any);
const getSelectTower = async () => {
const res = await getQueryTodayOperatingApi({
projectSn: store.sn,
devSn: lifterDevSn.value
});
if (res.result) {
console.log("获取运行状态", res);
lifeList.value = res.result;
}
};
//获取司机信息
let driverInfo = ref([] as any);
const getDriverInfoList = async (val: any) => {
console.log("司机信息接收的devSn", val);
const res = await getRelatedInfoApi({
devSn: val
});
if (res.result) {
driverInfo.value = res.result.devWorker.workerList[0];
console.log("获取司机信息", res);
// 全部数据获取完后异步发放设备ID给摄像头实现进入页面播放摄像头
setTimeout(() => {
mitts.emit("elevaTorSelectId", lifeValue.value);
}, 2500);
}
};
//查看详情跳转
function driverDetail() {
window.open("https://zlaq.mohurd.gov.cn/fwmh/bjxcjgl/fwmh/pages/construction_safety/qytzzyry/qytzzyry.html");
}
onMounted(() => {
getLifterList();
});
</script>
<style lang="scss" scoped>
.rightBox {
width: 100%;
height: 100%;
.title {
height: 5%;
line-height: 35px;
text-align: left;
font-size: calc(100vw * 18 / 1920);
color: #ffffff;
background: url("@/assets/images/larborManagement/videoPlayer.webp") no-repeat;
background-size: 100% 100%;
i {
margin-left: 50px;
font-family: OPPOSansH;
}
}
.content {
height: 96%;
width: 100%;
margin-top: 10px;
background: url("@/assets/images/cardImg.png") no-repeat;
background-size: 100% 100%;
color: #fff;
display: flex;
font-size: calc(100vw * 14 / 1920);
// .main {
// border-radius: 8px;
// flex: 1;
// height: 80vh;
// }
.selectRight {
position: absolute;
left: 68%;
width: 6%;
top: 24%;
z-index: 9;
}
.contentSmall {
width: 100%;
height: 92%;
margin: 4% 2%;
.top {
width: 100%;
height: 80%;
display: flex;
.leftTowerImg {
margin-right: 1%;
width: 80%;
height: 100%;
background: url("@/assets/images/towerCraneMonitoring/contentSmallImg.png") no-repeat;
background-size: 100% 100%;
.centerEleImg {
position: absolute;
left: 23%;
top: 23%;
img {
width: 100%;
}
}
.lineA {
position: absolute;
top: 56%;
left: 53%;
img {
width: 60%;
}
}
.lineB {
position: absolute;
top: 70%;
left: 49%;
img {
width: 60%;
}
}
.lineAdata {
width: 4%;
height: 7%;
top: 55%;
position: absolute;
background: url("@/assets/images/towerCraneMonitoring/bottomImg.png") no-repeat;
background-size: 100% 100%;
left: 57.5%;
font-size: calc(100vw * 16 / 1920);
div {
margin: 10% 0 0 16%;
}
}
.lineBdata {
width: 4%;
height: 7%;
top: 70%;
position: absolute;
background: url("@/assets/images/elevatorMonitoring/redWanning.png") no-repeat;
background-size: 100% 100%;
left: 53.5%;
font-size: calc(100vw * 16 / 1920);
div {
margin: 10% 0 0 16%;
}
}
}
.rightVideo {
width: 40%;
.video {
height: 60%;
}
.devInfo {
height: 40%;
display: flex;
.leftInfo {
width: 50%;
margin-right: 4%;
}
.rightInfo {
width: 50%;
}
.titleStatus {
height: 15%;
background: url("@/assets/images/towerCraneMonitoring/titleStatus.png") no-repeat;
background-size: 100% 100%;
margin-top: 5%;
margin-bottom: 2%;
font-size: calc(100vw * 16 / 1920);
line-height: 3.5vh;
padding-left: 5%;
}
.infoBox {
height: 80%;
background: url("@/assets/images/towerCraneMonitoring/InfoImg.png") no-repeat;
background-size: 100% 100%;
overflow: hidden;
.textColor {
color: #ccc;
}
div {
margin-top: 4%;
margin-left: 5%;
}
}
.driverPhoto {
top: 64%;
position: absolute;
left: 94%;
img {
width: 55%;
}
}
}
}
}
.bottom {
width: 100%;
height: 17%;
margin-top: 2%;
display: flex;
.bottomList {
width: 8%;
height: 85%;
margin-right: 1%;
background: url("@/assets/images/towerCraneMonitoring/bottomImg.png") no-repeat;
background-size: 100% 100%;
p {
margin-left: 12%;
font-size: calc(100vw * 16 / 1920);
}
.number {
color: #65d7f9;
}
.bg {
width: 80%;
height: 4%;
background-color: #65d7f9;
margin-left: 12%;
margin-top: -3%;
}
}
}
}
}
}
::v-deep .el-input__wrapper {
background: #112d59;
}
::v-deep .el-input__inner {
color: #fff;
}
::v-deep .el-select .el-input .el-select__caret {
color: #fff;
}
</style>