feat: 开户备注、账单展示优化与后台代理管理增强

- 新增初始上分备注(日常上分/开户赠金/自定义)及前后台校验与展示

- 优化钱包流水类型与备注显示,区分管理员/代理/玩家上下分

- 修复登录后语言被后端覆盖的问题,登录时同步当前语言到服务端

- 后台代理/玩家表格操作栏重构,充值订单增加备注列

- 前台个人中心、充值、账单与验证码组件体验优化

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-11 17:23:58 +08:00
parent 10485ecfaf
commit 03e72ca9b2
46 changed files with 3721 additions and 1059 deletions

View File

@@ -12,7 +12,9 @@ export const adminPagesMs: Record<string, string> = {
'common.freeze': 'Bekukan',
'common.unfreeze': 'Nyahbeku',
'common.settle': 'Selesaikan',
'common.resettle': 'Selesaikan semula',
'common.close_betting': 'Tutup pertaruhan',
'common.reopen_betting': 'Buka semula pertaruhan',
'common.never_login': 'Belum pernah log masuk',
'common.optional': 'Pilihan',
'common.to': 'Hingga',
@@ -73,6 +75,10 @@ export const adminPagesMs: Record<string, string> = {
'user.reset_database_disabled_prod': 'Dilumpuhkan dalam produksi melainkan ALLOW_DB_RESET=true',
'user.reset_database_success': 'Pangkalan data diset semula. Sila log masuk semula.',
'user.reset_database_accounts': 'Akaun demo',
'user.section.basic_info': 'Maklumat asas',
'user.section.affiliation': 'Affiliasi',
'user.section.contact': 'Hubungan',
'user.section.account_overview': 'Gambaran akaun',
'user.section.password_mgmt': 'Pengurusan kata laluan',
'user.field.current_password': 'Kata laluan semasa',
'user.msg.created_with_password': 'Pemain dicipta. Kata laluan: {password}',
@@ -207,7 +213,13 @@ export const adminPagesMs: Record<string, string> = {
'finance.deposit_method.manual_agent': 'Deposit manual ejen',
'finance.deposit_method.manual': 'Deposit manual',
'finance.tx.deposit': 'Deposit',
'finance.tx.admin_deposit': 'Tambah baki admin',
'finance.tx.agent_deposit': 'Tambah baki ejen',
'finance.tx.initial_deposit': 'Bonus pembukaan',
'finance.tx.player_deposit': 'Deposit sendiri',
'finance.tx.withdraw': 'Pengeluaran',
'finance.tx.admin_withdraw': 'Pengeluaran admin',
'finance.tx.agent_withdraw': 'Pengeluaran ejen',
'finance.tx.request_id': 'ID permintaan',
'finance.remark.agent_deposit': 'Deposit ejen',
'finance.remark.agent_withdraw': 'Pengeluaran ejen',
@@ -613,6 +625,12 @@ export const adminPagesMs: Record<string, string> = {
'agent_portal.no_sub_agents': 'Tiada ejen peringkat 2. Klik butang di atas untuk cipta.',
'agent_portal.no_sub_agents_level': 'Tiada ejen peringkat {level}. Klik butang di atas untuk cipta.',
'agent_portal.sub_agent_players_readonly': 'Pemain langsung di bawah sub-ejen ini hanya boleh dilihat. Pembukaan akaun dan tambah baki diurus oleh sub-ejen.',
'agent_portal.sub_agent_downline_readonly': 'Semua ejen dan pemain bawahan di bawah sub-ejen ini hanya boleh dilihat. Anda hanya boleh mengendalikan sub-ejen langsung; pembukaan akaun dan tambah baki diurus oleh setiap peringkat.',
'agent_portal.sub_agent_downline_readonly_level': 'Semua ejen dan pemain di bawah ejen peringkat {level} ini hanya boleh dilihat. Anda hanya boleh mengendalikan sub-ejen langsung; pembukaan akaun dan tambah baki diurus oleh setiap peringkat.',
'agent_portal.downline_agents_title': 'Ejen bawahan',
'agent_portal.downline_players_title': 'Pemain bawahan',
'agent_portal.no_downline_agents': 'Tiada ejen bawahan',
'agent_portal.no_downline_players': 'Tiada pemain bawahan',
'agent_portal.sub_agent_players_readonly_level': 'Pemain langsung di bawah ejen peringkat {level} ini hanya boleh dilihat. Pembukaan akaun dan tambah baki diurus oleh ejen tersebut.',
'agent_portal.create_sub_agent_dialog': 'Ejen peringkat 2 baharu',
'agent_portal.sub_agent_credit_hint': 'Kredit awal diperuntukkan dari had tersedia anda',
@@ -634,6 +652,10 @@ export const adminPagesMs: Record<string, string> = {
'msg.match_created_draft': 'Perlawanan tunggal dicipta (draf)',
'msg.published': 'Diterbitkan dengan pasaran',
'msg.closed': 'Pertaruhan ditutup',
'msg.reopened': 'Pertaruhan dibuka semula',
'match.reopen_kickoff_title': 'Tetapkan masa mula baharu',
'match.reopen_kickoff_hint': 'Masa mula telah berlalu. Pilih masa mula baharu pada masa hadapan sebelum membuka semula.',
'match.reopen_kickoff_invalid': 'Sila pilih masa mula pada masa hadapan',
'msg.invalid_json': 'JSON tidak sah',
'msg.import_failed': 'Import gagal',
'msg.import_done': 'Import: {imported} ok, {skipped} dilangkau, {failed} gagal / {total} jumlah',