feat(api, i18n): add agent_node_id to various admin queries and enhance multi-language support

Introduced the agent_node_id field in AdminDrawListQuery, AdminPlayerListQuery, AdminSettlementBatchListQuery, TicketItemsListQuery, and TransferOrderListQuery to improve filtering capabilities. Updated the admin-breadcrumb and admin-sidebar components to include new translations for agent-related terms in English, Nepali, and Chinese, enhancing the overall user experience and multi-language support across the admin interface.
This commit is contained in:
2026-06-02 14:37:08 +08:00
parent a4e7a2d228
commit b15e377187
105 changed files with 5305 additions and 1596 deletions

View File

@@ -0,0 +1,61 @@
{
"title": "Agents",
"treeTitle": "Agent tree",
"detailTitle": "Node details",
"selectNode": "Select an agent node from the tree",
"loadFailed": "Failed to load agent tree",
"siteLabel": "Site",
"createChild": "Add child agent",
"editNode": "Edit node",
"deleteNode": "Delete node",
"deleteNodeConfirm": "This action cannot be undone. Make sure the node has no children, users, or roles.",
"code": "Code",
"name": "Name",
"depth": "Depth",
"path": "Path",
"status": "Status",
"isRoot": "Root",
"createSuccess": "Created agent {{name}}",
"updateSuccess": "Updated {{name}}",
"deleteSuccess": "Deleted agent {{name}}",
"saveFailed": "Save failed",
"codeRequired": "Code and name are required",
"tabs": {
"overview": "Overview",
"roles": "Roles",
"users": "Accounts",
"delegation": "Delegation ceiling"
},
"delegation": {
"title": "Delegation ceiling",
"hint": "Select actions this child agent may grant to its own subordinates. Agent roles cannot exceed this ceiling.",
"permission": "Action",
"canDelegate": "May delegate further",
"save": "Save ceiling",
"saveSuccess": "Delegation ceiling saved",
"empty": "No actions available to assign",
"rootDenied": "Root nodes do not use delegation ceilings"
},
"roles": {
"title": "Agent roles",
"create": "Create role",
"permissions": "Permissions",
"slug": "Slug",
"userCount": "Users",
"createSuccess": "Created role {{name}}",
"updateSuccess": "Updated role {{name}}",
"deleteSuccess": "Deleted role {{name}}",
"permissionSaveSuccess": "Permissions updated",
"readOnlyTemplate": "Read-only template",
"permissionSubsetHint": "Only permissions you hold can be assigned"
},
"users": {
"title": "Agent accounts",
"create": "Create account",
"username": "Username",
"password": "Password",
"roles": "Roles",
"createSuccess": "Created account {{name}}",
"roleSaveSuccess": "Roles updated for {{name}}"
}
}

View File

