如何在react中使用OrgChart?

article/2025/10/6 23:33:23

最近在将OrgChart嵌入至React时,碰见了一些坑,希望能以此记录我是怎么爬出来的~

一、什么是OrgChart?

一款基于jquery来画组织架构图的插件。有以下特点:

  • 支持本地数据和远程数据(JSON)
  • 基于CSS3转换的平滑展开/折叠效果
  • 将图表对齐为4个方向
  • 允许用户通过拖放节点更改组织结构
  • 允许用户动态编辑组织图并将最终层次结构保存为JSON对象
  • 支持将图表导出为图片
  • 支持平移和缩放
  • 用户可采用多种解决方案来构建庞大的组织结构图(请参考多层或混合布局部分)
  • 支持触摸的移动设备插件

二、使用方式

1、下载orgchart及jquery

$ npm install jquery 
$ npm install orgchart

2、配置jquery

{test: require.resolve('jquery'),use: [{loader: 'expose-loader',options: 'jQuery'},{loader: 'expose-loader',options: '$'}]}

此时jquery的配置是基于expose-loader的,所以这里也要下载expose-loader

$ npm install expose-loader

如果是在ant-design中引入的(前提是引用了ant-design的脚手架),可在config-overrides.js中写入以下代码

module.exports = {// The Webpack config to use when compiling your react app for development or production.webpack: function(config, env) {config.module.rules = [...config.module.rules,{test: require.resolve('jquery'),use: [{loader: 'expose-loader',options: 'jQuery'},{loader: 'expose-loader',options: '$'}]},]return config; }
}

3、引入orgChart

首先头部引入以下代码:

import $ from 'jquery';
import  'orgchart';
import 'orgchart/dist/css/jquery.orgchart.css';

调用方式如下:

<div ref={ref => this.orgTree = ref} />
const options = {'data' : datascource, // 数据源'depth': 20,'nodeContent': 'title','createNode': this.addClick, // 当渲染节点时添加点击事件toggleSiblingsResp: true, // 允许用户收缩展开兄弟节点'visibleLevel': 2, // 默认展开两级
};
$(this.orgTree).orgchart(options);

效果图如下:

datascource格式如下:

datascource = {name: '',title: '',id: '',children: [{name: '',title: '',id: '',children:[]}],
}

关于配置,请参考以下API:

名称类型是否必须默认值描述
datajson or stringY数据源用于构建组织结构图的结构。它可以是JSON对象,也可以是包含发送Ajax请求的URL的字符串
panbooleanNfalse若启用此选项,则可以通过鼠标拖放来平移组织结构图
zoombooleanNfalse用户可以通过鼠标滚轮放大/缩小组织结构图
zoominLimitnumberN7允许用户设置放大限制
zoomoutLimitnumberN0.5允许用户设置缩小限制
directionstringN“t2b”可用值为t2b(表示“从上到下”,默认值)、b2t(表示“从下到上”)、l2r(表示“从左到右”)、r2l(表示“从右到左”)
verticalLevelinteger(>=2)N用户可以使用此选项从指定级别垂直对齐节点
toggleSiblingsRespbooleanNfalse用户可通过单击左/右箭头分别显示/隐藏左/右兄弟节点
ajaxURLjsonN它包括四个属性——父、子、兄弟、族(请求父节点和兄弟节点)。不同的属性提供了不同节点的Ajax请求发送到的URL。
visibleLevelpositive integerN999它表示在最开始的组织结构图扩展到的级别
nodeTitlestringN“name”它将数据源的一个属性设置为组织结构图节点标题部分的文本内容。实际上,用户只需使用nodetile选项就可以创建一个简单的orghcart
parentNodeSymbolstringN“fa-users”使用字体Awesome图标表示节点具有子节点
nodeContentstringN它将数据源的一个属性设置为组织结构图节点的内容部分的文本内容
nodeIdstringN“id”它将数据源的一个属性设置为每个组织结构图节点的唯一标识符
nodeTemplatefunctionN它是一个模板生成函数,用于定制任何复杂的节点内部结构。它只接收一个参数:“data”代表将用于呈现一个节点的json datasoure
createNodefunctionN它是一个回调函数,用于自定义每个组织结构图节点。接收两个参数:“$node”代表单节点DIV的jquery对象;“data”代表单节点的datasource
exportButtonbooleanNfalse它为组织结构图启用导出按钮
exportFilenamestringN“Orgchart”它是将当前组织结构图导出为图片时的文件名
exportFileextensionstringN“png”可用值为png和pdf
chartClassstringN“”当你想在一个页面上实例化多个组织结构图时,你应该添加不同的类名来区分它们
draggablebooleanNfalse如果用户启用此选项,则可以拖放组织结构图的节点。注意:此功能在IE上不起作用,因为它不支持HTML5拖放API
dropCriteriafunctionN用户可以构造自己的条件来限制拖动节点和放置区域之间的关系。此外,此函数接受三个参数(draggednode、dragzone、dropzone),只返回boolen值
initCompletedfunctionN了解表何时完全初始化、数据加载和呈现,尤其是在使用Ajax数据源时,通常很有用。它接收一个参数:“$chart”代表初始化图表的jquery对象

