feat: refactor agent manager, media library, and player UX
- Split admin users page into player/tier-1/tier-2 tabs with affiliation labels and context-specific create dialogs - Add media library with uploaded_files migration, list/delete unused files API, and admin nav route - Enforce player username format (alphanumeric 3-32) on frontend and backend via shared package - Improve admin dialog/panel styling; refine player parlay and match bet card kickoff display Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
export const adminPagesMs: Record<string, string> = {
|
||||
'common.detail': 'Butiran',
|
||||
'common.create': 'Cipta',
|
||||
'common.create_btn': '+ Baharu',
|
||||
'common.save': 'Simpan',
|
||||
'common.close': 'Tutup',
|
||||
'common.import': 'Import',
|
||||
@@ -77,12 +78,16 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'user.msg.password_saved': 'Kata laluan dikemas kini: {password}',
|
||||
'user.hint.password_reset_to_view': 'Tiada rekod. Isi Set semula kata laluan di bawah dan simpan untuk lihat di sini.',
|
||||
'user.ph.username_unique': 'Nama log masuk unik',
|
||||
'user.ph.username_player': 'Huruf dan digit, 3–32 aksara',
|
||||
'user.hint.username_player': 'Hanya huruf dan digit Inggeris; tiada Cina atau simbol khas',
|
||||
'user.ph.no_agent': 'Tiada (terus platform)',
|
||||
'user.hint.no_agent': 'Biarkan kosong untuk pemain diurus platform',
|
||||
'user.hint.platform_direct_player': 'Pemain ini di bawah platform (terus admin).',
|
||||
'user.hint.initial_balance': 'Auto tambah baki semasa cipta; 0 = tiada bonus',
|
||||
'user.hint.deposit_remark': 'Ditulis ke lejar jika baki permulaan > 0',
|
||||
'user.hint.freeze_in_list': 'Beku/nyahbeku dari lajur tindakan senarai',
|
||||
'user.hint.agent_change': 'Kosong = terus platform; perubahan dikira semula kredit ejen',
|
||||
'user.hint.agent_readonly': 'Ejen induk tidak boleh diubah selepas penciptaan',
|
||||
'user.hint.allow_password_change': 'Matikan: semua pemain tidak boleh ubah kata laluan',
|
||||
'user.hint.allow_username_change': 'Hidupkan: semua pemain boleh ubah nama log masuk',
|
||||
'user.hint.view_password': 'Hanya kata laluan cipta/set semula admin; dibersihkan jika pemain ubah sendiri',
|
||||
@@ -98,12 +103,18 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'user.hint.account_type': 'Ejen guna had kredit; pemain boleh di bawah ejen',
|
||||
|
||||
'agent.create_btn': '+ Ejen peringkat 1 baharu',
|
||||
'agent.create_sub_btn': '+ Ejen peringkat 2 baharu',
|
||||
'agent.create_sub': 'Cipta sub-ejen',
|
||||
'agent.hint.sub_agent_parent': 'Ejen peringkat 2 mesti di bawah ejen peringkat 1',
|
||||
'agent.hint.creating_under_agent': 'Cipta akaun di bawah ejen ini',
|
||||
'agent.filter.username_ph': 'Nama pengguna',
|
||||
'agent_mgr.tab.players': 'Pemain',
|
||||
'agent_mgr.tab.agents': 'Ejen',
|
||||
'agent.col.level': 'Peringkat',
|
||||
'agent.col.credit': 'Had / Digunakan / Tersedia',
|
||||
'agent.col.direct_players': 'Pemain terus',
|
||||
'agent.direct_players_title': 'Pemain terus · {name}',
|
||||
'agent.platform_row_name': 'Platform',
|
||||
'agent.col.sub_agents': 'Sub-ejen',
|
||||
'agent.col.cashback': 'Kadar rebat',
|
||||
'agent.col.phone': 'Telefon',
|
||||
@@ -378,6 +389,7 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'matchEditor.ph.selection_name': 'Nama dipaparkan kepada pemain',
|
||||
|
||||
'err.username_required': 'Sila isi nama pengguna',
|
||||
'err.username_player_invalid': 'Nama pemain hanya huruf/digit Inggeris (3–32 aksara)',
|
||||
'err.password_min': 'Kata laluan sekurang-kurangnya 8 aksara',
|
||||
'err.password_mismatch': 'Kata laluan tidak sepadan',
|
||||
'err.credit_negative': 'Had kredit tidak boleh negatif',
|
||||
@@ -638,4 +650,37 @@ export const adminPagesMs: Record<string, string> = {
|
||||
'smoke.msg.copy_ok': 'Disalin ke papan keratan',
|
||||
'smoke.msg.copy_failed': 'Gagal menyalin — pilih log secara manual',
|
||||
'audit.action.RUN_SMOKE_TESTS': 'Jalankan ujian asap',
|
||||
|
||||
'media.title': 'Perpustakaan Media',
|
||||
'media.upload_btn': 'Muat Naik Fail',
|
||||
'media.category.all': 'Semua',
|
||||
'media.category.banners': 'Banner',
|
||||
'media.category.teams': 'Logo Pasukan',
|
||||
'media.category.contents': 'Gambar Kandungan',
|
||||
'media.col.preview': 'Pratonton',
|
||||
'media.col.filename': 'Nama Fail',
|
||||
'media.col.category': 'Kategori',
|
||||
'media.col.size': 'Saiz',
|
||||
'media.col.status': 'Status',
|
||||
'media.col.uploaded': 'Dimuat Naik',
|
||||
'media.col.actions': 'Tindakan',
|
||||
'media.status.used': 'Digunakan',
|
||||
'media.status.unused': 'Tidak Digunakan',
|
||||
'media.purge_btn': 'Buang Yang Tidak Digunakan',
|
||||
'media.purge_confirm': 'Padam {n} fail yang tidak digunakan? Ini tidak boleh dibatalkan.',
|
||||
'media.purge_none': 'Tiada fail yang tidak digunakan',
|
||||
'media.purge_success': '{n} fail dipadam',
|
||||
'media.delete_confirm': 'Padam fail ini?',
|
||||
'media.delete_success': 'Dipadam',
|
||||
'media.upload_success': 'Berjaya dimuat naik',
|
||||
'media.upload_failed': 'Muat naik gagal',
|
||||
'media.copy_url': 'Salin URL',
|
||||
'media.url_copied': 'URL disalin',
|
||||
'media.upload_dialog': 'Muat Naik Fail',
|
||||
'media.upload_hint': 'PNG, JPG, WEBP, GIF, SVG — maks 5 MB',
|
||||
'media.upload_category': 'Kategori',
|
||||
'media.drop_hint': 'Lepaskan fail di sini atau klik untuk pilih',
|
||||
'media.no_files': 'Tiada fail lagi',
|
||||
'media.refresh': 'Muat Semula',
|
||||
'media.unused_count': '{n} tidak digunakan',
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user