feat: WC2026 赛事 seed、生产上线初始化脚本与目录归档

重构 seed 为 WC2026 72 场小组赛与 48 强优胜盘;新增 production 模式仅保留 admin 与赛事示例;提供 prod-init-db 全量重置脚本;管理端 i18n 分包与赛事归档能力。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-12 18:17:00 +08:00
parent 8f14e85ebd
commit e7e938f261
94 changed files with 12332 additions and 976 deletions

View File

@@ -23,6 +23,7 @@ export interface MatchCreateForm {
awayTeamEn: string;
awayTeamMs: string;
isHot: boolean;
correctScoreEnabled: boolean;
displayOrder: number;
matchName: string;
stage: string;
@@ -48,6 +49,7 @@ export function emptyMatchForm(): MatchCreateForm {
awayTeamEn: '',
awayTeamMs: '',
isHot: false,
correctScoreEnabled: true,
displayOrder: 0,
matchName: '',
stage: '',
@@ -81,6 +83,7 @@ export type AdminMatchDetail = {
status: string;
isOutright: boolean;
isHot: boolean;
correctScoreEnabled: boolean;
displayOrder: number;
startTime: string;
leagueId?: string;
@@ -107,6 +110,7 @@ export type AdminMatchDetail = {
htAway: number;
ftHome: number;
ftAway: number;
winnerTeamId?: string | null;
} | null;
markets?: AdminMarket[];
};
@@ -143,6 +147,7 @@ export function formFromDetail(d: AdminMatchDetail): MatchCreateForm {
awayTeamEn: d.awayTeamEn,
awayTeamMs: d.awayTeamMs ?? '',
isHot: d.isHot,
correctScoreEnabled: d.correctScoreEnabled ?? true,
displayOrder: d.displayOrder ?? 0,
matchName: d.matchName ?? '',
stage: d.stage ?? '',
@@ -239,6 +244,7 @@ export function buildPlatformPayload(form: MatchCreateForm) {
awayTeamMs: form.awayTeamMs.trim() || undefined,
startTime: normalizeStartTimeForApi(form.startTime),
isHot: form.isHot,
correctScoreEnabled: form.correctScoreEnabled,
displayOrder: form.displayOrder,
matchName: form.matchName.trim() || undefined,
stage: form.stage.trim() || undefined,
@@ -284,6 +290,7 @@ export function buildMatchUpdatePayload(form: MatchCreateForm) {
awayTeamMs: form.awayTeamMs.trim() || undefined,
startTime: normalizeStartTimeForApi(form.startTime),
isHot: form.isHot,
correctScoreEnabled: form.correctScoreEnabled,
displayOrder: form.displayOrder,
matchName: form.matchName.trim() || undefined,
stage: form.stage.trim() || undefined,