/** * 导航与路由的单一事实来源;新增业务模块时先改这里,再增加 `app/admin/(shell)/.../page.tsx`。 * * `requiredAny` 与登录接口返回的 `admin.permissions`(Laravel `prd.*`)对齐;缺省表示任意已登录用户可见。 */ export const ADMIN_BASE = "/admin" as const; export type AdminNavItem = { label: string; href: string; segment: | "dashboard" | "service_desk" | "players" | "draws" | "config" | "tickets" | "wallet" | "risk" | "settings" | "settlement" | "jackpot" | "reports" | "reconcile" | "audit" | "admin_users"; activeMatchPrefix?: string; /** 拥有任一权限 slug 即显示侧栏项 */ requiredAny?: readonly string[]; }; export const adminShellNavItems: AdminNavItem[] = [ { segment: "dashboard", label: "仪表盘", href: "/admin" }, { segment: "draws", label: "开奖", href: "/admin/draws", requiredAny: ["prd.draw_result.manage", "prd.draw_result.view"], }, { segment: "config", label: "运营配置", href: "/admin/config", requiredAny: [ "prd.play_switch.manage", "prd.odds.manage", "prd.risk_cap.manage", "prd.risk_cap.view", "prd.rebate.manage", "prd.rebate.view", "prd.jackpot.manage", "prd.jackpot.view", ], }, { segment: "risk", label: "风控", href: "/admin/risk", requiredAny: ["prd.draw_result.view", "prd.draw_result.manage"], }, { segment: "settlement", label: "结算", href: "/admin/settlement-batches", requiredAny: [ "prd.payout.manage", "prd.payout.review", "prd.payout.view", ], }, { segment: "jackpot", label: "Jackpot", href: "/admin/jackpot/pools", activeMatchPrefix: "/admin/jackpot", requiredAny: ["prd.jackpot.manage", "prd.jackpot.view"], }, { segment: "wallet", label: "钱包流水", href: "/admin/wallet/transactions", activeMatchPrefix: "/admin/wallet", requiredAny: [ "prd.wallet_reconcile.manage", "prd.wallet_reconcile.view", "prd.wallet_reconcile.view_cs", "prd.users.manage", "prd.users.view_finance", "prd.users.view_cs", ], }, { segment: "reconcile", label: "对账", href: "/admin/reconcile", requiredAny: [ "prd.wallet_reconcile.manage", "prd.wallet_reconcile.view", "prd.wallet_reconcile.view_cs", ], }, { segment: "tickets", label: "玩家注单", href: "/admin/tickets", requiredAny: [ "prd.users.view_cs", "prd.users.manage", "prd.users.view_finance", "prd.draw_result.view", "prd.draw_result.manage", "prd.payout.view", "prd.payout.review", "prd.payout.manage", "prd.report.player", ], }, { segment: "players", label: "玩家查询", href: "/admin/players", requiredAny: [ "prd.users.manage", "prd.users.view_finance", "prd.users.view_cs", ], }, { segment: "service_desk", label: "客服 / 财务", href: "/admin/service-desk", requiredAny: [ "prd.users.view_cs", "prd.users.view_finance", "prd.users.manage", "prd.wallet_reconcile.view_cs", "prd.wallet_reconcile.view", "prd.wallet_reconcile.manage", "prd.report.finance", "prd.report.player", "prd.draw_result.view", ], }, { segment: "reports", label: "报表导出", href: "/admin/reports", requiredAny: [ "prd.report.all", "prd.report.risk", "prd.report.finance", "prd.report.player", ], }, { segment: "audit", label: "审计日志", href: "/admin/audit-logs", requiredAny: ["prd.audit.all", "prd.audit.self", "prd.audit.finance"], }, { segment: "admin_users", label: "管理员权限", href: "/admin/admin-users", requiredAny: ["prd.admin_user.manage"], }, { segment: "settings", label: "系统设置", href: "/admin/settings" }, ];