+
@@ -364,6 +408,16 @@ function formatOdds(odds: string) {
+
+
diff --git a/apps/player/src/views/AnnouncementListView.vue b/apps/player/src/views/AnnouncementListView.vue
index 7bc0067..26fa6db 100644
--- a/apps/player/src/views/AnnouncementListView.vue
+++ b/apps/player/src/views/AnnouncementListView.vue
@@ -1,178 +1,15 @@
-
-
-
-
-
-
-
-
-
{{ t('announcements.empty') }}
-
-
-
-
-
-
+
-
-
diff --git a/apps/player/src/views/AnnouncementsHubView.vue b/apps/player/src/views/AnnouncementsHubView.vue
new file mode 100644
index 0000000..11c740a
--- /dev/null
+++ b/apps/player/src/views/AnnouncementsHubView.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/BetDetailView.vue b/apps/player/src/views/BetDetailView.vue
index ff8fb52..436662d 100644
--- a/apps/player/src/views/BetDetailView.vue
+++ b/apps/player/src/views/BetDetailView.vue
@@ -1,734 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ t('history.not_found') }}
-
-
-
-
-
-
-
-
-
-
-
- {{ heroTitle }}
- {{ heroAmount }}
-
- {{ t('history.return_incl_stake', { amount: returnAmount }) }}
-
- {{ formulaText }}
-
- {{ stakeAmount }} × {{ oddsText }}
-
-
-
-
-
-
-
-
-
-
-
{{ matchTitle }}
-
-
-
-
-
{{ pickMarket }}
-
- {{ pickSelection }}
- @{{ oddsText }}
-
-
-
- {{ t('history.ft') }}{{ bet.matchScore.ft }}
-
-
- {{ t('history.ht') }}{{ bet.matchScore.ht }}
-
-
-
{{ t('history.awaiting_result') }}
-
-
-
-
-
-
-
-
- {{ leg.matchTitle }}
- @{{ formatOdds(leg.odds) }}
-
-
{{ leg.marketLabel }} · {{ translateSel(leg.selectionName) }}
-
- {{ t('history.ft') }}{{ leg.score.ft }}
- {{ t('history.ht') }}{{ leg.score.ht }}
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/CashbackRecordsView.vue b/apps/player/src/views/CashbackRecordsView.vue
index 3559720..f310d3d 100644
--- a/apps/player/src/views/CashbackRecordsView.vue
+++ b/apps/player/src/views/CashbackRecordsView.vue
@@ -1,411 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('bet.loading') }}
-
-
-
-
- {{ formatMoney(totalAmount, locale) }}
-
- {{ t('cashback.total_received') }}
-
- · {{ t('cashback.record_count', { n: items.length }) }}
-
-
-
-
- {{ t('cashback.ledger_hint') }}
-
- {{ t('cashback.list_title') }}
-
-
-
-
-
- {{ formatMoney(row.amount, locale) }}
- {{ formatPeriod(row.periodStart, row.periodEnd) }}
-
-
{{ formatRate(row.rate) }}
-
-
- {{ t('cashback.effective_stake') }} {{ formatMoneyCompact(row.effectiveStake, locale) }}
- {{ t('cashback.bet_count', { n: row.betCount }) }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('common.no_more') }}
-
-
-
-
{{ t('cashback.empty') }}
-
{{ t('cashback.empty_hint') }}
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/FootballView.vue b/apps/player/src/views/FootballView.vue
index 02b1bb3..ed3cc1f 100644
--- a/apps/player/src/views/FootballView.vue
+++ b/apps/player/src/views/FootballView.vue
@@ -1,784 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
- ⌕
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('search.results_count', { count: sortedFilteredMatches.length }) }}
-
-
-
- {{ normalizeLeagueName(match.leagueName) }}
-
-
-
-
-
-
-
-
-
![]()
-
{{ isSearchActive ? t('search.no_results') : t('bet.no_matches') }}
-
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/ForgotPasswordWrapperView.vue b/apps/player/src/views/ForgotPasswordWrapperView.vue
new file mode 100644
index 0000000..aaadb56
--- /dev/null
+++ b/apps/player/src/views/ForgotPasswordWrapperView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/apps/player/src/views/HomeView.vue b/apps/player/src/views/HomeView.vue
index 1e77905..95fe20b 100644
--- a/apps/player/src/views/HomeView.vue
+++ b/apps/player/src/views/HomeView.vue
@@ -1,450 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ match.homeTeamName }} vs {{ match.awayTeamName }}
-
{{ formatKickoff(match.startTime) }}
-
-
-
-
-
-
-
![]()
-
-
-
-
-
-
-
![]()
-
{{ emptyMessage }}
-
-
+
+
-
-
diff --git a/apps/player/src/views/InboxHubView.vue b/apps/player/src/views/InboxHubView.vue
index c2cf47e..135acdc 100644
--- a/apps/player/src/views/InboxHubView.vue
+++ b/apps/player/src/views/InboxHubView.vue
@@ -1,299 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
diff --git a/apps/player/src/views/LoginWrapperView.vue b/apps/player/src/views/LoginWrapperView.vue
new file mode 100644
index 0000000..0ddd32e
--- /dev/null
+++ b/apps/player/src/views/LoginWrapperView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/apps/player/src/views/MatchDetailView.vue b/apps/player/src/views/MatchDetailView.vue
index eaccd87..25530f9 100644
--- a/apps/player/src/views/MatchDetailView.vue
+++ b/apps/player/src/views/MatchDetailView.vue
@@ -1,989 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ phaseLabel }}
- {{ phaseLabel }}
-
-
-
-
- {{ match.homeTeamName }}
-
-
-
-
-
-
-
![]()
-
-
-
-
-
- {{ match.awayTeamName }}
-
-
-
- {{ t('bet.kickoff_time') }}{{ kickoff }}
- {{ liveScoreText }}
-
-
-
-
-
{{ t('bet.result_stats_title') }}
- {{ match.homeTeamName }} / {{ match.awayTeamName }}
-
-
-
- {{ item.label }}
- {{ item.value }}
-
-
-
-
-
-
- {{ t('history.my_bets') || '我的投注' }}
-
-
-
-
-
-
-
-
- {{ phaseLabel }}
- {{ phaseLabel }}
-
- {{ marketStatusLabel(market.status) }}
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/MessageDetailView.vue b/apps/player/src/views/MessageDetailView.vue
index dce932f..ef59a90 100644
--- a/apps/player/src/views/MessageDetailView.vue
+++ b/apps/player/src/views/MessageDetailView.vue
@@ -1,392 +1,10 @@
-
-
-
-
-
-
-
-
-
{{ t('messages.not_found') }}
-
-
-
-
-
- {{ message.isRead ? t('messages.status_read') : t('messages.status_unread') }}
-
- {{ formatDate(message.createdAt) }}
- {{ messageTitle(message) }}
-
- {{ messageBody(message) }}
-
-
-
{{ t('messages.reject_reason') }}
-
{{ depositPayload.rejectReason }}
-
-
-
-
-
-
-
-
-
+
-
-
diff --git a/apps/player/src/views/MessagesHubView.vue b/apps/player/src/views/MessagesHubView.vue
new file mode 100644
index 0000000..99bb078
--- /dev/null
+++ b/apps/player/src/views/MessagesHubView.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileAnnouncementDetailView.vue b/apps/player/src/views/MobileAnnouncementDetailView.vue
new file mode 100644
index 0000000..823105b
--- /dev/null
+++ b/apps/player/src/views/MobileAnnouncementDetailView.vue
@@ -0,0 +1,440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('announcements.not_found') }}
+
+
+
+
+
+
+
+
+
+
{{ formatDate(item.createdAt) }}
+
{{ itemTitle(item) }}
+
+
+
+
{{ t('announcements.related_link') }}
+
{{ linkTarget }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileAnnouncementListView.vue b/apps/player/src/views/MobileAnnouncementListView.vue
new file mode 100644
index 0000000..b8dc37e
--- /dev/null
+++ b/apps/player/src/views/MobileAnnouncementListView.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('announcements.empty') }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileBetDetailView.vue b/apps/player/src/views/MobileBetDetailView.vue
new file mode 100644
index 0000000..ff8fb52
--- /dev/null
+++ b/apps/player/src/views/MobileBetDetailView.vue
@@ -0,0 +1,734 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('history.not_found') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ heroTitle }}
+ {{ heroAmount }}
+
+ {{ t('history.return_incl_stake', { amount: returnAmount }) }}
+
+ {{ formulaText }}
+
+ {{ stakeAmount }} × {{ oddsText }}
+
+
+
+
+
+
+
+
+
+
+
{{ matchTitle }}
+
+
+
+
+
{{ pickMarket }}
+
+ {{ pickSelection }}
+ @{{ oddsText }}
+
+
+
+ {{ t('history.ft') }}{{ bet.matchScore.ft }}
+
+
+ {{ t('history.ht') }}{{ bet.matchScore.ht }}
+
+
+
{{ t('history.awaiting_result') }}
+
+
+
+
+
+
+
+
+ {{ leg.matchTitle }}
+ @{{ formatOdds(leg.odds) }}
+
+
{{ leg.marketLabel }} · {{ translateSel(leg.selectionName) }}
+
+ {{ t('history.ft') }}{{ leg.score.ft }}
+ {{ t('history.ht') }}{{ leg.score.ht }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileCashbackRecordsView.vue b/apps/player/src/views/MobileCashbackRecordsView.vue
new file mode 100644
index 0000000..3559720
--- /dev/null
+++ b/apps/player/src/views/MobileCashbackRecordsView.vue
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('bet.loading') }}
+
+
+
+
+ {{ formatMoney(totalAmount, locale) }}
+
+ {{ t('cashback.total_received') }}
+
+ · {{ t('cashback.record_count', { n: items.length }) }}
+
+
+
+
+ {{ t('cashback.ledger_hint') }}
+
+ {{ t('cashback.list_title') }}
+
+
+
+
+
+ {{ formatMoney(row.amount, locale) }}
+ {{ formatPeriod(row.periodStart, row.periodEnd) }}
+
+
{{ formatRate(row.rate) }}
+
+
+ {{ t('cashback.effective_stake') }} {{ formatMoneyCompact(row.effectiveStake, locale) }}
+ {{ t('cashback.bet_count', { n: row.betCount }) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.no_more') }}
+
+
+
+
{{ t('cashback.empty') }}
+
{{ t('cashback.empty_hint') }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileFootballView.vue b/apps/player/src/views/MobileFootballView.vue
new file mode 100644
index 0000000..dd53356
--- /dev/null
+++ b/apps/player/src/views/MobileFootballView.vue
@@ -0,0 +1,794 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⌕
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('search.results_count', { count: sortedFilteredMatches.length }) }}
+
+
+
+ {{ normalizeLeagueName(match.leagueName) }}
+
+
+
+
+
+
+
+
+
![]()
+
{{ isSearchActive ? t('search.no_results') : t('bet.no_matches') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileHomeView.vue b/apps/player/src/views/MobileHomeView.vue
new file mode 100644
index 0000000..5ed7fa0
--- /dev/null
+++ b/apps/player/src/views/MobileHomeView.vue
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ match.homeTeamName }} vs {{ match.awayTeamName }}
+
{{ formatKickoff(match.startTime) }}
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
![]()
+
{{ emptyMessage }}
+
+
+
+
+
diff --git a/apps/player/src/views/MobileInboxHubView.vue b/apps/player/src/views/MobileInboxHubView.vue
new file mode 100644
index 0000000..e92a001
--- /dev/null
+++ b/apps/player/src/views/MobileInboxHubView.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
$router.push('/messages/' + id)" />
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileMatchDetailView.vue b/apps/player/src/views/MobileMatchDetailView.vue
new file mode 100644
index 0000000..eaccd87
--- /dev/null
+++ b/apps/player/src/views/MobileMatchDetailView.vue
@@ -0,0 +1,989 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ phaseLabel }}
+ {{ phaseLabel }}
+
+
+
+
+ {{ match.homeTeamName }}
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+ {{ match.awayTeamName }}
+
+
+
+ {{ t('bet.kickoff_time') }}{{ kickoff }}
+ {{ liveScoreText }}
+
+
+
+
+
{{ t('bet.result_stats_title') }}
+ {{ match.homeTeamName }} / {{ match.awayTeamName }}
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+ {{ t('history.my_bets') || '我的投注' }}
+
+
+
+
+
+
+
+
+ {{ phaseLabel }}
+ {{ phaseLabel }}
+
+ {{ marketStatusLabel(market.status) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileMessageDetailView.vue b/apps/player/src/views/MobileMessageDetailView.vue
new file mode 100644
index 0000000..8035418
--- /dev/null
+++ b/apps/player/src/views/MobileMessageDetailView.vue
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
{{ t('messages.detail_title') }}
+
+
+
+
+
+
+
+
+
{{ t('messages.not_found') }}
+
+
+
+
+
+ {{ message.isRead ? t('messages.status_read') : t('messages.status_unread') }}
+
+ {{ formatDate(message.createdAt) }}
+ {{ messageTitle(message) }}
+
+ {{ messageBody(message) }}
+
+
+
{{ t('messages.reject_reason') }}
+
{{ depositPayload.rejectReason }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileMyBetsView.vue b/apps/player/src/views/MobileMyBetsView.vue
new file mode 100644
index 0000000..40bf2c6
--- /dev/null
+++ b/apps/player/src/views/MobileMyBetsView.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('bet.loading') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.no_more') }}
+
+
+
+ {{ t('history.empty') }}
+
+
+
+
+
diff --git a/apps/player/src/views/MobileOutrightDetailView.vue b/apps/player/src/views/MobileOutrightDetailView.vue
new file mode 100644
index 0000000..8e55099
--- /dev/null
+++ b/apps/player/src/views/MobileOutrightDetailView.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+ {{ headTitle || t('bet.tab_outright') }}
+
+
+
+
+
+
+
+ {{ t('bet.outright_settled_hint') }}
+
+
+
+
+
+
+
{{ loadError || t('bet.no_outright') }}
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileProfileEditView.vue b/apps/player/src/views/MobileProfileEditView.vue
new file mode 100644
index 0000000..4b98dbc
--- /dev/null
+++ b/apps/player/src/views/MobileProfileEditView.vue
@@ -0,0 +1,564 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('profile.edit') }}
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
{{ message }}
+
{{ error }}
+
+
+
+
diff --git a/apps/player/src/views/MobileProfileView.vue b/apps/player/src/views/MobileProfileView.vue
new file mode 100644
index 0000000..d4cab80
--- /dev/null
+++ b/apps/player/src/views/MobileProfileView.vue
@@ -0,0 +1,728 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('common.load_failed') }}
+
+
+
+
+
+
![]()
+
+
+
+
+
+