@@ -125,6 +125,11 @@
"display": "Player",
"sitePlayerId": "Player ID"
},
"agentColumns": {
"agent": "Agent",
"filter": "Agent",
"filterAll": "All agents"
},
"toolbar": {
"defaultAdmin": "Administrator",
"notifications": "Notifications",
@@ -155,10 +160,19 @@
"settings": "Settings",
"account": "Account settings",
"integration": "Integration sites",
"agents": "Agents",
"config": "Operations config"
},
"sidebar": {
"workspace": "Workspace"
"workspace": "Workspace",
"group": {
"overview": "Overview",
"agent": "Agent organization",
"operations": "Operations",
"finance": "Finance & reports",
"rules": "Rules & parameters",
"platform": "Platform"
}
},
"auth": {
"checking": "Checking sign-in status…",

View File

@@ -178,7 +178,18 @@
"loadFailed": "Failed to load system settings",
"saveSuccess": "System settings saved",
"saveRuntimeSuccess": "Draw and settlement parameters saved",
"saveDrawSuccess": "Draw parameters saved",
"saveCurrencyFormatSuccess": "Currency display format saved",
"saveSettlementSuccess": "Settlement automation saved",
"saveFrontendSuccess": "Front-end display settings saved",
"sections": {
"draw": "Draw schedule and review",
"drawDescription": "Controls draw timing, close window, manual review, and cooldown. Only changed fields in this block are submitted.",
"currencyFormat": "Currency display format",
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
"settlement": "Settlement automation",
"settlementDescription": "Controls whether tick auto-runs settlement, approval, and payout. Only changed fields in this block are submitted."
},
"saveFailed": "Failed to save system settings",
"unsavedChanges": "Unsaved changes",
"frontendConfig": "Front-end configuration",
@@ -217,6 +228,12 @@
"confirmSaveDescription": "This updates draw review, cooldown, auto settlement/approval/payout, and play-rules display. It may affect site-wide operation.",
"confirmSaveRuntimeTitle": "Save draw and settlement parameters?",
"confirmSaveRuntimeDescription": "This updates draw review, schedule timing, cooldown, and auto settlement/approval/payout. Play-rules HTML is not changed.",
"confirmSaveDrawTitle": "Save draw parameters?",
"confirmSaveDrawDescription": "This updates draw review, schedule timing, and cooldown in this block only.",
"confirmSaveCurrencyFormatTitle": "Save currency display format?",
"confirmSaveCurrencyFormatDescription": "This updates decimal places and separators.",
"confirmSaveSettlementTitle": "Save settlement automation?",
"confirmSaveSettlementDescription": "This updates auto settlement, approval, and payout switches.",
"confirmSaveFrontendTitle": "Save front-end display settings?",
"confirmSaveFrontendDescription": "This updates play-rules HTML on the player site. Draw and settlement logic are not changed."
},

View File

