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
parent
0c91c902a8
commit
6c3a47b6ba
|
|
@ -63,6 +63,16 @@ function MatchCard({ match, lang }: { match: Match; lang: Lang }) {
|
||||||
if (tally.d) split.push(`${t.draw} ${tally.d}`);
|
if (tally.d) split.push(`${t.draw} ${tally.d}`);
|
||||||
if (tally.b) split.push(`${teamShort(match.teamB, lang)} ${tally.b}`);
|
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" : ""}`;
|
const href = `/match/${match.matchId}${lang === "en" ? "?lang=en" : ""}`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -74,6 +84,9 @@ function MatchCard({ match, lang }: { match: Match; lang: Lang }) {
|
||||||
<span className="font-mono font-bold text-white/70">
|
<span className="font-mono font-bold text-white/70">
|
||||||
{timeOnly(match.kickoffKst)} <span className="text-white/40">KST</span> ·{" "}
|
{timeOnly(match.kickoffKst)} <span className="text-white/40">KST</span> ·{" "}
|
||||||
{tRound(match.roundLabel, lang)}
|
{tRound(match.roundLabel, lang)}
|
||||||
|
{winLabel && (
|
||||||
|
<span className="ml-1 font-semibold text-[#94FBE0]">· {winLabel}</span>
|
||||||
|
)}
|
||||||
</span>
|
</span>
|
||||||
<span className={`rounded-md border px-2 py-0.5 font-semibold ${PHASE_CLS[phase]}`}>
|
<span className={`rounded-md border px-2 py-0.5 font-semibold ${PHASE_CLS[phase]}`}>
|
||||||
{t.phase[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" />
|
<TeamFlag team={match.teamA} className="h-6 w-9 shrink-0" />
|
||||||
<span className="truncate text-[15px] font-extrabold">{teamShort(match.teamA, lang)}</span>
|
<span className="truncate text-[15px] font-extrabold">{teamShort(match.teamA, lang)}</span>
|
||||||
</div>
|
</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">
|
<div className="flex items-center justify-end gap-2">
|
||||||
<span className="truncate text-right text-[15px] font-extrabold">{teamShort(match.teamB, lang)}</span>
|
<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" />
|
<TeamFlag team={match.teamB} className="h-6 w-9 shrink-0" />
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ export const DICT: Record<Lang, Dict> = {
|
||||||
prizeLine2: "최종 우승자에게 100만원 상금",
|
prizeLine2: "최종 우승자에게 100만원 상금",
|
||||||
schedTitle: "전체 일정",
|
schedTitle: "전체 일정",
|
||||||
schedGuide: "투표하고 싶은 경기를 선택해주세요",
|
schedGuide: "투표하고 싶은 경기를 선택해주세요",
|
||||||
phase: { open: "투표 중", scheduled: "오픈 예정", locked: "투표 마감", finished: "종료" },
|
phase: { open: "투표 중", scheduled: "오픈 예정", locked: "투표 마감", finished: "투표종료" },
|
||||||
aiPicks: "AI 픽",
|
aiPicks: "AI 픽",
|
||||||
draw: "무",
|
draw: "무",
|
||||||
joined: (n) => `${n}명 참여`,
|
joined: (n) => `${n}명 참여`,
|
||||||
|
|
@ -163,7 +163,7 @@ export const DICT: Record<Lang, Dict> = {
|
||||||
prizeLine2: "overall winner takes ₩1,000,000",
|
prizeLine2: "overall winner takes ₩1,000,000",
|
||||||
schedTitle: "All Matches",
|
schedTitle: "All Matches",
|
||||||
schedGuide: "Pick a match to predict",
|
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",
|
aiPicks: "AI picks",
|
||||||
draw: "Draw",
|
draw: "Draw",
|
||||||
joined: (n) => `${n} joined`,
|
joined: (n) => `${n} joined`,
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ export const GROUP_A: Match[] = [
|
||||||
venue: "Estadio Azteca · Mexico City",
|
venue: "Estadio Azteca · Mexico City",
|
||||||
opensAt: opens("2026-06-12T04:00:00+09:00"),
|
opensAt: opens("2026-06-12T04:00:00+09:00"),
|
||||||
lockAt: "2026-06-12T04:00:00+09:00",
|
lockAt: "2026-06-12T04:00:00+09:00",
|
||||||
status: "upcoming",
|
status: "finished",
|
||||||
hookText: "글로벌 축구 개막전, AI는 개최국을 믿을까",
|
hookText: "글로벌 축구 개막전, AI는 개최국을 믿을까",
|
||||||
result: null,
|
result: { scoreA: 2, scoreB: 1, outcome: "TEAM_A_WIN" }, // 데모: 개막전 종료 — 멕시코 2-1 승
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
matchId: "A_KOR_CZE_20260612",
|
matchId: "A_KOR_CZE_20260612",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue