import React from 'react'; import { ChevronRight, ChevronDown, Folder, FolderOpen } from 'lucide-react'; import { Button } from '@/client/components/ui/button'; import { Badge } from '@/client/components/ui/badge'; import { cn } from '@/client/lib/utils'; interface AreaNode { id: number; name: string; code: string; level: number; parentId: number | null; isDisabled: number; children?: AreaNode[]; } interface AreaTreeProps { areas: AreaNode[]; expandedNodes: Set; onToggleNode: (nodeId: number) => void; onEdit: (area: AreaNode) => void; onDelete: (area: AreaNode) => void; onToggleStatus: (area: AreaNode) => void; } export const AreaTree: React.FC = ({ areas, expandedNodes, onToggleNode, onEdit, onDelete, onToggleStatus }) => { const renderTreeNode = (node: AreaNode, depth = 0) => { const hasChildren = node.children && node.children.length > 0; const isExpanded = expandedNodes.has(node.id); const isDisabled = node.isDisabled === 1; return (
{/* 节点行 */}
0 && "ml-6" )} style={{ marginLeft: `${depth * 24}px` }} > {/* 展开/收起按钮 */} {hasChildren && ( )} {!hasChildren &&
} {/* 图标 */}
{hasChildren ? ( isExpanded ? ( ) : ( ) ) : (
)}
{/* 节点信息 */}
{node.name} {getLevelName(node.level)} {node.code} {isDisabled ? '禁用' : '启用'}
{/* 操作按钮 */}
{/* 子节点 */} {isExpanded && hasChildren && (
{node.children!.map(child => renderTreeNode(child, depth + 1))}
)}
); }; return (
{areas.map(area => renderTreeNode(area))}
); }; // 获取层级显示名称 const getLevelName = (level: number) => { switch (level) { case 1: return '省/直辖市'; case 2: return '市'; case 3: return '区/县'; default: return '未知'; } };