JavaScript is required

folder-组织机构树

增强型文件夹布局与层级数据

支持通过 children 属性传递层级数据的高级文件夹布局,可调整线条偏移、水平和垂直间距,支持丰富的节点卡片渲染。

功能概述

此示例展示了文件夹布局的增强版本,支持通过 setJsonData 方法传递层级数据结构。图会自动识别节点之间的层级关系(通过 children 属性)并将其扁平化显示。提供了三个可调参数:线条起始位置偏移量、水平间距和垂直间距,用户可以实时调整这些参数以获得最佳的视觉效果。

核心特性实现

层级数据自动识别

使用 children 属性定义节点层级:

const myJsonData: RGJsonData = {
    rootId: 'root',
    nodes: [
        {
            id: 'root',
            text: 'Root Folder',
            children: [
                {
                    id: 'child1',
                    text: 'Child 1',
                    children: [/* 更多子节点 */]
                }
            ]
        }
    ]
};

relation-graph 会自动识别 children 属性并展开为扁平的节点数组。

动态布局参数

支持实时调整水平间距和垂直间距:

const updateMyOptions = async () => {
    graphInstance.updateOptions({
        layout: {
            layoutName: 'folder',
            from: 'left',
            treeNodeGapH: rangeHorizontal,
            treeNodeGapV: rangeVertical
        }
    });
    await graphInstance.doLayout();
    graphInstance.moveToCenter();
    graphInstance.zoomToFit();
};

useEffect(() => {
    updateMyOptions();
}, [rangeHorizontal, rangeVertical]);

滑块调整间距时自动重新布局。

连接点偏移控制

动态调整线条起始点的偏移量:

const updateMyData = () => {
    graphInstance.getLines().forEach(line => {
        graphInstance.updateLine(line, {
            fromJunctionPointOffsetX: fromOffsetX
        });
    });
};

useEffect(() => {
    updateMyData();
}, [fromOffsetX]);

偏移量基于指定的连接点位置(RGJunctionPoint)进行相对偏移。

初始化连接点配置

在数据加载前设置连接点和偏移:

myJsonData.lines.forEach((line, index) => {
    if (!line.id) {
        line.id = `l${index + 1}`;
    }
    line.fromJunctionPoint = RGJunctionPoint.bottom;
    line.fromJunctionPointOffsetX = fromOffsetX;
    line.toJunctionPoint = RGJunctionPoint.left;
});

在数据添加到图之前,可以直接修改线条属性。

响应式参数滑块

提供三个滑块控制不同参数:

<input type="range" value={fromOffsetX} min={-100} step={5" max={200} onChange={(e) => { setFromOffsetX(Number(e.target.value)); }} />

<input type="range" min="-150" max="200" value={rangeHorizontal} onChange={(e) => { setRangeHorizontal(parseFloat(e.target.value)); }} />

<input type="range" min="5" max="100" value={rangeVertical} onChange={(e) => { setRangeVertical(parseFloat(e.target.value)); }} />

每个滑块控制不同的布局参数,提供实时反馈。

自定义节点卡片

使用插槽渲染丰富的节点内容:

<RGSlotOnNode>
    {({ node }: RGNodeSlotProps) => (
        <div className="my-card-node">
            <div className="card-left" />
            <div className="card-right">
                <div className="card-name">{node.text}</div>
                <div className="card-tags">
                    {node.data?.tags.map((tag: string) => (
                        <div key={tag} className="card-tag">{tag}</div>
                    ))}
                </div>
                <div className="card-location">{node.data?.location}</div>
            </div>
        </div>
    )}
</RGSlotOnNode>

节点显示标签、位置等丰富信息。

负间距支持

水平间距支持负值:

<input type="range" min="-150" max="200" value={rangeHorizontal} />

负间距可以使子节点与父节点在垂直方向上有重叠,创建更紧凑的布局。

颜色主题配置

设置节点和线条的颜色:

const graphOptions: RGOptions = {
    defaultLineColor: '#447fff',
    defaultNodeColor: '#333333'
};

统一的颜色主题提供一致的视觉体验。

创意使用场景

文件浏览器增强

创建功能丰富的文件浏览器,支持标签、位置等元数据显示。比传统文件管理器更直观。

知识库导航

构建带有标签、分类、位置信息的知识库导航系统。帮助用户快速找到相关内容。

组织架构展示

展示公司或组织的部门结构,每个部门显示标签、地点、负责人等信息。

产品目录浏览

电商网站的产品分类目录,每个类别显示标签、库存位置等信息。

项目任务管理

项目管理系统中的任务层级结构,任务显示标签、负责人、截止日期等。

地点层级展示

地理信息系统中的地点层级,如国家-省-市-区,显示地点标签和坐标。

课程体系导航

在线教育平台的课程结构,每门课程显示难度标签、课时、讲师等信息。

设备资产清单

企业的设备资产树,每个设备显示型号标签、放置位置、状态等信息。

文档管理系统

企业文档管理系统,文档显示分类标签、作者、修改日期等元数据。

客户关系管理

CRM 系统中的客户层级结构,客户显示行业标签、地区、联系人等信息。

供应链可视化

供应链的层级结构,每个节点显示供应商标签、地理位置、产能等信息。

产品配置器

复杂产品的配置选项树,每个选项显示兼容性标签、价格、库存等信息。

法律法规库

法律法规的分类体系,每条法规显示效力标签、发布日期、适用地区等。

医疗诊断指南

医疗诊断的决策树,每个节点显示症状标签、检查项目、治疗方案等。

烹饪食谱导航

烹饪网站的食谱分类,每个食谱显示菜系标签、难度、食材等信息。