feat: split admin dashboard, improve match ops, and player closed-match UX
Admin: add match/player overview sub-nav; refine settlement flow and league match management UI; improve action button enabled/disabled styles; enhance logo upload and outright odds sync. API: expose matchPhase/bettingOpen for closed matches; league publish guards; settlement preview with auto score save; outright team auto-sync. Player: watermark for closed/settled states; keep match and bet details visible; remove default login credentials. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -31,6 +31,8 @@ const zh: Record<string, string> = {
|
||||
'login.captcha_refresh': '点击刷新',
|
||||
|
||||
'nav.dashboard': '概览',
|
||||
'nav.dashboard.matches': '赛事概览',
|
||||
'nav.dashboard.players': '玩家概览',
|
||||
'nav.users': '玩家管理',
|
||||
'nav.agents': '代理管理',
|
||||
'nav.agents_players': '代理&玩家',
|
||||
@@ -126,6 +128,22 @@ const zh: Record<string, string> = {
|
||||
'dash.user_suspended': '停用',
|
||||
'dash.user_direct': '直属',
|
||||
'dash.user_agents': '代理',
|
||||
'dash.section_matches_hint': '投注经营与赛事状态分布',
|
||||
'dash.section_players_hint': '玩家、代理与资金概况',
|
||||
'dash.kpi_match_total': '赛事总数',
|
||||
'dash.kpi_match_total_sub': '草稿 {draft} · 已发布 {published}',
|
||||
'dash.kpi_match_closed': '已封盘',
|
||||
'dash.kpi_match_closed_sub': '已取消 {n} 场',
|
||||
'dash.kpi_match_settled': '已结算赛事',
|
||||
'dash.kpi_match_settled_sub': '已完成结算的场次',
|
||||
'dash.kpi_agents_active': '活跃代理',
|
||||
'dash.kpi_agents_active_sub': '停用玩家 {suspended} 人',
|
||||
'dash.recent_players': '最新注册玩家',
|
||||
'dash.recent_bets': '最新注单',
|
||||
'dash.col_parent': '上级',
|
||||
'dash.col_bet_no': '注单号',
|
||||
'dash.col_stake': '投注额',
|
||||
'dash.col_placed_at': '下注时间',
|
||||
|
||||
'page.users.title': '玩家管理',
|
||||
'page.users.desc': '创建玩家、查看余额与投注概况,支持上分与状态管理',
|
||||
@@ -213,6 +231,8 @@ const en: Record<string, string> = {
|
||||
'login.captcha_refresh': 'Click to refresh',
|
||||
|
||||
'nav.dashboard': 'Overview',
|
||||
'nav.dashboard.matches': 'Match overview',
|
||||
'nav.dashboard.players': 'Player overview',
|
||||
'nav.users': 'Players',
|
||||
'nav.agents': 'Agents',
|
||||
'nav.agents_players': 'Agents & Players',
|
||||
@@ -308,6 +328,22 @@ const en: Record<string, string> = {
|
||||
'dash.user_suspended': 'Suspended',
|
||||
'dash.user_direct': 'Direct',
|
||||
'dash.user_agents': 'Agents',
|
||||
'dash.section_matches_hint': 'Betting performance and match distribution',
|
||||
'dash.section_players_hint': 'Players, agents, and wallet summary',
|
||||
'dash.kpi_match_total': 'Total matches',
|
||||
'dash.kpi_match_total_sub': 'Draft {draft} · Published {published}',
|
||||
'dash.kpi_match_closed': 'Closed',
|
||||
'dash.kpi_match_closed_sub': '{n} cancelled',
|
||||
'dash.kpi_match_settled': 'Settled matches',
|
||||
'dash.kpi_match_settled_sub': 'Matches fully settled',
|
||||
'dash.kpi_agents_active': 'Active agents',
|
||||
'dash.kpi_agents_active_sub': '{suspended} suspended players',
|
||||
'dash.recent_players': 'Recent sign-ups',
|
||||
'dash.recent_bets': 'Recent bets',
|
||||
'dash.col_parent': 'Parent',
|
||||
'dash.col_bet_no': 'Bet No.',
|
||||
'dash.col_stake': 'Stake',
|
||||
'dash.col_placed_at': 'Placed at',
|
||||
|
||||
'page.users.title': 'Players',
|
||||
'page.users.desc': 'Create players, balances, stakes, top-ups, and status',
|
||||
@@ -395,6 +431,8 @@ const ms: Record<string, string> = {
|
||||
'login.captcha_refresh': 'Klik untuk muat semula',
|
||||
|
||||
'nav.dashboard': 'Gambaran',
|
||||
'nav.dashboard.matches': 'Gambaran perlawanan',
|
||||
'nav.dashboard.players': 'Gambaran pemain',
|
||||
'nav.users': 'Pemain',
|
||||
'nav.agents': 'Ejen',
|
||||
'nav.agents_players': 'Ejen & Pemain',
|
||||
@@ -490,6 +528,22 @@ const ms: Record<string, string> = {
|
||||
'dash.user_suspended': 'Digantung',
|
||||
'dash.user_direct': 'Terus',
|
||||
'dash.user_agents': 'Ejen',
|
||||
'dash.section_matches_hint': 'Prestasi pertaruhan dan taburan perlawanan',
|
||||
'dash.section_players_hint': 'Pemain, ejen, dan ringkasan dana',
|
||||
'dash.kpi_match_total': 'Jumlah perlawanan',
|
||||
'dash.kpi_match_total_sub': 'Draf {draft} · Diterbitkan {published}',
|
||||
'dash.kpi_match_closed': 'Ditutup',
|
||||
'dash.kpi_match_closed_sub': '{n} dibatalkan',
|
||||
'dash.kpi_match_settled': 'Perlawanan diselesaikan',
|
||||
'dash.kpi_match_settled_sub': 'Perlawanan yang telah diselesaikan',
|
||||
'dash.kpi_agents_active': 'Ejen aktif',
|
||||
'dash.kpi_agents_active_sub': '{suspended} pemain digantung',
|
||||
'dash.recent_players': 'Pendaftaran terkini',
|
||||
'dash.recent_bets': 'Pertaruhan terkini',
|
||||
'dash.col_parent': 'Induk',
|
||||
'dash.col_bet_no': 'No. pertaruhan',
|
||||
'dash.col_stake': 'Stake',
|
||||
'dash.col_placed_at': 'Masa pertaruhan',
|
||||
|
||||
'page.users.title': 'Pemain',
|
||||
'page.users.desc': 'Cipta pemain, baki, stake, tambah baki dan status',
|
||||
|
||||
@@ -96,6 +96,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'user.btn.save_profile': 'Simpan',
|
||||
'user.btn.confirm_deposit': 'Sahkan tambah baki',
|
||||
'user.deposit_remark_default': 'Tambah baki admin',
|
||||
'user.withdraw_remark_default': 'Pengeluaran admin',
|
||||
'user.field.account_type': 'Jenis akaun',
|
||||
'user.type.player': 'Pemain',
|
||||
'user.type.tier1_agent': 'Ejen peringkat 1',
|
||||
@@ -162,14 +163,19 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'finance.tx.deposit': 'Deposit',
|
||||
'finance.tx.withdraw': 'Pengeluaran',
|
||||
'finance.tx.request_id': 'ID permintaan',
|
||||
'finance.remark.agent_deposit': 'Deposit ejen',
|
||||
'finance.remark.agent_withdraw': 'Pengeluaran ejen',
|
||||
'finance.remark.admin_deposit': 'Deposit admin',
|
||||
'finance.remark.admin_withdraw': 'Pengeluaran admin',
|
||||
'finance.remark.initial_balance': 'Baki permulaan akaun',
|
||||
'agent.col.no_records': 'Tiada rekod',
|
||||
'agent.btn.confirm_adjust': 'Sahkan',
|
||||
'agent.field.select_user': 'Pilih pengguna',
|
||||
'agent.ph.select_user': 'Cari nama pengguna pemain',
|
||||
'agent.hint.select_user': 'Pilih akaun pemain sedia ada untuk naik taraf ke ejen peringkat 1',
|
||||
|
||||
'match.create_btn': '+ Kejohanan baharu',
|
||||
'match.create_fixture_btn': '+ Perlawanan tunggal',
|
||||
'match.create_btn': '+ Liga baharu',
|
||||
'match.create_fixture_btn': '+ Perlawanan baharu',
|
||||
'match.btn.markets': 'Pasaran',
|
||||
'match.filter.keyword_ph': 'Nama kejohanan / kod pasukan',
|
||||
'match.col.league': 'Kejohanan',
|
||||
@@ -182,6 +188,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'match.col.matchup': 'Perlawanan',
|
||||
'match.col.kickoff': 'Masa mula',
|
||||
'match.dialog.create_league': 'Kejohanan baharu',
|
||||
'match.dialog.edit_league': 'Edit kejohanan',
|
||||
'match.dialog.create_fixture': 'Perlawanan tunggal baharu',
|
||||
'match.dialog.create': 'Perlawanan tunggal baharu',
|
||||
'match.dialog.edit': 'Edit perlawanan tunggal',
|
||||
@@ -204,11 +211,17 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'match.field.away_ms': 'Pelawat (MS)',
|
||||
'match.field.featured': 'Pilihan utama',
|
||||
'match.hint.create_draft': 'Disimpan sebagai draf; kembangkan kejohanan dan terbitkan setiap perlawanan tunggal.',
|
||||
'match.hint.create_league': 'Cipta kejohanan dahulu, kemudian kembangkan untuk tambah perlawanan tunggal.',
|
||||
'match.hint.create_league': 'Kejohanan baharu tidak diterbitkan secara lalai; terbitkan untuk paparan pemain, kemudian kembangkan untuk tambah perlawanan.',
|
||||
'league.status.PUBLISHED': 'Diterbitkan',
|
||||
'league.status.UNPUBLISHED': 'Tidak diterbitkan',
|
||||
'league.btn.unpublish': 'Nyahterbit',
|
||||
'msg.league_published': 'Kejohanan diterbitkan',
|
||||
'msg.league_unpublished': 'Kejohanan dinyahterbit',
|
||||
'match.hint.edit_published': 'Diterbitkan: edit masa mula, pilihan utama, nama paparan; tertutup/selesai dikunci.',
|
||||
'match.expand_league_hint': 'Kembangkan liga untuk urus perlawanan; odds juara di tab Odds juara.',
|
||||
'match.expand_outright_hint': 'Kembangkan liga untuk sunting odds juara; pasukan perlawanan disegerakkan auto, boleh tambah pasukan belum dijadualkan.',
|
||||
'outright.odds_only_hint': 'Pasukan daripada perlawanan disegerakkan auto; boleh tambah pasukan manual dan sunting odds di sini.',
|
||||
'outright.fixture_sync_added': '{n} pasukan disegerakkan auto daripada perlawanan',
|
||||
'outright.col.teams_from_fixtures': 'Pasukan (daripada perlawanan)',
|
||||
'outright.col.teams_total': 'Pasukan odds juara',
|
||||
'outright.empty_no_teams': 'Tiada pasukan — tambah perlawanan di Konfigurasi atau klik Tambah pasukan.',
|
||||
@@ -365,6 +378,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'matchEditor.field.line_value': 'Garisan',
|
||||
'matchEditor.ph.kickoff': 'Pilih tarikh & masa mula',
|
||||
'matchEditor.group.league': 'Liga',
|
||||
'matchEditor.hint.league_readonly': 'Nama dan logo liga diselenggara dalam senarai kejohanan; paparan di sini hanya baca.',
|
||||
'matchEditor.group.home': 'Tuan rumah',
|
||||
'matchEditor.group.away': 'Pelawat',
|
||||
'matchEditor.group.schedule': 'Jadual & paparan',
|
||||
@@ -441,7 +455,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'settlement.ht_score': 'Skor separuh masa',
|
||||
'settlement.ft_score': 'Skor penuh masa',
|
||||
'settlement.record_score': 'Simpan skor',
|
||||
'settlement.preview_hint': 'Skor di atas disimpan secara automatik sebelum pratonton',
|
||||
'settlement.preview_hint': 'Isi skor dan klik pratonton — skor disimpan secara automatik',
|
||||
'settlement.preview_btn': 'Pratonton penyelesaian',
|
||||
'settlement.preview_failed': 'Gagal menjana pratonton penyelesaian',
|
||||
'settlement.err_score_not_recorded': 'Sila masukkan skor separuh masa dan penuh masa sebelum penyelesaian',
|
||||
@@ -506,6 +520,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'msg.deleted': 'Dipadam',
|
||||
'msg.delete_failed': 'Gagal memadam',
|
||||
'msg.league_created': 'Kejohanan dicipta',
|
||||
'msg.league_updated': 'Kejohanan dikemas kini',
|
||||
'msg.match_created_draft': 'Perlawanan tunggal dicipta (draf)',
|
||||
'msg.published': 'Diterbitkan dengan pasaran',
|
||||
'msg.closed': 'Pertaruhan ditutup',
|
||||
@@ -604,6 +619,16 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'outright.btn.add_team': 'Tambah pasukan',
|
||||
'outright.add.filter_fixture': 'Pasukan sedia ada',
|
||||
'outright.add.filter_all': 'Semua terbina dalam',
|
||||
'outright.add.filter_custom': 'Tersuai',
|
||||
'outright.add.custom_hint': 'Isi kod pasukan dan nama Cina/Inggeris; logo melalui muat naik atau URL.',
|
||||
'outright.add.field_code': 'Kod pasukan',
|
||||
'outright.add.field_logo': 'Logo',
|
||||
'outright.add.ph_code': 'cth. TEAM01',
|
||||
'outright.add.ph_name_zh': 'Nama Cina',
|
||||
'outright.add.ph_name_en': 'Nama Inggeris',
|
||||
'outright.add.err_code_required': 'Sila isi kod pasukan',
|
||||
'outright.add.err_name_required': 'Sila isi sekurang-kurangnya nama Cina atau Inggeris',
|
||||
'outright.add.err_duplicate': 'Kod pasukan ini sudah ada dalam pasaran juara',
|
||||
'outright.add.select_all': 'Pilih semua',
|
||||
'outright.add.clear_selection': 'Kosongkan pilihan',
|
||||
'outright.add.selected_count': '{n} dipilih',
|
||||
|
||||
@@ -96,6 +96,7 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'user.btn.save_profile': '保存资料',
|
||||
'user.btn.confirm_deposit': '确认上分',
|
||||
'user.deposit_remark_default': '管理员上分',
|
||||
'user.withdraw_remark_default': '管理员下分',
|
||||
'user.field.account_type': '账号类型',
|
||||
'user.type.player': '玩家',
|
||||
'user.type.tier1_agent': '一级代理',
|
||||
@@ -165,6 +166,11 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'finance.tx.deposit': '上分',
|
||||
'finance.tx.withdraw': '下分',
|
||||
'finance.tx.request_id': '请求 ID',
|
||||
'finance.remark.agent_deposit': '代理上分',
|
||||
'finance.remark.agent_withdraw': '代理下分',
|
||||
'finance.remark.admin_deposit': '管理员上分',
|
||||
'finance.remark.admin_withdraw': '管理员下分',
|
||||
'finance.remark.initial_balance': '开户初始余额',
|
||||
'agent.col.no_records': '暂无记录',
|
||||
'agent.btn.confirm_adjust': '确认调整',
|
||||
'agent.field.select_user': '选择用户',
|
||||
@@ -183,8 +189,8 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'agent.msg.cascade_freeze_done': '已停用代理并冻结其直属玩家',
|
||||
'agent.msg.freeze_done': '已{action}',
|
||||
|
||||
'match.create_btn': '+ 新增赛事',
|
||||
'match.create_fixture_btn': '+ 新增单场',
|
||||
'match.create_btn': '+ 新增联赛',
|
||||
'match.create_fixture_btn': '+ 新增本场赛事',
|
||||
'match.btn.markets': '盘口',
|
||||
'match.filter.keyword_ph': '赛事名 / 球队代码',
|
||||
'match.filter.status_hint': '仅筛选展开后的单场列表与「单场」列计数,不会隐藏新建的空联赛',
|
||||
@@ -198,6 +204,7 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'match.col.matchup': '对阵',
|
||||
'match.col.kickoff': '开赛时间',
|
||||
'match.dialog.create_league': '新增赛事',
|
||||
'match.dialog.edit_league': '编辑赛事',
|
||||
'match.dialog.create_fixture': '新增单场',
|
||||
'match.dialog.create': '新增单场',
|
||||
'match.dialog.edit': '编辑单场',
|
||||
@@ -220,11 +227,17 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'match.field.away_ms': '客队(马来)',
|
||||
'match.field.featured': '热门',
|
||||
'match.hint.create_draft': '创建后为草稿,请展开赛事后在单场行点击「发布」并生成盘口。',
|
||||
'match.hint.create_league': '创建赛事(联赛)后,展开该行可添加多场单场比赛。',
|
||||
'match.hint.create_league': '新建联赛默认为未发布,请在列表点击「发布」后玩家端可见;展开该行可添加单场。',
|
||||
'league.status.PUBLISHED': '已发布',
|
||||
'league.status.UNPUBLISHED': '未发布',
|
||||
'league.btn.unpublish': '下架',
|
||||
'msg.league_published': '联赛已发布',
|
||||
'msg.league_unpublished': '联赛已下架',
|
||||
'match.hint.edit_published': '已发布:可修改开赛时间、热门及显示名称;封盘/已结算后不可编辑。',
|
||||
'match.expand_league_hint': '展开联赛可管理单场赛事;夺冠盘口请在「优胜赛配置(盘口)」中设置赔率。',
|
||||
'match.expand_outright_hint': '展开联赛可编辑夺冠赔率;单场球队会自动同步,也可手动补充尚未赛程的球队。',
|
||||
'outright.odds_only_hint': '单场赛程中的球队会自动加入;可手动添加尚未参赛的球队,并在此调整赔率。',
|
||||
'outright.fixture_sync_added': '已从单场自动同步 {n} 支球队',
|
||||
'outright.col.teams_from_fixtures': '参赛球队(来自单场)',
|
||||
'outright.col.teams_total': '冠军盘球队',
|
||||
'outright.empty_no_teams': '暂无球队,请先在「赛事配置」添加单场或点击「添加队伍」。',
|
||||
@@ -381,6 +394,7 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'matchEditor.field.line_value': '盘口线',
|
||||
'matchEditor.ph.kickoff': '选择开赛日期与时间',
|
||||
'matchEditor.group.league': '联赛信息',
|
||||
'matchEditor.hint.league_readonly': '联赛名称与 Logo 请在赛事管理列表中点击「编辑」维护,此处仅展示。',
|
||||
'matchEditor.group.home': '主队',
|
||||
'matchEditor.group.away': '客队',
|
||||
'matchEditor.group.schedule': '赛程与展示',
|
||||
@@ -457,10 +471,10 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'settlement.ht_score': '半场比分',
|
||||
'settlement.ft_score': '全场比分',
|
||||
'settlement.record_score': '录入比分',
|
||||
'settlement.preview_hint': '生成预览前会自动保存上方比分',
|
||||
'settlement.preview_hint': '填写比分后点击生成预览,系统将自动保存并计算派彩',
|
||||
'settlement.preview_btn': '生成结算预览',
|
||||
'settlement.preview_failed': '生成结算预览失败',
|
||||
'settlement.err_score_not_recorded': '请先录入半场与全场比分后再结算',
|
||||
'settlement.err_score_not_recorded': '请先填写半场与全场比分后再生成预览',
|
||||
'settlement.preview_title': '结算预览',
|
||||
'settlement.single_count': '单关注单数',
|
||||
'settlement.preview_pending_bets': '待结算注单',
|
||||
@@ -572,6 +586,7 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'msg.deleted': '已删除',
|
||||
'msg.delete_failed': '删除失败',
|
||||
'msg.league_created': '赛事已创建',
|
||||
'msg.league_updated': '赛事已更新',
|
||||
'msg.match_created_draft': '单场已创建(草稿)',
|
||||
'msg.published': '已发布并生成盘口',
|
||||
'msg.closed': '已封盘',
|
||||
@@ -671,6 +686,16 @@ export const adminPagesZh: Record<string, string> = {
|
||||
'outright.btn.add_team': '添加队伍',
|
||||
'outright.add.filter_fixture': '已有队伍',
|
||||
'outright.add.filter_all': '全部内置',
|
||||
'outright.add.filter_custom': '自定义',
|
||||
'outright.add.custom_hint': '手动填写球队代码与中/英文名称,Logo 可上传或填写 URL。',
|
||||
'outright.add.field_code': '球队代码',
|
||||
'outright.add.field_logo': 'Logo',
|
||||
'outright.add.ph_code': '如 TEAM01',
|
||||
'outright.add.ph_name_zh': '中文队名',
|
||||
'outright.add.ph_name_en': '英文队名',
|
||||
'outright.add.err_code_required': '请填写球队代码',
|
||||
'outright.add.err_name_required': '请至少填写中文或英文队名',
|
||||
'outright.add.err_duplicate': '该球队代码已在冠军盘中',
|
||||
'outright.add.select_all': '全选',
|
||||
'outright.add.clear_selection': '取消全选',
|
||||
'outright.add.selected_count': '已选 {n} 支',
|
||||
@@ -902,6 +927,7 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'user.btn.save_profile': 'Save',
|
||||
'user.btn.confirm_deposit': 'Confirm top-up',
|
||||
'user.deposit_remark_default': 'Admin top-up',
|
||||
'user.withdraw_remark_default': 'Admin withdraw',
|
||||
'user.field.account_type': 'Account type',
|
||||
'user.type.player': 'Player',
|
||||
'user.type.tier1_agent': 'Tier-1 agent',
|
||||
@@ -971,6 +997,11 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'finance.tx.deposit': 'Deposit',
|
||||
'finance.tx.withdraw': 'Withdraw',
|
||||
'finance.tx.request_id': 'Request ID',
|
||||
'finance.remark.agent_deposit': 'Agent deposit',
|
||||
'finance.remark.agent_withdraw': 'Agent withdraw',
|
||||
'finance.remark.admin_deposit': 'Admin deposit',
|
||||
'finance.remark.admin_withdraw': 'Admin withdraw',
|
||||
'finance.remark.initial_balance': 'Initial account balance',
|
||||
'agent.col.no_records': 'No records',
|
||||
'agent.btn.confirm_adjust': 'Confirm',
|
||||
'agent.field.select_user': 'Select user',
|
||||
@@ -989,8 +1020,8 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'agent.msg.cascade_freeze_done': 'Agent suspended and direct players frozen',
|
||||
'agent.msg.freeze_done': '{action} completed',
|
||||
|
||||
'match.create_btn': '+ New tournament',
|
||||
'match.create_fixture_btn': '+ Add fixture',
|
||||
'match.create_btn': '+ New league',
|
||||
'match.create_fixture_btn': '+ Add match',
|
||||
'match.btn.markets': 'Markets',
|
||||
'match.filter.keyword_ph': 'Tournament / team code',
|
||||
'match.filter.status_hint': 'Filters fixtures inside a league and the fixture count column; empty leagues stay visible',
|
||||
@@ -1004,6 +1035,7 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'match.col.matchup': 'Matchup',
|
||||
'match.col.kickoff': 'Kickoff',
|
||||
'match.dialog.create_league': 'New tournament',
|
||||
'match.dialog.edit_league': 'Edit tournament',
|
||||
'match.dialog.create_fixture': 'New fixture',
|
||||
'match.dialog.create': 'New fixture',
|
||||
'match.dialog.edit': 'Edit fixture',
|
||||
@@ -1026,11 +1058,17 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'match.field.away_ms': 'Away (MS)',
|
||||
'match.field.featured': 'Featured',
|
||||
'match.hint.create_draft': 'Saved as draft; expand the tournament and publish each fixture to open markets.',
|
||||
'match.hint.create_league': 'Create a tournament first, then expand it to add fixtures.',
|
||||
'match.hint.create_league': 'New tournaments are unpublished by default; use Publish in the list for player visibility, then expand to add fixtures.',
|
||||
'league.status.PUBLISHED': 'Published',
|
||||
'league.status.UNPUBLISHED': 'Unpublished',
|
||||
'league.btn.unpublish': 'Unpublish',
|
||||
'msg.league_published': 'Tournament published',
|
||||
'msg.league_unpublished': 'Tournament unpublished',
|
||||
'match.hint.edit_published': 'Published: edit kickoff, featured, display names; closed/settled are locked.',
|
||||
'match.expand_league_hint': 'Expand a league to manage fixtures; set winner odds under Outright odds.',
|
||||
'match.expand_outright_hint': 'Expand a league to edit winner odds; fixture teams sync automatically, and you can add teams not yet on the schedule.',
|
||||
'outright.odds_only_hint': 'Teams from fixtures are added automatically; add extra teams manually and edit winner odds here.',
|
||||
'outright.fixture_sync_added': '{n} team(s) synced automatically from fixtures',
|
||||
'outright.col.teams_from_fixtures': 'Teams (from fixtures)',
|
||||
'outright.col.teams_total': 'Outright teams',
|
||||
'outright.empty_no_teams': 'No teams yet — add fixtures under Fixtures or click Add team.',
|
||||
@@ -1187,6 +1225,7 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'matchEditor.field.line_value': 'Line',
|
||||
'matchEditor.ph.kickoff': 'Select kickoff date & time',
|
||||
'matchEditor.group.league': 'League',
|
||||
'matchEditor.hint.league_readonly': 'Edit league name and logo from the tournament list; shown here read-only.',
|
||||
'matchEditor.group.home': 'Home team',
|
||||
'matchEditor.group.away': 'Away team',
|
||||
'matchEditor.group.schedule': 'Schedule & display',
|
||||
@@ -1263,10 +1302,10 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'settlement.ht_score': 'Half-time score',
|
||||
'settlement.ft_score': 'Full-time score',
|
||||
'settlement.record_score': 'Save score',
|
||||
'settlement.preview_hint': 'Current scores are saved automatically before preview',
|
||||
'settlement.preview_hint': 'Enter scores and click preview — scores are saved automatically',
|
||||
'settlement.preview_btn': 'Preview settlement',
|
||||
'settlement.preview_failed': 'Failed to generate settlement preview',
|
||||
'settlement.err_score_not_recorded': 'Enter half-time and full-time scores before settling',
|
||||
'settlement.err_score_not_recorded': 'Enter half-time and full-time scores before preview',
|
||||
'settlement.preview_title': 'Settlement preview',
|
||||
'settlement.single_count': 'Single bets',
|
||||
'settlement.preview_pending_bets': 'Pending bets',
|
||||
@@ -1379,6 +1418,7 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'msg.deleted': 'Deleted',
|
||||
'msg.delete_failed': 'Delete failed',
|
||||
'msg.league_created': 'Tournament created',
|
||||
'msg.league_updated': 'Tournament updated',
|
||||
'msg.match_created_draft': 'Fixture created (draft)',
|
||||
'msg.published': 'Published with markets',
|
||||
'msg.closed': 'Betting closed',
|
||||
@@ -1478,6 +1518,16 @@ export const adminPagesEn: Record<string, string> = {
|
||||
'outright.btn.add_team': 'Add team',
|
||||
'outright.add.filter_fixture': 'From fixtures',
|
||||
'outright.add.filter_all': 'All built-in',
|
||||
'outright.add.filter_custom': 'Custom',
|
||||
'outright.add.custom_hint': 'Enter team code and Chinese/English names; logo via upload or URL.',
|
||||
'outright.add.field_code': 'Team code',
|
||||
'outright.add.field_logo': 'Logo',
|
||||
'outright.add.ph_code': 'e.g. TEAM01',
|
||||
'outright.add.ph_name_zh': 'Chinese name',
|
||||
'outright.add.ph_name_en': 'English name',
|
||||
'outright.add.err_code_required': 'Team code is required',
|
||||
'outright.add.err_name_required': 'Enter at least Chinese or English name',
|
||||
'outright.add.err_duplicate': 'This team code is already on the outright market',
|
||||
'outright.add.select_all': 'Select all',
|
||||
'outright.add.clear_selection': 'Clear selection',
|
||||
'outright.add.selected_count': '{n} selected',
|
||||
|
||||
Reference in New Issue
Block a user