feat(player): 新增桌面端 UI 与响应式双端路由架构

- 将原移动端页面重命名为 Mobile*,新增 22 个 Desktop* 视图与 DesktopShell 布局体系
- 路由入口改为 Wrapper 视图,通过 useViewport(≥1024px)自动切换移动/桌面端
- 新增投注单面板、盘口弹层、联赛侧栏、数据表格等桌面组件及独立样式令牌
- 扩展 betSlip store、串关筛选、冠军盘、Toast/悬浮信箱等交互与三语 i18n
- 公告/消息 Hub 拆分移动与桌面实现;API 投注/钱包/充值记录支持 pageSize 分页
This commit is contained in:
2026-06-29 18:01:39 +08:00
parent 9c5e8d6f5c
commit 8a1ba0fd95
116 changed files with 22249 additions and 8693 deletions

View File

@@ -10,13 +10,37 @@ export default {
back_to_top: 'Kembali ke atas',
cancel: 'Batal',
confirm: 'Sahkan',
clear: 'Kosongkan',
no_data: 'Tiada data',
back: 'Kembali',
save: 'Simpan',
expand: 'Kembangkan',
collapse: 'Runtuhkan',
not_found: 'Tidak dijumpai',
load_more: 'Muat lagi',
approved: 'Diluluskan',
rejected: 'Ditolak',
pending: 'Menunggu',
cancelled: 'Dibatalkan',
error: 'Operasi gagal',
status: 'Status',
},
pagination: {
total: '{total} jumlah',
per_page: '{size} / halaman',
},
nav: {
home: 'Laman Utama',
sports: 'Sukan',
football: 'Bola Sepak',
bet: 'Pertaruhan',
bet_history: 'Sejarah',
wallet: 'Bil',
wallet: 'Transaksi',
account_hub: 'Pertaruhan & Bil',
profile: 'Profil',
search: 'Cari pasukan, liga…',
announcements: 'Pengumuman',
sports_more_soon: 'Lebih banyak sukan akan datang',
},
home: {
hot_matches: 'Perlawanan popular',
@@ -38,6 +62,7 @@ export default {
empty: 'Tiada pengumuman',
not_found: 'Pengumuman tidak tersedia',
view_all: 'Lihat semua pengumuman',
select_hint: 'Pilih pengumuman untuk dibaca',
type_notice: 'Notis',
type_ticker: 'Ticker',
type_banner: 'Banner',
@@ -45,6 +70,9 @@ export default {
go_link: 'Pergi ke halaman',
open_link: 'Buka pautan',
back: 'Kembali',
center_desc: 'Notis platform, promosi dan penyelenggaraan',
total_count: '{count} jumlah',
read_more: 'Baca lagi',
},
search: {
placeholder: 'Cari pasukan atau liga',
@@ -66,6 +94,7 @@ export default {
not_found: 'Mesej tidak dijumpai',
view_all: 'Kembali ke peti mesej',
back: 'Kembali',
select_hint: 'Pilih mesej untuk dibaca',
mark_all_read: 'Tanda semua dibaca',
load_more: 'Muat lagi',
delete: 'Padam',
@@ -85,6 +114,8 @@ export default {
view_recharge_history: 'Lihat sejarah deposit',
unread_badge: '{count} belum dibaca',
open_inbox: 'Buka peti mesej',
tab_inbox: 'Peti masuk',
tab_support: 'Sokongan',
},
inbox_hub: {
title: 'Mesej & Sokongan',
@@ -122,6 +153,9 @@ export default {
filter_lost: 'Kalah',
filter_pending: 'Menunggu',
filter_push: 'Seri',
filter_status_group: 'Penyelesaian',
filter_push_group: 'Khas',
filter_push_hint: 'Seri: jumlah dikembalikan pada garis seri',
stats_total: 'Jumlah',
stats_won: 'Menang',
stats_lost: 'Kalah',
@@ -262,6 +296,20 @@ export default {
cashback_filter_hint: 'Senarai ini ialah kredit dompet; tempoh dan kadar ada di butiran rebat.',
ref_cashback: 'Batch rebat',
detail_cashback_link: 'Lihat butiran rebat',
frozen: 'Beku',
cashback_total: 'Jumlah rebat',
type: 'Jenis',
note: 'Nota',
amount: 'Amaun',
time: 'Masa',
transaction_detail: 'Butiran transaksi',
balance_before: 'Baki sebelum',
balance_after: 'Baki selepas',
transaction_id: 'ID transaksi',
detail_title: 'Butiran bil',
recharge_btn: 'Topup',
recharge_history: 'Sejarah topup',
cashbacks_tab: 'Rebat',
},
recharge: {
title: 'Topup',
@@ -318,6 +366,15 @@ export default {
reapply: 'Mohon semula',
reapply_hint: 'Anda menghantar semula pesanan ini. Buat pindahan baharu dan muat naik tangkapan skrin baharu.',
back_to_history: 'Kembali ke sejarah',
order_no: 'No. pesanan',
method: 'Kaedah',
amount: 'Amaun',
screenshot: 'Muat naik bukti',
click_to_upload: 'Klik untuk muat naik',
choose_method: 'Pilih akaun pembayaran',
success_title: 'Dihantar',
success_hint: 'Sila tunggu semakan. Anda akan dimaklumkan selepas dikreditkan.',
no_history: 'Tiada rekod topup',
},
cashback: {
title: 'Butiran Rebat',
@@ -330,6 +387,10 @@ export default {
empty: 'Tiada rekod rebat',
empty_hint: 'Rebat dikeluarkan oleh platform mengikut kitaran penyelesaian.',
ledger_hint: 'Sepadan dengan entri dompet di penapis Rebat; jumlah adalah sama.',
match: 'Perlawanan',
amount: 'Amaun rebat',
rate: 'Kadar rebat',
batch_no: 'No. kelompok',
},
bet: {
bet_slip: 'Slip Pertaruhan',
@@ -339,8 +400,30 @@ export default {
parlay: 'Berganda',
tab_matches: 'Perlawanan',
tab_outright: 'Juara',
sport_football: 'Bola Sepak',
sport_basketball: 'Bola Keranjang',
sport_tennis: 'Tenis',
sport_coming_soon: 'Akan datang',
tab_today: 'Hari Ini',
tab_early: 'Awal',
filter_time: 'Masa',
filter_league: 'Liga',
filter_market: 'Pasaran',
time_all: 'Semua',
time_today: 'Hari ini',
time_early: 'Awal',
market_all: 'Semua pasaran',
market_handicap_ou: 'Handicap / O-U',
correct_score: 'Skor tepat',
no_markets: 'Tiada pasaran tersedia',
no_markets_filtered: 'Tiada pasaran sepadan dengan penapis semasa',
popover_title: 'Sahkan pertaruhan',
place_now: 'Pertaruhan sekarang',
add_to_single: 'Tambah tunggal',
add_to_parlay: 'Tambah parlay',
slip_parlay_added_short: 'Dalam parlay · Lihat',
add_to_single_list: 'Tambah ke senarai tunggal',
add_to_parlay_list: 'Tambah ke berganda',
filter_status_all: 'Semua',
filter_status_open: 'Buka',
filter_status_settled: 'Selesai',
@@ -452,24 +535,37 @@ export default {
slip_pick_hint: 'Ketik untuk tambah/buang; sisi emas = dipilih',
picked_tag: 'Dipilih',
pick_added: 'Ditambah ke slip',
added_to_single: 'Ditambah ke senarai tunggal',
added_to_parlay: 'Ditambah ke senarai parlay',
pick_removed: 'Dikeluarkan dari slip',
slip_bar_ready: '1 pilihan',
slip_bar_go: 'Buka slip',
cs_top_hint: '① Isi jumlah ② Ketik Sahkan di atas',
slip_empty_hint: 'Ketik odds untuk buka laci pertaruhan',
slip_clear: 'Kosongkan semua',
slip_remove: 'Buang',
slip_locate: 'Lokasi odds',
slip_locate_aria: 'Tatal ke pilihan ini dalam senarai odds',
slip_est_return: 'Anggaran bayaran maksimum',
slip_parlay_odds: 'Odds gabungan {odds}',
slip_review_title: 'Semak pilihan',
slip_balance: 'Baki akaun',
slip_tab_single: 'Tunggal',
slip_tab_parlay: 'Parlay',
slip_tab_history: 'Sejarah',
slip_history_all: 'Semua',
slip_history_match: 'Perlawanan ini',
slip_history_view_all: 'Lihat semua',
slip_history_load_more: 'Muat lagi',
slip_parlay_empty_hint: 'Pilih satu odds, kemudian ketik Tambah ke parlay',
slip_add_parlay: 'Tambah ke parlay',
slip_parlay_only_hint: 'Pasaran ini hanya parlay. Ketik Tambah ke parlay untuk bertaruh.',
slip_parlay_same_match: 'Pilihan parlay tidak boleh daripada perlawanan sama. Buang pilihan perlawanan sama dahulu.',
slip_parlay_count: '{n} pilihan parlay',
slip_total_stake: 'Jumlah pertaruhan',
slip_place_single: 'Taruhan tunggal',
slip_place_all: 'Taruhan semua',
slip_parlay_added_btn: 'Ditambah',
slip_currency: 'Amaun',
slip_min: 'Min',
slip_min_error: 'Jumlah minimum ialah {amount}',
@@ -478,11 +574,34 @@ export default {
accept_changes_place: 'Terima perubahan & pertaruh',
odds_was: 'Asal',
odds_now: 'Baharu',
place_confirm_title: 'Sahkan pertaruhan',
place_confirm_single:
"Pilihan: {pick} ({'@'}{odds})\nJumlah: {stake}\nAnggaran pulangan: {return}\n\nSahkan pertaruhan ini?",
place_confirm_singles:
'{count} pertaruhan tunggal\nJumlah keseluruhan: {stake}\nAnggaran pulangan: {return}\n\nSahkan semua?',
place_confirm_parlay:
'Parlay {count} perlawanan, odds {odds}\nJumlah: {stake}\nAnggaran pulangan: {return}\n\nSahkan parlay?',
place_success: 'Pertaruhan berjaya',
place_failed: 'Pertaruhan gagal',
bet_no: 'No. pertaruhan',
match: 'Perlawanan',
selection: 'Pilihan',
odds: 'Odds',
potential_payout: 'Bayaran anggaran',
placed_at: 'Masa pertaruhan',
detail_title: 'Butiran pertaruhan',
selections: 'Pilihan',
},
profile: {
edit: 'Edit Profil',
edit_title: 'Edit profil',
save_success: 'Berjaya disimpan',
basic_info: 'Maklumat asas',
change_avatar: 'Tukar avatar',
username: 'Nama pengguna',
username_locked: 'Nama pengguna tidak boleh diubah',
account: 'Akaun',
quick_nav: 'Pautan pantas',
language: 'Bahasa',
avatar: 'Avatar',
avatar_change: 'Tukar avatar',