@@ -29,6 +29,7 @@
"granularityDay": "By day",
"playBreakdown": "Play breakdown",
"playRanking": "Top 5 plays",
"agentRanking": "Top 5 agents",
"rankingMetricLabel": "Ranking metric",
"rankingMetrics": {
"bet": "By bet amount",
@@ -37,6 +38,7 @@
},
"periodDistribution": "Period structure",
"noPlayData": "No play data in this period",
"noAgentData": "No agent data in this period",
"periods": {
"today": "Today",
"last_7_days": "Last 7 days",
@@ -90,6 +92,7 @@
"batchPendingDraws": "Draws involved",
"batchPendingDrawsCount": "{{count}} draws pending",
"platformLockedAndCap": "Site locked {{locked}} / cap {{cap}}",
"platformCapNotConfigured": "Site locked {{locked}} · cap not configured",
"platformOrderAndTicket": "Site-wide {{orders}} orders · {{tickets}} lines",
"platformBetTotal": "Lifetime bet",
"platformNoFinanceActivity": "No bets site-wide yet",

View File

@@ -2,10 +2,13 @@
"title": "Reconcile",
"createTitle": "Create reconcile job",
"createDesc": "Manually check abnormal transfers by date range and optional player. Scheduled reconciliation still runs automatically.",
"scopeTitle": "Define the reconcile scope",
"scopeDescription": "Choose the business type and date range first, then decide whether to narrow it to one player.",
"reconcileType": "Reconcile type",
"reconcileTypeFixed": "Wallet transfer (main site ⇄ lottery)",
"reconcileTypeHint": "Only wallet transfer is currently supported.",
"dateRange": "Reconcile date range",
"dateRangeHint": "Start with a shorter period to spot concentrated issues before widening the search.",
"createTask": "Create reconcile job",
"submitting": "Submitting…",
"loadFailed": "Failed to load",
@@ -20,13 +23,21 @@
"createSuccess": "Reconcile job created",
"createFailed": "Failed to create job",
"noCreatePermission": "Current account cannot create reconcile jobs.",
"playerScopeTitle": "Optionally narrow to one player",
"playerAllPlayersHint": "If no player is selected, the reconcile job will cover all players in the chosen date range.",
"createSummaryAll": "A manual reconcile will run for all players from {{from}} to {{to}}.",
"createSummaryPlayer": "A manual reconcile will run for player {{player}} from {{from}} to {{to}}.",
"jobsTitle": "Reconcile jobs",
"jobsDesc": "Use the action on the right to open paginated item details.",
"refresh": "Refresh",
"jobNo": "Job no.",
"type": "Type",
"status": "Status",
"itemCount": "Items",
"mismatchCount": "Mismatches",
"matchedCount": "Matched",
"period": "Period",
"finishedAt": "Finished at",
"createdAt": "Created at",
"operate": "Action",
"view": "View",
@@ -34,6 +45,7 @@
"sideARef": "Lottery ref",
"sideBRef": "Main site ref",
"differenceAmount": "Difference (cent)",
"detectedAt": "Detected at",
"noDetails": "No details",
"playerSearch": "Player (optional)",
"playerSearchPlaceholder": "Search by player ID / username / nickname",

View File

@@ -84,15 +84,109 @@
"subtitle": "Results appear below. Export as CSV or Excel.",
"empty": "No data. Adjust filters and try again.",
"exportableRows": "rows exportable",
"summaryScopeHint": "Except for the total record count, the stat cards above summarize the current preview page. Use full CSV/Excel export for full-range numbers.",
"scope": {
"currentPage": "Current page"
},
"columns": {
"primary": "",
"secondary": "",
"metricA": "",
"metricB": "",
"metricC": "",
"status": "",
"extra": "",
"time": ""
"primary": "Primary",
"secondary": "Secondary",
"metricA": "Metric A",
"metricB": "Metric B",
"metricC": "Metric C",
"status": "Status",
"extra": "Extra",
"time": "Time",
"drawProfit": {
"primary": "Draw / Batch",
"secondary": "Draw / Settlement status",
"metricA": "Orders / Tickets",
"metricB": "Tickets / Winners",
"metricC": "Bet / House P&L",
"status": "Payout / Jackpot",
"extra": "Batch count",
"time": "Finished"
},
"dailyProfit": {
"primary": "Business date",
"secondary": "Note",
"metricA": "Bet",
"metricB": "Payout",
"metricC": "House P&L",
"status": "Refund",
"extra": "Net",
"time": "Updated"
},
"playerWinLoss": {
"primary": "Player",
"secondary": "Player ID",
"metricA": "Bet",
"metricB": "Payout",
"metricC": "Net win/loss",
"status": "Tier",
"extra": "Note",
"time": "Time"
},
"playerTransfer": {
"primary": "Transfer no.",
"secondary": "Player",
"metricA": "Direction",
"metricB": "Status",
"metricC": "Amount",
"status": "External ref",
"extra": "Failure reason",
"time": "Created"
},
"hotNumberRisk": {
"primary": "Number / Log",
"secondary": "Draw / Action",
"metricA": "Cap / Amount",
"metricB": "Locked / Play",
"metricC": "Remaining / Ticket",
"status": "Sold out / Player",
"extra": "Usage / Reason",
"time": "Version / Time"
},
"playDimension": {
"primary": "Play",
"secondary": "Dimension",
"metricA": "Bet",
"metricB": "Payout",
"metricC": "House P&L",
"status": "Share",
"extra": "Note",
"time": "Time"
},
"soldOut": {
"primary": "Number",
"secondary": "Draw",
"metricA": "Cap",
"metricB": "Locked",
"metricC": "Remaining",
"status": "Sold out",
"extra": "Usage",
"time": "Version"
},
"rebateCommission": {
"primary": "Play",
"secondary": "Orders",
"metricA": "Rebate",
"metricB": "Ticket items",
"metricC": "Commission",
"status": "Rule hit",
"extra": "Note",
"time": "Time"
},
"adminAudit": {
"primary": "Log ID",
"secondary": "Operator type",
"metricA": "Operator ID",
"metricB": "Module",
"metricC": "Action",
"status": "Target type",
"extra": "IP",
"time": "Time"
}
},
"stats": {
"records": "Records",
@@ -179,7 +273,7 @@
},
"daily_profit": {
"title": "Daily P&L summary",
"summary": "Summarize bets, payouts, refunds, P&L, and net amount by date."
"summary": "Summarize bet amount, payout, and house P&L by business date. Refund and standalone net amount are not included yet."
},
"player_win_loss": {
"title": "Player win/loss report",