+
+ THEBET365
+ MEMBER
+
+
+
+ +
+ {{ t('recharge.title') }}
+
+
+
+
+
当前余额
+
{{ balanceDisplay }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('wallet.view_all') }}
+
+ ›
+
+
+
+
+
+ {{ t('wallet.view_cashbacks') }}
+
+ ›
+
+
+
+
+
+ {{ t('messages.title') }}
+
+ ›
+
+
+
+
+
+ {{ t('recharge.history_title') }}
+
+ ›
+
+
+
+
+
+ {{ t('profile.edit') }}
+
+ ›
+
+
+
+
+
+
{{ t('profile.rules_p1') }}
+
{{ t('profile.rules_p2') }}
+
{{ t('profile.rules_p3') }}
+
{{ t('profile.rules_p4') }}
+
{{ t('profile.rules_p5') }}
+
+
+
+
+
+
+
{{ t('profile.language') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileRechargeHistoryView.vue b/apps/player/src/views/MobileRechargeHistoryView.vue
new file mode 100644
index 0000000..e035e03
--- /dev/null
+++ b/apps/player/src/views/MobileRechargeHistoryView.vue
@@ -0,0 +1,851 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('recharge.no_orders') }}
+
+
+
+
+
+
{{ formatMoney(order.amount, locale) }}
+
+ {{ t('recharge.credited') }}: {{ formatMoney(order.approvedAmount, locale) }}
+
+
+ {{ order.paymentMethodName || '-' }}
+
+
+
+ {{ t('recharge.apply_time') }}
+ {{ formatOrderTime(order.createdAt) }}
+
+
+ {{ t('recharge.review_time') }}
+ {{ formatOrderTime(order.reviewedAt) }}
+
+
+
+ {{ orderNoteLine(order) }}
+
+
+
+ {{ t('recharge.audit_summary', { count: auditStepCount(order) }) }}
+
+ {{ t('recharge.view_detail') }} ›
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.no_more') }}
+
+
+
+
+
+
+
+
+
{{ t('recharge.audit_title') }}
+
+
+
+
+ {{ selectedOrder.methodType }}
+
+
+ {{ statusLabel(selectedOrder.status) }}
+
+
+
{{ formatMoney(selectedOrder.amount, locale) }}
+
+ {{ t('recharge.credited') }}: {{ formatMoney(selectedOrder.approvedAmount, locale) }}
+
+
{{ selectedOrder.paymentMethodName || '-' }}
+
+ {{ t('recharge.apply_time') }}
+ {{ formatOrderTime(selectedOrder.createdAt) }}
+
+
+ {{ t('recharge.review_time') }}
+ {{ formatOrderTime(selectedOrder.reviewedAt) }}
+
+
+ {{ orderNoteLine(selectedOrder) }}
+
+
+
+
+
{{ t('recharge.audit_title') }}
+
+
+
+
+
+
+
+
+ {{ auditActionLabel(entry.log.action) }}
+
+
+
{{ entry.actor }}
+
+ {{ t('recharge.audit_credited') }} {{ formatMoney(entry.log.approvedAmount, locale) }}
+
+
+ {{ t('recharge.reject_reason') }}
+ {{ entry.remark.text }}
+
+
+ {{ auditNoteDisplayText(entry.remark) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileRechargeView.vue b/apps/player/src/views/MobileRechargeView.vue
new file mode 100644
index 0000000..850b9c4
--- /dev/null
+++ b/apps/player/src/views/MobileRechargeView.vue
@@ -0,0 +1,691 @@
+
+
+
+
+
+
+
+
+
+
+
+
✓
+
{{ t('recharge.submitted') }}
+
{{ orderNo }}
+
{{ t('recharge.pending_review') }}
+
+
+
+
+
+ {{ t('recharge.reapply_hint') }}
+
+
+
+
+
+
+
+
+ {{ t('recharge.no_methods') }}
+
+
+
+
+
+
+
+
{{ selectedMethod.bankName }}
+
+
+
{{ formatCardNumber(selectedMethod.accountNumber) }}
+
+
+
+
+ {{ t('recharge.account_holder') }}
+ {{ selectedMethod.accountHolder }}
+
+
DEBIT
+
+
+
+
+
+
+
+
{{ t('recharge.usdt_address') }}
+
+ {{ selectedMethod.usdtAddress }}
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileWalletDetailView.vue b/apps/player/src/views/MobileWalletDetailView.vue
new file mode 100644
index 0000000..53d47ab
--- /dev/null
+++ b/apps/player/src/views/MobileWalletDetailView.vue
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('bet.loading') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.no_more') }}
+
+
+
+ {{ t('wallet.no_records') }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileWalletTransactionDetailView.vue b/apps/player/src/views/MobileWalletTransactionDetailView.vue
new file mode 100644
index 0000000..eb8e194
--- /dev/null
+++ b/apps/player/src/views/MobileWalletTransactionDetailView.vue
@@ -0,0 +1,388 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('wallet.detail_not_found') }}
+
+
+
+ {{ displayTypeLabel }}
+ {{ summaryText }}
+ {{ formatMoney(tx.amount, locale) }}
+ {{ formattedTime }}
+
+
+
+ {{ t('wallet.detail_summary') }}
+
+
+ {{ t('wallet.detail_amount') }}
+ {{ formatMoney(tx.amount, locale) }}
+
+
+ {{ t('wallet.detail_balance_before') }}
+ {{ formatMoney(tx.balanceBefore, locale) }}
+
+
+ {{ t('wallet.detail_balance_after') }}
+ {{ formatMoney(tx.balanceAfter, locale) }}
+
+
+
+ {{ t('wallet.detail_frozen_before') }}
+ {{ formatMoney(tx.frozenBefore, locale) }}
+
+
+ {{ t('wallet.detail_frozen_after') }}
+ {{ formatMoney(tx.frozenAfter, locale) }}
+
+
+
+
+
+
+ {{ t('wallet.detail_reference') }}
+
+
+ {{ t('wallet.detail_reference_type') }}
+ {{ referenceLabel }}
+
+
+ {{ t('wallet.detail_reference_id') }}
+ {{ tx.referenceId }}
+
+
+ {{ t('wallet.detail_remark') }}
+
+
+
+
+
+
+
+
+ {{ t('wallet.detail_tx_id') }}
+ {{ tx.transactionId }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/MobileWalletView.vue b/apps/player/src/views/MobileWalletView.vue
new file mode 100644
index 0000000..45e2cf9
--- /dev/null
+++ b/apps/player/src/views/MobileWalletView.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('bet.loading') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('wallet.no_records') }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/MyBetsView.vue b/apps/player/src/views/MyBetsView.vue
index 775296a..84273e6 100644
--- a/apps/player/src/views/MyBetsView.vue
+++ b/apps/player/src/views/MyBetsView.vue
@@ -1,225 +1,10 @@
-
-
-
-
-
-
-
-
- {{ t('bet.loading') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('common.no_more') }}
-
-
-
- {{ t('history.empty') }}
-
-
+
+
-
-
diff --git a/apps/player/src/views/OutrightDetailView.vue b/apps/player/src/views/OutrightDetailView.vue
new file mode 100644
index 0000000..3208a44
--- /dev/null
+++ b/apps/player/src/views/OutrightDetailView.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/apps/player/src/views/ProfileEditView.vue b/apps/player/src/views/ProfileEditView.vue
index 4b98dbc..ade1308 100644
--- a/apps/player/src/views/ProfileEditView.vue
+++ b/apps/player/src/views/ProfileEditView.vue
@@ -1,564 +1,10 @@
-
-
-
-
-
-
-
-
- {{ t('profile.edit') }}
-
-
-
-
-
![]()
-
-
-
-
-
-
-
-
-
{{ message }}
-
{{ error }}
-
+
+
-
-
diff --git a/apps/player/src/views/ProfileView.vue b/apps/player/src/views/ProfileView.vue
index d4cab80..c738428 100644
--- a/apps/player/src/views/ProfileView.vue
+++ b/apps/player/src/views/ProfileView.vue
@@ -1,728 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
{{ t('common.load_failed') }}
-
-
-
-
-
-
![]()
-
-
-
-
-
-

-
- THEBET365
- MEMBER
-
-
-
- +
- {{ t('recharge.title') }}
-
-
-
-
-
当前余额
-
{{ balanceDisplay }}
-
-
-
-
-
-
-
-
-
-
- {{ t('wallet.view_all') }}
-
- ›
-
-
-
-
-
- {{ t('wallet.view_cashbacks') }}
-
- ›
-
-
-
-
-
- {{ t('messages.title') }}
-
- ›
-
-
-
-
-
- {{ t('recharge.history_title') }}
-
- ›
-
-
-
-
-
- {{ t('profile.edit') }}
-
- ›
-
-
-
-
-
-
{{ t('profile.rules_p1') }}
-
{{ t('profile.rules_p2') }}
-
{{ t('profile.rules_p3') }}
-
{{ t('profile.rules_p4') }}
-
{{ t('profile.rules_p5') }}
-
-
-
-
-
-
-
{{ t('profile.language') }}
-
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/RechargeHistoryView.vue b/apps/player/src/views/RechargeHistoryView.vue
index e035e03..a71b00c 100644
--- a/apps/player/src/views/RechargeHistoryView.vue
+++ b/apps/player/src/views/RechargeHistoryView.vue
@@ -1,851 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('recharge.no_orders') }}
-
-
-
-
-
-
{{ formatMoney(order.amount, locale) }}
-
- {{ t('recharge.credited') }}: {{ formatMoney(order.approvedAmount, locale) }}
-
-
- {{ order.paymentMethodName || '-' }}
-
-
-
- {{ t('recharge.apply_time') }}
- {{ formatOrderTime(order.createdAt) }}
-
-
- {{ t('recharge.review_time') }}
- {{ formatOrderTime(order.reviewedAt) }}
-
-
-
- {{ orderNoteLine(order) }}
-
-
-
- {{ t('recharge.audit_summary', { count: auditStepCount(order) }) }}
-
- {{ t('recharge.view_detail') }} ›
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('common.no_more') }}
-
-
-
-
-
-
-
-
-
{{ t('recharge.audit_title') }}
-
-
-
-
- {{ selectedOrder.methodType }}
-
-
- {{ statusLabel(selectedOrder.status) }}
-
-
-
{{ formatMoney(selectedOrder.amount, locale) }}
-
- {{ t('recharge.credited') }}: {{ formatMoney(selectedOrder.approvedAmount, locale) }}
-
-
{{ selectedOrder.paymentMethodName || '-' }}
-
- {{ t('recharge.apply_time') }}
- {{ formatOrderTime(selectedOrder.createdAt) }}
-
-
- {{ t('recharge.review_time') }}
- {{ formatOrderTime(selectedOrder.reviewedAt) }}
-
-
- {{ orderNoteLine(selectedOrder) }}
-
-
-
-
-
{{ t('recharge.audit_title') }}
-
-
-
-
-
-
-
-
- {{ auditActionLabel(entry.log.action) }}
-
-
-
{{ entry.actor }}
-
- {{ t('recharge.audit_credited') }} {{ formatMoney(entry.log.approvedAmount, locale) }}
-
-
- {{ t('recharge.reject_reason') }}
- {{ entry.remark.text }}
-
-
- {{ auditNoteDisplayText(entry.remark) }}
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/RechargeView.vue b/apps/player/src/views/RechargeView.vue
index 850b9c4..8c97723 100644
--- a/apps/player/src/views/RechargeView.vue
+++ b/apps/player/src/views/RechargeView.vue
@@ -1,691 +1,10 @@
-
-
-
-
-
-
-
-
-
-
✓
-
{{ t('recharge.submitted') }}
-
{{ orderNo }}
-
{{ t('recharge.pending_review') }}
-
-
-
-
-
- {{ t('recharge.reapply_hint') }}
-
-
-
-
-
-
-
-
- {{ t('recharge.no_methods') }}
-
-
-
-
-
-
-
-
{{ selectedMethod.bankName }}
-
-
-
{{ formatCardNumber(selectedMethod.accountNumber) }}
-
-
-
-
- {{ t('recharge.account_holder') }}
- {{ selectedMethod.accountHolder }}
-
-
DEBIT
-
-
-
-
-
-
-
-
{{ t('recharge.usdt_address') }}
-
- {{ selectedMethod.usdtAddress }}
-
-
-
-
-
![]()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/RegisterWrapperView.vue b/apps/player/src/views/RegisterWrapperView.vue
new file mode 100644
index 0000000..eacf3de
--- /dev/null
+++ b/apps/player/src/views/RegisterWrapperView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/apps/player/src/views/WalletDetailView.vue b/apps/player/src/views/WalletDetailView.vue
index 53d47ab..81ef4a5 100644
--- a/apps/player/src/views/WalletDetailView.vue
+++ b/apps/player/src/views/WalletDetailView.vue
@@ -1,387 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('bet.loading') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('common.no_more') }}
-
-
-
- {{ t('wallet.no_records') }}
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/WalletTransactionDetailView.vue b/apps/player/src/views/WalletTransactionDetailView.vue
index eb8e194..d2616df 100644
--- a/apps/player/src/views/WalletTransactionDetailView.vue
+++ b/apps/player/src/views/WalletTransactionDetailView.vue
@@ -1,388 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ t('wallet.detail_not_found') }}
-
-
-
- {{ displayTypeLabel }}
- {{ summaryText }}
- {{ formatMoney(tx.amount, locale) }}
- {{ formattedTime }}
-
-
-
- {{ t('wallet.detail_summary') }}
-
-
- {{ t('wallet.detail_amount') }}
- {{ formatMoney(tx.amount, locale) }}
-
-
- {{ t('wallet.detail_balance_before') }}
- {{ formatMoney(tx.balanceBefore, locale) }}
-
-
- {{ t('wallet.detail_balance_after') }}
- {{ formatMoney(tx.balanceAfter, locale) }}
-
-
-
- {{ t('wallet.detail_frozen_before') }}
- {{ formatMoney(tx.frozenBefore, locale) }}
-
-
- {{ t('wallet.detail_frozen_after') }}
- {{ formatMoney(tx.frozenAfter, locale) }}
-
-
-
-
-
-
- {{ t('wallet.detail_reference') }}
-
-
- {{ t('wallet.detail_reference_type') }}
- {{ referenceLabel }}
-
-
- {{ t('wallet.detail_reference_id') }}
- {{ tx.referenceId }}
-
-
- {{ t('wallet.detail_remark') }}
-
-
-
-
-
-
-
-
- {{ t('wallet.detail_tx_id') }}
- {{ tx.transactionId }}
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/WalletView.vue b/apps/player/src/views/WalletView.vue
index 45e2cf9..39a6ffc 100644
--- a/apps/player/src/views/WalletView.vue
+++ b/apps/player/src/views/WalletView.vue
@@ -1,263 +1,10 @@
-
-
-
-
-
-
-
-
- {{ t('bet.loading') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('wallet.no_records') }}
-
-
-
+
+
-
-
diff --git a/apps/player/src/views/desktop/DesktopAnnouncementDetailView.vue b/apps/player/src/views/desktop/DesktopAnnouncementDetailView.vue
new file mode 100644
index 0000000..7e14209
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopAnnouncementDetailView.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopAnnouncementListView.vue b/apps/player/src/views/desktop/DesktopAnnouncementListView.vue
new file mode 100644
index 0000000..91a9bac
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopAnnouncementListView.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('announcements.empty') }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopAnnouncementsHubShell.vue b/apps/player/src/views/desktop/DesktopAnnouncementsHubShell.vue
new file mode 100644
index 0000000..52ff171
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopAnnouncementsHubShell.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {{ t('announcements.select_hint') }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopBetDetailView.vue b/apps/player/src/views/desktop/DesktopBetDetailView.vue
new file mode 100644
index 0000000..b68236f
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopBetDetailView.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('common.load_failed') }}
+
+
+
+
+
+
+
+
+
+
{{ t('bet.selections') || '投注选项' }}
+
+
{{ sel.matchName || t('bet.match') }}
+
+ {{ sel.market || sel.marketName || '' }}
+ {{ sel.selectionName || '' }}
+ @{{ sel.odds }}
+
+
+
+
+
+ {{ t('common.not_found') || '未找到记录' }}
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopCashbackRecordsView.vue b/apps/player/src/views/desktop/DesktopCashbackRecordsView.vue
new file mode 100644
index 0000000..23d8827
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopCashbackRecordsView.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+ | {{ t('cashback.period') }} |
+ {{ t('cashback.effective_stake') }} |
+ {{ t('cashback.rate') }} |
+ {{ t('cashback.amount') }} |
+ {{ t('cashback.batch_no') }} |
+ {{ t('wallet.time') }} |
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+ | {{ formatPeriod(row.periodStart, row.periodEnd) }} |
+ {{ formatMoneyCompact(row.effectiveStake, locale) }} |
+ {{ formatRate(row.rate) }} |
+ {{ formatMoney(row.amount, locale) }} |
+ {{ row.batchNo }} |
+ {{ formatTime(row.confirmedAt ?? row.createdAt) }} |
+
+
+
+ |
+ {{ t('cashback.empty') }}
+ {{ t('cashback.empty_hint') }}
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopFootballView.vue b/apps/player/src/views/desktop/DesktopFootballView.vue
new file mode 100644
index 0000000..295f87b
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopFootballView.vue
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopForgotPasswordView.vue b/apps/player/src/views/desktop/DesktopForgotPasswordView.vue
new file mode 100644
index 0000000..349f769
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopForgotPasswordView.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+

