diff --git a/apps/player/src/components/desktop/DesktopBetDetailModal.vue b/apps/player/src/components/desktop/DesktopBetDetailModal.vue new file mode 100644 index 0000000..5bbd46f --- /dev/null +++ b/apps/player/src/components/desktop/DesktopBetDetailModal.vue @@ -0,0 +1,390 @@ + + + + + diff --git a/apps/player/src/components/desktop/DesktopShell.vue b/apps/player/src/components/desktop/DesktopShell.vue index d9c592f..c142700 100644 --- a/apps/player/src/components/desktop/DesktopShell.vue +++ b/apps/player/src/components/desktop/DesktopShell.vue @@ -39,7 +39,7 @@ const layoutMode = computed<'betting' | 'account' | 'hub' | 'marketing'>(() => { p === '/bets' || p.startsWith('/bets/') || p.startsWith('/wallet') || - p === '/profile/cashbacks' + p.startsWith('/profile') ) { return 'account'; } diff --git a/apps/player/src/components/desktop/DesktopTxDetailModal.vue b/apps/player/src/components/desktop/DesktopTxDetailModal.vue new file mode 100644 index 0000000..c0c4914 --- /dev/null +++ b/apps/player/src/components/desktop/DesktopTxDetailModal.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/apps/player/src/i18n/en-US.ts b/apps/player/src/i18n/en-US.ts index 24868d0..450ec70 100644 --- a/apps/player/src/i18n/en-US.ts +++ b/apps/player/src/i18n/en-US.ts @@ -313,6 +313,9 @@ export default { recharge_btn: 'Deposit', recharge_history: 'Deposit history', cashbacks_tab: 'Cashback', + detail_info: 'Details', + frozen_before: 'Frozen before', + frozen_after: 'Frozen after', }, recharge: { title: 'Recharge', @@ -601,6 +604,9 @@ export default { placed_at: 'Placed at', detail_title: 'Bet details', selections: 'Selections', + summary: 'Bet summary', + legs_count: 'Legs', + back_to_list: 'Back to bet list', }, profile: { edit: 'Edit Profile', @@ -656,5 +662,15 @@ export default { rules_p3: 'Results use admin-entered half-time and full-time scores; payouts apply after settlement preview is confirmed.', rules_p4: 'If this text conflicts with site notices, the latest notice and market rules prevail.', rules_p5: 'How to bet: open any match, tap the ? icon on the top right.', + qnav_bets_desc: 'View bet history', + qnav_wallet_desc: 'Wallet transactions', + qnav_cashback_desc: 'Cashback records', + qnav_recharge_desc: 'Deposit funds', + qnav_announcements_desc: 'View announcements', + qnav_edit_desc: 'Edit your profile', + security_tips: 'Security tips', + tip_1: 'Change your password regularly to keep your account secure', + tip_2: 'Never share your password with anyone', + tip_3: 'Contact customer service if you need help', }, } as const; diff --git a/apps/player/src/i18n/ms-MY.ts b/apps/player/src/i18n/ms-MY.ts index cfe8a6d..1322d8c 100644 --- a/apps/player/src/i18n/ms-MY.ts +++ b/apps/player/src/i18n/ms-MY.ts @@ -325,6 +325,9 @@ export default { recharge_btn: 'Topup', recharge_history: 'Sejarah topup', cashbacks_tab: 'Rebat', + detail_info: 'Butiran', + frozen_before: 'Beku sebelum', + frozen_after: 'Beku selepas', }, recharge: { title: 'Topup', @@ -613,6 +616,9 @@ export default { placed_at: 'Masa pertaruhan', detail_title: 'Butiran pertaruhan', selections: 'Pilihan', + summary: 'Ringkasan pertaruhan', + legs_count: 'Bilangan pilihan', + back_to_list: 'Kembali ke senarai pertaruhan', }, profile: { edit: 'Edit Profil', @@ -668,5 +674,15 @@ export default { rules_p3: 'Keputusan berdasarkan skor separuh masa/penuh yang dimasukkan admin; bayaran selepas pratonton disahkan.', rules_p4: 'Jika bercanggah dengan notis laman, ikut notis terkini dan peraturan pasaran.', rules_p5: 'Langkah operasi: buka butiran perlawanan, ketik ikon ? di atas kanan.', + qnav_bets_desc: 'Lihat sejarah pertaruhan', + qnav_wallet_desc: 'Transaksi dompet', + qnav_cashback_desc: 'Rekod rebat', + qnav_recharge_desc: 'Tambah dana', + qnav_announcements_desc: 'Lihat pengumuman', + qnav_edit_desc: 'Edit profil anda', + security_tips: 'Tip keselamatan', + tip_1: 'Tukar kata laluan secara berkala untuk keselamatan akaun', + tip_2: 'Jangan berkongsi kata laluan dengan sesiapa', + tip_3: 'Hubungi perkhidmatan pelanggan jika memerlukan bantuan', }, } as const; diff --git a/apps/player/src/i18n/zh-CN.ts b/apps/player/src/i18n/zh-CN.ts index a387452..b5c8503 100644 --- a/apps/player/src/i18n/zh-CN.ts +++ b/apps/player/src/i18n/zh-CN.ts @@ -313,6 +313,9 @@ export default { recharge_btn: '充值', recharge_history: '充值记录', cashbacks_tab: '返水明细', + detail_info: '详细信息', + frozen_before: '冻结前', + frozen_after: '冻结后', }, recharge: { title: '充值', @@ -601,6 +604,9 @@ export default { placed_at: '下注时间', detail_title: '注单详情', selections: '投注选项', + summary: '注单概要', + legs_count: '过关场数', + back_to_list: '返回注单列表', }, profile: { edit: '修改资料', @@ -656,5 +662,15 @@ export default { rules_p3: '赛果由平台根据官方录入的半场/全场比分结算,结算预览经确认后入账。', rules_p4: '若本说明与后台公告冲突,以最新公告及实际盘口规则为准。', rules_p5: '操作步骤:进入任意赛事详情,点右上角「?」查看玩法说明。', + qnav_bets_desc: '查看历史投注记录', + qnav_wallet_desc: '资金流水明细', + qnav_cashback_desc: '返水记录详情', + qnav_recharge_desc: '账户充值', + qnav_announcements_desc: '查看站内公告', + qnav_edit_desc: '修改个人资料', + security_tips: '安全提示', + tip_1: '定期更换密码以保护账户安全', + tip_2: '不要将密码透露给他人', + tip_3: '如需帮助请联系在线客服', }, } as const; diff --git a/apps/player/src/styles/desktop/layout.css b/apps/player/src/styles/desktop/layout.css index 98fb4e5..6229031 100644 --- a/apps/player/src/styles/desktop/layout.css +++ b/apps/player/src/styles/desktop/layout.css @@ -120,6 +120,13 @@ min-height: 0; } +.desktop-account-center > .desktop-records-page.profile-page, +.desktop-account-center > .desktop-records-page.edit-page { + overflow-y: auto; + height: auto; + max-height: 100%; +} + .desktop-account-center > .desktop-account-page { flex: 1; min-height: 0; diff --git a/apps/player/src/views/desktop/DesktopBetDetailView.vue b/apps/player/src/views/desktop/DesktopBetDetailView.vue index 752348a..4edd000 100644 --- a/apps/player/src/views/desktop/DesktopBetDetailView.vue +++ b/apps/player/src/views/desktop/DesktopBetDetailView.vue @@ -96,6 +96,24 @@ function translateSel(name: string): string { } return name; } + +function legResultIcon(status?: string) { + switch (status?.toUpperCase()) { + case 'WON': return '✓'; + case 'LOST': return '✗'; + case 'PUSH': return '='; + default: return ''; + } +} + +function legResultClass(status?: string) { + switch (status?.toUpperCase()) { + case 'WON': return 'leg-won'; + case 'LOST': return 'leg-lost'; + case 'PUSH': return 'leg-push'; + default: return 'leg-pending'; + } +}