| | |
| | | const dialogFormVisiblee = ref(false) |
| | | const dialogFormVisiblef = ref(false) |
| | | const dialogFormVisibles = ref(false) |
| | | const isLoading = ref(true) |
| | | const blindb = ref(false) |
| | | const inkageEntity = ref('#911005'); |
| | | const requestEntity = ref('#911005'); |
| | |
| | | const subRectsCountsb = ref([]); |
| | | const subRectsCountsc = ref([]); |
| | | const currentRow = reactive({}); // 当前行的数据 |
| | | const showAlert = ref(false) |
| | | const alertMessage = ref('') |
| | | const alarmData = ref<any>(null) |
| | | const showModal = ref(false) |
| | | const currentAlarm = ref<any>(null) |
| | | const tableDataAlert = ref([]) |
| | | const alertText = ref('') |
| | | const currentPage2 = ref(1) |
| | | const globalDate = inject('globalDate'); |
| | | const inputValuesa = reactive({}); |
| | |
| | | fetchFlow(); |
| | | }; |
| | | const handlexiang = () => { |
| | | isLoading.value = true; // 开启加载状态 |
| | | dialogFormVisiblea.value = true; |
| | | fetchxiang(); |
| | | currentPage2.value = 1; |
| | |
| | | fetchcagedetails(engineerId, temperingLayoutId); |
| | | dialogFormVisiblef.value = true; |
| | | }; |
| | | // 警报双击弹窗 |
| | | const handleDoubleClick = () => { |
| | | showModal.value = true; |
| | | }; |
| | | const getAlertText = (alarmCode) => { |
| | | const codeMap = { |
| | | sizeSame: 'hellow.sizeSame', |
| | | idSame: 'hellow.idSame' |
| | | }; |
| | | return alarmCode in codeMap |
| | | ? t(codeMap[alarmCode]) |
| | | : t('hellow.unknownAlert'); |
| | | }; |
| | | // 钢化查询 |
| | | onMounted(async () => { |
| | | try { |
| | |
| | | }); |
| | | // 理片笼信息 |
| | | const fetchxiang = async () => { |
| | | try { |
| | | isLoading.value = true; |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/querybigStorageCageDetail',{ |
| | | // deviceId: page, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | }) |
| | | if (response.code === 200) { |
| | | // 模拟最小加载时间 |
| | | await new Promise(resolve => setTimeout(resolve, 300)); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | tableDataa.value = response.data |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | } finally { |
| | | isLoading.value = false; |
| | | } |
| | | |
| | | } |
| | | const fetchxianga = async () => { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | |
| | | } |
| | | } |
| | | // 任务重置 |
| | | const handleptask = async() => { |
| | | // const handleptask = async() => { |
| | | // try { |
| | | // const confirmResult = await ElMessageBox.confirm( |
| | | // t('searchOrder.partasks'), |
| | | // t('workOrder.prompt'), |
| | | // { |
| | | // confirmButtonText: t('workOrder.yes'), |
| | | // cancelButtonText: t('workOrder.cancel'), |
| | | // type: 'warning', |
| | | // } |
| | | // ); |
| | | // if (confirmResult === 'confirm') { |
| | | // const response = await request.post('/cacheVerticalGlass/bigStorageCage/resetCage') |
| | | // if (response.code === 200) { |
| | | // ElMessage.success(response.message); |
| | | // } else { |
| | | // ElMessage.error(response.msg); |
| | | // } |
| | | // } |
| | | // } catch (error) { |
| | | // } |
| | | // }; |
| | | // 警报确认 |
| | | const handleSure = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.partasks'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('hellow.clickmakesure'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/resetCage') |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/hollowGlass/productAlarmInfo/updateAlarmInfo', { |
| | | id: row.id |
| | | }) |
| | | if (response.code === 200) { |
| | | showModal.value = false; |
| | | showAlert.value = false; |
| | | |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`; |
| | | const handleMessage = (data) => { |
| | | // 报警信息 |
| | | if (data.alarmInfo[0] !=null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0] |
| | | const { id,alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | // 动态翻译逻辑:根据alarmCode选择翻译键 |
| | | alertText.value = alert[0].alarmCode === 'sizeSame' |
| | | ? t('hellow.sizeSame') |
| | | : t('hellow.idSame'); |
| | | alarmData.value = data; // 存储完整数据用于弹窗 |
| | | showAlert.value = true; |
| | | } |
| | | const formattedData = data.alarmInfo[0].map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | alarmCode: record.alarmCode, |
| | | alarmMessage: record.alarmMessage |
| | | })); |
| | | tableDataAlert.value = formattedData; |
| | | |
| | | if(data.bigStorageSummary!=null){ |
| | | tableDatass.value = data.bigStorageSummary[0] |
| | | }else{ |
| | |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const svg = ` |
| | | <path class="path" d=" |
| | | M 30 15 |
| | | L 28 17 |
| | | M 25.61 25.61 |
| | | A 15 15, 0, 0, 1, 15 30 |
| | | A 15 15, 0, 1, 1, 27.99 7.5 |
| | | L 15 15 |
| | | " style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/> |
| | | ` |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 600px;"> |
| | | <div v-if="showAlert" class="global-alert-bar" @dblclick="handleDoubleClick"> |
| | | <div class="alert-content"> |
| | | <el-icon><WarnTriangleFilled /></el-icon> |
| | | <span class="alert-text"> |
| | | {{ alertText }} (id:{{ alertMessage }}) |
| | | </span> |
| | | </div> |
| | | <button @click="showAlert = false" class="close-btn">×</button> |
| | | </div> |
| | | <el-dialog |
| | | v-model="showModal" |
| | | width="40%" |
| | | center |
| | | > |
| | | <el-table |
| | | ref="table" |
| | | border |
| | | :data="tableDataAlert" |
| | | max-height="calc(500px - 35px)" |
| | | style="width: 100%;" |
| | | > |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column |
| | | :label="$t('hellow.content')" |
| | | align="center" |
| | | min-width="220" |
| | | > |
| | | <template #default="scope"> |
| | | <span> |
| | | {{ getAlertText(scope.row.alarmCode) }} |
| | | (id:{{ scope.row.alarmMessage }}) |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain |
| | | @click="handleSure(scope.row)">{{ $t('basicData.yes') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | <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="handlehistorical">{{ $t('searchOrder.historicaltasks') }}</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="dialogFormVisibles=true;fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="danger" @click="handleptask()">{{ $t('searchOrder.partask') }}</el-button> |
| | | <!-- <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="danger" @click="handleptask()">{{ $t('searchOrder.partask') }}</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" /> |
| | | <div id="dotClass"> |
| | |
| | | </el-table> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblea" top="2vh" width="95%" :title="$t('searchOrder.cageinformation')"> |
| | | <el-dialog v-model="dialogFormVisiblea" top="2vh" width="95%" |
| | | :title="$t('searchOrder.cageinformation')"> |
| | | <div v-loading="isLoading" class="loading-container" :element-loading-text="$t('searchOrder.loadingText')" > |
| | | <div style="display: flex;"> |
| | | <el-input v-model="flowCardId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" /> |
| | | <el-input v-model="filmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/> |
| | |
| | | @current-change="handlePageChange2" |
| | | /> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | <!-- 历史任务 --> |
| | |
| | | .img-dlpl{ |
| | | margin-left: 20px; |
| | | margin-top: 0px; |
| | | background-image:url('../../assets/ganghuaqian.png'); |
| | | background-image:url('/ganghuaqian.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 380px; |
| | |
| | | } |
| | | .img-car1{ |
| | | display: flex; |
| | | background-image:url('../../assets/xiaoche.png'); |
| | | background-image:url('/xiaoche.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | |
| | | } |
| | | .img-car4{ |
| | | display: flex; |
| | | background-image:url('../../assets/xiaoche.png'); |
| | | background-image:url('/xiaoche.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | |
| | | .row-red-background { |
| | | background-color: #CDAF95 !important; |
| | | } |
| | | .global-alert-bar { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 50%; /* 水平居中关键 */ |
| | | transform: translateX(-50%); /* 水平居中关键 */ |
| | | padding: 12px 20px; |
| | | background-color: #dbdbd7; |
| | | box-shadow: 0 2px 10px rgba(0,0,0,0.2); |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 9999; |
| | | max-width: 80%; /* 防止小屏幕溢出 */ |
| | | min-width: 400px; /* 最小宽度保证 */ |
| | | } |
| | | /* 提示内容居中 */ |
| | | .alert-content { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | flex-grow: 1; /* 占据可用空间 */ |
| | | } |
| | | /* 提示文字样式 */ |
| | | .alert-text { |
| | | margin-left: 8px; |
| | | text-align: center; |
| | | font-weight: bold; |
| | | color: #0d0d0d; |
| | | } |
| | | /* 关闭按钮样式 */ |
| | | .close-btn { |
| | | background: none; |
| | | border: none; |
| | | font-size: 1.5rem; |
| | | cursor: pointer; |
| | | margin-left: 20px; |
| | | } |
| | | /* 页面容器顶部内边距 */ |
| | | #app-container { |
| | | padding-top: 60px; /* 根据alert高度调整 */ |
| | | } |
| | | .loading-container { |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | /* 确保遮罩层在最顶层 */ |
| | | .el-loading-mask { |
| | | z-index: 2000 !important; |
| | | } |
| | | </style> |