@@ -2248,7 +2248,9 @@ function creditTypeLabel(type: string) {
.expandable-table :deep(.row-expandable) {
cursor: pointer;
}
-.compact-agent-table :deep(.el-table__header .el-table__cell),
+.compact-agent-table :deep(.el-table__header .el-table__cell) {
+ padding: 4px 8px;
+}
.compact-agent-table :deep(.el-table__body .el-table__cell) {
padding: 6px 8px;
}
diff --git a/apps/admin/src/views/agent/Players.vue b/apps/admin/src/views/agent/Players.vue
index 946ed5b..5362563 100644
--- a/apps/admin/src/views/agent/Players.vue
+++ b/apps/admin/src/views/agent/Players.vue
@@ -42,11 +42,13 @@ import {
snapshotFromAgentRow,
type AgentCreditAdjustContext,
} from '../../utils/agent-credit-context';
+import { formatAgentLevelNumeral } from '../../utils/agent-level-label';
const { t, localeTag } = useAdminLocale();
const auth = useAuthStore();
const profile = ref<{
+ level?: number;
creditLimit?: string;
usedCredit?: string;
availableCredit?: string;
@@ -57,6 +59,41 @@ const canManageSubAgents = computed(
() => profile.value.canManageSubAgents === true || auth.canManageSubAgents.value,
);
+const myAgentLevel = computed(() => profile.value.level ?? auth.user.value?.agentLevel ?? 1);
+const childAgentLevel = computed(() => myAgentLevel.value + 1);
+
+function lvlLabel(level: number) {
+ return formatAgentLevelNumeral(level, localeTag.value);
+}
+
+const childAgentTierName = computed(() =>
+ t('agent.level_name', { level: lvlLabel(childAgentLevel.value) }),
+);
+
+const subAgentsTabLabel = computed(() =>
+ `${childAgentTierName.value} (${subAgents.value.length})`,
+);
+
+const createSubBtnLabel = computed(() => {
+ if (childAgentLevel.value === 2) return t('agent.create_sub_btn');
+ return t('agent.create_level_agent_btn', { level: lvlLabel(childAgentLevel.value) });
+});
+
+const createSubDialogTitle = computed(() => {
+ if (childAgentLevel.value === 2) return t('agent_portal.create_sub_agent_dialog');
+ return t('agent.dialog.create_level_agent', { level: lvlLabel(childAgentLevel.value) });
+});
+
+const noSubAgentsHint = computed(() => {
+ if (childAgentLevel.value === 2) return t('agent_portal.no_sub_agents');
+ return t('agent_portal.no_sub_agents_level', { level: lvlLabel(childAgentLevel.value) });
+});
+
+const subAgentPlayersReadonlyHint = computed(() => {
+ if (childAgentLevel.value === 2) return t('agent_portal.sub_agent_players_readonly');
+ return t('agent_portal.sub_agent_players_readonly_level', { level: lvlLabel(childAgentLevel.value) });
+});
+
/* ─── Top-level tab: players | subAgents ─── */
const activeTab = ref('players');
@@ -654,7 +691,7 @@ function statusTagType(s: string) {
-
+
@@ -662,7 +699,7 @@ function statusTagType(s: string) {
- + {{ t('agent_portal.create_tier2_btn') }}
+ {{ createSubBtnLabel }}
@@ -677,7 +714,7 @@ function statusTagType(s: string) {
@expand-change="onSubAgentExpand"
@row-click="onSubAgentRowClick"
>
- {{ t('agent_portal.no_sub_agents') || '暂无下级代理' }}
+ {{ noSubAgentsHint }}
@@ -687,7 +724,7 @@ function statusTagType(s: string) {