'use client'; import { ComponentType, useMemo } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Bell, Database, FileText, FolderOpen, Home, Info, Layers, LayoutList, Settings, ShieldCheck, Terminal, UserRound, LayoutDashboard, Route, Server, Globe, GitBranch, ScrollText, Gauge, } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { Switch } from '@/components/ui/switch'; import services from '@/lib/services'; import type { SystemConfig } from '@/lib/services/admin'; import { toast } from 'sonner'; interface MenuItem { path: string; label: string; description: string; icon: ComponentType<{ className?: string }>; readOnly?: boolean; } interface MenuGroup { name: string; items: MenuItem[]; } const MENU_GROUPS: MenuGroup[] = [ { name: '业务菜单', items: [ { path: '/', label: '数据看板', description: '查看边缘节点请求、访客与流量等多维度图表看板', icon: LayoutDashboard, readOnly: true, }, { path: '/nodes', label: '节点管理', description: '注册与管理反向代理边缘节点服务状态', icon: Server, }, { path: '/proxy-routes', label: '规则管理', description: '配置和发布反代路由规则、负载均衡与源站绑定', icon: Route, }, { path: '/websites', label: '域名列表', description: '配置站点根域名并查看关联网站详情', icon: Globe, }, { path: '/certificates', label: 'TLS证书', description: '管理和下发网站 SSL/TLS 证书', icon: ShieldCheck, }, { path: '/dns-accounts', label: 'DNS账号', description: '配置 Cloudflare/Alidns 等 DNS 服务商 API 凭证', icon: Settings, }, { path: '/origins', label: '源站地址', description: '集中维护和管理后端业务源站服务器组', icon: Home, }, { path: '/waf', label: 'WAF 管理', description: '配置 Web 应用防火墙自定义规则与频率限制', icon: ShieldCheck, }, { path: '/ip-groups', label: 'IP 组', description: '管理黑白名单 IP 集合,用于 WAF 规则过滤', icon: Layers, }, { path: '/pages', label: 'Pages 静态站', description: '托管和发布静态网页项目,支持自动关联域名', icon: FileText, }, { path: '/config-versions', label: '版本发布', description: '查看规则快照版本并进行配置热更新分发与回滚', icon: GitBranch, }, { path: '/access-logs', label: '访问日志', description: '多维度实时浏览边缘节点请求访问明细', icon: ScrollText, }, { path: '/performance', label: '性能调优', description: '配置缓存、图片压缩等页面性能加速策略', icon: Gauge, }, ], }, { name: '管理菜单', items: [ { path: '/admin/users', label: '用户管理', description: '查看和管理系统用户列表及其状态', icon: UserRound, }, { path: '/admin/tasks', label: '任务管理', description: '查看和调度系统异步及定时任务', icon: Layers, }, { path: '/admin/files', label: '存储管理', description: '管理系统文件存储和清理无用文件', icon: FolderOpen, }, { path: '/admin/database', label: '数据管理', description: '监控物理数据库状态、分页浏览表数据及交互式 SQL 查询', icon: Database, }, { path: '/admin/push', label: '通知推送', description: '配置和发送系统通知及推送消息', icon: Bell, }, { path: '/admin/logs', label: '系统日志', description: '查看异步任务执行日志和系统运行情况', icon: Terminal, }, { path: '/admin/system', label: '系统配置', description: '管理和维护系统基础键值对配置', icon: ShieldCheck, }, { path: '/admin/settings', label: '系统设置', description: '配置安全验证、邮箱服务及目录显示', icon: Settings, readOnly: true, }, ], }, { name: '文档菜单', items: [ { path: 'https://open-flare.pages.dev/', label: '使用文档', description: '面向开发与运营的部署使用指南', icon: FileText, }, ], }, ]; interface OtherTabProps { configs: Record; } export function OtherTab({ configs }: OtherTabProps) { const queryClient = useQueryClient(); const menuDisplayConfig = useMemo(() => { const raw = configs['menu_display_config']?.value; if (!raw) return {} as Record; try { return JSON.parse(raw) as Record; } catch { return {} as Record; } }, [configs]); const updateMenuConfigMutation = useMutation({ mutationFn: async ({ path, enabled, }: { path: string; enabled: boolean; }) => { const newConfig = { ...menuDisplayConfig, [path]: enabled }; const currentCfg = configs['menu_display_config']; await services.adminSystemConfig.updateSystemConfig( 'menu_display_config', { value: JSON.stringify(newConfig), description: currentCfg?.description || '目录显示配置(JSON 字符串,格式为 {url: enabled})', }, ); }, onSuccess: async () => { await queryClient.invalidateQueries({ queryKey: ['admin', 'system-configs'], }); await queryClient.invalidateQueries({ queryKey: ['public-config'] }); toast.success('目录显示配置已更新'); }, onError: (error: Error) => { toast.error(error.message || '更新配置失败'); }, }); const handleMenuToggle = (path: string, checked: boolean) => { updateMenuConfigMutation.mutate({ path, enabled: checked }); }; return (
目录显示管理 配置系统左侧菜单的显示与隐藏状态,适用于所有登录用户。
{MENU_GROUPS.map((group) => (
{group.name}
{group.items.map((item) => { const Icon = item.icon; const isReadOnly = !!item.readOnly; const checked = menuDisplayConfig[item.path] !== false; return (
{Icon && ( )} {item.label} {isReadOnly && ( 不可隐藏 )}

{item.description}

handleMenuToggle(item.path, val) } />
); })}
))}
安全提示: 为了防止管理员在关闭“系统设置”后导致无法重新访问此配置页,系统限制了“系统设置”的关闭权限。其它所有菜单均可自由开关,隐藏后对应的分组标题在为空时也会自动隐藏。
); }