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