Demo: mark opener as finished with 2-1 Mexico win on schedule board

- schedule.ts: opener(MEX vs RSA) status finished + result 2-1 (TEAM_A_WIN)
- i18n: phase.finished label 종료→투표종료 / Ended→Voting closed
- ScheduleBoard: show score around VS + winner label next to round when result exists

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
main
Haewon Kam 2026-06-11 11:20:14 +09:00
parent 0c91c902a8
commit 6c3a47b6ba
3 changed files with 26 additions and 5 deletions

View File

@ -63,6 +63,16 @@ function MatchCard({ match, lang }: { match: Match; lang: Lang }) {
if (tally.d) split.push(`${t.draw} ${tally.d}`);
if (tally.b) split.push(`${teamShort(match.teamB, lang)} ${tally.b}`);
// 종료 경기: 결과 스코어 + 승자 라벨 (예: "멕시코 승")
const result = match.result;
const winLabel = result
? result.outcome === "TEAM_A_WIN"
? `${teamShort(match.teamA, lang)} ${t.win}`
: result.outcome === "TEAM_B_WIN"
? `${teamShort(match.teamB, lang)} ${t.win}`
: t.drawLabel
: null;
const href = `/match/${match.matchId}${lang === "en" ? "?lang=en" : ""}`;
return (
@ -74,6 +84,9 @@ function MatchCard({ match, lang }: { match: Match; lang: Lang }) {
<span className="font-mono font-bold text-white/70">
{timeOnly(match.kickoffKst)} <span className="text-white/40">KST</span> ·{" "}
{tRound(match.roundLabel, lang)}
{winLabel && (
<span className="ml-1 font-semibold text-[#94FBE0]">· {winLabel}</span>
)}
</span>
<span className={`rounded-md border px-2 py-0.5 font-semibold ${PHASE_CLS[phase]}`}>
{t.phase[phase]}
@ -85,7 +98,15 @@ function MatchCard({ match, lang }: { match: Match; lang: Lang }) {
<TeamFlag team={match.teamA} className="h-6 w-9 shrink-0" />
<span className="truncate text-[15px] font-extrabold">{teamShort(match.teamA, lang)}</span>
</div>
<span className="font-impact text-[18px] italic text-[#94FBE0]">VS</span>
{result ? (
<span className="flex items-center gap-1.5 font-impact text-[18px] italic">
<span className="tabular-nums text-white">{result.scoreA}</span>
<span className="text-[13px] text-[#94FBE0]">VS</span>
<span className="tabular-nums text-white">{result.scoreB}</span>
</span>
) : (
<span className="font-impact text-[18px] italic text-[#94FBE0]">VS</span>
)}
<div className="flex items-center justify-end gap-2">
<span className="truncate text-right text-[15px] font-extrabold">{teamShort(match.teamB, lang)}</span>
<TeamFlag team={match.teamB} className="h-6 w-9 shrink-0" />

View File

@ -105,7 +105,7 @@ export const DICT: Record<Lang, Dict> = {
prizeLine2: "최종 우승자에게 100만원 상금",
schedTitle: "전체 일정",
schedGuide: "투표하고 싶은 경기를 선택해주세요",
phase: { open: "투표 중", scheduled: "오픈 예정", locked: "투표 마감", finished: "종료" },
phase: { open: "투표 중", scheduled: "오픈 예정", locked: "투표 마감", finished: "투표종료" },
aiPicks: "AI 픽",
draw: "무",
joined: (n) => `${n}명 참여`,
@ -163,7 +163,7 @@ export const DICT: Record<Lang, Dict> = {
prizeLine2: "overall winner takes ₩1,000,000",
schedTitle: "All Matches",
schedGuide: "Pick a match to predict",
phase: { open: "Voting", scheduled: "Opens soon", locked: "Closed", finished: "Ended" },
phase: { open: "Voting", scheduled: "Opens soon", locked: "Closed", finished: "Voting closed" },
aiPicks: "AI picks",
draw: "Draw",
joined: (n) => `${n} joined`,

View File

@ -24,9 +24,9 @@ export const GROUP_A: Match[] = [
venue: "Estadio Azteca · Mexico City",
opensAt: opens("2026-06-12T04:00:00+09:00"),
lockAt: "2026-06-12T04:00:00+09:00",
status: "upcoming",
status: "finished",
hookText: "글로벌 축구 개막전, AI는 개최국을 믿을까",
result: null,
result: { scoreA: 2, scoreB: 1, outcome: "TEAM_A_WIN" }, // 데모: 개막전 종료 — 멕시코 2-1 승
},
{
matchId: "A_KOR_CZE_20260612",