sync(theme-3): 同步 main 最新 API/Admin 与玩家端逻辑

从 main 同步站内信手动发送、媒体库选择、列表子路由重构等 API/Admin 改动;玩家端仅合并 ADMIN_CUSTOM 富文本、消息预览与充值截图压缩逻辑,保留 theme-3 样式。
This commit is contained in:
2026-06-22 14:11:47 +08:00
parent f92c5e8a59
commit d8e08aaed0
50 changed files with 4653 additions and 1186 deletions

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',
@@ -785,6 +820,28 @@ export const adminPagesMs: Record<string, string> = {
'content.inbox_notify.manual_title': 'Tanda "Notifikasi peti mesej" semasa mencipta:',
'content.inbox_notify.banner_note': 'Promosi laman utama',
'content.inbox_notify.announcement_note': 'Notifikasi / ticker',
'content.inbox_broadcast.title': 'Hantar manual',
'content.inbox_broadcast.hint': 'Hantar mesej peti secara manual kepada pemain. Padam rekod juga membuang mesej di peti pemain.',
'content.inbox_broadcast.field_title': 'Tajuk',
'content.inbox_broadcast.field_body': 'Kandungan',
'content.inbox_broadcast.field_target': 'Penerima',
'content.inbox_broadcast.field_username': 'Nama pengguna pemain',
'content.inbox_broadcast.target_all': 'Semua pemain',
'content.inbox_broadcast.target_user': 'Pemain tertentu',
'content.inbox_broadcast.username_placeholder': 'Masukkan nama log masuk pemain',
'content.inbox_broadcast.send': 'Hantar',
'content.inbox_broadcast.send_success': 'Dihantar kepada {n} pemain',
'content.inbox_broadcast.form_invalid': 'Sila isi tajuk atau kandungan sekurang-kurangnya satu bahasa',
'content.inbox_broadcast.target_user_required': 'Nama pengguna pemain diperlukan',
'content.inbox_broadcast.history_title': 'Sejarah penghantaran',
'content.inbox_broadcast.view_title': 'Butiran penghantaran',
'content.inbox_broadcast.col_title': 'Tajuk',
'content.inbox_broadcast.col_target': 'Sasaran',
'content.inbox_broadcast.col_recipients': 'Bilangan',
'content.inbox_broadcast.col_sender': 'Penghantar',
'content.inbox_broadcast.col_time': 'Masa',
'content.inbox_broadcast.delete_confirm': 'Padam "{title}"? Salinan di peti pemain juga akan dibuang.',
'content.inbox_broadcast.locale_fallback_hint': 'Locale yang kosong akan guna susunan: bahasa pemain → Inggeris → Cina Ringkas → Melayu.',
'content.hint.banner': 'Dipaparkan dalam karusel laman utama; ketik untuk halaman butiran. Muat naik imej muka depan dan kandungan kaya seperti pengumuman laman rasmi.',
'content.hint.announcement': 'Dipaparkan sebagai teks bergulir di bahagian atas aplikasi pemain. Isi tajuk dan teks bergulir setiap bahasa — teks biasa sahaja.',
'content.section.publish': 'Tetapan terbitan',
@@ -802,6 +859,7 @@ export const adminPagesMs: Record<string, string> = {
'content.upload.cover_size_hint': 'Lebar disyorkan 860px+. Imej muka depan dan dalam kandungan akan menyesuaikan lebar pada pemain.',
'content.upload.pick_media_title': 'Pilih imej',
'content.upload.no_media': 'Tiada imej dalam pustaka — muat naik dahulu',
'content.upload.load_media_failed': 'Gagal memuat pustaka media',
'content.status.DRAFT': 'Draf',
'content.status.ACTIVE': 'Aktif',
'content.status.INACTIVE': 'Tidak aktif',
@@ -993,6 +1051,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;