1- // FILE: app/(main)/submissions/page.tsx
2-
31"use client" ;
42import useSWR from 'swr' ;
53import api from '@/lib/api' ;
@@ -17,6 +15,7 @@ import { Clock, Code, Hash, Layers, Loader2, Server, Tag, User, XCircle } from '
1715import { Progress } from "@/components/ui/progress" ;
1816import { Button } from '@/components/ui/button' ;
1917import { useToast } from '@/hooks/use-toast' ;
18+ import { Separator } from '@/components/ui/separator' ;
2019
2120const fetcher = ( url : string ) => api . get ( url ) . then ( res => res . data . data ) ;
2221
@@ -103,7 +102,7 @@ function QueuePosition({ submissionId, cluster }: { submissionId: string, cluste
103102}
104103
105104
106- // Component for submission details (from former [submissionId]/page.tsx)
105+ // --- [修改] Component for submission details ---
107106function SubmissionDetails ( { submissionId } : { submissionId : string } ) {
108107 const { toast } = useToast ( ) ;
109108 const { data : submission , error, isLoading, mutate } = useSWR < Submission > ( `/submissions/${ submissionId } ` , fetcher , {
@@ -132,7 +131,7 @@ function SubmissionDetails({ submissionId }: { submissionId: string }) {
132131
133132 return (
134133 < div className = "grid gap-6 lg:grid-cols-3" >
135- < div className = "lg:col-span-2 space-y-6 " >
134+ < div className = "lg:col-span-2" >
136135 < Card >
137136 < CardHeader >
138137 < CardTitle > Live Log</ CardTitle >
@@ -143,11 +142,13 @@ function SubmissionDetails({ submissionId }: { submissionId: string }) {
143142 </ CardContent >
144143 </ Card >
145144 </ div >
145+
146+ { /* --- [修改] 右侧合并为一个卡片 --- */ }
146147 < div className = "space-y-6" >
147148 < Card >
148149 < CardHeader >
149150 < div className = "flex items-center justify-between" >
150- < CardTitle > Submission Details </ CardTitle >
151+ < CardTitle > Submission Info </ CardTitle >
151152 { canBeInterrupted && (
152153 < Button variant = "destructive" size = "sm" onClick = { handleInterrupt } >
153154 < XCircle /> Interrupt
@@ -156,12 +157,13 @@ function SubmissionDetails({ submissionId }: { submissionId: string }) {
156157 </ div >
157158 </ CardHeader >
158159 < CardContent className = "space-y-4 text-sm" >
160+ { /* --- Submission Details Section --- */ }
159161 < div className = "flex items-center justify-between" >
160162 < span className = "text-muted-foreground flex items-center gap-2" > < Hash className = "h-4 w-4" /> Status</ span >
161163 < SubmissionStatusBadge status = { submission . status } />
162164 </ div >
163165 { submission . status === 'Queued' && < QueuePosition submissionId = { submission . id } cluster = { submission . cluster } /> }
164- { ( submission . status === 'Running' ) && totalSteps > 0 && (
166+ { ( submission . status === 'Running' ) && totalSteps > 0 && (
165167 < div >
166168 < Progress value = { progress } className = "w-full" />
167169 < p className = "text-xs text-muted-foreground mt-1" > Step { submission . current_step + 1 } of { totalSteps } : { problem ?. workflow [ submission . current_step ] ?. name } </ p >
@@ -193,21 +195,22 @@ function SubmissionDetails({ submissionId }: { submissionId: string }) {
193195 < span className = "text-muted-foreground flex items-center gap-2" > < Server className = "h-4 w-4" /> Node</ span >
194196 < span > { submission . node || 'N/A' } </ span >
195197 </ div >
198+
199+ { /* --- [新增] Judge Info Section (conditionally rendered) --- */ }
200+ { submission . info && Object . keys ( submission . info ) . length > 0 && (
201+ < >
202+ < Separator className = "my-4" />
203+ < div className = "space-y-2" >
204+ < h3 className = "font-semibold tracking-tight" > Judge Info</ h3 >
205+ < pre className = "p-4 bg-muted rounded-md text-xs overflow-auto" >
206+ { JSON . stringify ( submission . info , null , 2 ) }
207+ </ pre >
208+ < p className = "text-xs text-muted-foreground" > This is the raw JSON output from the final step of the judging process.</ p >
209+ </ div >
210+ </ >
211+ ) }
196212 </ CardContent >
197213 </ Card >
198- { submission . info && Object . keys ( submission . info ) . length > 0 && (
199- < Card >
200- < CardHeader > < CardTitle > Judge Info</ CardTitle > </ CardHeader >
201- < CardContent >
202- < pre className = "p-4 bg-muted rounded-md text-xs overflow-auto" >
203- { JSON . stringify ( submission . info , null , 2 ) }
204- </ pre >
205- </ CardContent >
206- < CardFooter >
207- < p className = "text-xs text-muted-foreground" > This is the raw JSON output from the final step of the judging process.</ p >
208- </ CardFooter >
209- </ Card >
210- ) }
211214 </ div >
212215 </ div >
213216 ) ;
0 commit comments