feat(admin+api): 列表页子路由重构、结算历史与充值截图清理

赛事/代理管理从表格展开改为子路由详情页;结算页增加预览弹窗与历史记录;媒体库支持截图存储统计与自动/手动清理;Player 端充值截图压缩为 WebP 300KB。
This commit is contained in:
2026-06-22 12:28:25 +08:00
parent 499522f3fb
commit 648c314e23
38 changed files with 3298 additions and 1147 deletions

View File

@@ -140,6 +140,9 @@ const zh: Record<string, string> = {
'breadcrumb.settlement': '赛事结算',
'breadcrumb.match_edit': '编辑赛事',
'breadcrumb.match_markets': '盘口管理',
'breadcrumb.league_fixtures': '单场赛事',
'breadcrumb.league_outrights': '优胜冠军',
'breadcrumb.agent_direct_players': '直属玩家',
'breadcrumb.outright_edit': '编辑优胜冠军',
'role.admin': '系统管理员',
'role.super_admin': '超级管理员',
@@ -319,7 +322,11 @@ const zh: Record<string, string> = {
'match.status.SETTLED': '已结算',
'match.status.PENDING_SETTLEMENT': '待结算',
'match.filter.has_bets': '仅显示有下注',
'match.filter.kickoff_from': '开赛起',
'match.filter.kickoff_to': '开赛止',
'match.sort.default': '默认排序',
'match.sort.kickoff_asc': '按开赛时间(早→晚)',
'match.sort.kickoff_desc': '按开赛时间(晚→早)',
'match.sort.bet_count': '按注单数',
'match.sort.total_stake': '按投注额',
// 列表页/弹窗文案通过 bundles/zh-CN 动态平载,不在此处静态 spread
@@ -453,6 +460,9 @@ const en: Record<string, string> = {
'breadcrumb.settlement': 'Settlement',
'breadcrumb.match_edit': 'Edit match',
'breadcrumb.match_markets': 'Markets',
'breadcrumb.league_fixtures': 'Fixtures',
'breadcrumb.league_outrights': 'Outright odds',
'breadcrumb.agent_direct_players': 'Direct players',
'breadcrumb.outright_edit': 'Edit outright',
'role.admin': 'Administrator',
'role.super_admin': 'Super admin',
@@ -632,7 +642,11 @@ const en: Record<string, string> = {
'match.status.SETTLED': 'Settled',
'match.status.PENDING_SETTLEMENT': 'Pending settlement',
'match.filter.has_bets': 'Show Placed Bets Only',
'match.filter.kickoff_from': 'Kickoff from',
'match.filter.kickoff_to': 'Kickoff to',
'match.sort.default': 'Default Order',
'match.sort.kickoff_asc': 'By kickoff (earliest first)',
'match.sort.kickoff_desc': 'By kickoff (latest first)',
'match.sort.bet_count': 'By Bet Count',
'match.sort.total_stake': 'By Stake Amount',
// 列表页/弹窗文案通过 bundles/en-US 动态平载,不在此处静态 spread
@@ -766,6 +780,9 @@ const ms: Record<string, string> = {
'breadcrumb.settlement': 'Penyelesaian',
'breadcrumb.match_edit': 'Edit perlawanan',
'breadcrumb.match_markets': 'Pasaran',
'breadcrumb.league_fixtures': 'Perlawanan',
'breadcrumb.league_outrights': 'Odds juara',
'breadcrumb.agent_direct_players': 'Pemain langsung',
'breadcrumb.outright_edit': 'Edit juara',
'role.admin': 'Pentadbir',
'role.super_admin': 'Super pentadbir',
@@ -945,7 +962,11 @@ const ms: Record<string, string> = {
'match.status.SETTLED': 'Diselesaikan',
'match.status.PENDING_SETTLEMENT': 'Menunggu penyelesaian',
'match.filter.has_bets': 'Tunjukkan Pertaruhan Sahaja',
'match.filter.kickoff_from': 'Mula dari',
'match.filter.kickoff_to': 'Mula hingga',
'match.sort.default': 'Susunan Lalai',
'match.sort.kickoff_asc': 'Ikut masa mula (awal→lewat)',
'match.sort.kickoff_desc': 'Ikut masa mula (lewat→awal)',
'match.sort.bet_count': 'Ikut Bil. Pertaruhan',
'match.sort.total_stake': 'Ikut Jumlah Taruhan',
// 列表页/弹窗文案通过 bundles/ms-MY 动态平载,不在此处静态 spread

View File

@@ -134,6 +134,7 @@ export const adminPagesMs: Record<string, string> = {
'agent.col.credit': 'Had / Digunakan / Tersedia',
'agent.col.direct_players': 'Pemain terus',
'agent.direct_players_title': 'Pemain terus · {name}',
'agent.open_agent_hint': 'Klik baris ejen untuk buka halaman pemain terus.',
'agent.platform_row_name': 'Platform',
'agent.col.sub_agents': 'Sub-ejen',
'agent.col.cashback': 'Kadar rebat',
@@ -287,6 +288,10 @@ export const adminPagesMs: Record<string, string> = {
'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.',
'match.open_league_hint': 'Klik baris liga untuk buka halaman urus perlawanan.',
'match.open_outright_hint': 'Klik baris liga untuk buka halaman odds juara.',
'match.league_fixtures_subtitle': 'Perlawanan',
'match.league_outrights_subtitle': 'Odds juara',
'outright.odds_only_hint': 'Pasukan daripada perlawanan disegerakkan auto; boleh tambah pasukan manual dan sunting odds di sini. Pasaran juara ikut terbitan liga — tiada langkah terbit berasingan.',
'outright.league_unpublished_hint': 'Liga belum diterbitkan. Tetapkan liga kepada Diterbitkan di halaman ini untuk membuka pertaruhan juara secara automatik.',
'outright.unsettled_fixtures_hint': '{n} perlawanan dalam liga ini masih belum diselesaikan. Selesaikan dahulu sebelum juara.',
@@ -355,6 +360,7 @@ export const adminPagesMs: Record<string, string> = {
'audit.action.UPDATE_PLAYER_ACCOUNT_SETTINGS': 'Kemas kini tetapan akaun pemain',
'audit.action.UPDATE_AGENT_SUSPEND_SETTINGS': 'Kemas kini tetapan penggantungan ejen',
'audit.action.UPDATE_AGENT_HIERARCHY_SETTINGS': 'Kemas kini tetapan hierarki ejen',
'audit.action.UPDATE_PLATFORM_DIRECT_CASHBACK_SETTINGS': 'Kemas kini tetapan rebat platform',
'audit.action.UPDATE_BETTING_LIMITS': 'Kemas kini had pertaruhan',
'audit.action.CONFIRM_SETTLEMENT': 'Sahkan penyelesaian',
'audit.action.CONFIRM_RESETTLE': 'Sahkan penyelesaian semula',
@@ -362,6 +368,7 @@ export const adminPagesMs: Record<string, string> = {
'audit.action.CANCEL_CASHBACK': 'Batalkan kelompok rebat',
'audit.action.CREATE_STAFF': 'Cipta kakitangan',
'audit.action.UPDATE_STAFF': 'Kemas kini kakitangan',
'audit.action.DELETE_STAFF': 'Padam kakitangan',
'audit.action.PURGE_UNUSED_FILES': 'Padam media tidak digunakan',
'audit.action.FORGOT_PASSWORD_RESET': 'Pemain set semula kata laluan',
'audit.action.CREATE_LEAGUE': 'Cipta liga',
@@ -613,6 +620,7 @@ export const adminPagesMs: Record<string, string> = {
'settlement.record_score': 'Simpan skor',
'settlement.preview_hint': 'Pratonton menukar perlawanan ke menunggu penyelesaian (skor disimpan selepas pengesahan; boleh buka semula sebelum itu)',
'settlement.preview_btn': 'Pratonton penyelesaian',
'settlement.view_preview_btn': 'Lihat pratonton penyelesaian',
'settlement.preview_failed': 'Gagal menjana pratonton penyelesaian',
'settlement.err_score_not_recorded': 'Sila masukkan skor separuh masa dan penuh masa sebelum penyelesaian',
'settlement.must_close_first': 'Tutup pertaruhan sebelum penyelesaian',
@@ -647,6 +655,33 @@ export const adminPagesMs: Record<string, string> = {
'settlement.smart.strategy.TARGET_HOLD': 'Sasaran pegangan',
'msg.score_recorded': 'Skor disimpan',
'msg.settlement_confirmed': 'Penyelesaian disahkan',
'settlement.resettle_reason': 'Sebab penyelesaian semula',
'settlement.resettle_preview': 'Pratonton penyelesaian semula',
'settlement.resettle_preview_title': 'Pratonton penyelesaian semula',
'settlement.resettle_affected': 'Pertaruhan terpengaruh',
'settlement.resettle_topup': 'Bayaran tambahan diperlukan',
'settlement.resettle_clawback': 'Bayaran balik diperlukan',
'settlement.resettle_confirm': 'Sahkan penyelesaian semula',
'settlement.resettle_affected_list': 'Butiran Pertaruhan Terpengaruh',
'settlement.resettle_col.old_result': 'Keputusan/Bayaran Asal',
'settlement.resettle_col.new_result': 'Keputusan/Bayaran Baharu',
'settlement.resettle_col.adjust': 'Pelarasan',
'settlement.history_tab': 'Rekod Penyelesaian',
'settlement.history_tab_bets': 'Statistik Pertaruhan',
'settlement.history.no_records': 'Tiada rekod penyelesaian',
'settlement.history.col.batch_no': 'No. Kumpulan',
'settlement.history.col.type': 'Jenis',
'settlement.history.col.score': 'Skor (HT/FT)',
'settlement.history.col.corners': 'Sepakan sudut (R/T)',
'settlement.history.col.cards': 'Kad kuning/merah (R/T)',
'settlement.history.col.total_bets': 'Pertaruhan diselesaikan',
'settlement.history.col.total_payout': 'Jumlah bayaran',
'settlement.history.col.total_refund': 'Jumlah bayaran balik',
'settlement.history.col.operator': 'Pengendali',
'settlement.history.col.time': 'Masa diselesaikan',
'settlement.history.col.reason': 'Sebab',
'settlement.history.type.initial': 'Penyelesaian awal',
'settlement.history.type.resettle': 'Penyelesaian semula',
'agent_portal.create_player_section': 'Cipta pemain',
'agent_portal.deposit_section': 'Tambah baki',
@@ -993,6 +1028,15 @@ export const adminPagesMs: Record<string, string> = {
'media.no_files': 'Tiada fail lagi',
'media.refresh': 'Muat Semula',
'media.unused_count': '{n} tidak digunakan',
'media.storage_stats': 'Statistik Storan',
'media.deposits_on_disk': 'Tangkapan Skrin Deposit (Tidak dipetakan ke Media)',
'media.screenshot_cleanup': 'Pembersihan Tangkapan Skrin',
'media.cleanup_auto_enabled': 'Pembersihan Auto Dinonaktifkan/Diaktifkan',
'media.cleanup_keep_days': 'Tempoh Penyimpanan (Hari)',
'media.cleanup_before_date': 'Tarikh Akhir Pembersihan Manual',
'media.cleanup_run_now': 'Bersihkan Sekarang',
'media.cleanup_result': 'Berjaya membersihkan {cleaned} tangkapan skrin, membebaskan storan sebanyak {size}.',
'media.cleanup_expired_tag': 'Dibersihkan',
};
export default adminPagesMs;

View File

@@ -1087,6 +1087,14 @@ export const adminPagesZh: Record<string, string> = {
'media.no_files': '暂无文件',
'media.refresh': '刷新',
'media.unused_count': '{n} 个未使用',
'media.storage_stats': '存储空间统计',
'media.deposits_on_disk': '充值订单截图 (未挂靠媒体库)',
'media.screenshot_cleanup': '充值截图清理',
'media.cleanup_auto_enabled': '开启自动定期清理',
'media.cleanup_keep_days': '截图保留天数',
'media.cleanup_before_date': '手动清理截止日期',
'media.cleanup_run_now': '立即清理',
'media.cleanup_result': '成功清理了 {cleaned} 张截图,释放了 {size} 空间。',
};
export const adminPagesEn: Record<string, string> = {
@@ -2178,4 +2186,12 @@ export const adminPagesEn: Record<string, string> = {
'media.no_files': 'No files yet',
'media.refresh': 'Refresh',
'media.unused_count': '{n} unused',
'media.storage_stats': 'Storage Statistics',
'media.deposits_on_disk': 'Recharge Screenshots (Unmapped to Media Library)',
'media.screenshot_cleanup': 'Screenshot Cleanup',
'media.cleanup_auto_enabled': 'Enable Auto-cleanup',
'media.cleanup_keep_days': 'Retention Days',
'media.cleanup_before_date': 'Manual Cleanup Before Date',
'media.cleanup_run_now': 'Clean Now',
'media.cleanup_result': 'Successfully cleaned {cleaned} screenshot(s), freeing {size} of space.',
};

View File

@@ -140,6 +140,7 @@ const adminPages: Record<string, string> = {
'agent.col.credit': 'Limit / Used / Available',
'agent.col.direct_players': 'Direct players',
'agent.direct_players_title': 'Direct players · {name}',
'agent.open_agent_hint': 'Click an agent row to open their direct players page.',
'agent.platform_row_name': 'Platform',
'agent.col.sub_agents': 'Sub-agents',
'agent.col.cashback': 'Cashback rate',
@@ -307,6 +308,10 @@ const adminPages: Record<string, string> = {
'match.hint.edit_published': 'Published: edit kickoff, featured, display names; closed/settled are locked.',
'match.expand_league_hint': 'Expand a league to manage fixtures; use Outright odds for winner markets.',
'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.',
'match.open_league_hint': 'Click a league row to open its fixture management page.',
'match.open_outright_hint': 'Click a league row to open its outright odds page.',
'match.league_fixtures_subtitle': 'Fixtures',
'match.league_outrights_subtitle': 'Outright odds',
'outright.odds_only_hint': 'Teams from fixtures are added automatically; add extra teams manually and edit winner odds here. Outright follows league publish—no separate publish step.',
'outright.league_unpublished_hint': 'League is not published yet. Set the league to Published on this page to open outright betting automatically.',
'outright.unsettled_fixtures_hint': '{n} fixture(s) in this league are still unsettled. Settle them before settling the outright market.',
@@ -372,17 +377,24 @@ const adminPages: Record<string, string> = {
'audit.action.UPDATE_AGENT': 'Update agent',
'audit.action.UPDATE_PLAYER_ACCOUNT_SETTINGS': 'Update player account settings',
'audit.action.UPDATE_AGENT_SUSPEND_SETTINGS': 'Update agent suspend settings',
'audit.action.UPDATE_AGENT_HIERARCHY_SETTINGS': 'Update agent hierarchy settings',
'audit.action.UPDATE_PLATFORM_DIRECT_CASHBACK_SETTINGS': 'Update platform cashback settings',
'audit.action.UPDATE_BETTING_LIMITS': 'Update betting limits',
'audit.action.RESET_PLAYER_PASSWORD': 'Reset player password',
'audit.action.CONFIRM_SETTLEMENT': 'Confirm settlement',
'audit.action.CONFIRM_RESETTLE': 'Confirm resettlement',
'audit.action.CONFIRM_CASHBACK': 'Confirm cashback payout',
'audit.action.CANCEL_CASHBACK': 'Cancel cashback batch',
'audit.action.CREATE_STAFF': 'Create staff account',
'audit.action.UPDATE_STAFF': 'Edit staff account',
'audit.action.DELETE_STAFF': 'Delete staff account',
'audit.module.USERS': 'Players',
'audit.module.AGENTS': 'Agents',
'audit.module.SYSTEM': 'System',
'audit.module.SETTINGS': 'Settings',
'audit.module.SETTLEMENT': 'Settlement',
'audit.module.CASHBACK': 'Cashback',
'audit.module.STAFF': 'Staff',
'cashback.start_date': 'Start date',
'cashback.end_date': 'End date',
@@ -591,6 +603,7 @@ const adminPages: Record<string, string> = {
'settlement.record_score': 'Save score',
'settlement.preview_hint': 'Preview moves the match to pending settlement and calculates payouts (scores are saved on confirm; you can reopen betting before confirming)',
'settlement.preview_btn': 'Preview settlement',
'settlement.view_preview_btn': 'View settlement preview',
'settlement.preview_failed': 'Failed to generate settlement preview',
'settlement.err_score_not_recorded': 'Enter half-time and full-time scores before preview',
'settlement.must_close_first': 'Close betting before settlement',
@@ -629,6 +642,26 @@ const adminPages: Record<string, string> = {
'settlement.resettle_topup': 'Top-up required',
'settlement.resettle_clawback': 'Clawback required',
'settlement.resettle_confirm': 'Confirm resettle',
'settlement.resettle_affected_list': 'Affected Bets Details',
'settlement.resettle_col.old_result': 'Old Result/Old Payout',
'settlement.resettle_col.new_result': 'New Result/New Payout',
'settlement.resettle_col.adjust': 'Adjustment',
'settlement.history_tab': 'Settlement Records',
'settlement.history_tab_bets': 'Bet Stats',
'settlement.history.no_records': 'No settlement records',
'settlement.history.col.batch_no': 'Batch No.',
'settlement.history.col.type': 'Type',
'settlement.history.col.score': 'Score (HT/FT)',
'settlement.history.col.corners': 'Corners (H/A)',
'settlement.history.col.cards': 'Yellow/Red cards (H/A)',
'settlement.history.col.total_bets': 'Settled bets',
'settlement.history.col.total_payout': 'Total payout',
'settlement.history.col.total_refund': 'Total refund',
'settlement.history.col.operator': 'Operator',
'settlement.history.col.time': 'Settled at',
'settlement.history.col.reason': 'Reason',
'settlement.history.type.initial': 'Initial settlement',
'settlement.history.type.resettle': 'Resettlement',
'user.betting_limits': 'Betting limits',
'user.betting_limits_hint': 'Global stake/payout/daily limits for player bets',
'user.limit.min_stake': 'Min stake',
@@ -1051,6 +1084,15 @@ const adminPages: Record<string, string> = {
'media.no_files': 'No files yet',
'media.refresh': 'Refresh',
'media.unused_count': '{n} unused',
'media.storage_stats': 'Storage Statistics',
'media.deposits_on_disk': 'Recharge Screenshots (Unmapped to Media Library)',
'media.screenshot_cleanup': 'Screenshot Cleanup',
'media.cleanup_auto_enabled': 'Enable Auto-cleanup',
'media.cleanup_keep_days': 'Retention Days',
'media.cleanup_before_date': 'Manual Cleanup Before Date',
'media.cleanup_run_now': 'Clean Now',
'media.cleanup_result': 'Successfully cleaned {cleaned} screenshot(s), freeing {size} of space.',
'media.cleanup_expired_tag': 'Purged',
};
export default adminPages;

View File

@@ -141,6 +141,7 @@ const adminPages: Record<string, string> = {
'agent.col.credit': '授信/已用/可用',
'agent.col.direct_players': '直属玩家',
'agent.direct_players_title': '直属玩家 · {name}',
'agent.open_agent_hint': '点击代理行进入直属玩家管理页。',
'agent.platform_row_name': '平台',
'agent.col.sub_agents': '下级代理',
'agent.col.cashback': '返水率',
@@ -308,6 +309,10 @@ const adminPages: Record<string, string> = {
'match.hint.edit_published': '已发布:可修改开赛时间、热门及显示名称;封盘/已结算后不可编辑。',
'match.expand_league_hint': '展开联赛可管理单场赛事;优胜冠军盘口请到「优胜赛配置」。',
'match.expand_outright_hint': '展开联赛可编辑夺冠赔率;单场球队会自动同步,也可手动补充尚未赛程的球队。',
'match.open_league_hint': '点击联赛行进入单场赛事管理页。',
'match.open_outright_hint': '点击联赛行进入优胜冠军赔率配置页。',
'match.league_fixtures_subtitle': '单场赛事',
'match.league_outrights_subtitle': '优胜冠军赔率',
'outright.odds_only_hint': '单场赛程中的球队会自动加入;可手动添加尚未参赛的球队,并在此调整赔率。冠军盘随联赛发布,无需单独发布。',
'outright.league_unpublished_hint': '联赛尚未发布,请在本页编辑联赛并设为「已发布」后,冠军盘将自动开放投注。',
'outright.unsettled_fixtures_hint': '该联赛仍有 {n} 场单场未结算,请先完成单场结算后再结算冠军盘。',
@@ -373,17 +378,24 @@ const adminPages: Record<string, string> = {
'audit.action.UPDATE_AGENT': '更新代理',
'audit.action.UPDATE_PLAYER_ACCOUNT_SETTINGS': '更新玩家账号设置',
'audit.action.UPDATE_AGENT_SUSPEND_SETTINGS': '更新代理停押设置',
'audit.action.UPDATE_AGENT_HIERARCHY_SETTINGS': '更新代理层级设置',
'audit.action.UPDATE_PLATFORM_DIRECT_CASHBACK_SETTINGS': '更新平台返水设置',
'audit.action.UPDATE_BETTING_LIMITS': '更新投注限额',
'audit.action.RESET_PLAYER_PASSWORD': '重置玩家密码',
'audit.action.CONFIRM_SETTLEMENT': '确认结算',
'audit.action.CONFIRM_RESETTLE': '确认重结算',
'audit.action.CONFIRM_CASHBACK': '确认发放返水',
'audit.action.CANCEL_CASHBACK': '作废返水批次',
'audit.action.CREATE_STAFF': '创建后台账号',
'audit.action.UPDATE_STAFF': '编辑后台账号',
'audit.action.DELETE_STAFF': '删除后台账号',
'audit.module.USERS': '玩家',
'audit.module.AGENTS': '代理',
'audit.module.SYSTEM': '系统',
'audit.module.SETTINGS': '系统设置',
'audit.module.SETTLEMENT': '结算',
'audit.module.CASHBACK': '返水',
'audit.module.STAFF': '后台账号',
'cashback.start_date': '开始日期',
'cashback.end_date': '结束日期',
@@ -573,7 +585,7 @@ const adminPages: Record<string, string> = {
'settlement.chart.stake_by_selection': '选项单关投注额 TOP6',
'settlement.stats_by_market': '按玩法 / 选项汇总',
'settlement.bet_list': '相关注单',
'settlement.bet_list_hint': '按注单聚合;同场串关含多腿时显示 ×腿数',
'settlement.bet_list_hint': '按注单聚合;同场串关含多腿时显示 ×腿数(点击标签可切换查看结算记录)',
'settlement.no_bets': '本场暂无注单',
'settlement.col.market': '玩法',
'settlement.col.selection': '选项',
@@ -592,6 +604,7 @@ const adminPages: Record<string, string> = {
'settlement.record_score': '录入比分',
'settlement.preview_hint': '填写比分后点击生成预览,赛事将进入待结算并计算派彩(正式比分在确认结算后保存;未确认前仍可解除封盘)',
'settlement.preview_btn': '生成结算预览',
'settlement.view_preview_btn': '查看结算预览',
'settlement.preview_failed': '生成结算预览失败',
'settlement.err_score_not_recorded': '请先填写半场与全场比分后再生成预览',
'settlement.must_close_first': '请先封盘后再结算',
@@ -629,6 +642,26 @@ const adminPages: Record<string, string> = {
'settlement.resettle_topup': '需补发金额',
'settlement.resettle_clawback': '需扣回金额',
'settlement.resettle_confirm': '确认重结算',
'settlement.resettle_affected_list': '受影响注单明细',
'settlement.resettle_col.old_result': '原结果/原派彩',
'settlement.resettle_col.new_result': '新结果/新派彩',
'settlement.resettle_col.adjust': '差额调整',
'settlement.history_tab': '结算记录',
'settlement.history_tab_bets': '注单统计',
'settlement.history.no_records': '暂无结算记录',
'settlement.history.col.batch_no': '批次号',
'settlement.history.col.type': '类型',
'settlement.history.col.score': '比分(半/全)',
'settlement.history.col.corners': '角球(主/客)',
'settlement.history.col.cards': '黄牌/红牌(主/客)',
'settlement.history.col.total_bets': '结算注单数',
'settlement.history.col.total_payout': '总派彩',
'settlement.history.col.total_refund': '总退款',
'settlement.history.col.operator': '操作人',
'settlement.history.col.time': '结算时间',
'settlement.history.col.reason': '原因',
'settlement.history.type.initial': '首次结算',
'settlement.history.type.resettle': '重新结算',
'user.betting_limits': '投注限额',
'user.betting_limits_hint': '全局下注校验:最小/最大投注、最高派彩、每日投注上限',
'user.limit.min_stake': '最小投注',
@@ -1058,6 +1091,15 @@ const adminPages: Record<string, string> = {
'media.no_files': '暂无文件',
'media.refresh': '刷新',
'media.unused_count': '{n} 个未使用',
'media.storage_stats': '存储空间统计',
'media.deposits_on_disk': '充值订单截图 (未挂靠媒体库)',
'media.screenshot_cleanup': '充值截图清理',
'media.cleanup_auto_enabled': '开启自动定期清理',
'media.cleanup_keep_days': '截图保留天数',
'media.cleanup_before_date': '手动清理截止日期',
'media.cleanup_run_now': '立即清理',
'media.cleanup_result': '成功清理了 {cleaned} 张截图,释放了 {size} 空间。',
'media.cleanup_expired_tag': '已清理',
};
export default adminPages;