import * as React from 'react' import { AppDataTable, type AppDataTableColumn } from '@/components/app/AppDataTable' import { AppEmptyState } from '@/components/app/AppEmptyState' import { AppPageHeader } from '@/components/app/AppPageHeader' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Switch } from '@/components/ui/switch' import { listMenus, updateMenu } from './api' import type { SystemMenu } from './types' export function SystemMenusPage() { const [menus, setMenus] = React.useState([]) const [query, setQuery] = React.useState('') const [error, setError] = React.useState('') const load = React.useCallback(async () => { try { setMenus(await listMenus()) setError('') } catch (reason) { setError(reason instanceof Error ? reason.message : '加载失败') } }, []) React.useEffect(() => { void load() }, [load]) const filteredMenus = menus.filter((menu) => { const keyword = query.trim().toLowerCase() if (!keyword) return true return `${menu.code} ${menu.title} ${menu.path} ${menu.permission_code}`.toLowerCase().includes(keyword) }) async function toggleVisible(menu: SystemMenu, checked: boolean) { await updateMenu(menu.id, { is_visible: checked }) await load() } async function toggleEnabled(menu: SystemMenu, checked: boolean) { await updateMenu(menu.id, { is_enabled: checked }) await load() } const columns: AppDataTableColumn[] = [ { key: 'title', header: '菜单', cell: (menu) => (

{menu.title}

{menu.code}

) }, { key: 'path', header: '路径', cell: (menu) => {menu.path || '-'} }, { key: 'permission', header: '权限码', cell: (menu) => menu.permission_code ? {menu.permission_code} : '-' }, { key: 'visible', header: '展示', cell: (menu) => void toggleVisible(menu, checked)} /> }, { key: 'enabled', header: '启用', cell: (menu) => void toggleEnabled(menu, checked)} /> } ] return (
setQuery(event.target.value)} />
{error ? : null} {!error ? ( menu.id} emptyTitle="暂无菜单" emptyDescription="执行治理初始化后,系统菜单会显示在这里。" footer={

当前显示 {filteredMenus.length} 个菜单项

} /> ) : null}
) }