| | |
| | | <script setup lang="ts"> |
| | | import {Search ,Delete, Upload,Edit} from "@element-plus/icons-vue"; |
| | | import {reactive} from "vue"; |
| | | import {nextTick, onBeforeUnmount, onMounted, ref} from "vue"; |
| | | import request from "@/utils/request" |
| | | import { ref, onMounted, onBeforeUnmount,nextTick } from 'vue'; |
| | | import { WebSocketHost ,host} from '@/utils/constants' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; |
| | | import { useI18n } from 'vue-i18n' |
| | | import { useRouter } from 'vue-router' |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {ElMessage} from 'element-plus' |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from 'vue-router' |
| | | |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const dialogFormVisible = ref(false) |
| | | const dialogFormVisiblea = ref(true) |
| | | const dialogFormVisibleb = ref(false) |
| | |
| | | tableData.value = response.data |
| | | console.log(response.data); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | ElMessage.warning(response.message) |
| | | } |
| | | } catch (error) { |
| | | // console.error('Error fetching rects :', error); |
| | |
| | | dialogVisible.value = true; |
| | | tableData.value = response.data; |
| | | await nextTick(); |
| | | window.print(); |
| | | // 延时 2 秒后打印(时间可以根据需要调整) |
| | | setTimeout(() => { |
| | | window.print(); |
| | | }, 2000); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | |
| | | const newRects = data.intoGlass2[0].map(rect => { |
| | | const scaleFactor = 794.67/5087; |
| | | const scaleFactorY = 430/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | |
| | | adjustedRects2.value = [] |
| | | } |
| | | // 进炉中左 |
| | | if (data.intoGlass && data.intoGlass.length > 0) { |
| | | const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.intoGlass[0].map(rect => { |
| | | const scaleFactor = 810.89/5087; |
| | | const scaleFactorY = 430/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | if (data.intoGlass && data.intoGlass.length > 0) { |
| | | console.log(data.intoGlass); |
| | | |
| | | const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.intoGlass[0].map(rect => { |
| | | const scaleFactor = 810.89/5087; |
| | | const scaleFactorY = 430/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | |
| | | return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | } |
| | | else if (data.overGlass == null) { |
| | | else { |
| | | adjustedRects1.value = [] |
| | | } |
| | | if (data.waitingGlass && data.waitingGlass.length > 0) { |
| | |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | function updateoutColorsc() { |
| | | adjustedRects1.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateoutColorsd() { |
| | | adjustedRects2.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateonColorsa() { |
| | | adjustedRectsa.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | |
| | | rect.state = 8; |
| | | } |
| | | }); |
| | | } |
| | | function getRectColora(state) { |
| | | } |
| | | function getRectColor1(state) { |
| | | switch (state) { |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | } |
| | | } |
| | | function getRectColor2(state) { |
| | | switch (state) { |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | } |
| | | } |
| | | function getRectColora(state) { |
| | | switch (state) { |
| | | case 0: |
| | | return '#7AC5CD'; |
| | |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProject1.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakea.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakea.value = true; |
| | | } |
| | | } |
| | | function showDialog2(rect) { |
| | | const index = adjustedRects2.value.findIndex(r => r.glassId === rect.glassId); |
| | |
| | | canSelectProject2.value = false; |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProject2.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakea.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakea.value = true; |
| | | } |
| | | } |
| | | function showDialoga(rect) { |
| | |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉中人工拿走 |
| | | const takeoutc = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | status: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind1.value = false; |
| | | updateoutColorsc(); |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉zhong人工拿走 |
| | | const takeoutd = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | status: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind2.value = false; |
| | | updateoutColorsd(); |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 已出炉破损 |
| | | const handleDamageb = async () => { |
| | | try { |
| | |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | // console.error(error); |
| | | } |
| | | // 处理错误 |
| | | // console.error(error); |
| | | } |
| | | } |
| | | onBeforeUnmount(() => { |
| | | console.log("关闭了") |
| | |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="margin-top: 10px;"> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;dialogFormVisiblec = false;" >{{ $t('processCard.beforefurnace') }}</el-button> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;dialogFormVisiblec = false;">{{ $t('processCard.intofurnace') }}</el-button> |
| | | <el-button id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false;dialogFormVisiblec = false;">{{ $t('processCard.outfurnace') }}</el-button> |
| | | <el-button id="searchButton" type="info" @click="dialogFormVisiblec = true;dialogFormVisibleb = false;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.print') }}</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: 50%;float: left;background-color: #f4f4f5;height: 430px;"> |
| | | <div v-if="adjustedRects1.length > 0"> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <div style="text-align: center;"> 炉号:{{ adjustedRects1[0].engineerId }}-{{ adjustedRects1[0].temperingLayoutId }} </div> |
| | | <div style="height: 500px;"> |
| | | <div style="margin-top: 10px;"> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" |
| | | @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;dialogFormVisiblec = false;"> |
| | | {{ $t('processCard.beforefurnace') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" |
| | | @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;dialogFormVisiblec = false;"> |
| | | {{ $t('processCard.intofurnace') }} |
| | | </el-button> |
| | | <el-button id="searchButton" type="success" |
| | | @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false;dialogFormVisiblec = false;"> |
| | | {{ $t('processCard.outfurnace') }} |
| | | </el-button> |
| | | <el-button id="searchButton" type="info" |
| | | @click="dialogFormVisiblec = true;dialogFormVisibleb = false;dialogFormVisible = false;dialogFormVisiblea = false"> |
| | | {{ $t('processCard.print') }} |
| | | </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: right;background-color: #f4f4f5;height: 430px;"> |
| | | <div v-if="adjustedRects1.length > 0"> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ |
| | | adjustedRects1[0].engineerId |
| | | }}-{{ adjustedRects1[0].temperingLayoutId }} |
| | | </div> |
| | | <el-scrollbar height="430px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | | <div |
| | |
| | | left: `${rect.xcoordinate}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }" |
| | | > |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor1(rect.state) }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | | <div style="width: 49%;float: right;background-color: #f4f4f5;height: 430px;"> |
| | | <div style="width: 50%;float: left;background-color: #f4f4f5;height: 430px;"> |
| | | <div v-if="adjustedRects2.length > 0"> |
| | | <div style="text-align: center;"> 炉号:{{ adjustedRects2[0].engineerId }}-{{ adjustedRects2[0].temperingLayoutId }} </div> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRects2[0].engineerId }}-{{ adjustedRects2[0].temperingLayoutId }} </div> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay2 }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <el-scrollbar height="430px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | |
| | | left: `${rect.xcoordinate}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }" |
| | | > |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor2(rect.state) }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | |
| | | <!-- 进炉前 --> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading"> |
| | | <div v-if="adjustedRectsa.length > 0"> |
| | | <div style="text-align: center;"> 炉号:{{ adjustedRectsa[0].engineerId }}-{{ adjustedRectsa[0].temperingLayoutId }} </div> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRectsa[0].engineerId }}-{{ adjustedRectsa[0].temperingLayoutId }} </div> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplaya }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <el-scrollbar height="750px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | |
| | | <!-- 已出炉 --> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading"> |
| | | <div v-if="adjustedRectsb.length > 0"> |
| | | <div style="text-align: center;"> 炉号:{{ adjustedRectsb[0].engineerId }}-{{ adjustedRectsb[0].temperingLayoutId }} </div> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRectsb[0].engineerId }}-{{ adjustedRectsb[0].temperingLayoutId }} </div> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplayb }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <el-scrollbar height="750px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | |
| | | <el-button :disabled="!canSelectProject1" type="warning" plain :icon="Delete" @click="handleDamage1" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakea" type="danger" plain @click="takeoutc" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | <el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2"> |
| | | <el-button :disabled="!canSelectProject2" type="warning" plain :icon="Delete" @click="handleDamage2" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakea" type="danger" plain @click="takeoutd" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | <!-- 进炉前 --> |
| | |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%;height: 760px" |
| | | > |
| | | <el-table-column prop="flowCardId" :label="$t('processCard.flowcard')" width="140" align="center"/> |
| | | <el-table-column prop="layer" :label="$t('processCard.layer')" align="center" width="52"/> |
| | | <el-table-column prop="engineerId" :label="$t('processCard.project')" align="center" width="110"/> |
| | | <el-table-column prop="temperingLayoutId" :label="$t('processCard.temperinglayout')" align="center" width="52"/> |
| | | <el-table-column prop="temperingFeedSequence" :label="$t('processCard.temperingfeed')" align="center" width="52"/> |
| | | <el-table-column prop="width" :label="$t('processCard.width')" align="center" width="80"/> |
| | | <el-table-column prop="height" :label="$t('processCard.height')" align="center" width="80"/> |
| | | <el-table-column prop="thickness" :label="$t('processCard.thickness')" align="center" width="52"/> |
| | | </el-table> |
| | | </el-dialog> |
| | | > |
| | | <el-table-column prop="flowCardId" :label="$t('processCard.flowcard')" width="140" align="center"/> |
| | | <el-table-column prop="layer" :label="$t('processCard.layer')" align="center" width="52"/> |
| | | <el-table-column prop="engineerId" :label="$t('processCard.project')" align="center" width="110"/> |
| | | <el-table-column prop="temperingLayoutId" :label="$t('processCard.temperinglayout')" align="center" width="52"/> |
| | | <el-table-column prop="temperingFeedSequence" :label="$t('processCard.temperingfeed')" align="center" |
| | | width="52"/> |
| | | <el-table-column prop="width" :label="$t('processCard.width')" align="center" width="80"/> |
| | | <el-table-column prop="height" :label="$t('processCard.height')" align="center" width="80"/> |
| | | <el-table-column prop="thickness" :label="$t('processCard.thickness')" align="center" width="52"/> |
| | | </el-table> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <style scoped> |