如果需要在渲染时添加点击事件可在options中添加:

'createNode': this.addClick

根据API,createNode回调接收两个参数,$node, data

addClick = ($node, data) => {$($node).click(() => this.handleClick(data)); // click事件中可以添加相应操作,此时当你点击节点时,就会相应相应操作了
}

如果需要收缩,展开节点,则需要做以下操作:

1)下载font-awesome

$npm install font-awesome

2)在对应的js文件中引入font-awesome

import 'font-awesome/css/font-awesome.css';

效果图如下:

三、补充

关于如何清空组织架构图,让其进行重新渲染,我采用了一个比较笨拙的方式:

1、将组织架构图封装成一个组件OrgTree

2、在需要的js引入这个组件,用state来控制组件的重新渲染

如:

{this.state.loading ? <Spin tip="正在加载" /> : <OrgTree id={id} fetchData={this.props.fetchData} />}

当数据切换时,就将loading先置为true,等数据返回完全再讲loading置为false,然后在OrgTree的componentDidMount生命周期里调用生成组织架构图的函数即可重新渲染

最后附上插件地址附上插件地址https://github.com/dabeng/OrgChart


http://chatgpt.dhexx.cn/article/cmdFrscI.shtml

相关文章

orgChart的应用

文档地址&#xff1a;https://balkangraph.com/OrgChartJS/Demos/FirstLook 效果 html: <div id"tree" style"height: 500px;width: 100%;"></div><script src"__TMPL__/public/assets/js/orgchart.js"></script> <…

vue-orgchart拓扑图

安装vue-orgchart npm install vue-orgchart -S//main.js引入样式 import vue-orgchart/dist/style.min.css//使用页面引入 <template><div class"orgchart_Box_Y"><div class"box_right_container" v-if"ifLoading"><Vo…

jquery.orgchart.js

<!doctype html> <html> <head> <meta charset"utf-8"> <title>geovindu,Geovin Du,涂聚文</title><link rel"stylesheet" href"css/jquery.orgchart.css"> <script type"text/javascript&qu…

orgchart实现组织结构图

之前项目需要我搞一个组织架构图&#xff0c;用大约一周时间挑选了框架并开发&#xff0c;最后用orgchart搞出来了&#xff0c;先上结果图 orgchart下载地址 &#xff1a;https://github.com/dabeng/OrgChart 打开下载的压缩包&#xff0c;如下图 然后可以打开demo目录&#x…

orgChart的简单使用,实现树状图结构

还不知道这个插件的小伙伴可以先去官网下载&#xff0c;orgchart官网链接 呐&#xff0c;下载下来就是这样的&#xff1a; 我们把他解压出来&#xff1a; 点进去以后&#xff0c;直接找到index.html文件用浏览器打开&#xff0c;就是这样的啦&#xff1a; 这1--24都是样式样例…

orgChart生成组织结构图应用

orgChart 是一个开源JS&#xff0c;可用于生成组织结构图。现构建如下&#xff1a; 1&#xff09;动态生成HTML作为数据source var preTitle "";var content "<ul idbasic-stacking-source classhide><li>Band<ul>"; // header$.each…

OrgChart - 配置项详解 (精选+原创)

OrgChart 使用教程 &#xff08;一&#xff09; 没用开场白… 近日来&#xff0c;公司要求做一份web组织架构图&#xff0c;正好我使用的框架是vue &#xff0c;自己写太麻烦&#xff0c;于是找一找有没有合适的组件&#xff0c;直接套用。 于是找到了 OrgChart 这个 开源的组…

orgChart实现竖向排列组织图(js实现组织机构图)

一、前言 快过年了&#xff0c;博主这几天不算忙&#xff0c;又刚好用到orgChart来做组织机构图&#xff0c;写了这篇文章&#xff0c;欢迎大家指正。注意&#xff1a;我说的竖向是指文字竖着排列。 依赖库&#xff1a;jquery&#xff0c;jquery颜色选择器&#xff0c;orgCha…

武汉python自动化测试招聘,python自动化测试工程师招聘_Python-自动化测试面试

