import { MouseEvent, ReactNode } from 'react'; export interface TreeNodeData { [key: string]: any; /** 节点id */ id: string; /** 标签内容 */ label?: string; /** 子节点,异步加载时,该字段应该返回null,同步时返回数组 */ children?: TreeNodeData[]; /** 是否存在子节点,用于异步加载时,判断是否可展开。同步加载时无需该字段 */ hasChildren?: boolean; /** 是否展开 */ expand?: boolean; /** 是否加载中,异步加载时使用,内部字段 */ _loading?: boolean; } export interface NodeConfig { /** 标签字段 */ label: string; /** 子节点字段 */ children: string; /** 是否展开字段 */ expand: string; } export interface TreeNodeProps { /** 树数据 */ data: TreeNodeData; /** 节点字段映射配置 */ node: NodeConfig; /** 是否可展开折叠(为`true`时,会显示展开/折叠按钮) */ collapsable: boolean; /** 自定义渲染内容 */ renderContent?: (data: TreeNodeData) => ReactNode; /** 标签宽度(用于统一标签宽度) */ labelWidth?: number | string; /** 标签自定义类名 */ labelClassName?: string; /** 节点展开回调 */ onExpand: (e: MouseEvent, data: TreeNodeData) => boolean | void; /** 节点点击回调 */ onClick: (e: MouseEvent, data: TreeNodeData) => void; } export interface OrgTreeProps extends Partial { className?: string; /** 是否展开所有节点 */ expandAll?: boolean; /** 是否水平排列,为`false`时会垂直排列 */ horizontal?: boolean; /** 展开模式,为`free`时,可以连续展开节点;为`accordion`时,节点展开状态为手风琴状态,同时只能展开一个子节点 */ expandMode?: 'free' | 'accordion'; /** 重置且去除节点默认样式,方便用户完全自定义 */ resetNodeStyle?: boolean; /** 异步加载数据 */ loadData?: (node: TreeNodeData) => Promise; }