feat: 统一管理端导航为后端下发菜单,移除本地权限过滤
This commit is contained in:
@@ -11,7 +11,8 @@ import {
|
||||
BreadcrumbPage,
|
||||
BreadcrumbSeparator,
|
||||
} from "@/components/ui/breadcrumb";
|
||||
import { adminShellNavItems, ADMIN_BASE } from "@/modules/_config/admin-nav";
|
||||
import { ADMIN_BASE } from "@/modules/_config/admin-nav";
|
||||
import { useAdminProfile } from "@/stores/admin-session";
|
||||
import React from "react";
|
||||
|
||||
const DRAW_ROUTE_LABELS: Record<string, string> = {
|
||||
@@ -36,6 +37,8 @@ type BreadcrumbCrumb = {
|
||||
export function AdminBreadcrumb() {
|
||||
const { t } = useTranslation(["common", "dashboard", "reports", "audit", "config", "draws"]);
|
||||
const pathname = usePathname();
|
||||
const profile = useAdminProfile();
|
||||
const navItems = profile?.navigation ?? [];
|
||||
|
||||
// Split the current path into segments.
|
||||
const segments = pathname.split("/").filter(Boolean);
|
||||
@@ -52,7 +55,7 @@ export function AdminBreadcrumb() {
|
||||
if (pathname !== ADMIN_BASE) {
|
||||
const businessSegment = segments[1];
|
||||
if (businessSegment) {
|
||||
const navItem = adminShellNavItems.find((item) => {
|
||||
const navItem = navItems.find((item) => {
|
||||
return item.segment === businessSegment || item.href.includes(businessSegment);
|
||||
});
|
||||
|
||||
@@ -70,6 +73,12 @@ export function AdminBreadcrumb() {
|
||||
href: navItem.href,
|
||||
isCurrent: pathname === navItem.href || segments.length === 2,
|
||||
});
|
||||
} else {
|
||||
breadcrumbs.push({
|
||||
label: titleCase(businessSegment),
|
||||
href: `${ADMIN_BASE}/${businessSegment}`,
|
||||
isCurrent: segments.length === 2,
|
||||
});
|
||||
}
|
||||
|
||||
if (segments.length > 2) {
|
||||
|
||||
@@ -20,8 +20,7 @@ import {
|
||||
SidebarSeparator,
|
||||
} from "@/components/ui/sidebar";
|
||||
import { adminNavIconBySegment } from "@/modules/_config/admin-nav-icons";
|
||||
import { adminNavItemVisible } from "@/lib/admin-nav-visibility";
|
||||
import { adminShellNavItems, ADMIN_BASE } from "@/modules/_config/admin-nav";
|
||||
import { ADMIN_BASE } from "@/modules/_config/admin-nav";
|
||||
import { useAdminProfile } from "@/stores/admin-session";
|
||||
|
||||
function isActive(pathname: string, item: { href: string; activeMatchPrefix?: string }): boolean {
|
||||
@@ -37,13 +36,7 @@ export function AdminAppSidebar() {
|
||||
const { t } = useTranslation(["common", "dashboard", "players", "draws", "config", "wallet", "risk", "settlement", "jackpot", "reconcile", "tickets", "reports", "audit"]);
|
||||
const pathname = usePathname();
|
||||
const profile = useAdminProfile();
|
||||
const visibleNav = useMemo(
|
||||
() =>
|
||||
adminShellNavItems.filter((item) =>
|
||||
adminNavItemVisible(item, profile?.permissions),
|
||||
),
|
||||
[profile?.permissions],
|
||||
);
|
||||
const visibleNav = useMemo(() => profile?.navigation ?? [], [profile?.navigation]);
|
||||
|
||||
return (
|
||||
<Sidebar collapsible="icon" variant="inset">
|
||||
|
||||
Reference in New Issue
Block a user