@@ -280,6 +280,38 @@ export default function Submissions() {
280280 </ div >
281281 ) }
282282
283+ { ( submission . time_ms != null ||
284+ submission . memory_kb != null ) && (
285+ < div className = "mb-3 flex flex-wrap items-center gap-4" >
286+ { submission . time_ms != null && (
287+ < div className = "flex items-center gap-2" >
288+ < span className = "text-xs text-gray-500" > 耗时</ span >
289+ < div className = "w-32 h-2 bg-dark-700 rounded-full overflow-hidden" >
290+ < div
291+ className = "h-full bg-blue-500 rounded-full transition-all"
292+ style = { { width : `${ Math . min ( ( submission . time_ms / 2000 ) * 100 , 100 ) } %` } }
293+ />
294+ </ div >
295+ < span className = "text-xs text-gray-300 font-mono" > { submission . time_ms } ms</ span >
296+ </ div >
297+ ) }
298+ { submission . memory_kb != null && (
299+ < div className = "flex items-center gap-2" >
300+ < span className = "text-xs text-gray-500" > 内存</ span >
301+ < div className = "w-32 h-2 bg-dark-700 rounded-full overflow-hidden" >
302+ < div
303+ className = "h-full bg-green-500 rounded-full transition-all"
304+ style = { { width : `${ Math . min ( ( submission . memory_kb / 65536 ) * 100 , 100 ) } %` } }
305+ />
306+ </ div >
307+ < span className = "text-xs text-gray-300 font-mono" >
308+ { ( submission . memory_kb / 1024 ) . toFixed ( 1 ) } MB
309+ </ span >
310+ </ div >
311+ ) }
312+ </ div >
313+ ) }
314+
283315 { submission . details ?. cases &&
284316 submission . details . cases . length > 0 && (
285317 < div >
@@ -309,18 +341,56 @@ export default function Submissions() {
309341 { submission . details ?. options &&
310342 submission . details ?. user_answer !== undefined &&
311343 submission . details ?. user_answer !== null && (
312- < p className = "text-gray-300 text-sm" >
313- 选择的答案:第{ ' ' }
314- { Number ( submission . details . user_answer ) + 1 } 项
315- </ p >
344+ < div className = "mb-1" >
345+ < p className = "text-xs text-gray-500 mb-1" > 选择答案</ p >
346+ < div className = "flex flex-wrap gap-2" >
347+ { submission . details . options . map (
348+ ( opt , idx ) => {
349+ const isUser = idx === Number ( submission . details ! . user_answer ) ;
350+ const isCorrect =
351+ String ( idx ) === String ( submission . details ! . correct_answer ) ;
352+ return (
353+ < span
354+ key = { idx }
355+ className = { `px-2 py-1 rounded text-xs border ${
356+ isUser && isCorrect
357+ ? 'bg-green-600/20 text-green-400 border-green-600/40'
358+ : isUser
359+ ? 'bg-red-600/20 text-red-400 border-red-600/40'
360+ : isCorrect
361+ ? 'bg-green-600/10 text-green-500 border-green-600/20'
362+ : 'bg-dark-700 text-gray-400 border-dark-600'
363+ } `}
364+ >
365+ { String . fromCharCode ( 65 + idx ) } . { opt }
366+ { isUser && ' ← 你的选择' }
367+ { isCorrect && ' ✓' }
368+ </ span >
369+ ) ;
370+ }
371+ ) }
372+ </ div >
373+ </ div >
316374 ) }
317375
318376 { submission . details ?. acceptable_answers &&
319377 submission . details ?. user_answer !== undefined &&
320378 submission . details ?. user_answer !== null && (
321- < p className = "text-gray-300 text-sm" >
322- 填写答案:{ submission . details . user_answer }
323- </ p >
379+ < div className = "mb-1" >
380+ < p className = "text-xs text-gray-500 mb-1" > 填空答案</ p >
381+ < div className = "flex items-center gap-2 flex-wrap" >
382+ < span className = { `px-2 py-1 rounded text-xs ${
383+ submission . details . acceptable_answers . includes (
384+ String ( submission . details . user_answer )
385+ )
386+ ? 'bg-green-600/20 text-green-400'
387+ : 'bg-red-600/20 text-red-400'
388+ } `} >
389+ 你的答案:{ submission . details . user_answer }
390+ </ span >
391+ < span className = "text-dark-500 text-xs" > 正确选项:{ submission . details . acceptable_answers . join ( ' / ' ) } </ span >
392+ </ div >
393+ </ div >
324394 ) }
325395 </ div >
326396 ) }
0 commit comments