Skip to main content

Routes & Pages

Định nghĩa trong src/App.tsx. Tất cả route protected được bọc bởi ProtectedRoute + AppLayout (trừ payment return pages).


Public routes (không cần auth)

RouteComponentMục đích
/loginLoginPageĐăng nhập qua portal auth, hỗ trợ OTP 2FA + Turnstile
/forgot-passwordForgotPasswordContactPageNhập email/phone để nhận OTP
/forgot-password/otpForgotPasswordOtpPageXác minh OTP
/forgot-password/resetForgotPasswordResetPageĐặt mật khẩu mới

Protected routes

RouteComponentMục đích
/DashboardPageTrang chủ: số dư credits/USD, số player, mua credits, quick links
/playersPlayersPageDanh sách player, tìm kiếm, phân trang, tạo player mới
/players/:playerIdPlayerDetailPageChi tiết player: deposit/redeem, ban/unban, lịch sử
/cashiersCashiersPageQuản lý cashier: danh sách, tạo mới
/cashiers/:cashierIdCashierDetailPageBáo cáo cashier, shifts, fraud, suspend/terminate
/fraud-indicatorsFraudIndicatorsPageChỉ số gian lận (tab Cashier + Player)
/transactionsTransactionsPageSổ credits (ledger), filter, export CSV
/online-transactionsOnlineBalanceTransactionsPageSổ USD wallet, rút crypto, export
/provider-feesProviderFeesPageCấu hình phí provider (deposit/withdrawal/transfer)
/withdrawalsWithdrawalsApprovalPageDuyệt/từ chối yêu cầu rút tiền player
/settingsSettingsPageCost rate, cảnh báo số dư thấp, bật 2FA
/kiosk-domainKioskDomainPageQuản lý subdomain kiosk + tải poster
/popups/sendSendPlayerPopupPageGửi in-app popup tới player
/broadcasts/sendSendBroadcastPageGửi broadcast notification
/payment/successShopPaymentSuccessPageCallback thanh toán thành công
/payment/cancelledShopPaymentCancelledPageCallback hủy thanh toán
/payment/errorShopPaymentErrorPageCallback lỗi thanh toán
/transfer/legacyTransferToPlayerPageLuồng chuyển credits cũ (lookup phone + OTP)

Redirect routes

RouteRedirectGhi chú
/transfer/playersLegacy
/purchase/Legacy
* (catch-all)/

Điều kiện hiển thị menu

Send popup / Send broadcast

Chỉ hiển thị khi can_delegate_popups === true (từ dashboard API hoặc user profile).

Logic trong AppLayout.tsx:

  • Fetch dashboard → setPopupNavAllowed(!!res.data.can_delegate_popups)
  • Fallback từ user.can_delegate_popups

Trang /popups/send/broadcasts/send tự redirect nếu không có quyền.


Components theo domain

Layout & Shell

ComponentFileVai trò
AppLayoutcomponents/layout/AppLayout.tsxSidebar desktop, bottom nav mobile, balance cards, nav, account menu
ProtectedRoutecomponents/auth/ProtectedRoute.tsxGuard auth, redirect /login
ModalPortalcomponents/ui/ModalPortal.tsxPortal modal
PortalEmptyStatecomponents/ui/PortalEmptyState.tsxEmpty state UI

Auth

ComponentVai trò
LoginPagePortal login + OTP + Turnstile
ForgotPassword*Page3-step password reset
VerifyNowTriggerModal xác minh email/phone shop

Business

ComponentVai trò
ShopCreditPurchaseTrigger/ModalMua credits (tab Crypto + Balance)
PlayerDetailPanelActions trên player: deposit, redeem, ban, history
ShopPlayerLinkByPhonePanelForm tạo player trong modal
ShopDashboardOverviewCard profile shop trên dashboard
ShopNotificationBellBell broadcasts (poll 2 phút)
ShopInAppPopupGateGate popup toàn app
PortalWithdrawalLimitsPanelGiới hạn rút USD
AvailableCreditsCalloutHiển thị số dư khi transfer/deposit
ShopPosterDownloadSectionTải poster quảng cáo kiosk (3 template)

Poster templates

TemplateStyle
NeonArcadeNeon arcade
GoldPremiumGold premium
DarkNeonDark neon

Render qua html-to-image → download PNG.


Payment return flow

Backend redirect về Shop Portal sau thanh toán:

/payment/success?transaction_id=...&status=...
/payment/cancelled?transaction_id=...
/payment/error?message=...

Query params: transaction_id, status, message.