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

@@ -75,10 +75,18 @@ const zh: Record<string, string> = {
'deposit.approved_amount_label': '批准金额(可调整)',
'deposit.remark_label': '备注(可选)',
'deposit.confirm_approve': '确认批准',
'deposit.approve_check_hint': '请仔细核对截图中的转账金额,确保与下方「批准金额」完全一致后再提交。',
'deposit.confirm_approve_message': '即将批准金额 {amount}。请再次确认该金额与截图一致,确认后将入账玩家钱包。',
'deposit.confirm_reject': '确认拒绝',
'deposit.reject_reason_label': '拒绝原因 *',
'deposit.reject_reason_ph': '请输入拒绝原因...',
'deposit.reason_required': '请输入拒绝原因',
'deposit.revoke': '撤回',
'deposit.confirm_revoke': '将作废批准后 5 分钟内的待结算注单、扣回已入账金额,并恢复为待审核。确定撤回?',
'deposit.reopen_review': '重新审核',
'deposit.confirm_reopen': '订单将恢复为待审核,可再次批准或拒绝。确定继续?',
'deposit.delete': '删除',
'deposit.confirm_delete': '【仅删除记录】将永久删除本订单记录及截图文件。确定继续?',
'deposit.prev': '上一页',
'deposit.next': '下一页',
'deposit.add_method': '+ 添加',
@@ -211,7 +219,7 @@ const zh: Record<string, string> = {
'nav.matches.fixtures': '赛事配置',
'nav.matches.outrights': '优胜赛配置(盘口)',
'page.matches.title': '赛事管理',
'page.matches.desc': '草稿可编辑、删除;已发布可改开赛时间与热门',
'page.matches.desc': '草稿可编辑、删除;已发布可改开赛时间与热门;未结算可下架',
'page.bets.title': '注单管理',
'page.bets.desc': '筛选、分页查看全平台注单,支持详情与投注项',
'page.cashback.title': '返水管理',
@@ -336,10 +344,18 @@ const en: Record<string, string> = {
'deposit.approved_amount_label': 'Approved Amount (adjust if needed)',
'deposit.remark_label': 'Remark (optional)',
'deposit.confirm_approve': 'Confirm Approve',
'deposit.approve_check_hint': 'Carefully verify the transfer amount in the screenshot matches the approved amount below before submitting.',
'deposit.confirm_approve_message': 'You are about to approve {amount}. Confirm it matches the screenshot; this will credit the player wallet.',
'deposit.confirm_reject': 'Confirm Reject',
'deposit.reject_reason_label': 'Reject Reason *',
'deposit.reject_reason_ph': 'Enter the reason for rejection...',
'deposit.reason_required': 'Please enter a reject reason',
'deposit.revoke': 'Revoke',
'deposit.confirm_revoke': 'Pending bets placed within 5 minutes of approval will be voided, credited balance reversed, and the order reset to pending. Continue?',
'deposit.reopen_review': 'Re-review',
'deposit.confirm_reopen': 'The order will return to pending for approve or reject. Continue?',
'deposit.delete': 'Delete',
'deposit.confirm_delete': '[Records only] Permanently delete this order record and screenshot. Continue?',
'deposit.prev': 'Prev',
'deposit.next': 'Next',
'deposit.add_method': '+ Add',
@@ -470,7 +486,7 @@ const en: Record<string, string> = {
'nav.matches.fixtures': 'Fixtures',
'nav.matches.outrights': 'Outright odds',
'page.matches.title': 'Matches',
'page.matches.desc': 'Edit/delete drafts; adjust kickoff and featured when published',
'page.matches.desc': 'Edit/delete drafts; adjust kickoff and featured when published; unpublish while unsettled',
'page.bets.title': 'Bets',
'page.bets.desc': 'Filter and paginate all bets with leg details',
'page.cashback.title': 'Cashback',
@@ -595,10 +611,18 @@ const ms: Record<string, string> = {
'deposit.approved_amount_label': 'Jumlah Diluluskan (laraskan jika perlu)',
'deposit.remark_label': 'Catatan (pilihan)',
'deposit.confirm_approve': 'Sahkan Luluskan',
'deposit.approve_check_hint': 'Semak jumlah pindahan dalam tangkapan skrin sepadan dengan jumlah diluluskan di bawah sebelum hantar.',
'deposit.confirm_approve_message': 'Akan meluluskan {amount}. Sahkan ia sepadan dengan tangkapan skrin; baki pemain akan dikreditkan.',
'deposit.confirm_reject': 'Sahkan Tolak',
'deposit.reject_reason_label': 'Sebab Penolakan *',
'deposit.reject_reason_ph': 'Masukkan sebab penolakan...',
'deposit.reason_required': 'Sila masukkan sebab penolakan',
'deposit.revoke': 'Tarik balik',
'deposit.confirm_revoke': 'Pertaruhan menunggu dalam 5 minit selepas kelulusan akan dibatalkan, baki dikembalikan, dan pesanan kembali menunggu. Teruskan?',
'deposit.reopen_review': 'Semak semula',
'deposit.confirm_reopen': 'Pesanan kembali menunggu untuk lulus atau tolak. Teruskan?',
'deposit.delete': 'Padam',
'deposit.confirm_delete': '[Rekod sahaja] Padam rekod pesanan dan tangkapan skrin. Teruskan?',
'deposit.prev': 'Sebelum',
'deposit.next': 'Seterus',
'deposit.add_method': '+ Tambah',
@@ -729,7 +753,7 @@ const ms: Record<string, string> = {
'nav.matches.fixtures': 'Konfigurasi perlawanan',
'nav.matches.outrights': 'Odds juara',
'page.matches.title': 'Perlawanan',
'page.matches.desc': 'Edit/padam draf; laraskan masa mula dan pilihan utama bila diterbitkan',
'page.matches.desc': 'Edit/padam draf; laraskan masa mula bila diterbitkan; nyahterbit jika belum selesai',
'page.bets.title': 'Pertaruhan',
'page.bets.desc': 'Tapis dan halaman semua pertaruhan dengan butiran pilihan',
'page.cashback.title': 'Rebat',