UI-Project/config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/lang/zh.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/Caching/cachingbefore.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/Caching/cachingun.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/Slicecage/slicecage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/UnLoadGlass/Landingindication.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/largescreen/largescreen.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
UI-Project/config.js
@@ -1,6 +1,7 @@ export default { serverUrl: "10.153.19.150:88/api", // serverUrl: "192.168.1.199:88/api", serverUrl2: "10.153.19.150:88" // serverUrl2: "192.168.1.199:88" //serverUrl:"res.abeim.cn" } UI-Project/src/lang/zh.js
@@ -410,7 +410,7 @@ notstocked: '未入库', inboundstatus: '部分入库状态', allstatus: '全部入库状态', completedquantity: '完成数量', scrapquantity: '报废数量', } } UI-Project/src/views/Caching/cachingbefore.vue
@@ -104,7 +104,7 @@ </script> <template> <div> <div style="height: 500px;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" @@ -141,10 +141,9 @@ </el-table> </div> </el-card> </div> <div id="awatch"> <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> <div class="awatch"> <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> <div v-for="(rect, index) in adjustedRects" :key="rect" @@ -153,11 +152,9 @@ backgroundColor: '#409EFF' }" > </div> </div> <!-- <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -124px;margin-left: 480px;"></div> <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -30px;margin-left: 850px;"></div> <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: 30px;margin-left: 695px;"></div> --> </div> </div> </div> </template> @@ -178,9 +175,10 @@ background-color: #337ecc; margin-left: 28%; } #awatch{ .awatch{ height: 460px; width: 1500px; /* margin-top: -60px; */ max-width: 100%; } </style> </style> UI-Project/src/views/Caching/cachingun.vue
@@ -1,5 +1,5 @@ <template> <div> <div style="height: 500px;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" @@ -36,10 +36,9 @@ </el-table> </div> </el-card> </div> <div id="awatch"> <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> <div class="awatch"> <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> <div v-for="(rect, index) in adjustedRects" :key="rect" @@ -50,6 +49,7 @@ > </div> </div> </div> </div> </template> <script setup> @@ -245,9 +245,10 @@ background-color: #337ecc; margin-left: 28%; } #awatch{ .awatch{ height: 460px; width: 1500px; max-width: 100%; /* margin-top: -60px; */ } </style> UI-Project/src/views/Slicecage/slicecage.vue
@@ -23,6 +23,8 @@ const carPosition = ref([]) const adjustedRects = ref([]); const project = ref([]); const adjust = ref([]); const adjusta = ref([]); const adjustedRectsa = ref([]); const adjustedRectsb = ref([]); const adjustedRectsc = ref([]); @@ -30,6 +32,7 @@ const adjustedRectse = ref([]); const adjustedRectsf = ref([]); const adjustedRectsg = ref([]); const adjustedRectsh = ref([]); const currentRow = reactive({}); // 当前行的数据 const add = ref(false) const flowCardId = ref(''); @@ -64,6 +67,7 @@ const cell6=ref(true); const cell7=ref(true); const cell8=ref(true); const cell9=ref(true); const selectedRow = ref(null); // 存储选中的行数据 @@ -124,7 +128,11 @@ } return index; } function jumpToPage(page: number) { if (page >= 1 && page <= totalPages.value) { currentPage.value = page; } } // 上一页和下一页方法 const prevPage = () => { if (currentPage.value > 1) { @@ -463,14 +471,21 @@ // 更新 tableData 的数据 tableDatac.value = data.bigStorageCageDetailsOutTask[0] tableDatad.value = data.bigStorageCageDetailsFeedTask[0] // adjust.value = data.bigStorageCageDetailsFeedTask[0].map(rect => ({ // ...rect, // })); adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); adjust.value = data.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); // const adjust = computed(() => { // return data.value.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); // }); tableData.value = data.bigStorageCageInfo[0] tableDatab.value = data.temperingGlassInfoList[0] tableDatae.value = data.bigStorageCageUsage[0] carPosition.value = data.carPostion[0] console.log(carPosition.value); window.localStorage.setItem('length', data.data.bigStorageCageInfos[0][1].length) window.localStorage.setItem('length', data.bigStorageCageInfos[0][1].length) let length = window.localStorage.getItem('length') adjustedRects.value = data.data.bigStorageCageInfos[0][1].map(rect => ({ adjustedRects.value = data.bigStorageCageInfos[0][1].map(rect => ({ ...rect, height: 20/length, top: 29/length @@ -506,6 +521,11 @@ top: 29/length })); adjustedRectsg.value = data.bigStorageCageInfos[0][8].map(rect => ({ ...rect, height: 20/length, top: 29/length })); adjustedRectsh.value = data.bigStorageCageInfos[0][9].map(rect => ({ ...rect, height: 20/length, top: 29/length @@ -581,7 +601,7 @@ <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;"> <el-table height="100%" ref="table" :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="100" /> <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" :label="$t('searchOrder.trips')" min-width="120" /> @@ -594,9 +614,9 @@ <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/> <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/> <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/> <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="100"/> <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120"/> <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/> <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="100"/> <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="140"/> <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/> <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="100"/> <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="100"/> @@ -662,16 +682,38 @@ <!-- // 父级框 --> <div class="img-dlpl" > <div class="img-car1" :style="'z-index:999;left:247px;top:' + 350*carPosition[0] + 'px;position:absolute;'"> <div v-show="cellshow1" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div> <div v-for="(rect, index) in adjusta" :key="rect.id" :style="{ width: '30px', height: '5px', backgroundColor: '#409EFF', marginLeft: index * 5+ `px`, top: '10px', }" > </div> </div> <div class="img-car4" :style="'z-index:999;left:704px;top:' + 350*carPosition[1] + 'px;position:absolute;'"> <div v-show="cellshow4" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div> <div v-for="(rect, index) in adjust" :key="rect.id" :style="{ width: '30px', height: '5px', backgroundColor: '#409EFF', marginLeft: index * 5+ `px`, top: '10px', }" > </div> </div> <div style="position: relative;"> <div v-show="cell1" style="width: 227px;height: 29px;position: relative;top:55px;left: 465px;"> <div v-for="(rect, index) in adjustedRects" :key="rect.id" :key="rect" :style="{ // display:'flex', @@ -915,6 +957,37 @@ </div> </div> </div> <div v-show="cell9" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;"> <div v-for="(rect, index) in adjustedRectsh" :key="rect.id" :style="{ // display:'flex', position: 'absolute', width: '227px', // backgroundColor: 'red', left: '0px', top: index*rect.top+`px`, height: `${rect.height}px`, }" > <div v-for="(rects, index) in rect.bigStorageCageDetails" :key="rects" :style="{ float:'left', width: '18px', height: `${rect.height}px`, backgroundColor: '#911005', // border:'1px solid black', top: '0px', marginRight: rects.gap/5000*227+'px' }" > </div> </div> </div> </div> </div> </div> @@ -983,7 +1056,7 @@ </el-table> </div> </el-dialog> <el-dialog v-model="dialogFormVisiblea" top="5vh" width="97%" :title="$t('searchOrder.cageinformation')"> <el-dialog v-model="dialogFormVisiblea" top="2vh" width="97%" :title="$t('searchOrder.cageinformation')"> <el-table :data="paginatedUsers" @row-click="handleRowClick" @@ -1004,9 +1077,9 @@ :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" > <!-- <el-table-column prop="menuName" label="二级菜单栏" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/> --> <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="90"/> <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="110" /> <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="120" /> <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="130"/> <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="130" /> <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" /> <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> @@ -1073,7 +1146,16 @@ <div style="margin-top: 20px; text-align: center;"> <!-- 上一页按钮 --> <el-button @click="prevPage" :disabled="currentPage === 1">{{ $t('searchOrder.up') }}</el-button> <div style="display: inline-block; margin: 0 20px;"> <el-button v-for="page in totalPages" :key="page" :class="{ 'is-active': currentPage === page }" @click="jumpToPage(page)" > {{ page }} </el-button> </div> <!-- 下一页按钮 --> <el-button @click="nextPage" :disabled="currentPage >= totalPages">{{ $t('searchOrder.down') }}</el-button> @@ -1250,6 +1332,7 @@ position:relative } .img-car1{ display: flex; background-image:url('../../assets/lp.png'); position: absolute; background-repeat: no-repeat; @@ -1262,6 +1345,7 @@ position:relative } .img-car4{ display: flex; background-image:url('../../assets/lpa.png'); position: absolute; background-repeat: no-repeat; UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -171,8 +171,7 @@ Swal.fire({ // title: '玻璃信息', title: this.$t('reportWork.glassinformation'), // title: "$t('reportWork.glassinformation')", title: t('reportWork.glassinformation'), html: tableContent, customClass: { popup: 'format-pre' @@ -199,7 +198,7 @@ <style scoped> .glass-rack { margin-left: 20px; /* margin-left: 10px; */ width: 500px; margin-top: 5px; } UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -167,7 +167,7 @@ tableContent += '</table>'; Swal.fire({ title: "$t('reportWork.glassinformation')", title: t('reportWork.glassinformation'), // title: '玻璃信息', html: tableContent, customClass: { @@ -193,9 +193,9 @@ <style scoped> .glass-rack { margin-left: 20px; /* margin-left: 20px; */ width: 500px; margin-top: 10px; margin-top: 5px; } .rack-rect:hover { cursor: pointer; UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,10 +1,8 @@ <script setup> import {Search} from "@element-plus/icons-vue"; import {reactive, onMounted, onBeforeUnmount} from "vue"; import {useRouter} from "vue-router" const router = useRouter() import { useI18n } from 'vue-i18n' const { t } = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') @@ -39,7 +37,6 @@ fetchFlowCardId(); dialogFormVisiblea.value = true; // 打开绑定架子对话框 }; //获取流程卡号 const fetchFlowCardId = async () => { try { @@ -59,7 +56,6 @@ } }; //确认 const handleConfirm = async () => { try { const firstPart = flowCardId.value.split('|')[0].trim(); // @@ -68,9 +64,7 @@ workstationId: workstationId.value, flowCardId: firstPart, layer:twoPart }); console.log(response) if (response.code == 200) { // 绑定成功,处理逻辑 @@ -88,16 +82,12 @@ console.error(error); } }; const updatePageData = () => { // 假设你的页面上有一个名为 tableData 的 Vue 组件 // 你可以直接更新 tableData 的数据 fetchTableData() // 使用 $forceUpdate() 强制更新组件 }; const handleBindRack2 = (row) => { workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名 dialogFormVisiblea2.value = true; // 打开绑定架子对话框 @@ -129,8 +119,6 @@ dialogFormVisiblea2.value = false; } }; // 发送获取表格数据的请求 const fetchTableData = async () => { try { @@ -151,52 +139,38 @@ ElMessage.error('获取表格数据失败,请重试'); } }; const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 tableData.splice(0, tableData.length, ...data.params[0]); // console.log("更新后数据", data.params[0]); }; // 初始化 WebSocket,并传递消息处理函数 onMounted(() => { fetchFlowCardId(); fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); // beforeUnmount(() => { // closeWebSocket(); // }); // setInterval(fetchTableData, 2000) </script> <template> <div> <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading"> <div style="height: 500px;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;"> <el-table height="100%" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" /> <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" /> <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="120" /> <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" /> <el-table-column prop="totalquantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" /> <el-table-column prop="racksnumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" /> <el-table-column prop="layer" align="center" label="层数" min-width="120" /> @@ -222,7 +196,22 @@ </el-table> </div> </el-card> <!-- workstationId: '1', workstationId: '1005', flowCardId: '183.6', totalquantity: '1991', racksnumber:"1", work_state: '待识别', --> <div style="display: flex;" class="awatch"> <div id="main-body"> <Landingindication></Landingindication> </div> <div id="main-bodya"> <Landingindicationtwo></Landingindicationtwo> </div> </div> </div> <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')"> <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;"> @@ -248,12 +237,7 @@ </div> </template> </el-dialog> <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" :title="$t('reportWork.clearglass')"> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleclear"> @@ -263,26 +247,8 @@ </div> </template> </el-dialog> <!-- workstationId: '1', workstationId: '1005', flowCardId: '183.6', totalquantity: '1991', racksnumber:"1", work_state: '待识别', --> </div> <div style="display: flex;"> <div id="main-body"> <Landingindication></Landingindication> </div> <div id="main-bodya"> <Landingindicationtwo></Landingindicationtwo> </div></div> </template> <style scoped> #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} #dialog-footer{ @@ -298,15 +264,15 @@ background-color: #337ecc; margin-left: 28%; } #awatch{ height: 450px; .awatch{ max-width: 100%; } #main-body{ margin-top: -20px; margin-left: 200px; margin-top: -40px; margin-left: 150px; } #main-bodya{ margin-top: -10px; margin-top: -40px; margin-left: 100px; } </style> UI-Project/src/views/largescreen/largescreen.vue
@@ -1,107 +1,105 @@ <template> <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> <el-scrollbar height="600px"> <div id="top" style="height: 150px;display: flex;"> <div v-for="(rect, index) in adjustedRects" :key="index" :style="{ width: '1000px', height: '100px',margin: '5px',}"> <div ref="setChartDom(index, $el)" style="width: 100%; height: 100%;"></div> <div style="text-align: center;"> {{ rect.thisProcess }}</div> </div> </div> <div style="display: flex;"> <div id="centerleft" style="margin-top: 10px;height: 240px;width: 340px;background-color: #911005;"> <el-table height="240" ref="table" width="340px" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column fixed prop="orderId" align="center" :label="$t('large.number')" min-width="110" /> <el-table-column prop="project" align="center" :label="$t('large.projectname')" min-width="100" /> <el-table-column prop="responsibleProcess" align="center" :label="$t('large.responsibleprocess')" min-width="100" /> <el-table-column prop="breakageQuantity" align="center" :label="$t('large.numberfractions')" min-width="110" /> <el-table-column prop="patchProcesses" align="center" :label="$t('large.process')" min-width="100" /> <el-table-column fixed="right" :label="$t('large.operate')" align="center" width="100"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBinda">{{ $t('large.mes') }}</el-button> </template> </el-table-column> </el-table> </div> <div id="center" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 750px;"> <img src="../../assets/d1.png" alt="" style="margin-left: -30px; width: 110%;height: 100%;position: relative;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> <el-scrollbar height="600px"> <div id="top" style="height: 150px;display: flex;"> <div class="echarts-container"> <div v-for="(processData, index) in processesData" :key="index" class="echarts-item"> <div :id="'pieChart_' + index" class="pie-chart"></div> </div> <div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;"> <el-table height="240" ref="table" width="340px" @selection-change="handleSelectionChange" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="projectNo" align="center" :label="$t('large.projectnumber')" min-width="50" /> <el-table-column prop="projectName" align="center" :label="$t('large.projectname')" min-width="50" /> </el-table> </div> </div> </div> <div style="display: flex;"> <div id="centerleft" style="margin-top: 10px;height: 240px;width: 340px;background-color: #911005;"> <el-table height="240" ref="table" width="340px" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column fixed prop="orderId" align="center" :label="$t('large.number')" min-width="110" /> <el-table-column prop="project" align="center" :label="$t('large.projectname')" min-width="100" /> <el-table-column prop="responsibleProcess" align="center" :label="$t('large.responsibleprocess')" min-width="100" /> <el-table-column prop="breakageQuantity" align="center" :label="$t('large.numberfractions')" min-width="110" /> <el-table-column prop="patchProcesses" align="center" :label="$t('large.process')" min-width="100" /> <el-table-column fixed="right" :label="$t('large.operate')" align="center" width="100"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBinda">{{ $t('large.mes') }}</el-button> </template> </el-table-column> </el-table> </div> <div id="center" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 750px;"> <img src="../../assets/d1.png" alt="" style="margin-left: -30px; width: 110%;height: 100%;position: relative;"> </div> <div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;"> <el-table height="240" ref="table" width="340px" @selection-change="handleSelectionChange" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="projectNo" align="center" :label="$t('large.projectnumber')" min-width="50" /> <el-table-column prop="projectName" align="center" :label="$t('large.projectname')" min-width="50" /> </el-table> </div> </div> <div id="bottom" style="margin-top: 10px;height: 190px;background-color: #911005;"> <el-table height="190" ref="table" @selection-change="handleSelectionChange" :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" /> <el-table-column prop="customerName" align="center" :show-overflow-tooltip="true" :label="$t('large.customerName')" min-width="90" /> <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" /> <el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" /> <el-table-column align="center" :label="$t('large.warehousing')" min-width="50" prop="warehousing" > <template #default="scope"> <el-tag :type="getStatusType(scope.row.warehousing)"> {{ getStatusText(scope.row.warehousing) }} </el-tag> </template> </el-table-column> <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="50" /> </el-table> <el-table height="190" ref="table" @selection-change="handleSelectionChange" :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" /> <el-table-column prop="customerName" align="center" :show-overflow-tooltip="true" :label="$t('large.customerName')" min-width="90" /> <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" /> <el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" /> <el-table-column align="center" :label="$t('large.warehousing')" min-width="50" prop="warehousing" > <template #default="scope"> <el-tag :type="getStatusType(scope.row.warehousing)"> {{ getStatusText(scope.row.warehousing) }} </el-tag> </template> </el-table-column> <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="50" /> </el-table> </div> </el-scrollbar> </el-card> <el-dialog v-model="blinda" top="10vh" width="80%" :title="$t('large.brokeno')"> <el-table height="500" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="reportingWorkTime" fixed align="center" :label="$t('large.time')" min-width="110" /> <el-table-column prop="orderId" fixed align="center" :label="$t('large.number')" min-width="110" /> <el-table-column prop="reportingWorkId" align="center" :label="$t('large.jobnumber')" min-width="120" /> <el-table-column prop="productionId" align="center" :label="$t('large.productionnumber')" min-width="130" /> <el-table-column prop="processId" align="center" :label="$t('large.cardnumber')" min-width="140" /> <el-table-column prop="project" align="center" :label="$t('large.projectname')" min-width="110" /> <el-table-column prop="batch" align="center" :label="$t('large.batch')" min-width="110" /> <el-table-column prop="reviewer" align="center" :label="$t('large.detailID')" min-width="110" /> <el-table-column prop="orderSort" align="center" :label="$t('large.serialnumber')" min-width="110" /> <el-table-column prop="productName" align="center" :label="$t('large.productname')" :show-overflow-tooltip="true" min-width="220" /> <el-table-column prop="technologyNumber" align="center" :label="$t('large.serial')" min-width="110" /> <el-table-column prop="glassAddress" align="center" :label="$t('large.slicemarker')" min-width="130" /> <el-table-column prop="patchNum" align="center" :label="$t('large.numberpatches')" min-width="110" /> <el-table-column prop="width" align="center" :label="$t('large.width')" min-width="110" /> <el-table-column prop="height" align="center" :label="$t('large.height')" min-width="110" /> <el-table-column prop="shape" align="center" :label="$t('large.shape')" min-width="110" /> <el-table-column prop="responsibleProcess" align="center" :label="$t('large.responsibleprocess')" min-width="110" /> <el-table-column prop="patchProcesses" align="center" :label="$t('large.process')" min-width="110" /> <el-table-column prop="breakageQuantity" align="center" :label="$t('large.numberfractions')" min-width="110" /> <el-table-column prop="patchReason" align="center" :label="$t('large.breakreason')" min-width="110" /> <el-table-column prop="patchType" align="center" :label="$t('large.breaktype')" min-width="110" /> <el-table-column prop="responsiblePersonnel" align="center" :label="$t('large.responsiblepersonnel')" min-width="110" /> <el-table-column prop="responsibleEquipment" align="center" :label="$t('large.responsiblequipment')" min-width="110" /> <el-table-column prop="responsibleTeam" align="center" :label="$t('large.responsibleteam')" min-width="110" /> <el-table-column prop="patchArea" align="center" :label="$t('large.area')" min-width="110" /> <el-table-column prop="qualityInspector" align="center" :label="$t('large.inspector')" min-width="110" /> </el-table> <template #footer> <div id="dialog-footer"> <el-button @click="blinda = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> </el-scrollbar> </el-card> <el-dialog v-model="blinda" top="5vh" width="80%" :title="$t('large.brokeno')"> <el-table height="400" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="reportingWorkTime" fixed align="center" :label="$t('large.time')" min-width="110" /> <el-table-column prop="orderId" fixed align="center" :label="$t('large.number')" min-width="110" /> <el-table-column prop="reportingWorkId" align="center" :label="$t('large.jobnumber')" min-width="120" /> <el-table-column prop="productionId" align="center" :label="$t('large.productionnumber')" min-width="130" /> <el-table-column prop="processId" align="center" :label="$t('large.cardnumber')" min-width="140" /> <el-table-column prop="project" align="center" :label="$t('large.projectname')" min-width="110" /> <el-table-column prop="batch" align="center" :label="$t('large.batch')" min-width="110" /> <el-table-column prop="reviewer" align="center" :label="$t('large.detailID')" min-width="110" /> <el-table-column prop="orderSort" align="center" :label="$t('large.serialnumber')" min-width="110" /> <el-table-column prop="productName" align="center" :label="$t('large.productname')" :show-overflow-tooltip="true" min-width="220" /> <el-table-column prop="technologyNumber" align="center" :label="$t('large.serial')" min-width="110" /> <el-table-column prop="glassAddress" align="center" :label="$t('large.slicemarker')" min-width="130" /> <el-table-column prop="patchNum" align="center" :label="$t('large.numberpatches')" min-width="110" /> <el-table-column prop="width" align="center" :label="$t('large.width')" min-width="110" /> <el-table-column prop="height" align="center" :label="$t('large.height')" min-width="110" /> <el-table-column prop="shape" align="center" :label="$t('large.shape')" min-width="110" /> <el-table-column prop="responsibleProcess" align="center" :label="$t('large.responsibleprocess')" min-width="110" /> <el-table-column prop="patchProcesses" align="center" :label="$t('large.process')" min-width="110" /> <el-table-column prop="breakageQuantity" align="center" :label="$t('large.numberfractions')" min-width="110" /> <el-table-column prop="patchReason" align="center" :label="$t('large.breakreason')" min-width="110" /> <el-table-column prop="patchType" align="center" :label="$t('large.breaktype')" min-width="110" /> <el-table-column prop="responsiblePersonnel" align="center" :label="$t('large.responsiblepersonnel')" min-width="110" /> <el-table-column prop="responsibleEquipment" align="center" :label="$t('large.responsiblequipment')" min-width="110" /> <el-table-column prop="responsibleTeam" align="center" :label="$t('large.responsibleteam')" min-width="110" /> <el-table-column prop="patchArea" align="center" :label="$t('large.area')" min-width="110" /> <el-table-column prop="qualityInspector" align="center" :label="$t('large.inspector')" min-width="110" /> </el-table> <template #footer> <div id="dialog-footer" style="text-align: center;"> <el-button @click="blinda = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> </template> <script setup> import { Delete, Upload } from '@element-plus/icons-vue' @@ -124,188 +122,147 @@ let chartInstance = null; const blinda = ref(false) const handleBinda = (row) => { blinda.value = true; blinda.value = true; }; const processesData = ref([ ]); function getStatusType(warehousing) { switch (warehousing) { case 0: return 'info'; case 1: return 'warning'; case 2: return 'success'; } switch (warehousing) { case 0: return 'info'; case 1: return 'warning'; case 2: return 'success'; } } function getStatusText(warehousing) { switch (warehousing) { case 0: return t('large.notstocked'); case 1: return t('large.inboundstatus'); case 2: return t('large.allstatus'); } switch (warehousing) { case 0: return t('large.notstocked'); case 1: return t('large.inboundstatus'); case 2: return t('large.allstatus'); } } const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`; const handleMessage = (data) => { tableData.value = data.awaitingRepairs[0] tableDatab.value = data.DoingTask[0] tableDatac.value = data.orders[0] // adjustedRects.value = data.device[0].map(rect => ({ // ...rect, // completed: rect.completedQuantity, // breakage: rect.breakageQuantity, // thisProcess: rect.thisProcess, // })); tableData.value = data.awaitingRepairs[0] tableDatab.value = data.DoingTask[0] tableDatac.value = data.orders[0] // adjustedRects.value = data.device[0].map(rect => ({ // ...rect, // completed: rect.completedQuantity, // breakage: rect.breakageQuantity, // thisProcess: rect.thisProcess, // })); }; let socket; // 设置图表 DOM 引用 function setChartDom(index, el) { if (!chartRefs.value[index]) { chartRefs.value[index] = { dom: el, chart: null }; } else { chartRefs.value[index].dom = el; } if (!chartRefs.value[index]) { chartRefs.value[index] = { dom: el, chart: null }; } else { chartRefs.value[index].dom = el; } } onMounted(() => { socket = new WebSocket(socketUrl); socket.onmessage = (event) => { const data = JSON.parse(event.data); adjustedRects.value = data.device[0].map(rect => ({ ...rect, completedQuantity: rect.completedQuantity, breakageQuantity: rect.breakageQuantity, thisProcess: rect.thisProcess, })); console.log(adjustedRects.value); // updateCharts(); }; adjustedRects.value.forEach((rect, index) => { initChart(index, rect); }); // }; socket = new WebSocket(socketUrl); socket.onmessage = (event) => { const data = JSON.parse(event.data); processesData.value = data.device[0].map(rect => ({ ...rect, completedQuantity: rect.completedQuantity, breakageQuantity: rect.breakageQuantity, thisProcess: rect.thisProcess, })); renderPieCharts(); console.log(processesData.value); // updateCharts(); }; // }; }); function initChart(index, rect) { const { dom } = chartRefs.value[index] || { dom: null }; if (dom) { const chart = echarts.init(dom); const option = { tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left', }, series: [ { name: '饼状图', type: 'pie', radius: ['50%','70%'], data: [ {value: rect.completedQuantity, name: '加工数量'}, {value: rect.breakageQuantity, name: '次破数量'}, console.log(rect.breakageQuantity) ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; chart.setOption(option); chartRefs.value[index] = { ...chartRefs.value[index], chart }; const renderPieCharts = () => { processesData.value.forEach((data, index) => { const chart = echarts.init(document.getElementById('pieChart_' + index)); const options = { title: { text: `${data.thisProcess} `, left: 'center', }, tooltip: { trigger: 'item', }, series: [ { name: `${data.thisProcess} `, type: 'pie', radius: ['40%', '70%'], avoidLabelOverlap: false, data: [ { value: data.completedQuantity, name: t('large.completedquantity') }, { value: data.breakageQuantity, name: t('large.scrapquantity') } ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } }, label: { show: false, position: 'center', }, labelLine: { show: false }, } ] }; } console.log(chartRefs.value[index]); } // 更新图表 // function updateCharts() { // adjustedRects.value.forEach((rect, index) => { // const { chart } = chartRefs.value[index] || { chart: null }; // if (chart) { // chart.setOption({ // series: [{ // data: [ // { value: rect.completedQuantity, name: '加工数量' }, // { value: rect.breakageQuantity, name: '次破数量' }, // ], // }], // }); // } // }); // } // 初始化图表 // function initChart(index, rect) { // const chartDom = ref(`chartDom${index}`).value; // console.log(ref(`chartDom${index}`).value); // const chart = echarts.init(chartDom); // const option = { // tooltip: { // trigger: 'item' // }, // legend: { // orient: 'vertical', // left: 'left', // }, // series: [ // { // name: '饼状图', // type: 'pie', // radius: ['50%','70%'], // data: [ // {value: rect.completed, name: '加工数量'}, // {value: rect.breakage, name: '次破数量'}, // ], // emphasis: { // itemStyle: { // shadowBlur: 10, // shadowOffsetX: 0, // shadowColor: 'rgba(0, 0, 0, 0.5)' // } // } // } // ] // }; // chart.setOption(option); // } // 清理 WebSocket 连接 chart.setOption(options); }); }; onUnmounted(() => { socket.close(); socket.close(); }); onMounted(() => { // fetchFlowCardId(); // fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); // fetchFlowCardId(); // fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); console.log("关闭了") closeWebSocket(); }); </script> <style scoped> .rect { border: 1px solid black; /* 设置矩形的边框 */ /* background-color: lightblue; 设置矩形的背景色 */ } .centered-text { /* 设置文字居中样式 */ display: flex; justify-content: center; align-items: center; height: 100%; /* 确保div占据整个矩形的高度 */ } #dialog-footer{ text-align: center; margin-top: -15px; .echarts-container { display: flex; flex-wrap: wrap; gap: 20px; } .echarts-item { width: 150px; height: 150px; margin: 20px; } .pie-chart { width: 100%; height: 100%; } </style>