1、以你做过的项目&#xff0c;举例来说一下你的自动化测试是怎么做的&#xff1f; 参考答案&#xff1a;就拿简历上的ecshop项目来说吧&#xff0c;在编写脚本前&#xff0c;我们会对系统进行评估&#xff0c;确认这个系统可不可以实现UI自动化&#xff0c;如果可以的话&#…

测试ai模糊软件,AE/PR人工智能自动人脸检测马赛克模糊插件

Blace – AI Face Detection是一款作用在AE以及PR软件中的AI插件&#xff0c;能够自动识别检测人脸并智能添加马赛克边框&#xff0c;易于使用且基于AI的检测&#xff0c;控制检测区域并排除检测&#xff0c;有需要的用户不要错过了&#xff0c;赶快来下载吧&#xff01; 兼容性…

自动化面试题

自动化面试题 自动化&#xff1a;将人工测试转换成自动化脚本/工具去运行 优势&#xff1a;节省时间&#xff08;20% - 30%&#xff09;&#xff0c;提高工作效率 Python selenium/appium/airtest/requests unittest Jenkins WEB自动化 1. 什么样的项目适合做自动化&…

Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程]

1.视频演示&#xff1a; [项目分享]Python&#xff06;OpenCV自动人脸打马赛克&#xff06;调色系统[源码&#xff06;UI操作界面&#xff06;部署教程] 2.图片演示&#xff1a; 3.图像颜色检索&#xff06;替换&#xff1a; 4.马赛克分类&#xff1a; 使用opencv库中的haar…

Python opencv:人眼/人脸识别并实时打码处理

利用Pythonopencv实现从摄像头捕获图像&#xff0c;识别其中的人眼/人脸&#xff0c;并打上马赛克。 系统环境&#xff1a;Windows 7 Python 3.6.3 opencv 3.4.2 一、系统、资源准备 要想达成该目标&#xff0c;需要满足一下几个条件&#xff1a; 找一台带有摄像头的电脑…

seleniumxpath打码平台

selenium使用 一 bs4搜索文档树二 css选择器三 selenium基本使用四 无界面浏览器五 selenium其它用法5.1 登录百度5.2 获取位置属性大小&#xff0c;文本5.3 元素操作5.4 执行js代码5.5 切换选项卡5.6 浏览器前进后退5.7 异常处理 六 selenium登录cnblogs获取cookie七 抽屉半自…

第十一章 自动编码器

简介&#xff1a;自动编码器是一种可以进行无监督学习的神经网络模型。一般而言&#xff0c;一个完整的自动编码器主要由两部分组成&#xff0c;分别是用于核心特征提取的编码部分和可以实现数据重构的解码部分。 1.自动编码器入门 在自动编码器中负责编码的部分也叫做编码器&a…

Python 题库自动化面试题

1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2、什么是断言( Assert) ? 断言 Assert 用于在代码中验证实际结果是不是符合预期结果&#xff0c; 如果测试用例执行失败会抛出异常并提供断言日志 3、什么…

Python实现对视频自动打码

我们在观看视频的时候&#xff0c;有时候会出现一些奇怪的马赛克&#xff0c;影响我们的观影体验&#xff0c;那么这些马赛克是如何精确的加上去的呢&#xff1f; 本次我们就来用Python实现对视频自动打码&#xff01; 准备工作 环境咱们还是使用 Python3.8 和 pycharm2021 即…

Python——超级鹰打码平台实现selenium对b站的自动化登陆

目录 一 、Chrome&#xff08;谷歌&#xff09;驱动器的下载 &#xff08;一&#xff09;驱动器版本选择 &#xff08;二&#xff09;下载Chrome驱动器 二、需要安装的库 &#xff08;一&#xff09;安装命令 &#xff08;二&#xff09;指定selenium版本原因 三、实现步…

selenium 自动化测试

Selenium 是一个用于Web应用程序测试的工具&#xff0c;支持多平台、多浏览器、多语言去实现自动化测试。目前在Web自动化领域应用越来越广泛。 selenium 介绍 Selenium的特点如下&#xff1a; 开源、免费多浏览器支持&#xff1a;Firefox、Chrome、IE、Opera、Edge多平台支…

深度学习中的自动编码器:TensorFlow示例

什么是自动编码器? 自动编码器是重建输入的绝佳工具。简单来说,机器就是一个图像,可以生成一个密切相关的图片。这种神经网络中的输入是未标记的,这意味着网络能够在没有监督的情况下进行学习。更准确地说,输入由网络编码,仅关注最关键的特征。这是自动编码器因降维而流行…