<template>
|
<div id="title">
|
<div id="bkuang" style="border-top: none">
|
<!-- ZH仓堆垛机状态面板 -->
|
<div class="skuang">
|
<div class="zhuname">阻焊仓堆垛机</div>
|
<div class="zhankuang">
|
<div class="xname">堆垛机状态:</div>
|
<div class="xzhi" :title="zhData.R_ZH_Status">{{ zhData.R_ZH_Status || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">堆垛机手自动状态:</div>
|
<div class="xzhi" :title="zhData.R_ZH_AutoStatus">{{ zhData.R_ZH_AutoStatus || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">正在执行的任务号:</div>
|
<div class="xzhi" :title="zhData.R_ZH_TaskNum">{{ zhData.R_ZH_TaskNum || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">堆垛机工作状态:</div>
|
<div class="xzhi" :title="zhData.R_ZH_WorkStatus">{{ zhData.R_ZH_WorkStatus || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">作业类型:</div>
|
<div class="xzhi" :title="zhData.R_ZH_WorkType">{{ zhData.R_ZH_WorkType || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">托盘类型:</div>
|
<div class="xzhi" :title="zhData.R_ZH_TrayType">{{ zhData.R_ZH_TrayType || '-' }}</div>
|
</div>
|
</div>
|
|
<!-- ZH关联站台(入库301+入库302) -->
|
<div class="skuang">
|
<div class="zhuname">入库301站台</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许放货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanPut1">{{ zhData.R_ZH_IsCanPut1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许取货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanTake1">{{ zhData.R_ZH_IsCanTake1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货托盘类型(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_TakePalletType1">{{ zhData.R_ZH_TakePalletType1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货托盘类型(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutPalletType1">{{ zhData.W_ZH_PutPalletType1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutRequest1">{{ zhData.W_ZH_PutRequest1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutFinish1">{{ zhData.W_ZH_PutFinish1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeRequest1">{{ zhData.W_ZH_TakeRequest1 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeFinish1">{{ zhData.W_ZH_TakeFinish1 || '-' }}</div>
|
</div>
|
|
<div class="zhuname">入库302站台</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许放货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanPut2">{{ zhData.R_ZH_IsCanPut2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许取货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanTake2">{{ zhData.R_ZH_IsCanTake2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货托盘类型(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_TakePalletType2">{{ zhData.R_ZH_TakePalletType2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货托盘类型(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutPalletType2">{{ zhData.W_ZH_PutPalletType2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutRequest2">{{ zhData.W_ZH_PutRequest2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutFinish2">{{ zhData.W_ZH_PutFinish2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeRequest2">{{ zhData.W_ZH_TakeRequest2 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeFinish2">{{ zhData.W_ZH_TakeFinish2 || '-' }}</div>
|
</div>
|
</div>
|
|
<!-- ZH关联站台(出库303+出库304) -->
|
<div class="skuang">
|
<div class="zhuname">出库303站台</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许放货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanPut3">{{ zhData.R_ZH_IsCanPut3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许取货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanTake3">{{ zhData.R_ZH_IsCanTake3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货托盘类型(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_TakePalletType3">{{ zhData.R_ZH_TakePalletType3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货托盘类型(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutPalletType3">{{ zhData.W_ZH_PutPalletType3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutRequest3">{{ zhData.W_ZH_PutRequest3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutFinish3">{{ zhData.W_ZH_PutFinish3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeRequest3">{{ zhData.W_ZH_TakeRequest3 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeFinish3">{{ zhData.W_ZH_TakeFinish3 || '-' }}</div>
|
</div>
|
|
<div class="zhuname">出库304站台</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许放货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanPut4">{{ zhData.R_ZH_IsCanPut4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">是否允许取货(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_IsCanTake4">{{ zhData.R_ZH_IsCanTake4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货托盘类型(读):</div>
|
<div class="xzhi" :title="zhData.R_ZH_TakePalletType4">{{ zhData.R_ZH_TakePalletType4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货托盘类型(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutPalletType4">{{ zhData.W_ZH_PutPalletType4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutRequest4">{{ zhData.W_ZH_PutRequest4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">放货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_PutFinish4">{{ zhData.W_ZH_PutFinish4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货请求(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeRequest4">{{ zhData.W_ZH_TakeRequest4 || '-' }}</div>
|
</div>
|
<div class="zhankuang">
|
<div class="xname">取货完成(写):</div>
|
<div class="xzhi" :title="zhData.W_ZH_TakeFinish4">{{ zhData.W_ZH_TakeFinish4 || '-' }}</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { ref, nextTick, watch, onUnmounted } from "vue";
|
import { useStore } from "vuex";
|
import { onMounted } from "vue";
|
|
export default {
|
data() {
|
return {
|
xuan: 0
|
};
|
},
|
setup() {
|
const store = useStore();
|
// 仅存储ZH数据,与其他数据隔离
|
const zhData = ref({});
|
|
// 延迟更新配置,解决闪烁问题
|
const UPDATE_DELAY = 300; // 延迟300ms更新UI
|
let updateTimer = null; // 定时器实例
|
|
// ZH数据映射规则
|
const zhStatusMap = {
|
R_ZH_Status: {
|
1: "正常",
|
2: "故障",
|
3: "急停",
|
},
|
R_ZH_AutoStatus: {
|
0: "维修",
|
1: "手动",
|
2: "半自动",
|
3: "自动",
|
},
|
R_ZH_WorkStatus: {
|
0: "待机",
|
1: "取货中",
|
2: "取货完成",
|
4: "放货中",
|
5: "放货完成",
|
6: "任务完成",
|
},
|
R_ZH_WorkType: {
|
0: "无作业任务(0)",
|
1: "取放货作业(1)",
|
2: "只取货作业(2)",
|
3: "只放货作业(3)",
|
4: "移动到指定位置"
|
},
|
R_ZH_TrayType: {
|
"-1": "空箱(-1)",
|
1: "小托盘(1)",
|
2: "中托盘(2)",
|
3: "大托盘(3)",
|
4: "特大托盘(4)",
|
}
|
};
|
|
// ZH字段分组
|
const zhFieldGroups = {
|
permissionFields: {
|
keys: ["R_ZH_IsCanPut1", "R_ZH_IsCanTake1", "R_ZH_IsCanPut2", "R_ZH_IsCanTake2",
|
"R_ZH_IsCanPut3", "R_ZH_IsCanTake3", "R_ZH_IsCanPut4", "R_ZH_IsCanTake4"],
|
map: { true: "是", false: "否" }
|
},
|
requestFields: {
|
keys: ["W_ZH_PutRequest1", "W_ZH_TakeRequest1", "W_ZH_PutRequest2", "W_ZH_TakeRequest2",
|
"W_ZH_PutRequest3", "W_ZH_TakeRequest3", "W_ZH_PutRequest4", "W_ZH_TakeRequest4"],
|
map: { true: "是", false: "否" }
|
},
|
finishFields: {
|
keys: ["W_ZH_PutFinish1", "W_ZH_TakeFinish1", "W_ZH_PutFinish2", "W_ZH_TakeFinish2",
|
"W_ZH_PutFinish3", "W_ZH_TakeFinish3", "W_ZH_PutFinish4", "W_ZH_TakeFinish4"],
|
map: { true: "是", false: "否" }
|
},
|
palletTypeFields: {
|
keys: ["R_ZH_TakePalletType1", "R_ZH_TakePalletType2", "R_ZH_TakePalletType3", "R_ZH_TakePalletType4",
|
"W_ZH_PutPalletType1", "W_ZH_PutPalletType2", "W_ZH_PutPalletType3", "W_ZH_PutPalletType4"],
|
map: { "-1": "空箱(-1)", 1: "小托盘(1)", 2: "中托盘(2)", 3: "大托盘(3)", 4: "特大托盘(4)" }
|
}
|
};
|
|
// 处理ZH原始数据
|
const processZHData = (rawData) => {
|
if (!rawData) return {};
|
const processedData = { ...rawData };
|
|
// 处理核心状态字段
|
Object.keys(zhStatusMap).forEach(key => {
|
if (processedData.hasOwnProperty(key)) {
|
processedData[key] = zhStatusMap[key][processedData[key]] || processedData[key];
|
}
|
});
|
|
// 处理分组字段
|
Object.values(zhFieldGroups).forEach(group => {
|
group.keys.forEach(key => {
|
if (processedData.hasOwnProperty(key)) {
|
processedData[key] = group.map[processedData[key]] || processedData[key];
|
}
|
});
|
});
|
|
return processedData;
|
};
|
|
// 延迟更新ZH数据,避免高频刷新
|
const delayedUpdateZHData = (newRawData) => {
|
if (updateTimer) {
|
clearTimeout(updateTimer);
|
}
|
|
updateTimer = setTimeout(() => {
|
// 只处理包含ZH特征字段的数据
|
if (newRawData && newRawData.R_ZH_Status !== undefined) {
|
zhData.value = processZHData(newRawData);
|
|
// 更新样式
|
nextTick(() => {
|
const valueElements = document.getElementsByClassName("xzhi");
|
for (let i = 0; i < valueElements.length; i++) {
|
if (valueElements[i].innerHTML === "是") {
|
valueElements[i].style.color = "yellow";
|
} else if (valueElements[i].innerHTML === "否") {
|
valueElements[i].style.color = "red";
|
}
|
}
|
});
|
}
|
}, UPDATE_DELAY);
|
};
|
|
onMounted(() => {
|
// 初始加载数据
|
const initialData = store.state.homedata;
|
if (initialData && initialData.R_ZH_Status !== undefined) {
|
zhData.value = processZHData(initialData);
|
}
|
|
// 监听数据变化,只处理ZH数据
|
const unwatch = watch(
|
() => store.state.homedata,
|
(newData) => {
|
if (newData && newData.R_ZH_Status !== undefined) {
|
delayedUpdateZHData(newData);
|
}
|
},
|
{ deep: true }
|
);
|
|
// 组件卸载时清理
|
onUnmounted(() => {
|
unwatch();
|
if (updateTimer) {
|
clearTimeout(updateTimer);
|
}
|
});
|
});
|
|
return {
|
zhData
|
};
|
}
|
};
|
</script>
|
|
<style scoped>
|
.ding {
|
float: left;
|
width: 20px;
|
height: 20px;
|
margin-top: 7px;
|
}
|
.yan {
|
color: white;
|
float: left;
|
font-size: 25px;
|
}
|
.dakuang {
|
width: 250px;
|
height: 50px;
|
position: absolute;
|
top: 150px;
|
left: 200px;
|
}
|
#xiugai {
|
width: 100px;
|
height: 30px;
|
float: left;
|
border-radius: 5px;
|
text-align: center;
|
line-height: 30px;
|
cursor: pointer;
|
border: 1px solid white;
|
color: white;
|
background: rgba(255, 255, 255, 0.5);
|
font-size: 25px;
|
position: absolute;
|
top: 150px;
|
left: 450px;
|
}
|
#xiugai:hover {
|
background: #f60;
|
}
|
#shu1,
|
#shu2 {
|
width: 200px;
|
height: 30px;
|
float: left;
|
margin-top: 0px;
|
margin-right: 0px;
|
border-radius: 5px;
|
border: 1px solid white;
|
}
|
#guan {
|
width: 40px;
|
height: 40px;
|
float: left;
|
font-size: 1.1cqw;
|
text-align: center;
|
line-height: 40px;
|
cursor: pointer;
|
margin-left: 560px;
|
color: white;
|
position: absolute;
|
}
|
#ti {
|
width: 600px;
|
height: 300px;
|
position: relative;
|
background: rgba(255, 255, 255, 1);
|
border-radius: 10px;
|
top: 230px;
|
left: 35%;
|
display: none;
|
background-image: url("../../img/1.png");
|
background-repeat: no-repeat;
|
background-size: 170%;
|
background-position: -220px 0px;
|
}
|
.zhuname {
|
width: 100%;
|
height: 5vh;
|
float: left;
|
text-align: center;
|
line-height: 50px;
|
font-weight: 700;
|
font-size: 1.1cqw;
|
color: white;
|
}
|
.xname {
|
width: 70%;
|
height: 80px;
|
float: left;
|
line-height: 7vh;
|
font-size: 1.1cqw;
|
color: white;
|
}
|
.xzhi {
|
width: 30%;
|
height: 7vh;
|
float: left;
|
line-height: 50px;
|
font-size: 1.1cqw;
|
color: rgb(242, 242, 50);
|
white-space: nowrap;
|
overflow: hidden;
|
text-overflow: ellipsis;
|
}
|
.zhankuang {
|
width: 45%;
|
height: 3vh;
|
margin-top: 10px;
|
margin-left: 5%;
|
float: left;
|
}
|
#title {
|
float: left;
|
width: 95%;
|
height: 88vh;
|
margin-top: 40px;
|
margin-left: 3%;
|
background-image: url("../../img/1.png");
|
background-repeat: no-repeat;
|
background-size: 100%;
|
container-type: inline-size;
|
}
|
#bkuang {
|
width: 100%;
|
height: 55vh;
|
float: left;
|
}
|
.skuang {
|
width: 31%;
|
height: 55vh;
|
float: left;
|
border-top: none;
|
border-left: none;
|
border-bottom: none;
|
background: rgba(255, 255, 255, 0.2);
|
margin-left: 1.7%;
|
border-radius: 10px;
|
}
|
</style>
|