+
THEBET365
+
重置您的登录密码
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopHomeView.vue b/apps/player/src/views/desktop/DesktopHomeView.vue
new file mode 100644
index 0000000..6792a46
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopHomeView.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ match.leagueName }}
+ LIVE
+
+
+
+
+
+ {{ match.homeTeamName }}
+
+
VS
+
+
+ {{ match.awayTeamName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopInboxHubView.vue b/apps/player/src/views/desktop/DesktopInboxHubView.vue
new file mode 100644
index 0000000..a066ac0
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopInboxHubView.vue
@@ -0,0 +1,264 @@
+
+
+
+
+
+
+
+
+
+
+
+ $router.push('/messages/' + id)" />
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopLoginView.vue b/apps/player/src/views/desktop/DesktopLoginView.vue
new file mode 100644
index 0000000..440440d
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopLoginView.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+

+
THEBET365
+
专业体育赛事投注平台
+
+
+ ⚡
+ 实时赔率更新
+
+
+ 🔒
+ 安全稳定平台
+
+
+ 💰
+ 快速充值提款
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopMatchDetailView.vue b/apps/player/src/views/desktop/DesktopMatchDetailView.vue
new file mode 100644
index 0000000..c16cf77
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopMatchDetailView.vue
@@ -0,0 +1,771 @@
+
+
+
+
+
+
+
+ /
+ {{ match?.leagueName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ match.homeTeamName }}
+
+
+
+
+ {{ match.score?.ftHome }}
+ -
+ {{ match.score?.ftAway }}
+
+
VS
+
{{ kickoff }}
+
+
+
+
+ {{ match.awayTeamName }}
+
+
+
+
+
+
{{ t('bet.result_stats_title') || '赛果数据' }}
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
{{ t('bet.filter_market') }}
+
+
+
+
+
+
+
+
+
+
+ {{ marketLabel(market) }}
+ {{ t('bet.market_status_closed') }}
+
+
+ toggleSelection(market.selections.find(s => s.id === id)!, market, ev)"
+ />
+
+
+
+
+
+
+
{{ t('bet.correct_score') }}
+
+
+
+ {{ marketLabel(market) }}
+ {{ t('bet.market_status_closed') }}
+
+
toggleSelection(market.selections.find(s => s.id === id)!, market, ev)"
+ />
+
+
+
+
+
+
{{ hasMarketFilter ? t('bet.no_markets_filtered') : (t('bet.no_markets') || '暂无可用盘口') }}
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopMessagesHubShell.vue b/apps/player/src/views/desktop/DesktopMessagesHubShell.vue
new file mode 100644
index 0000000..2b8f2d4
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopMessagesHubShell.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('messages.select_hint') }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopMyBetsView.vue b/apps/player/src/views/desktop/DesktopMyBetsView.vue
new file mode 100644
index 0000000..6e41db8
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopMyBetsView.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+ | {{ t('bet.bet_no') }} |
+ {{ t('bet.match') }} |
+ {{ t('bet.selection') }} |
+ {{ t('bet.odds') }} |
+ {{ t('bet.stake') }} |
+ {{ t('bet.potential_payout') }} |
+ {{ t('common.status') }} |
+ {{ t('bet.placed_at') }} |
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+ {{ bet.betNo }}
+ |
+ {{ bet.matchTitle || '-' }} |
+ {{ bet.pickLabel || '-' }} |
+ {{ bet.totalOdds ?? '-' }} |
+ {{ bet.stake }} |
+ {{ bet.potentialReturn ?? '-' }} |
+
+
+ {{ statusLabel(bet.status) }}
+
+ |
+ {{ bet.placedAt ? new Date(bet.placedAt).toLocaleString() : '-' }} |
+
+
+
+ |
+ {{ t('history.empty') }}
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopOutrightDetailView.vue b/apps/player/src/views/desktop/DesktopOutrightDetailView.vue
new file mode 100644
index 0000000..4122aa0
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopOutrightDetailView.vue
@@ -0,0 +1,334 @@
+
+
+
+
+
+
+ /
+ {{ t('bet.tab_outright') }}
+
+
+
+
+
+
+
+
+
+
+
+
{{ headTitle }}
+ {{ t('bet.outright_settled') }}
+
+
+ {{ event.leagueName }}
+
+
{{ t('bet.outright_teams_count', { n: teamCount }) }}
+
{{ t('bet.outright_settled_hint') }}
+
+
+
+
+
+
+
+
+
+
+
{{ loadError || t('bet.no_outright') }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopProfileEditView.vue b/apps/player/src/views/desktop/DesktopProfileEditView.vue
new file mode 100644
index 0000000..6694077
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopProfileEditView.vue
@@ -0,0 +1,353 @@
+
+
+
+
+
+
+
+
+
+
+
{{ t('profile.avatar') || '头像' }}
+
+
![avatar]()
+
+
+
+
+
+
+
+
{{ t('profile.basic_info') || '基础信息' }}
+
+
{{ message }}
+
{{ error }}
+
+
+
+
+
+
{{ t('profile.username_locked') || '用户名不可修改' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('profile.change_password') || '修改密码' }}
+
+
+
+
+
+
+
+ { avatarModalOpen = false; if (key !== undefined) setAvatarKey(key); }"
+ />
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopProfileView.vue b/apps/player/src/views/desktop/DesktopProfileView.vue
new file mode 100644
index 0000000..022aead
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopProfileView.vue
@@ -0,0 +1,439 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('common.load_failed') }}
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+

