UI-Project/src/lang/en.js
@@ -142,7 +142,7 @@ totalfurnaces:'总炉数', cagesnumber:'笼内数量', slotnumber:'占有格子数', progress:'进度', progress:'进度%', whethersame:'是否相同', same:'相同', notsame:'不相同', UI-Project/src/lang/py.js
@@ -141,7 +141,7 @@ totalfurnaces:'总炉数', cagesnumber:'笼内数量', slotnumber:'占有格子数', progress:'进度', progress:'进度%', whethersame:'是否相同', same:'相同', notsame:'不相同', UI-Project/src/lang/zh.js
@@ -141,7 +141,7 @@ totalfurnaces:'总炉数', cagesnumber:'笼内数量', slotnumber:'占有格子数', progress:'进度', progress:'进度%', whethersame:'是否相同', same:'相同', notsame:'不相同', UI-Project/src/views/Identify/identifwu.vue
@@ -109,18 +109,24 @@ } function getRectColor(state: number): string { switch (state) { case 0: return '#e1f3d8'; case 100: return '#c8c9cc'; case 110: return '#b3e19d'; case 120: return '#f89898'; case 0: return '#7AC5CD'; case 1: return '#95d475'; case -1: return '#99BBFF'; case 2: return 'lightblue'; case 3: return '#eebe77'; case 4: return '#CD6090'; case 8: return '#911005'; case 9: return '#f3d19e'; return '#4682B4'; default: return '#CDAF95'; } } // 更新矩形状态 UI-Project/src/views/Identify/identifwutwo.vue
@@ -148,18 +148,24 @@ } function getRectColor(state: number): string { switch (state) { case 0: return '#e1f3d8'; case 100: return '#c8c9cc'; case 110: return '#b3e19d'; case 120: return '#f89898'; case 0: return '#7AC5CD'; case 1: return '#95d475'; case -1: return '#99BBFF'; case 2: return 'lightblue'; case 3: return '#eebe77'; case 4: return '#CD6090'; case 8: return '#911005'; case 9: return '#f3d19e'; return '#4682B4'; default: return '#CDAF95'; } } // 更新矩形状态 UI-Project/src/views/Identify/identify.vue
@@ -198,18 +198,24 @@ }; function getRectColor(state: number): string { switch (state) { case 0: return '#e1f3d8'; case 100: return '#c8c9cc'; case 110: return '#b3e19d'; case 120: return '#f89898'; case 0: return '#7AC5CD'; case 1: return '#95d475'; case -1: return '#99BBFF'; case 2: return 'lightblue'; case 3: return '#eebe77'; case 4: return '#CD6090'; case 8: return '#911005'; case 9: return '#f3d19e'; return '#4682B4'; default: return '#CDAF95'; } } const optionsb = [ UI-Project/src/views/Returns/upreturns.vue
@@ -16,7 +16,6 @@ const blind = ref(false) const blinda = ref(false) const blindb = ref(false) const dialoglea = ref(false) const ReportData = ref(true); const canSelectProjecta = ref(true); const canSelectProjectb = ref(true); @@ -37,13 +36,9 @@ }).then((response) => { if (response.code == 200) { } else { ElMessage.warning(response.msg) // ElMessage.warning(response.msg) } }); const handlezhiban = () => { dialoglea.value = true; fetchFlowCardId(); }; const selectproject = () => { dialogFormVisible.value = true; selectgong(); @@ -70,7 +65,7 @@ if (response.code === 200) { tableData.value = response.data // tableData.splice(0, tableData.length, ...response.data); ElMessage.error(response.message); // ElMessage.error(response.message); window.localStorage.setItem('engineeringIda', tableData[0].engineeringId) } } catch (error) { @@ -117,7 +112,7 @@ if (response.code == 200) { titleSelectJson.value.engineerId = response.data; } else { ElMessage.error(response.message); // ElMessage.error(response.message); } } catch (error) { console.error(error); @@ -228,23 +223,6 @@ ElMessage.error(response.message); } }; // 值班信息 const fetchFlowCardId = async () => { try { const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment', { line: 2001, workingProcedure: '冷加工' }) if (response.code == 200) { ElMessage.success(response.message); tableDatax.value = response.data; } else { ElMessage.error(response.message); } } catch (error) { console.error(error); } } onMounted(fetchTableData); // 开始上片 const handleBind = (row) => { @@ -444,7 +422,6 @@ <el-button :disabled="!canSelectProjectb" style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button> <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button> <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="deleteTask">{{ $t('searchOrder.deleteTask') }}</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button> <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.oneloadingline')" style="margin-top: 5px;margin-left: 20px;"> <el-option :label="$t('Mounting.all')" value="0"></el-option> @@ -503,7 +480,7 @@ <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80"/> <el-table-column fixed="right" :label="$t('film.operate')" align="center"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> <el-button size="mini" :disabled="scope.row.number == 0 || scope.row.number == ''" type="text" plain @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> </template> </el-table-column> </el-table> @@ -545,23 +522,6 @@ </div> </template> </el-dialog> <!-- 值班信息 --> <el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')"> <el-table ref="table" style="margin-top: 20px;height: 300px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/> <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')"/> <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')"> </el-table-column> <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')"> </el-table-column> </el-table> <template #footer> <div id="dialog-footer"> <el-button @click="dialoglea = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')"> <div style="margin-left: 50px;margin-bottom: 10px;"> <el-form-item :label="$t('Mounting.loadingline')" :required="true"> UI-Project/src/views/Returns/upreturns2.vue
@@ -21,7 +21,6 @@ const canSelectProjecta = ref(true); const canSelectProjectb = ref(true); const canSelectProjectc = ref(false); const tableDatax = ref([]) const tableDatad = ref([]) const upstatus = ref(t('basicData.machineaa')); const cuttingMachineStatusColor = ref('#911005'); @@ -37,13 +36,9 @@ }).then((response) => { if (response.code == 200) { } else { ElMessage.warning(response.msg) // ElMessage.warning(response.msg) } }); const handlezhiban = () => { dialoglea.value = true; fetchFlowCardId(); }; const selectproject = () => { dialogFormVisible.value = true; selectgong(); @@ -69,7 +64,7 @@ const response = await request.get("/loadGlass/up-patten-usage/prioritylist"); if (response.code === 200) { tableData.splice(0, tableData.length, ...response.data); ElMessage.error(response.message); // ElMessage.error(response.message); window.localStorage.setItem('engineeringIda', tableData[0].engineeringId) } } catch (error) { @@ -297,23 +292,6 @@ ElMessage.error(response.message); } }; // 值班信息 const fetchFlowCardId = async () => { try { const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment', { line: 2001, workingProcedure: '冷加工' }) if (response.code == 200) { ElMessage.success(response.message); tableDatax.value = response.data; } else { ElMessage.error(response.message); } } catch (error) { console.error(error); } } onMounted(fetchTableData); // 开始上片 const handleBind = (row) => { @@ -445,7 +423,6 @@ <el-button :disabled="!canSelectProjectb" style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button> <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button> <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="deleteTask">{{ $t('searchOrder.deleteTask') }}</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button> <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.oneloadingline')" style="margin-top: 5px;margin-left: 20px;"> <el-option :label="$t('Mounting.all')" value="0"></el-option> @@ -504,7 +481,7 @@ <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80"/> <el-table-column fixed="right" :label="$t('film.operate')" align="center"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> <el-button size="mini" :disabled="scope.row.number == 0 || scope.row.number == ''" type="text" plain @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> </template> </el-table-column> </el-table> @@ -547,23 +524,6 @@ </div> </template> </el-dialog> <!-- 值班信息 --> <el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')"> <el-table ref="table" style="margin-top: 20px;height: 300px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/> <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')"/> <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')"> </el-table-column> <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')"> </el-table-column> </el-table> <template #footer> <div id="dialog-footer"> <el-button @click="dialoglea = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')"> <div style="margin-left: 50px;margin-bottom: 10px;"> <el-form-item :label="$t('Mounting.loadingline')" :required="true"> UI-Project/src/views/Slicecage/slicecage.vue
@@ -6,14 +6,10 @@ import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import {ElMessage, ElMessageBox} from 'element-plus' const dialogFormVisibleaDownGlasss = ref(false) const scanGlass = ref([]) const {t} = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') const router = useRouter() const dialogFormVisible = ref(false) const dialoglea = ref(false) const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) const dialogFormVisiblec = ref(false) @@ -33,7 +29,6 @@ const tableDatad = ref([]) const tableDataf = ref([]) const tableDatae = ref([]) const tableDatax = ref([]) const tableDatas = ref([]) const tableDatass = ref([]) const tableDatalack = ref([]) @@ -546,10 +541,6 @@ } catch (error) { console.error('发生错误:', error); } }; const handlezhiban = () => { dialoglea.value = true; fetchFlowCardId(); }; const handleganghua = () => { dialogFormVisiblec.value = true; @@ -707,34 +698,6 @@ console.error(error); } } // 值班信息 const fetchFlowCardId = async () => { try { const response = await request.post('/cacheVerticalGlass/work_assignment/selectWorkAssignment',{ line: 4001, workingProcedure : '钢化' }) if (response.code == 200) { ElMessage.success(response.message); tableDatax.value = response.data; console.log(tableDatax.value); } else { ElMessage.error(response.message); } } catch (error) { console.error(error); } } const handleConfirm = async () => { const response = await request.post("/cacheVerticalGlass/work_assignment/updateWorkAssignment", tableDatax.value) if (response.code === 200) { ElMessage.success(response.message); dialoglea.value = false; } else { ElMessage.error(response.message); } }; function handleRowClick(row) { selectedRow.value = row; // 更新选中的行数据 } @@ -1102,13 +1065,9 @@ <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="primary" @click="handlexiang">{{ $t('searchOrder.cageinformation') }}</el-button> <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button> <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="warning" @click="handleganghua">{{ $t('searchOrder.temperingqueries') }}</el-button> <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button> <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="info" @click="dialogFormVisibles=true;fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button> <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" /> <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="diaodu" class="mb-2" :inactive-text="$t('searchOrder.Schedulingswitch')" @change="handlediaodu" /> <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisibleaDownGlasss = true">{{ $t('searchOrder.Labelprinting') }} </el-button> <div id="dotClass"> <div>{{ $t('searchOrder.inkageEntity') }}</div> <i :style="{ marginTop: '2px', backgroundColor: inkageEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> @@ -1245,13 +1204,13 @@ <div style="width: 100%; height: calc(100% - 35px); overflow-y: auto;max-height: 420px;"> <el-table height="420px" ref="table" border :data="tableDatass" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="engineerId" align="center" :label="$t('Mounting.project')" min-width="140" /> <el-table-column prop="countTemp" align="center" :label="$t('searchOrder.totalfurnaces')" min-width="120" /> <el-table-column prop="countGlass" align="center" :label="$t('searchOrder.cagesnumber')" min-width="120" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="120" /> <el-table-column prop="fullTemp" align="center" :label="$t('searchOrder.fullfurnaces')" min-width="120" /> <el-table-column prop="countSlot" align="center" :label="$t('searchOrder.slotnumber')" min-width="120" /> <el-table-column prop="percent" align="center" :label="$t('searchOrder.progress')" min-width="120" /> <el-table-column fixed prop="engineerId" align="center" :label="$t('Mounting.project')" min-width="100" /> <el-table-column prop="countTemp" align="center" :label="$t('searchOrder.totalfurnaces')" min-width="68" /> <el-table-column prop="countGlass" align="center" :label="$t('searchOrder.cagesnumber')" min-width="82" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="70" /> <el-table-column prop="fullTemp" align="center" :label="$t('searchOrder.fullfurnaces')" min-width="82" /> <el-table-column prop="countSlot" align="center" :label="$t('searchOrder.slotnumber')" min-width="96" /> <el-table-column prop="percent" align="center" :label="$t('searchOrder.progress')" min-width="80" /> </el-table> </div> </el-card> @@ -1462,6 +1421,7 @@ </el-table-column> </el-table> </el-dialog> <!-- 钢化查询 --> <el-dialog v-model="dialogFormVisiblec" top="5vh" width="85%" :title="$t('searchOrder.temperingqueries')"> <div style="margin-bottom: 20px"> <el-form> @@ -1647,31 +1607,7 @@ <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" /> </el-table> </el-dialog> <el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')"> <el-table ref="table" style="margin-top: 20px;height: 300px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/> <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" /> <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')"> <template #default="{ row }"> <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/> </template> </el-table-column> <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')"> <template #default="{ row }"> <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/> </template> </el-table-column> </el-table> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> {{ $t('searchOrder.makesure') }} </el-button> <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button> </div> </template> </el-dialog> <!-- 非钢化 --> <el-dialog v-model="dialogFormVisibles" top="5vh" width="85%" :title="$t('searchOrder.searchlayout')"> <el-table ref="table" style="margin-top: 20px;height: 500px;" :data="tableDatas" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> @@ -1683,12 +1619,13 @@ <el-table-column prop="realCount" align="center" :label="$t('searchOrder.numbercages')" min-width="150" /> <el-table-column prop="lackCount" align="center" :label="$t('searchOrder.missingquantity')" min-width="150" /> <el-table-column prop="damageCount" align="center" :label="$t('searchOrder.breakquantity')" min-width="150" /> <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="250"> <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="500"> <template #default="scope"> <el-button size="mini" type="text" plain @click="brokee(scope.row,1)">{{ $t('searchOrder.specifytempering') }}</el-button> <el-button size="mini" type="text" plain @click="brokee(scope.row,0)">{{ $t('searchOrder.specifyout') }}</el-button> <el-button size="mini" type="text" plain @click="brokek(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button> <el-button size="mini" type="text" plain @click="handlelack(scope.row)">{{ $t('hellow.missingnumber') }}</el-button> <el-button size="mini" type="text" plain @click="handlecagedetails(scope.row)">{{ $t('searchOrder.cagedetails') }}</el-button> </template> </el-table-column> </el-table> @@ -1704,28 +1641,6 @@ </el-table-column> </el-table> --> </el-dialog> <el-dialog v-model="dialogFormVisibleaDownGlasss" top="2vh" width="97%" :title="$t('searchOrder.filminformation')"> <div style="display:flex;justify-content: space-around;"> <el-card style="display: flex; justify-content: center; align-items: center; width: 800px; height: 800px;position: relative;"> <div :style="{ width: scanGlass.width + 'px', height: scanGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (scanGlass.width > scanGlass.height ? scanGlass.width : scanGlass.height) + ')' }"> </div> <div style="font-size: 50px; text-align: center;position: absolute;top:0px;left:200px;"> <div>{{ $t('searchOrder.currentglassinformation') }}</div> <div> <el-button type="primary" @click="open1(scanGlass)">{{ $t('searchOrder.printlabels') }}</el-button> </div> <div>{{ scanGlass.flowCardId }}</div> <div>{{ scanGlass.layer }}</div> <div>{{ scanGlass.glassId }}</div> <div>{{ scanGlass.width }}</div> <div>{{ scanGlass.height }}</div> </div> </el-card> </div> </el-dialog> <el-dialog id="sizePrintCalrd1" v-model="dialogTableVisible1" destroy-on-close> <print-label id="printFlowCard" :printFlowCardId="printFlowCardId" :printLayer="printLayer" :printGlassId="printGlassId" style=""/> UI-Project/src/views/hollow/hollowequipment.vue
@@ -64,6 +64,7 @@ <el-table height="650" ref="table" :data="tableDataa" :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"> <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center"/> <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center"/> <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center"/> <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/> <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/> UI-Project/src/views/hollow/hollowequipmenttwo.vue
@@ -37,6 +37,7 @@ <el-table height="650" ref="table" :data="tableDataa" :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"> <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center"/> <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center"/> <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center"/> <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/> <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/> UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -12,7 +12,7 @@ const blindb = ref(false) const { t } = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') let socket = null; const rawGlassStorageDetailList = ref([]) const orderDTOS = ref([]) @@ -21,7 +21,7 @@ rawGlassStorageDetailList.value = data.rawGlassStorageDetailList[0] orderDTOS.value = data.orderDTOS[0] }; let socket1 = null; const edgOneTasks = ref([]) const edgTwoTasks = ref([]) @@ -43,10 +43,11 @@ } }; let socket2 = null; const temperingTaskType = ref([]) const temperingGlassInfoList = ref([]) const temperingGlassInfoOutList = ref([]) const socketUrl2 = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/largenScreen`; const handleMessage2 = (data) => { temperingTaskType.value = data.temperingTaskType[0]; @@ -55,10 +56,28 @@ numBoxes3.value =temperingTaskType.value; boxStart3(); } temperingGlassInfoOutList.value = data.temperingGlassInfoOutList[0]; if(numBoxes4.value !=temperingGlassInfoOutList.value){ numBoxes4.value =temperingGlassInfoOutList.value; boxStart3(); } }; let socket3 = null; const bigStorageCageUsage = ref([]) const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`; const handleMessage3 = (data) => { bigStorageCageUsage.value = data.bigStorageCageUsage[0]; }; let socket4 = null; const hollowBigStorageCageUsage = ref([]) const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`; const handleMessage4 = (data) => { hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0]; }; const tableDatad = ref([]); const patternUsage = async () => { try { @@ -80,24 +99,8 @@ thickness: '', films: '' }) // const tableDatac = ref([]); // const patternUsage = async () => { // try { // const response = await request.post('/glassStorage/rawGlassStorageDetails/patternUsage?width=' + ptnusage.value.width + '&height=' + ptnusage.value.height + '&thickness=' + ptnusage.value.thickness + '&films=' + ptnusage.value.films); // if (response.code == 200) { // ElMessage.success(response.message); // tableDatad.value = response.data; // } else { // ElMessage.error(response.message); // } // } // catch (error) { // console.error(error); // } // } // 点击下方弹窗 const handlehistorical = (row) => { blindb.value = true; @@ -108,10 +111,13 @@ boxStart(); boxStart2(); boxStart3(); boxStart4(); requestAnimationFrame(animate); socket = initializeWebSocket(socketUrl, handleMessage); socket1 = initializeWebSocket(socketUrl1, handleMessage1); socket2 = initializeWebSocket(socketUrl2, handleMessage2); socket3 = initializeWebSocket(socketUrl3, handleMessage3); socket4 = initializeWebSocket(socketUrl4, handleMessage4); const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟 const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟 // 设置时间范围为 [开始时间, 结束时间] @@ -125,29 +131,35 @@ closeWebSocket(socket); closeWebSocket(socket1); closeWebSocket(socket2); closeWebSocket(socket3); closeWebSocket(socket4); } }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); const numBoxes = ref(5); const numBoxes2 = ref(5); const numBoxes3 = ref(5); // 可动态修改的 div 数量 const numBoxes3 = ref(5); const numBoxes4 = ref(1); const speed = 0.1; const maxX = 200; // 终点X坐标 const maxY = -80; // 终点Y坐标 const maxY = -73; // 终点Y坐标 const maxX2 = 250; // 终点X坐标 const maxY2 = -165; // 终点Y坐标 const maxX3 = 100; // 终点X坐标 const maxY3 = -55; // 终点Y坐标 const maxY3 = -75; // 终点Y坐标 const maxX4 = 60; // 终点X坐标 const maxY4 = 0; // 终点Y坐标 const delayFrames = 600; // 每个 div 的延迟帧数 const boxes = ref([]); const boxes2 = ref([]); const boxes3 = ref([]); const boxes4 = ref([]); // 初始化 div 数据 const boxStart = () => { boxes.value = []; @@ -160,7 +172,7 @@ style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', backgroundColor: i % 2 === 0 ? '#911005' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } @@ -178,14 +190,14 @@ style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', backgroundColor: i % 2 === 0 ? '#911005' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const boxStart3 = () => { boxes3.value = []; for (let i = 0; i < numBoxes3.value; i++) { @@ -197,16 +209,34 @@ style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', backgroundColor: i % 2 === 0 ? '#911005' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const boxStart4 = () => { boxes4.value = []; for (let i = 0; i < numBoxes4.value; i++) { boxes4.value.push({ x: 0, y: 0, // 初始位置在底部 direction: 'right', delay: i * delayFrames, style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? '#911005' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const animate = () => { boxes.value.forEach((box) => { if (box.delay > 0) { @@ -228,13 +258,13 @@ box.direction = 'up'; } } box.style = { ...box.style, transform: `translate(${box.x}px, ${box.y}px)` }; }); boxes2.value.forEach((box) => { if (box.delay > 0) { box.delay--; @@ -260,7 +290,7 @@ transform: `translate(${box.x}px, ${box.y}px)` }; }); boxes3.value.forEach((box) => { if (box.delay > 0) { box.delay--; @@ -287,54 +317,86 @@ transform: `translate(${box.x}px, ${box.y}px)` }; }); boxes4.value.forEach((box) => { if (box.delay > 0) { box.delay--; return; } if (box.direction === 'right') { box.x += speed; if (box.x >= maxX4) { // box.y = 0; // 确保不会超出界限 box.x = 0; box.y = 0; // 重新回到底部 } } box.style = { ...box.style, transform: `translate(${box.x}px, ${box.y}px)` }; }); requestAnimationFrame(animate); }; </script> <template> <div style="height: 500px;"> <div class="awatch"> <div class="img-screen" alt="Screen"> <!-- 钢化色块 --> <div v-if="temperingGlassInfoList>0" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 228px;position: absolute;background-color: red;"></div> <div v-if="temperingGlassInfoList>1" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 284px;position: absolute;background-color: red;"></div> <div v-if="temperingGlassInfoList>0" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 228px;position: absolute;background-color: #911005;"></div> <div v-if="temperingGlassInfoList>1" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 284px;position: absolute;background-color: #911005;"></div> <!-- 切割台色块 --> <div v-if="engineeringOne.length>1" class="slicing" style="width: 50px;height: 22px;top: 575px;left: 453px;position: absolute;background-color: red;"></div> <div v-if="engineeringTwo.length>1" class="slicing" style="width: 50px;height: 22px;top: 625px;left: 453px;position: absolute;background-color: red;"></div> <div v-if="engineeringOne.length>1" class="slicing" style="width: 50px;height: 22px;top: 575px;left: 453px;position: absolute;background-color: #911005;"></div> <div v-if="engineeringTwo.length>1" class="slicing" style="width: 50px;height: 22px;top: 625px;left: 453px;position: absolute;background-color: #911005;"></div> <!-- 原片仓储色块 --> <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 31px;height: 47px;top: 610px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(8,17)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(8,17)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 31px;height: 13px;top: 675px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(18,20)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(18,20)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 31px;height: 22px;top: 657px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(21,25)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(21,25)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 31px;height: 9px;top: 561px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(26,27)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(26,27)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 31px;height: 9px;top: 612px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(28,29)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(28,29)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: #911005;"'></div> </div> <!-- 磨边色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 572px;left: 645px;border: 1px solid #000;position: absolute;"> <div class="container" style="position: relative;width: 20px;height: 20px;top: 572px;left: 648px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div> </div> <div class="container" style="position: relative;width: 20px;height: 20px;top: 625px;left: 700px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes2" :key="index" class="box1" :style="box.style"></div> <div v-for="(box, index) in boxes2" :key="index" class="box" :style="box.style"></div> </div> <!-- 钢化运动色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 438px;left: 196px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes3" :key="index" class="box1" :style="box.style"></div> <div v-for="(box, index) in boxes3" :key="index" class="box" :style="box.style"></div> </div> <!-- <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;background-color: red;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+item.remainQuantity+"px;height: 5px;background-color: red;"'></div> </div> --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 355px;left: 496px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes4" :key="index" class="box" :style="box.style"></div> </div> <!-- 钢化前大理片色块 --> <div class="container" v-for="(item,index) in bigStorageCageUsage.slice(0,1)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 447px;left: 314px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in bigStorageCageUsage.slice(1,2)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 463px;left: 314px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in bigStorageCageUsage.slice(2,3)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 478px;left: 314px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in bigStorageCageUsage.slice(3,4)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 493px;left: 314px;position: absolute;background-color: #911005;"'></div> <!-- 中空前大理片色块 --> <div class="container" v-for="(item,index) in hollowBigStorageCageUsage.slice(0,1)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 337px;left: 671px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in hollowBigStorageCageUsage.slice(1,2)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 353px;left: 671px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in hollowBigStorageCageUsage.slice(2,3)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 369px;left: 671px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in hollowBigStorageCageUsage.slice(3,4)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 385px;left: 671px;position: absolute;background-color: #911005;"'></div> <div class="container" v-for="(item,index) in hollowBigStorageCageUsage.slice(4,5)" :key="index" :style='"position: relative;width: "+(38*item.percentage/100)+"px;height: 13px;top: 401px;left: 671px;position: absolute;background-color: #911005;"'></div> </div> <div class="clickable-area" @click="handlehistorical" style="position: relative;width: 110px;height: 140px;top: 603px;left: 297px;"></div> @@ -445,19 +507,19 @@ line-height: 20px; margin-left: 100px; } #dta { display: block; float: left; line-height: 20px; margin-left: 80%; } #dialog-footer { text-align: center; margin-top: -15px; } #message { text-align: center; align-items: center; @@ -467,11 +529,11 @@ background-color: #337ecc; margin-left: 28%; } #awatch { height: 460px; } .img-screen { max-width: 48%; max-height: 100%; @@ -488,7 +550,7 @@ height: 0; padding-bottom: 50%; */ } .clickable-area { cursor: pointer; /* 指示这是一个可点击的区域 */ @@ -497,11 +559,11 @@ line-height: 95px; /* 如果需要,使文本垂直居中 */ } /* .awatch{ height: 460px; /* max-width: 100%; */ .box { transition: transform 0.016s linear; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java
@@ -1,8 +1,8 @@ package com.mes.opctask.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.mes.common.config.Const; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; @@ -126,7 +126,7 @@ //获取笼内的详情数据 List<EdgSlotRemainVO> edgSlotRemainVOS = edgStorageCageDetailsService.querySlotRemainWidth(cellLength, glassGap); //按照查询结果对笼内现有玻璃的格子尺寸进行更新 if (CollectionUtil.isNotEmpty(edgSlotRemainVOS)) { if(CollectionUtils.isNotEmpty(edgSlotRemainVOS)){ edgStorageCageService.resetSlotRemainWidth(edgSlotRemainVOS); } return Boolean.TRUE; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -12,6 +12,7 @@ import com.mes.bigstoragecagetask.entity.BigStorageTaskVO; import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; import com.mes.common.config.Const; import com.mes.engineering.entity.Engineering; import com.mes.glassinfo.service.GlassInfoService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; @@ -203,4 +204,27 @@ e.printStackTrace(); } } @Scheduled(fixedDelay = 1000) public void largenScreen() { JSONObject jsonObject = new JSONObject(); //理片笼使用情况 List<Map<String, Object>> bigStorageCageUsage = bigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("largenScreen is closed"); } } } } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/controller/RawGlassStorageTaskController.java
@@ -43,13 +43,13 @@ @ApiOperation("任务成功处理") @PostMapping("/taskSuccess") public Result<Boolean> taskSuccess(@RequestBody Long taskId) { public Result<Boolean> taskSuccess(Long taskId) { return Result.build(200, "查询成功", rawGlassStorageTaskService.taskSuccess(taskId)); } @ApiOperation("任务失败处理") @PostMapping("/taskError") public Result<Boolean> taskError(@RequestBody Long taskId) { public Result<Boolean> taskError(Long taskId) { return Result.build(200, "查询成功", rawGlassStorageTaskService.taskError(taskId)); } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -120,6 +120,14 @@ .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 按 engineerId 和 temperingLayoutId 分组 ); jsonObject.append("temperingGlassInfoList", temperingGlassInfoList.size()); //大屏钢化信息 List<TemperingGlassInfo> temperingGlassInfoOutList = temperingAgoService.list( new LambdaQueryWrapper<TemperingGlassInfo>() .select(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 选择要去重的字段 .eq(TemperingGlassInfo::getState, Const.TEMPERING_SUCCESS) .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 按 engineerId 和 temperingLayoutId 分组 ); jsonObject.append("temperingGlassInfoOutList", temperingGlassInfoOutList.size()); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -31,7 +31,7 @@ Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query); Map<String, FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query); List<FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query); Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId); hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -329,7 +329,7 @@ } @Override public Map<String, FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query) { public List<FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query) { List<HollowBigStorageCageDetails> detailsList = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) .like(StringUtils.isNotBlank(query.getFilmsId()), HollowBigStorageCageDetails::getFilmsId, query.getFilmsId()) @@ -339,7 +339,7 @@ ); if (CollectionUtil.isEmpty(detailsList)) { log.info("笼内无玻璃"); return new HashMap<>(); return null; } Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId)); List<FlowCardGlassInfoDTO> dtos = new ArrayList<>(); @@ -367,7 +367,8 @@ return dto1; // 返回合并后的对象 } )); return result; List<FlowCardGlassInfoDTO> resultList = new ArrayList<>(result.values()); return resultList; } @Override hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -64,16 +64,15 @@ public void hollowGlassTask() { List<HollowGlassOutRelationInfo> taskList = hollowGlassOutRelationInfoService.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>() .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START)); if (CollectionUtil.isEmpty(taskList)) { return; } JSONObject jsonObject = new JSONObject(); List<Long> taskIdList = taskList.stream().map(HollowGlassOutRelationInfo::getId).collect(Collectors.toList()); List<HollowGlassQueueInfo> list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>().in(HollowGlassQueueInfo::getRelationId, taskIdList)); Map<Integer, List<HollowGlassQueueInfo>> listMap = list.stream().collect(Collectors.groupingBy(HollowGlassQueueInfo::getCell)); jsonObject.append("930", listMap.get(930)); jsonObject.append("931", listMap.get(931)); jsonObject.append("932", listMap.get(932)); if (CollectionUtil.isNotEmpty(taskList)) { List<Long> taskIdList = taskList.stream().map(HollowGlassOutRelationInfo::getId).collect(Collectors.toList()); List<HollowGlassQueueInfo> list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>().in(HollowGlassQueueInfo::getRelationId, taskIdList)); Map<Integer, List<HollowGlassQueueInfo>> listMap = list.stream().collect(Collectors.groupingBy(HollowGlassQueueInfo::getCell)); jsonObject.append("930", listMap.get(930)); jsonObject.append("931", listMap.get(931)); jsonObject.append("932", listMap.get(932)); } try { //930空闲信号 ReadWriteEntity freeOneRequestEntity = miloService.readFromOpcUa("CMJ1.CMJ1.isFree"); @@ -205,8 +204,30 @@ //理片笼使用情况汇总 HollowBigStorageDetailsQueryVO hollowBigStorageDetailsQueryVO=new HollowBigStorageDetailsQueryVO(); Map<String, FlowCardGlassInfoDTO> bigStorageCageUsageSummary= hollowGlassRelationInfoService.queryHollowAllFlowCardSummary(hollowBigStorageDetailsQueryVO); List<FlowCardGlassInfoDTO> bigStorageCageUsageSummary= hollowGlassRelationInfoService.queryHollowAllFlowCardSummary(hollowBigStorageDetailsQueryVO); jsonObject.append("bigStorageCageUsageSummary", bigStorageCageUsageSummary); } @Scheduled(fixedDelay = 1000) public void largenScreen() { JSONObject jsonObject = new JSONObject(); //理片笼使用情况 List<Map<String, Object>> hollowBigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("hollowBigStorageCageUsage", hollowBigStorageCageUsage); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("largenScreen is closed"); } } } } }