feat: multi-tier agent hierarchy, wallet ledger, and player UX polish

Add configurable agent max level and default sub-agent credit ratio, per-agent block direct player login on suspend, admin/agent wallet transaction views, and match detail my-bets section with refreshed player card styling.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-10 16:15:34 +08:00
parent 641c92a5f5
commit ef6b15f119
39 changed files with 2398 additions and 410 deletions

View File

@@ -9,6 +9,8 @@ export interface StaffUser {
locale?: string;
role?: string;
agentLevel?: number | null;
maxAgentLevel?: number | null;
canManageSubAgents?: boolean;
}
const TOKEN_KEY = 'manage_token';
@@ -127,6 +129,15 @@ export function useAuthStore() {
const isAgent = computed(() => resolveUserType() === 'AGENT');
const isTier1Agent = computed(() => isAgent.value && user.value?.agentLevel === 1);
const isTier2Agent = computed(() => isAgent.value && user.value?.agentLevel === 2);
const canManageSubAgents = computed(() => {
if (!isAgent.value) return false;
if (user.value?.canManageSubAgents != null) return user.value.canManageSubAgents;
const level = user.value?.agentLevel;
const max = user.value?.maxAgentLevel;
if (level == null || level < 1) return false;
if (max == null || max === 0) return true;
return level < max;
});
const portalLabel = computed(() => (isAdmin.value ? '平台后台' : '代理后台'));
function setSession(newToken: string, newUser: StaffUser) {
@@ -149,6 +160,7 @@ export function useAuthStore() {
isAgent,
isTier1Agent,
isTier2Agent,
canManageSubAgents,
portalLabel,
setSession,
logout,