+
+ THEBET365
+ MEMBER
+
+
+
+ +
+ {{ t('recharge.title') }}
+
+
+
+
+
{{ t('wallet.available') || '可用余额' }}
+
{{ balanceDisplay }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('profile.username') || '用户名' }}
+ {{ profileRaw?.username }}
+
+
+ {{ t('profile.phone') || '手机号' }}
+ {{ profileRaw?.preferences?.phone || '-' }}
+
+
+ {{ t('profile.edit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopRechargeHistoryView.vue b/apps/player/src/views/desktop/DesktopRechargeHistoryView.vue
new file mode 100644
index 0000000..6fef90b
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopRechargeHistoryView.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+ | {{ t('recharge.order_no') }} |
+ {{ t('recharge.method') }} |
+ {{ t('wallet.amount') }} |
+ {{ t('common.status') }} |
+ {{ t('wallet.time') }} |
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+ | {{ order.orderNo || order.id }} |
+ {{ methodLabel(order) }} |
+ {{ formatMoney(order.amount, locale) }} |
+
+
+ {{ statusLabel(order.status) }}
+
+ |
+ {{ new Date(order.createdAt).toLocaleString() }} |
+
+
+
+ |
+ {{ t('recharge.no_orders') }}
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopRechargeView.vue b/apps/player/src/views/desktop/DesktopRechargeView.vue
new file mode 100644
index 0000000..568d804
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopRechargeView.vue
@@ -0,0 +1,580 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('recharge.success_title') }}
+
{{ t('recharge.order_no') }}: {{ orderNo }}
+
{{ t('recharge.success_hint') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('recharge.choose_method') || '选择收款账户' }}
+
+ {{ t('recharge.no_methods') || '暂无可用收款账户' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopRegisterView.vue b/apps/player/src/views/desktop/DesktopRegisterView.vue
new file mode 100644
index 0000000..3df109b
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopRegisterView.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+

+
THEBET365
+
加入我们,开始精彩体育投注
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopWalletDetailView.vue b/apps/player/src/views/desktop/DesktopWalletDetailView.vue
new file mode 100644
index 0000000..cd85ee2
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopWalletDetailView.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | {{ t('wallet.type') || '类型' }} |
+ {{ t('wallet.note') || '备注' }} |
+ {{ t('wallet.amount') || '金额' }} |
+ {{ t('wallet.time') || '时间' }} |
+ |
+
+
+
+
+ | {{ txLabel(tx) }} |
+ {{ txSummaryLabel(tx, t) || '-' }} |
+ {{ formatMoney(tx.amount, locale) }} |
+ {{ new Date(tx.createdAt).toLocaleString() }} |
+ › |
+
+
+
+
+
+
+
+
{{ t('common.no_more') }}
+
+
+ {{ t('wallet.no_records') }}
+
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopWalletTransactionDetailView.vue b/apps/player/src/views/desktop/DesktopWalletTransactionDetailView.vue
new file mode 100644
index 0000000..1dcaab4
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopWalletTransactionDetailView.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('common.load_failed') }}
+
+
+
+
+
+ {{ formatMoney(detail.amount, locale) }}
+
+
{{ txLabel(detail) }}
+
+
+
+ {{ t('wallet.type') || '类型' }}
+ {{ txLabel(detail) }}
+
+
+ {{ t('wallet.note') || '备注' }}
+ {{ txSummaryLabel(detail, t) || '-' }}
+
+
+ {{ t('wallet.balance_before') || '变动前余额' }}
+ {{ formatMoney(detail.balanceBefore, locale) }}
+
+
+ {{ t('wallet.balance_after') || '变动后余额' }}
+ {{ formatMoney(detail.balanceAfter, locale) }}
+
+
+ {{ t('wallet.frozen_before') || '冻结前' }}
+ {{ formatMoney(detail.frozenBefore, locale) }}
+
+
+ {{ t('wallet.frozen_after') || '冻结后' }}
+ {{ formatMoney(detail.frozenAfter, locale) }}
+
+
+ {{ t('wallet.time') || '时间' }}
+ {{ new Date(detail.createdAt).toLocaleString() }}
+
+
+ {{ t('wallet.transaction_id') || '流水号' }}
+ {{ detail.transactionId }}
+
+
+
+
+
{{ t('common.not_found') || '未找到记录' }}
+
+
+
+
+
+
diff --git a/apps/player/src/views/desktop/DesktopWalletView.vue b/apps/player/src/views/desktop/DesktopWalletView.vue
new file mode 100644
index 0000000..e1f267b
--- /dev/null
+++ b/apps/player/src/views/desktop/DesktopWalletView.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | {{ t('wallet.type') || '类型' }} |
+ {{ t('wallet.note') || '备注' }} |
+ {{ t('wallet.amount') || '金额' }} |
+ {{ t('wallet.time') || '时间' }} |
+
+
+
+
+ | {{ txLabel(tx) }} |
+ {{ txSubtitle(tx) || '-' }} |
+ {{ formatMoney(tx.amount, locale) }} |
+ {{ new Date(tx.createdAt).toLocaleString() }} |
+
+
+
+
+
+
+
+
+
+ {{ t('wallet.no_records') }}
+
+
+
+
+
+