| | |
| | | 查看详情 |
| | | </el-button> |
| | | <el-button |
| | | v-if="row.status === 'RUNNING'" |
| | | v-if="row.status === 'RUNNING' || row.status === 'FAILED'" |
| | | link |
| | | type="danger" |
| | | size="small" |
| | |
| | | <div class="step-desc">耗时:{{ formatDuration(step.durationMs) }}</div> |
| | | <div class="step-desc" v-if="step.retryCount > 0"> |
| | | 重试次数:{{ step.retryCount }} |
| | | </div> |
| | | <div class="step-desc" v-if="step.successMessage"> |
| | | 提示:{{ step.successMessage }} |
| | | </div> |
| | | <div class="step-desc error-message" v-if="step.errorMessage"> |
| | | <el-icon><Warning /></el-icon> |
| | |
| | | endTime: data.endTime ? new Date(data.endTime) : existingStep.endTime, |
| | | durationMs: data.durationMs !== undefined ? data.durationMs : existingStep.durationMs, |
| | | retryCount: data.retryCount !== undefined ? data.retryCount : existingStep.retryCount, |
| | | successMessage: data.successMessage !== undefined ? data.successMessage : existingStep.successMessage, |
| | | errorMessage: data.errorMessage || existingStep.errorMessage |
| | | } |
| | | } else if (data.stepOrder !== undefined) { |
| | |
| | | } finally { |
| | | stepsLoading.value = false |
| | | } |
| | | } |
| | | |
| | | // 根据taskId打开任务详情抽屉(供父组件调用) |
| | | const openTaskDrawer = async (taskId) => { |
| | | if (!taskId) return |
| | | // 如果任务列表为空,先加载一次 |
| | | if (!tasks.value || tasks.value.length === 0) { |
| | | await fetchTasks() |
| | | } |
| | | const task = tasks.value.find(t => t.taskId === taskId) |
| | | if (!task) { |
| | | return |
| | | } |
| | | await handleRowClick(task) |
| | | } |
| | | |
| | | const statusType = (status) => { |
| | |
| | | defineExpose({ |
| | | fetchTasks, |
| | | connectSSE, |
| | | disconnectSSE |
| | | disconnectSSE, |
| | | openTaskDrawer |
| | | }) |
| | | </script> |
| | | |