From fb86bd1a73bb18ba1e947b76382283d27e3d5e95 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期五, 27 十二月 2024 00:00:26 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- UI-Project/src/views/Caching/cachingun.vue | 393 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 310 insertions(+), 83 deletions(-) diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue index 334ccf1..62100c6 100644 --- a/UI-Project/src/views/Caching/cachingun.vue +++ b/UI-Project/src/views/Caching/cachingun.vue @@ -1,5 +1,5 @@ <script setup> -import {onBeforeUnmount, onMounted, onUnmounted, ref} from "vue"; +import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive} from "vue"; import {useRouter} from "vue-router" import {host, WebSocketHost} from '@/utils/constants' import request from "@/utils/request" @@ -10,7 +10,14 @@ let language = ref(localStorage.getItem('lang') || 'zh') const tableDataa = ref([]) const tableDatab = ref([]) +const tableDatad = ref([]) const adjustedRects = ref([]); +const selectValuesa = reactive([]); +const timeRange = ref([]) +const taskState = ref('') +const taskType = ref('') +const glassId = ref('') +const blindb = ref(false) let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassTwo`; const handleMessage = (data) => { @@ -33,40 +40,194 @@ onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); }); -function getStatusTypea(taskRunning) { - switch (taskRunning) { - case 0: - return 'info'; +// 鍘嗗彶浠诲姟 +const handlehistorical = (row) => { + blindb.value = true; + historical() +}; +// 鍘嗗彶浠诲姟 +const historical = async () => { + try { + var url="/cacheGlass/edgStorageDeviceTaskHistory?deviceId="+2 + "&startTime=" + '' + "&endTime=" + '' + "&glassId=" + '' + "&taskState=" + '' + "&taskType=" + ''; + const response = await request.get(url) + if (response.code == 200) { + ElMessage.success(response.message); + tableDatad.value = response.data; + } else { + ElMessage.error(response.message); + } +} +catch (error) { + console.error(error); + } +} +const sethistorical = async () => { + try { + const params = { + deviceId: 2, + startTime: timeRange.value[0] || '', + endTime: timeRange.value[1] || '', + glassId: glassId.value || '', + taskState: taskState.value || '', + taskType: taskType.value || '' + }; + + // 鏋勫缓鏌ヨ瀛楃涓� + const queryString = new URLSearchParams(params).toString(); + const url = `/cacheGlass/edgStorageDeviceTaskHistory?${queryString}`; + const response = await request.get(url) + if (response.code == 200) { + ElMessage.success(response.message); + tableDatad.value = response.data; + } else { + ElMessage.error(response.message); + } +} +catch (error) { + console.error(error); + } +} +// 鐮存崯 + const handletake = async(row) => { + try { + const confirmResult = await ElMessageBox.confirm( + t('workOrder.messagedamaged'), + t('workOrder.prompt'), + { + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), + type: 'warning', + } + ); + if (confirmResult === 'confirm') { + const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { + glassId: row.glassId, + state: 8, + line: 2, + workingProcedure: '鐞嗙墖绗�', + }) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + ElMessage.error(response.msg); + } + } + } catch (error) { + console.error('鍙戠敓閿欒:', error); + } +}; +// 鎷胯蛋 + const handleBindRack = async(row) => { + try { + const confirmResult = await ElMessageBox.confirm( + t('workOrder.takemessage'), + t('workOrder.prompt'), + { + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), + type: 'warning', + } + ); + if (confirmResult === 'confirm') { + const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { + glassId: row.glassId, + state: 9, + line: 2, + workingProcedure: '鐞嗙墖绗�', + }) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + ElMessage.error(response.msg); + } + } + } catch (error) { + console.error('鍙戠敓閿欒:', error); + } +}; + // 鍒犻櫎 + const handledelete = async(row) => { + try { + const confirmResult = await ElMessageBox.confirm( + t('searchOrder.deletemessage'), + t('searchOrder.prompt'), + { + confirmButtonText: t('searchOrder.yes'), + cancelButtonText: t('searchOrder.cancel'), + type: 'warning', + } + ); + if (confirmResult === 'confirm') { + const response = await request.post("/cacheGlass/edgStorageCageDetails/removeEdgDetails",{ + glassId: row.glassId + }) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + ElMessage.error(response.message); + } + } + } catch (error) { + console.error('鍙戠敓閿欒:', error); + } +}; +const rowClassName = ({ row }) => { + // 鏍规嵁 enableState 璁剧疆琛岀殑 CSS 绫� + return row.slot % 2 === 0 ? 'success-row' : ''; +}; +// 鏍峰紡閮ㄥ垎 +const styles = ` + .success-row { + --el-table-tr-bg-color: var(--el-color-info-light-9); + } +`; +// 鍔ㄦ�佹坊鍔犳牱寮忓埌缁勪欢 +const styleElement = document.createElement('style'); +styleElement.textContent = styles; +document.head.appendChild(styleElement); + +const optionsa = [ + { + value: 0, + label: t('searchOrder.empty'), + }, + { + value: 1, + label: t('searchOrder.endtask'), + } +] +const optionsb = [ + { + value: 1, + label: t('sorter.advancetask'), + }, + { + value: 2, + label: t('sorter.outputtasks'), + }, + { + value: 3, + label: t('sorter.straighttasks'), + } +] +function getStatusTypea(taskType) { + switch (taskType) { case 1: - return 'success'; + return 'info'; case 2: return 'success'; case 3: - return 'success'; - case 4: - return 'success'; - case 5: return 'danger'; - case 6: - return 'info'; } } -function getStatusTexta(taskRunning) { - switch (taskRunning) { - case 0: - return t('sorter.emptymissions'); +function getStatusTexta(taskType) { + switch (taskType) { case 1: return t('sorter.advancetask'); case 2: return t('sorter.outputtasks'); case 3: return t('sorter.straighttasks'); - case 4: - return t('searchOrder.infilm'); - case 5: - return t('sorter.endingtask'); - case 6: - return t('sorter.another'); } } function getStatusTypeb(taskState) { @@ -75,34 +236,14 @@ return 'info'; case 1: return 'success'; - case 2: - return 'success'; - case 3: - return 'success'; - case 4: - return 'success'; - case 5: - return 'danger'; - case 6: - return 'info'; } } function getStatusTextb(taskState) { switch (taskState) { case 0: - return t('sorter.emptymissions'); + return t('searchOrder.empty'); case 1: - return t('sorter.advancetask'); - case 2: - return t('sorter.outputtasks'); - case 3: - return t('sorter.straighttasks'); - case 4: - return t('searchOrder.infilm'); - case 5: - return t('sorter.endingtask'); - case 6: - return t('sorter.another'); + return t('searchOrder.endtask'); } } // 鏍煎紡鍖栨椂闂存埑涓哄勾鏈堟棩鏃堕棿瀛楃涓茬殑鍑芥暟 @@ -129,18 +270,22 @@ </script> <template> <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="300" ref="table" - @selection-change="handleSelectionChange" - :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="id" align="center" :label="$t('sorter.id')" min-width="80" /> - <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="80" /> - <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" /> + <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" v-loading="loading"> + <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handlehistorical" type="primary">{{ $t('searchOrder.historicaltasks') }}</el-button> + <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> + <el-table + ref="table" + style="margin-top: 20px; height: 360px;" + :data="tableDataa" + :row-class-name="rowClassName" + :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" + row-key="id" + > + <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="10" /> <el-table-column align="center" :label="$t('sorter.startstatus')" - min-width="80" + min-width="10" prop="enableState" > <template #default="scope"> @@ -151,42 +296,37 @@ </el-tag> </template> </el-table-column> - <el-table-column prop="remainWidth" align="center" :label="$t('sorter.remainWidth')" min-width="80" /> - </el-table> - </div> + <el-table-column> + <template #default="props"> + <el-table + :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" + :data="props.row.details" style="width: 100%;height: 200px;"> + <el-table-column prop="engineerId" align="center" :label="$t('searchOrder.projectnumber')" min-width="80" /> + <el-table-column prop="flowCardId" align="center" :label="$t('hellow.flowCardId')" min-width="80" /> + <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" 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" /> + <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> + <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="150"> + <template #default="scope"> + <el-button size="mini" type="text" plain @click="handletake(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> + <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.takeout')}} </el-button> + <el-button size="mini" type="text" plain @click="handledelete(scope.row)">{{ $t('searchOrder.delete')}} </el-button> + </template> + </el-table-column> + </el-table> + </template> + </el-table-column> + </el-table> + </div> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;"> <el-table height="90" ref="table" @selection-change="handleSelectionChange" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> + <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> + <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> - <el-table-column - align="center" - :label="$t('sorter.place')" - min-width="80" - prop="inPlace" - > - <template #default="scope"> - <el-tag - :type="scope.row.inPlace === 1 ? 'success' : 'warning'" - > - {{ scope.row.inPlace === 1 ? $t('sorter.inPlace') : $t('sorter.ninPlace') }} - </el-tag> - </template> - </el-table-column> - <el-table-column - align="center" - :label="$t('sorter.taskRunning')" - min-width="80" - prop="taskRunning" - > - <template #default="scope"> - <el-tag :type="getStatusTypea(scope.row.taskRunning)"> - {{ getStatusTexta(scope.row.taskRunning) }} - </el-tag> - </template> - </el-table-column> <el-table-column align="center" :label="$t('film.taskstatus')" @@ -196,6 +336,18 @@ <template #default="scope"> <el-tag :type="getStatusTypeb(scope.row.taskState)"> {{ getStatusTextb(scope.row.taskState) }} + </el-tag> + </template> + </el-table-column> + <el-table-column + align="center" + :label="$t('film.enabletype')" + min-width="80" + prop="taskType" + > + <template #default="scope"> + <el-tag :type="getStatusTypea(scope.row.taskType)"> + {{ getStatusTexta(scope.row.taskType) }} </el-tag> </template> </el-table-column> @@ -219,6 +371,81 @@ </div> </div> </div> +<!-- 鍘嗗彶浠诲姟 --> +<el-dialog v-model="blindb" top="10vh" width="90%"> + <div style="display: flex;"> + <el-input v-model="glassId" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" :placeholder="$t('searchOrder.inglassID')" /> + <el-select + :placeholder="$t('searchOrder.taskstatus')" + clearable + style="width: 270px;margin-left: 10px;" + v-model="taskState"> + <el-option + v-for="item in optionsa" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + <el-select + :placeholder="$t('film.enabletype')" + clearable + style="width: 270px;margin-left: 10px;" + v-model="taskType"> + <el-option + v-for="item in optionsb" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + <span class="demonstration" style="margin-left: 20px;margin-top: 3px;">{{ $t('workOrder.time') }}</span> + <el-date-picker v-model="timeRange" type="datetimerange" range-separator="鑷�" :start-placeholder="$t('reportmanage.starttime')" + style="margin-left: 15px;" value-format = "YYYY-MM-DD hh:mm:ss" + :end-placeholder="$t('reportmanage.endtime')"> + </el-date-picker> + <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ + $t('reportmanage.inquire') + }}</el-button> + </div> + <el-table ref="table" style="margin-top: 20px;height: 650px;" :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> + <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> + <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> + <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> + <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> + <el-table-column + align="center" + :label="$t('film.taskstatus')" + min-width="80" + prop="taskState" + > + <template #default="scope"> + <el-tag :type="getStatusTypeb(scope.row.taskState)"> + {{ getStatusTextb(scope.row.taskState) }} + </el-tag> + </template> + </el-table-column> + <el-table-column + align="center" + :label="$t('film.enabletype')" + min-width="80" + prop="taskType" + > + <template #default="scope"> + <el-tag :type="getStatusTypea(scope.row.taskType)"> + {{ getStatusTexta(scope.row.taskType) }} + </el-tag> + </template> + </el-table-column> + <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="120" /> + <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> + </el-table> + <template #footer> + <div id="dialog-footer"> + <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> + </div> + </template> + </el-dialog> </template> <style scoped> #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} -- Gitblit v1.8.0