diff --git a/frontend/src/components/deploy/PipelineManager.tsx b/frontend/src/components/deploy/PipelineManager.tsx index dffe518..1e0b599 100644 --- a/frontend/src/components/deploy/PipelineManager.tsx +++ b/frontend/src/components/deploy/PipelineManager.tsx @@ -95,6 +95,8 @@ export function PipelineManager() { const [isDetailDialogOpen, setIsDetailDialogOpen] = useState(false); const [isRunDialogOpen, setIsRunDialogOpen] = useState(false); const [activeStage, setActiveStage] = useState(null); + const [pipelineRuns, setPipelineRuns] = useState([]); + const [loadingRuns, setLoadingRuns] = useState(false); const [newPipeline, setNewPipeline] = useState({ name: '', description: '', @@ -119,6 +121,25 @@ export function PipelineManager() { loadData(); }, []); + const loadPipelineRuns = async (pipelineId: number | string) => { + try { + setLoadingRuns(true); + const res = await pipelineApi.getRuns(pipelineId); + setPipelineRuns((res as any)?.list || []); + } catch (error) { + console.error('Failed to load pipeline runs:', error); + setPipelineRuns([]); + } finally { + setLoadingRuns(false); + } + }; + + const handleOpenDetail = (pipeline: any) => { + setSelectedPipeline(pipeline); + setIsDetailDialogOpen(true); + loadPipelineRuns(pipeline.id); + }; + const filteredPipelines = pipelines.filter( (p) => (p.name || '').toLowerCase().includes(searchQuery.toLowerCase()) || @@ -203,6 +224,9 @@ export function PipelineManager() { await pipelineApi.triggerPipeline(selectedPipeline.id); setIsRunDialogOpen(false); loadData(); + if (isDetailDialogOpen) { + loadPipelineRuns(selectedPipeline.id); + } } catch (error) { console.error('Failed to trigger pipeline:', error); } @@ -382,10 +406,7 @@ export function PipelineManager() { variant="ghost" size="icon" className="h-8 w-8 text-slate-400 hover:text-blue-400" - onClick={() => { - setSelectedPipeline(pipeline); - setIsDetailDialogOpen(true); - }} + onClick={() => handleOpenDetail(pipeline)} > @@ -509,7 +530,7 @@ export function PipelineManager() { 配置 - 历史记录 + 历史记录{pipelineRuns.length > 0 && ` (${pipelineRuns.length})`} @@ -569,7 +590,51 @@ export function PipelineManager() { -
历史执行记录将在这里显示
+ {loadingRuns ? ( +
+ +
+ ) : pipelineRuns.length === 0 ? ( +
暂无执行记录
+ ) : ( +
+ {pipelineRuns.map((run: any) => ( +
+
+ #{run.build_number} +
+
+
+ {getStatusBadge(run.status)} + + + {run.branch || 'main'} + +
+
+ {run.commit_id && ( + + + {run.commit_id.substring(0, 7)} + + )} + {run.triggered_by || 'manual'} + {run.duration > 0 && ( + + + {run.duration < 60 ? `${run.duration}s` : `${Math.floor(run.duration / 60)}m${run.duration % 60}s`} + + )} + {run.created_at ? new Date(run.created_at).toLocaleString('zh-CN') : '--'} +
+
+
+ ))} +
+ )}