From 7224d044ae4411a175d20386f191c003973294bf Mon Sep 17 00:00:00 2001 From: kang Date: Tue, 16 Jun 2026 17:15:06 +0800 Subject: [PATCH] refactor(admin-permissions, reports): normalize admin account kind and improve currency fallback logic Refactored the admin account kind resolution to utilize a normalization function for better consistency across the application. Updated the currency fallback logic in the reports console to prioritize enabled and bettable currencies, enhancing the accuracy of currency display. --- src/hooks/use-admin-permission.ts | 6 ++++-- src/lib/admin-account-kind.ts | 24 ++++++++++++++++++++++++ src/modules/reports/reports-console.tsx | 2 +- src/stores/admin-profile.ts | 14 ++++---------- 4 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 src/lib/admin-account-kind.ts diff --git a/src/hooks/use-admin-permission.ts b/src/hooks/use-admin-permission.ts index 27ccca0..3a8c23f 100644 --- a/src/hooks/use-admin-permission.ts +++ b/src/hooks/use-admin-permission.ts @@ -1,3 +1,4 @@ +import { normalizeAdminAccountKind } from "@/lib/admin-account-kind"; import { adminHasAnyPermission, adminHasAnyPermissionCode, @@ -10,8 +11,9 @@ export function resolveAdminAccountKind(profile: AdminProfile | null | undefined if (!profile) { return null; } - if (profile.account_kind) { - return profile.account_kind === "site_operator" ? "site_admin" : profile.account_kind; + const normalized = normalizeAdminAccountKind(profile.account_kind); + if (normalized) { + return normalized; } if (profile.is_super_admin) { return "super_admin"; diff --git a/src/lib/admin-account-kind.ts b/src/lib/admin-account-kind.ts new file mode 100644 index 0000000..0dffcd8 --- /dev/null +++ b/src/lib/admin-account-kind.ts @@ -0,0 +1,24 @@ +import type { AdminAccountKind } from "@/types/api/admin-auth"; + +/** 旧版 localStorage 可能仍存 `site_operator`,归一为 `site_admin`。 */ +export function normalizeAdminAccountKind( + kind: string | undefined | null, +): AdminAccountKind | undefined { + if (!kind) { + return undefined; + } + if (kind === "site_operator") { + return "site_admin"; + } + if ( + kind === "super_admin" + || kind === "site_admin" + || kind === "site_finance" + || kind === "site_cs" + || kind === "agent_operator" + || kind === "platform_account" + ) { + return kind; + } + return undefined; +} diff --git a/src/modules/reports/reports-console.tsx b/src/modules/reports/reports-console.tsx index a626dc9..f25b71f 100644 --- a/src/modules/reports/reports-console.tsx +++ b/src/modules/reports/reports-console.tsx @@ -238,7 +238,7 @@ function resolveDisplayCurrency(apiCode?: string | null): string { if (trimmed) { return trimmed; } - const fallback = getCachedAdminCurrencies().find((row) => row.is_default)?.code; + const fallback = getCachedAdminCurrencies().find((row) => row.is_enabled && row.is_bettable)?.code; return fallback?.trim() || "NPR"; } diff --git a/src/stores/admin-profile.ts b/src/stores/admin-profile.ts index f07d781..6aa5a17 100644 --- a/src/stores/admin-profile.ts +++ b/src/stores/admin-profile.ts @@ -1,3 +1,4 @@ +import { normalizeAdminAccountKind } from "@/lib/admin-account-kind"; import type { AdminProfile } from "@/types/api/admin-auth"; import type { AdminNavItem } from "@/modules/_config/admin-nav"; @@ -35,16 +36,9 @@ export function readProfile(): AdminProfile | null { ); }) : []; - const accountKind = - v.account_kind === "super_admin" - || v.account_kind === "site_admin" - || v.account_kind === "site_finance" - || v.account_kind === "site_cs" - || v.account_kind === "site_operator" - || v.account_kind === "agent_operator" - || v.account_kind === "platform_account" - ? (v.account_kind === "site_operator" ? "site_admin" : v.account_kind) - : undefined; + const accountKind = normalizeAdminAccountKind( + typeof v.account_kind === "string" ? v.account_kind : undefined, + ); return { id: v.id, username: v.username,