From 19f59c243e8df97c8b9fd9dba4e758be8235d68b Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期二, 25 十一月 2025 17:02:54 +0800
Subject: [PATCH] 添加卧转立扫码、卧转立、大车、大理片笼基础任务流转逻辑
---
mes-web/src/views/plcTest/MultiDeviceWorkbench.vue | 105 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 98 insertions(+), 7 deletions(-)
diff --git a/mes-web/src/views/plcTest/MultiDeviceWorkbench.vue b/mes-web/src/views/plcTest/MultiDeviceWorkbench.vue
index 5c5c465..3472ea8 100644
--- a/mes-web/src/views/plcTest/MultiDeviceWorkbench.vue
+++ b/mes-web/src/views/plcTest/MultiDeviceWorkbench.vue
@@ -3,23 +3,56 @@
<div class="main-grid">
<div class="left-panel">
<GroupList @select="handleGroupSelect" />
+ <GroupTopology
+ v-if="selectedGroup"
+ :group="selectedGroup"
+ class="topology-panel"
+ />
</div>
<div class="right-panel">
- <TaskOrchestration :group="selectedGroup" @task-started="refreshMonitor" />
- <ExecutionMonitor ref="monitorRef" :group-id="selectedGroupId" class="monitor-panel" />
+ <el-tabs v-model="activeTab" type="card" class="workbench-tabs">
+ <el-tab-pane label="浠诲姟缂栨帓" name="orchestration">
+ <TaskOrchestration
+ :group="selectedGroup"
+ @task-started="handleTaskStarted"
+ />
+ </el-tab-pane>
+ <el-tab-pane label="鎵ц鐩戞帶" name="monitor">
+ <ExecutionMonitor
+ ref="monitorRef"
+ :group-id="selectedGroupId"
+ :task-id="selectedTaskId"
+ class="monitor-panel"
+ @task-selected="handleTaskSelected"
+ />
+ </el-tab-pane>
+ <el-tab-pane label="缁撴灉鍒嗘瀽" name="analysis">
+ <ResultAnalysis
+ ref="analysisRef"
+ :task="selectedTask"
+ class="analysis-panel"
+ />
+ </el-tab-pane>
+ </el-tabs>
</div>
</div>
</div>
</template>
<script setup>
-import { computed, ref } from 'vue'
+import { computed, ref, watch } from 'vue'
import GroupList from './components/DeviceGroup/GroupList.vue'
+import GroupTopology from './components/DeviceGroup/GroupTopology.vue'
import TaskOrchestration from './components/MultiDeviceTest/TaskOrchestration.vue'
import ExecutionMonitor from './components/MultiDeviceTest/ExecutionMonitor.vue'
+import ResultAnalysis from './components/MultiDeviceTest/ResultAnalysis.vue'
const selectedGroup = ref(null)
const monitorRef = ref(null)
+const analysisRef = ref(null)
+const activeTab = ref('orchestration')
+const selectedTaskId = ref(null)
+const selectedTask = ref(null)
const selectedGroupId = computed(() => {
if (!selectedGroup.value) return null
@@ -28,10 +61,39 @@
const handleGroupSelect = (group) => {
selectedGroup.value = group
+ selectedTask.value = null
+ selectedTaskId.value = null
+ // 鍒囨崲鍒扮紪鎺掓爣绛鹃〉
+ activeTab.value = 'orchestration'
}
-const refreshMonitor = () => {
- monitorRef.value?.fetchTasks?.()
+const handleTaskStarted = (task) => {
+ // 浠诲姟鍚姩鍚庯紝鍒囨崲鍒扮洃鎺ф爣绛鹃〉锛堝鏋滃綋鍓嶄笉鍦ㄧ洃鎺ч〉锛�
+ if (activeTab.value !== 'monitor') {
+ activeTab.value = 'monitor'
+ }
+ // 绔嬪嵆鍒锋柊鐩戞帶鍒楄〃锛屾樉绀烘柊鍚姩鐨勪换鍔�
+ setTimeout(() => {
+ monitorRef.value?.fetchTasks?.()
+ }, 300)
+
+ // 濡傛灉浼犲叆浜嗕换鍔′俊鎭紝鍙互鑷姩閫変腑
+ if (task && task.taskId) {
+ selectedTaskId.value = task.taskId
+ }
+}
+
+const handleTaskSelected = (task) => {
+ selectedTask.value = task
+ selectedTaskId.value = task?.taskId || null
+ // 濡傛灉浠诲姟宸插畬鎴愭垨澶辫触锛屽垏鎹㈠埌缁撴灉鍒嗘瀽鏍囩椤�
+ if (task && (task.status === 'COMPLETED' || task.status === 'FAILED')) {
+ activeTab.value = 'analysis'
+ // 鍒锋柊鍒嗘瀽鏁版嵁
+ setTimeout(() => {
+ analysisRef.value?.fetchSteps?.()
+ }, 100)
+ }
}
</script>
@@ -48,14 +110,43 @@
gap: 24px;
}
-.right-panel {
+.left-panel {
display: flex;
flex-direction: column;
gap: 24px;
}
-.monitor-panel {
+.topology-panel {
flex: 1;
+ min-height: 300px;
+}
+
+.right-panel {
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+}
+
+.workbench-tabs {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+}
+
+.workbench-tabs :deep(.el-tabs__content) {
+ flex: 1;
+ overflow: auto;
+}
+
+.workbench-tabs :deep(.el-tab-pane) {
+ height: 100%;
+}
+
+.monitor-panel,
+.analysis-panel {
+ flex: 1;
+ min-height: 500px;
}
@media (max-width: 1200px) {
--
Gitblit v1.8.0