<script setup>
|
import {Search} from "@element-plus/icons-vue";
|
import {reactive} from "vue";
|
import {useRouter} from "vue-router"
|
import request from "@/utils/request"
|
import { ref, onMounted, onBeforeUnmount } from 'vue';
|
import { WebSocketHost ,host} from '@/utils/constants'
|
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
|
import { useI18n } from 'vue-i18n'
|
const { t } = useI18n()
|
let language = ref(localStorage.getItem('lang') || 'zh')
|
const dialogFormVisible = ref(false)
|
const dialogFormVisiblea = ref(true)
|
const dialogFormVisibleb = ref(false)
|
const width = ref();
|
const height = ref();
|
const adjustedRects = ref([]);
|
const adjustedRects2 = ref([]);
|
const adjustedRectsa = ref([]);
|
const adjustedRectsb = ref([]);
|
const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
|
const handleMessage = (data) => {
|
// 进炉中
|
if(data.intoGlass!=null){
|
adjustedRects.value = data.intoGlass[0].map(rect => {
|
let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
|
if (rect.angle === 90) {
|
adjustedWidth = rect.height * 0.3;
|
adjustedHeight = rect.width * 0.3;
|
adjustedWidtha = rect.height;
|
adjustedHeighta = rect.width;
|
} else {
|
adjustedWidth = rect.width * 0.3;
|
adjustedHeight = rect.height * 0.3;
|
adjustedWidtha = rect.width;
|
adjustedHeighta = rect.height;
|
}
|
return {
|
...rect,
|
xcoordinate: rect.xCoordinate * 0.3,
|
ycoordinate: rect.yCoordinate * 0.3,
|
width: adjustedWidth,
|
height: adjustedHeight,
|
widtha: adjustedWidtha,
|
heighta: adjustedHeighta,
|
};
|
});
|
}
|
if(data.intoGlass2!=null){
|
adjustedRects2.value = data.intoGlass2[0].map(rect => {
|
let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
|
if (rect.angle === 90) {
|
adjustedWidth = rect.height * 0.3;
|
adjustedHeight = rect.width * 0.3;
|
adjustedWidtha = rect.height;
|
adjustedHeighta = rect.width;
|
} else {
|
adjustedWidth = rect.width * 0.3;
|
adjustedHeight = rect.height * 0.3;
|
adjustedWidtha = rect.width;
|
adjustedHeighta = rect.height;
|
}
|
return {
|
...rect,
|
xcoordinate: rect.xCoordinate * 0.3,
|
ycoordinate: rect.yCoordinate * 0.3,
|
width: adjustedWidth,
|
height: adjustedHeight,
|
widtha: adjustedWidtha,
|
heighta: adjustedHeighta,
|
};
|
});
|
}
|
// 进炉前
|
if(data.waitingGlass!=null){
|
adjustedRectsa.value = data.waitingGlass[0].map(rect => {
|
let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
|
if (rect.angle === 90) {
|
adjustedWidth = rect.height * 0.4;
|
adjustedHeight = rect.width * 0.4;
|
adjustedWidtha = rect.height;
|
adjustedHeighta = rect.width;
|
} else {
|
adjustedWidth = rect.width * 0.4;
|
adjustedHeight = rect.height * 0.4;
|
adjustedWidtha = rect.width;
|
adjustedHeighta = rect.height;
|
}
|
return {
|
...rect,
|
x: rect.xCoordinate * 0.4,
|
y: rect.yCoordinate * 0.4,
|
width: adjustedWidth,
|
height: adjustedHeight,
|
widtha: adjustedWidtha,
|
heighta: adjustedHeighta,
|
};
|
});
|
}
|
// 已出炉
|
if(data.outGlass!=null){
|
adjustedRectsb.value = data.outGlass[0].map(rect => {
|
let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
|
if (rect.angle === 90) {
|
adjustedWidth = rect.height * 0.4;
|
adjustedHeight = rect.width * 0.4;
|
adjustedWidtha = rect.height;
|
adjustedHeighta = rect.width;
|
} else {
|
adjustedWidth = rect.width * 0.4;
|
adjustedHeight = rect.height * 0.4;
|
adjustedWidtha = rect.width;
|
adjustedHeighta = rect.height;
|
}
|
return {
|
...rect, // 复制原始对象的其他属性
|
x: rect.xCoordinate * 0.4,
|
y: rect.yCoordinate * 0.4,
|
width: adjustedWidth,
|
height: adjustedHeight,
|
widtha: adjustedWidtha,
|
heighta: adjustedHeighta,
|
};
|
});
|
}
|
};
|
onMounted(() => {
|
initializeWebSocket(socketUrl, handleMessage);
|
});
|
onBeforeUnmount(() => {
|
console.log("关闭了")
|
closeWebSocket();
|
});
|
</script>
|
<template>
|
<div style="margin-top: 10px;">
|
<el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
|
<el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
|
<el-button id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.outfurnace') }}</el-button>
|
<div v-if="dialogFormVisible" >
|
<el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
|
<div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;">
|
<div v-if="adjustedRects.length > 0">
|
<div style="text-align: center;">流程卡: {{ adjustedRects[0].flowCardId }}</div>
|
<el-scrollbar height="630px">
|
<div style="position: relative;width: 1400px;">
|
<div
|
v-for="(rect, index) in adjustedRects"
|
:key="index"
|
class="rect"
|
:style="{ position: 'absolute', top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px` }"
|
>
|
<div class="centered-text">
|
<div >{{ rect.glassId }}</div>
|
<div style="margin-top: 50px;margin-left: -85px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
|
</div>
|
</div>
|
</div>
|
</el-scrollbar>
|
</div>
|
</div>
|
<div style="width: 49%;float: right;background-color: #f4f4f5;height: 550px;">
|
<div v-if="adjustedRects2.length > 0">
|
<div style="text-align: center;">流程卡: {{ adjustedRects2[0].flowCardId }}</div>
|
<el-scrollbar height="550px">
|
<div style="position: relative;width: 1400px;">
|
<div
|
v-for="(rect, index) in adjustedRects2"
|
:key="index"
|
class="rect"
|
:style="{ position: 'absolute', top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px` }"
|
>
|
<div class="centered-text">
|
<div >{{ rect.glassId }}</div>
|
<div style="margin-top: 50px;margin-left: -85px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
|
</div>
|
</div>
|
</div>
|
</el-scrollbar>
|
</div>
|
</div>
|
</el-card>
|
</div>
|
<div v-if="dialogFormVisiblea">
|
<!-- 进炉前 -->
|
<el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
|
<div v-if="adjustedRectsa.length > 0">
|
<div style="text-align: center;">流程卡: {{ adjustedRectsa[0].flowCardId }}</div>
|
<el-scrollbar height="550px">
|
<div style="position: relative;width: 100%;height: 100%;">
|
<div
|
v-for="(rect, index) in adjustedRectsa"
|
:key="index"
|
class="rect"
|
:style="{ position: 'absolute', top: `${rect.y}px`, left: `${rect.x}px`,
|
width: `${rect.width}px`, height: `${rect.height}px`,
|
backgroundColor: rect.state === 0 ? '#dedfe0' : '#d1edc4' }">
|
<div class="centered-text">
|
<div>{{ rect.glassId }}</div>
|
<div style="margin-top: 50px;margin-left: -85px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
|
</div>
|
</div>
|
</div>
|
</el-scrollbar>
|
</div>
|
</el-card>
|
</div>
|
<div v-if="dialogFormVisibleb">
|
<!-- 已出炉 -->
|
<el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
|
<div v-if="adjustedRectsb.length > 0">
|
<div style="text-align: center;">流程卡: {{ adjustedRectsb[0].flowCardId }}</div>
|
<el-scrollbar height="550px">
|
<div style="position: relative;width: 1400px;">
|
<div
|
v-for="(rect, index) in adjustedRectsb"
|
:key="index"
|
class="rect"
|
:style="{ position: 'absolute', top: `${rect.y}px`, left: `${rect.x}px`,
|
width: `${rect.width}px`, height: `${rect.height}px`,
|
backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }">
|
<div class="centered-text">
|
<div >{{ rect.glassId }}</div>
|
<div style="margin-top: 50px;margin-left: -85px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
|
</div>
|
</div>
|
</div>
|
</el-scrollbar>
|
</div>
|
</el-card>
|
</div>
|
</div>
|
</template>
|
<style scoped>
|
#boxa{
|
border: 1px solid rgb(119, 116, 116);
|
background-color: #529b2e;
|
text-align: center;
|
display: inline-block;
|
/* align-items:center; */
|
/* justify-content:center; */
|
margin-left: 20px;
|
}
|
#boxb{
|
border: 1px solid rgb(119, 116, 116);
|
background-color: #a0cfff;
|
/* display:flex; */
|
text-align: center;
|
display: inline-block;
|
align-items:center;
|
justify-content:center;
|
margin-left: 20px;
|
}
|
#box{
|
border: 1px solid black;
|
background-color: #337ecc;
|
display:flex;
|
align-items:center;
|
justify-content:center;
|
}
|
#home-card {
|
width: 100%;
|
overflow: hidden;
|
padding: 10px 0px;
|
display: flex;
|
flex-wrap: wrap;
|
#home-item {
|
border-style: solid;
|
border-width: 1px;
|
border-color: #E4E4E4;
|
width: calc(34% - 20px);
|
padding: 20px 0px 20px 20px;
|
margin-right: 10px;
|
margin-bottom: 10px;
|
display: flex;
|
justify-content: center;
|
/* align-items: center; */
|
background: #fff;
|
#home-img {
|
display: inline-block;
|
width: 160px;
|
height: 60px;
|
margin: 0;
|
padding: 0;
|
}
|
#home-right {
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
align-items: flex-start;
|
margin-left: 10px;
|
#home-num {
|
font-size: 40px;
|
margin: 5px 0;
|
}
|
}
|
}
|
}
|
.rect {
|
border: 1px solid black; /* 设置矩形的边框 */
|
background-color: lightblue; /* 设置矩形的背景色 */
|
}
|
#rect {
|
position: relative; /* 确保箭头可以相对于矩形定位 */
|
/* 其他样式 */
|
}
|
.centered-text {
|
/* 设置文字居中样式 */
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
height: 100%; /* 确保div占据整个矩形的高度 */
|
}
|
</style>
|