feat(i18n, config): enhance agent management localization and add settings/currencies hub cards
Some checks failed
lotteryadmin CI / build (push) Has been cancelled

Added new agent-related translation keys across English, Nepali, and Chinese including agentCode, agentName, loginUsername, and detailTabs. Enhanced agent console hints for child creation permissions and line root profile read-only states. Added validation error messages for share/rebate parent limits and username charset validation. Introduced common status labels (enabled/disabled) and yes/no/none text
This commit is contained in:
2026-06-24 11:19:07 +08:00
parent 9491ff10dd
commit 7d075ceb62
10 changed files with 106 additions and 6 deletions

View File

@@ -4,6 +4,9 @@
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password to create one.",
"childrenCount": "Direct downline",
"code": "Code",
"agentCode": "Agent code",
"agentName": "Agent name",
"loginUsername": "Login name",
"codeRequired": "Code and name are required",
"createChild": "Add child agent",
"createSuccess": "Created agent {{name}}",
@@ -29,6 +32,7 @@
"deleteSuccess": "Deleted agent {{name}}",
"depth": "Depth",
"detailTitle": "Node details",
"detailTabs": "Agent details",
"directoryStatus": {
"all": "All statuses",
"disabled": "Disabled only",
@@ -78,6 +82,7 @@
"downlineEmptyShort": "No direct downline yet.",
"downlineEmptyTitle": "No direct downline yet",
"editAccount": "Account & status",
"editAgent": "Edit agent",
"editCurrent": "Edit this agent",
"expand": "Expand",
"kicker": "Credit share · Agent tree",
@@ -107,6 +112,13 @@
"tabDownline": "Downline",
"tabOverview": "Overview",
"tabPlayers": "Players",
"createDirectPlayer": "Create direct player",
"createDownline": "Create child agent",
"editDownline": "Edit agent",
"deleteDownline": "Delete agent",
"addChildUnavailableHint": "This agent has not enabled \"Allow creating sub-agents\". Adjust the agent profile first.",
"addChildNoPermissionHint": "Your account does not have permission to create sub-agents on this node.",
"lineRootProfileReadOnlyHint": "Level-1 agent share, site credit, and rebate are configured by the platform super admin. You can grant credit to downline agents and players.",
"tabProfile": "Share & credit",
"tabProfileReadOnly": "Share & credit (read-only)",
"viewAll": "View all"
@@ -187,6 +199,9 @@
"creditExceedsParentWithMax": "Credit limit cannot exceed {{max}}",
"creditInvalid": "Credit limit cannot be negative",
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling",
"defaultExceedsLimitWithMax": "Default player rebate cannot exceed {{max}}%",
"shareExceedsParent": "Share rate cannot exceed parent (max {{max}}%)",
"rebateExceedsParent": "Rebate ceiling cannot exceed parent (max {{max}}%)",
"defaultRebateRange": "Default player rebate must be between 0 and 100%",
"rebateLimitRange": "Rebate ceiling must be between 0 and 100%",
"shareRange": "Share rate must be between 0 and 100"
@@ -381,6 +396,7 @@
"updateSuccess": "Updated {{name}}",
"usernamePlaceholder": "Enter login username",
"usernameRequired": "Login name is required",
"usernameInvalidCharset": "Login name may only contain letters, digits, dots (.), underscores, and hyphens",
"users": {
"create": "Create account",
"createSuccess": "Created account {{name}}",

View File

@@ -28,6 +28,7 @@
"done": "Done",
"exportExcel": "Export Excel",
"save": "Save changes",
"saving": "Saving…",
"updateSuccess": "Updated successfully",
"updateFailed": "Update failed",
"updatePassword": "Update password"
@@ -110,7 +111,15 @@
"noResource": "No resources",
"noData": "No resources",
"loading": "Loading…",
"comingSoon": "Feature under development"
"comingSoon": "Feature under development",
"yes": "Yes",
"no": "No",
"none": "None"
},
"status": {
"enabled": "Enabled",
"disabled": "Disabled",
"label": "Status"
},
"integrationSites": {
"emptyPlatformHint": "No integration sites yet. Create a site before managing agents, players, or settlement.",

View File

@@ -54,6 +54,8 @@
"description": "Jump to play rules, odds & rebate, jackpot, and risk cap by domain. The sidebar provides direct links; this page is an overview.",
"integrationDesc": "site_code, JWT secrets, partner wallet URL, iframe allowlist",
"integrationTitle": "Integration sites",
"currenciesDesc": "Manage supported currencies and precision",
"currenciesTitle": "Currencies",
"jackpotDesc": "Pool parameters and ledger records",
"jackpotTitle": "Jackpot",
"oddsDesc": "Odds matrix and base rebate in one version stream",
@@ -62,6 +64,8 @@
"playsTitle": "Play rules",
"riskCapDesc": "Per-number payout caps and occupancy",
"riskCapTitle": "Risk cap rules",
"settingsDesc": "Payout, rebate, and other system-level parameters",
"settingsTitle": "System settings",
"title": "Operations configuration"
},
"integrationSites": {

View File

@@ -4,6 +4,9 @@
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password.",
"childrenCount": "प्रत्यक्ष अधीनस्थ",
"code": "Code",
"agentCode": "एजेन्ट कोड",
"agentName": "एजेन्ट नाम",
"loginUsername": "लगइन नाम",
"codeRequired": "Code and name are required",
"createChild": "Add child agent",
"createSuccess": "Created agent {{name}}",
@@ -29,6 +32,7 @@
"deleteSuccess": "Deleted agent {{name}}",
"depth": "Depth",
"detailTitle": "Node details",
"detailTabs": "एजेन्ट विवरण",
"directoryStatus": {
"all": "सबै स्थिति",
"disabled": "निष्क्रिय मात्र",
@@ -66,6 +70,8 @@
"directChildren": "प्रत्यक्ष अधीनस्थ {{count}}",
"downlineEmptyTitle": "अहिले प्रत्यक्ष अधीनस्थ छैन",
"editAccount": "खाता र स्थिति",
"editAgent": "एजेन्ट सम्पादन",
"editCurrent": "यो एजेन्ट सम्पादन",
"kicker": "क्रेडिट शेयर · एजेन्ट ट्री",
"noDelegatedTabs": "यो एजेन्टले अधीनस्थ एजेन्ट वा खेलाडी सिर्जना गर्न सक्दैन; शेयर र क्रेडिट मात्र लागू हुन्छ।",
"overviewDownlineCard": "प्रत्यक्ष अधीनस्थ एजेन्ट हेर्नुहोस् र व्यवस्थापन गर्नुहोस्",
@@ -81,6 +87,13 @@
"tabDownline": "अधीनस्थ",
"tabOverview": "अवलोकन",
"tabPlayers": "खेलाडी",
"createDirectPlayer": "प्रत्यक्ष खेलाडी सिर्जना",
"createDownline": "चाइल्ड एजेन्ट सिर्जना",
"editDownline": "एजेन्ट सम्पादन",
"deleteDownline": "एजेन्ट मेटाउनुहोस्",
"addChildUnavailableHint": "यो एजेन्टले अधीनस्थ एजेन्ट सिर्जना अनुमति दिएको छैन। पहिले एजेन्ट प्रोफाइल मिलाउनुहोस्।",
"addChildNoPermissionHint": "तपाईंको खातासँग यो नोडमा चाइल्ड एजेन्ट सिर्जनाको अनुमति छैन।",
"lineRootProfileReadOnlyHint": "प्रथम-स्तर एजेन्टको शेयर, साइट क्रेडिट र रिबेट प्लेटफर्म सुपर एडमिनले कन्फिग गर्छ। तपाईंले अधीनस्थ एजेन्ट र खेलाडीलाई क्रेडिट दिन सक्नुहुन्छ।",
"tabProfile": "शेयर र क्रेडिट",
"tabProfileReadOnly": "शेयर र क्रेडिट (पढ्न मात्र)",
"viewAll": "सबै हेर्नुहोस्"
@@ -140,6 +153,9 @@
"creditExceedsParentWithMax": "क्रेडिट सीमा {{max}} भन्दा बढी हुन सक्दैन",
"creditInvalid": "Credit limit cannot be negative",
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling",
"defaultExceedsLimitWithMax": "Default player rebate cannot exceed {{max}}%",
"shareExceedsParent": "Share rate cannot exceed parent (max {{max}}%)",
"rebateExceedsParent": "Rebate ceiling cannot exceed parent (max {{max}}%)",
"defaultRebateRange": "Default player rebate must be between 0 and 1",
"rebateLimitRange": "Rebate ceiling must be between 0 and 1",
"shareRange": "Share rate must be between 0 and 100"
@@ -234,6 +250,7 @@
"updateSuccess": "Updated {{name}}",
"usernamePlaceholder": "लगइन नाम प्रविष्ट गर्नुहोस्",
"usernameRequired": "Login name is required",
"usernameInvalidCharset": "लगइन नाममा अक्षर, अंक, थोप्लो (.), अन्डरस्कोर र हाइफन मात्र हुन सक्छ",
"users": {
"create": "Create account",
"createSuccess": "Created account {{name}}",

View File

@@ -16,6 +16,7 @@
"reset": "रिसेट",
"reviewNow": "अहिले समीक्षा गर्नुहोस्",
"save": "परिवर्तन सुरक्षित गर्नुहोस्",
"saving": "सुरक्षित हुँदैछ…",
"search": "खोज",
"submitting": "पेश हुँदैछ...",
"updateFailed": "अद्यावधिक असफल भयो",
@@ -229,7 +230,15 @@
"comingSoon": "सुविधा विकासमा छ",
"loading": "लोड हुँदैछ…",
"noData": "स्रोत छैन",
"noResource": "स्रोत छैन"
"noResource": "स्रोत छैन",
"yes": "हो",
"no": "होइन",
"none": "छैन"
},
"status": {
"enabled": "सक्रिय",
"disabled": "निष्क्रिय",
"label": "स्थिति"
},
"table": {
"actions": "कार्य",

View File

@@ -54,6 +54,8 @@
"description": "खेल नियम, बाधा/रिबेट, Jackpot र क्याप क्षेत्रअनुसार खोल्नुहोस्। साइडबारबाट सिधा जान सकिन्छ; यो पृष्ठ सारांश हो।",
"integrationDesc": "site_code, JWT गोप्य, पार्टनर वालेट URL र iframe श्वेतसूची",
"integrationTitle": "मुख्य साइट एकीकरण",
"currenciesDesc": "समर्थित मुद्रा र परिशुद्धता व्यवस्थापन",
"currenciesTitle": "मुद्रा व्यवस्थापन",
"jackpotDesc": "पूल प्यारामिटर र लेजर",
"jackpotTitle": "Jackpot",
"oddsDesc": "बाधा म्याट्रिक्स र रिबेट, एउटै संस्करण",
@@ -62,6 +64,8 @@
"playsTitle": "खेल नियम",
"riskCapDesc": "नम्बर क्याप र ओगट उपस्थिति",
"riskCapTitle": "जोखिम क्याप",
"settingsDesc": "भुक्तानी, रिबेट र अन्य प्रणाली-स्तर प्यारामिटर",
"settingsTitle": "प्रणाली सेटिङ",
"title": "सञ्चालन कन्फिगरेसन अवलोकन"
},
"integrationSites": {

View File

@@ -28,6 +28,13 @@
"overviewPlayersSummary": "玩家管理",
"tabDownline": "直属下级",
"tabPlayers": "直属玩家",
"createDirectPlayer": "创建直属玩家",
"createDownline": "创建下级代理",
"editDownline": "编辑代理",
"deleteDownline": "删除代理",
"addChildUnavailableHint": "当前代理未开启“允许创建下级代理”,如需新增请先调整该代理配置。",
"addChildNoPermissionHint": "当前账号没有为该节点创建下级代理的权限。",
"lineRootProfileReadOnlyHint": "一级代理的占成、站点授信总额与回水由平台超管配置;您可向直属下级代理与玩家下放额度。",
"playersUnavailableHint": "当前代理未开启“允许创建玩家”,如需新增请先调整该代理配置。",
"playersNoPermissionHint": "当前账号没有该节点的玩家管理权限。",
"downlineColumns": {
@@ -35,6 +42,7 @@
"downlineCount": "下级数"
},
"editAccount": "账号与状态",
"editAgent": "编辑代理",
"editCurrent": "编辑本代理",
"saveProfile": "保存占成与授信",
"profileTabHint": "占成、授信、回水与风控标签在此维护;登录名与密码请用「账号与状态」。",
@@ -85,6 +93,7 @@
"listFlatHint": "列表平铺展示所有经营代理;添加下级请使用行内「添加下级代理」。",
"addChildNeedParent": "请先在「上级代理」中选择要为谁添加下级",
"detailTitle": "代理详情",
"detailTabs": "代理详情",
"selectNode": "请选择代理",
"loadFailed": "加载代理列表失败",
"lineFilter": "一级代理",
@@ -105,6 +114,9 @@
"users": "仍有 {{count}} 个账号需先处理"
},
"code": "编码",
"agentCode": "代理编码",
"agentName": "代理名称",
"loginUsername": "登录名",
"name": "名称",
"namePlaceholder": "请输入代理名称",
"depth": "层级",
@@ -118,6 +130,7 @@
"codeRequired": "请填写代理名称和登录名",
"nameRequired": "请填写代理名称",
"usernameRequired": "请填写登录名",
"usernameInvalidCharset": "登录名只能使用字母、数字、点(.)、下划线和连字符",
"passwordRequired": "请填写密码",
"passwordMinLength": "密码至少 8 位",
"bindAccountPasswordRequired": "该代理尚未绑定登录账号,请填写初始密码以创建账号",
@@ -162,7 +175,10 @@
"creditExceedsParentWithMax": "授信额度不能超过 {{max}}",
"rebateLimitRange": "回水上限须在 0100% 之间",
"defaultRebateRange": "默认玩家回水须在 0100% 之间",
"defaultExceedsLimit": "默认玩家回水不能超过回水上限"
"defaultExceedsLimit": "默认玩家回水不能超过回水上限",
"defaultExceedsLimitWithMax": "默认玩家回水不能超过 {{max}}%",
"shareExceedsParent": "实际占成不能超过上级(最高 {{max}}%",
"rebateExceedsParent": "回水上限不能超过上级(最高 {{max}}%"
},
"riskTags": "风控标签",
"riskTagsPlaceholder": "逗号分隔,如 overdue, high_turnover",

View File

@@ -28,6 +28,7 @@
"done": "完成",
"exportExcel": "导出 Excel",
"save": "保存修改",
"saving": "保存中…",
"updateSuccess": "更新成功",
"updateFailed": "更新失败",
"updatePassword": "更新密码"
@@ -110,7 +111,15 @@
"noResource": "暂无资源",
"noData": "暂无资源",
"loading": "加载中…",
"comingSoon": "功能开发中"
"comingSoon": "功能开发中",
"yes": "是",
"no": "否",
"none": "无"
},
"status": {
"enabled": "启用",
"disabled": "停用",
"label": "状态"
},
"integrationSites": {
"emptyPlatformHint": "暂无接入站点。请先创建站点,再进行代理、玩家、结算等业务操作。",

View File

@@ -32,7 +32,11 @@
"riskCapTitle": "限额版本",
"riskCapDesc": "号码赔付封顶与占用视图",
"integrationTitle": "接入站点",
"integrationDesc": "site_code、JWT 密钥、主站钱包 URL 与 iframe 白名单"
"integrationDesc": "site_code、JWT 密钥、主站钱包 URL 与 iframe 白名单",
"settingsTitle": "系统设置",
"settingsDesc": "开奖赔付、回水等系统级参数",
"currenciesTitle": "币种管理",
"currenciesDesc": "维护支持的币种与精度"
},
"integrationSites": {
"title": "接入站点",

View File

@@ -6,7 +6,7 @@ import { ChevronRight } from "lucide-react";
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { PRD_INTEGRATION_ACCESS_ANY } from "@/lib/admin-prd";
import { PRD_INTEGRATION_ACCESS_ANY, PRD_SETTINGS_ACCESS_ANY, PRD_CURRENCY_MANAGE } from "@/lib/admin-prd";
import { useAdminProfile } from "@/stores/admin-session";
import { adminHasAnyPermission } from "@/lib/admin-permissions";
@@ -48,6 +48,18 @@ const HUB_CARDS: HubCard[] = [
descKey: "hub.integrationDesc",
requiredAny: PRD_INTEGRATION_ACCESS_ANY,
},
{
href: "/admin/settings",
titleKey: "hub.settingsTitle",
descKey: "hub.settingsDesc",
requiredAny: PRD_SETTINGS_ACCESS_ANY,
},
{
href: "/admin/currencies",
titleKey: "hub.currenciesTitle",
descKey: "hub.currenciesDesc",
requiredAny: [PRD_CURRENCY_MANAGE],
},
];
export function ConfigHubScreen() {