使用OrgChart技术流程图(树状图)

article/2025/10/6 23:38:34

基于OrgChart技术流程图[树状图]

  • 一.实现效果图
  • 二.数据集
  • 三.实现思路
    • 1.创建数据封装函数
    • 2.将现有的数据处理成json数组
    • 3.调用closureProcessing()函数,将json数组变为json字符串
    • 4.初始化画布,并设置数据
  • 四.源码
    • 1.HTML部分源码(即展示树状图用的画布容器)
    • 2.CSS部分的样式代码
    • 3.完整的js代码

一.实现效果图

效果图

二.数据集

数据库中返回的数据

经过处理后的数据集:

[{"FACTORRISK":"0.6","FACTOREXPOSURE":"0.5","DIMNAME":"主动风险","STYLENMAE":"BARRA中国因子分解"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"资产选择","STYLENMAE":"主动风险"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"共同因子","STYLENMAE":"主动风险"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"风格因子","STYLENMAE":"共同因子"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"行业因子","STYLENMAE":"共同因子"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"市场因子","STYLENMAE":"共同因子"},{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"协方差*2","STYLENMAE":"共同因子"}
]

此时数据已经变成了json数组

三.实现思路

其实思路很简单就是将普通数据组装成符合OrgChart数据格式(点击这里访问OrgChart官方演示文档)的json数据

1.创建数据封装函数

function closureProcessing(obj, s, m,isCompany, str) {var x1 = m || [];for (var i = 0; i < obj.length; i++) {if (obj[i].pId == s) {x1.push(obj[i]);x1.map(function (item, index) {if (item.pId && isCompany) {} else {x1[index].children = [];}if (str) {isCompany = true;for (var i = 0; i < str.length; i++) {if (item.id == str[i].pId && !item.pId) {x1[index].children.push(str[i]);}}}return closureProcessing(obj, item.id, x1[index].children, str);})}}return x1;}

2.将现有的数据处理成json数组

var data = [
{"FACTORRISK":"0.6","FACTOREXPOSURE":"0.5","DIMNAME":"主动风险","STYLENMAE":"BARRA中国因子分解"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"资产选择","STYLENMAE":"主动风险"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"共同因子","STYLENMAE":"主动风险"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"风格因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"行业因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"市场因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"协方差*2","STYLENMAE":"共同因子"}
];
for (var i = 0; i < data.length; i++) {var item = {};if (data[i].PID == 0){item ={pId:data[i].PID,id:data[i].ID,name:data[i].DIMNAME,title:'<div class="org_def"> </div><div class="org_def"> </div>'};}else {item = {pId: data[i].PID,id: data[i].ID,name: data[i].DIMNAME,title: '<div class="rote_style">' + (isNaN(data[i].FACTOREXPOSURE) ? 'N/A' : data[i].FACTOREXPOSURE) + '</div><div class="radio_style">' + (isNaN(data[i].FACTORRISK) ? 'N/A' : data[i].FACTORRISK) + '</div>'}}dataSource.push(item);}/* 处理后的json数组中的每个元素均为{pId: "XX"id: "XX"name: "XX"title: "XX"children: [{…}]relationship: "001"}并且children中的数据也是这种格式*/console.log(dataSource);

3.调用closureProcessing()函数,将json数组变为json字符串

/**
最终会形成一个下面格式的json数据,children属性里面存放着所有的下级节点
{pId: "0"id: "1"name: "BARRA中国因子分解"title: "<div class="org_def"> </div><div class="org_def"> </div>"children: [{…}]relationship: "001"
}
*/
var treeData = closureProcessing(dataSource,0,[],isCompany)[0];

4.初始化画布,并设置数据

var oc = $('#chart-container').orgchart({'data' : treeData,'nodeContent': 'title','nodeTitle':'name','toggleSiblingsResp': true,// 'direction': 'T2B',//   visibleLevel【number】:默认展开几级'visibleLevel': 3,parentNodeSymbol: null});

至此,整个树状(组织结构)图就开发完毕了,但是这样实现出来的效果和图中差距还是挺大的,因为这样实现以后没有效果图中的颜色和右上角的图例.所以这里还需要做些设置,但是这些设置都无关紧要了,直接放到源码里面处理.

四.源码

1.HTML部分源码(即展示树状图用的画布容器)

因为这部分很简单,所以只写画布相关的代码,有兴趣的自己补足运行!

 		<div><div id="legend"></div><div id="chart-container" style="width: 100%"></div></div>

2.CSS部分的样式代码

<style type="text/css">.radio_style{background-color: #64c2e5;color: black;width: auto;height: 20px;text-align: center;}.rote_style{background-color: #f3ab11;color: black;width: auto;height: 20px;text-align: center;}.org_def{width: auto;height: 20px;text-align: center;}.orgchart .node .content{height: auto;}.orgchart table{border: white;}.orgchart td.right {border-right: 2px solid rgba(217, 83, 79, 0.8);}.orgchart td.top {border-top: 2px solid rgba(217, 83, 79, 0.8);}.title{border-left: 0px;margin-bottom: 0px;}.orgchart{background: white;}
</style>

3.完整的js代码

function closureProcessing(obj, s, m,isCompany, str) {var x1 = m || [];for (var i = 0; i < obj.length; i++) {if (obj[i].pId == s) {x1.push(obj[i]);x1.map(function (item, index) {if (item.pId && isCompany) {} else {x1[index].children = [];}if (str) {isCompany = true;for (var i = 0; i < str.length; i++) {if (item.id == str[i].pId && !item.pId) {x1[index].children.push(str[i]);}}}return closureProcessing(obj, item.id, x1[index].children, str);})}}return x1;};
var contentBody = $("#chart-container");
var _legend = $("#legend");
var isCompany = false;
var dataSource = [];
var treeData = {};
var data = [
{"FACTORRISK":"0.6","FACTOREXPOSURE":"0.5","DIMNAME":"主动风险","STYLENMAE":"BARRA中国因子分解"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"资产选择","STYLENMAE":"主动风险"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"共同因子","STYLENMAE":"主动风险"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"风格因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"行业因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"市场因子","STYLENMAE":"共同因子"},
{"FACTORRISK":"0.8","FACTOREXPOSURE":"0.4","DIMNAME":"协方差*2","STYLENMAE":"共同因子"}
];
for (var i = 0; i < data.length; i++) {var item = {};if (data[i].PID == 0){item ={pId:data[i].PID,id:data[i].ID,name:data[i].DIMNAME,title:'<div class="org_def"> </div><div class="org_def"> </div>'};}else {item = {pId: data[i].PID,id: data[i].ID,name: data[i].DIMNAME,title: '<div class="rote_style">' + (isNaN(data[i].FACTOREXPOSURE) ? 'N/A' : data[i].FACTOREXPOSURE) + '</div><div class="radio_style">' + (isNaN(data[i].FACTORRISK) ? 'N/A' : data[i].FACTORRISK) + '</div>'};}dataSource.push(item);
}
console.log(dataSource);
treeData = closureProcessing(dataSource,0,[],isCompany)[0];
var html = '';
html += '<div>' +'<table style="border: 0px;width: 20%;float: right">' +'<tr><td class="rote_style">主动风险(波动率)</td></tr>' +'<tr><td class="radio_style">风险贡献率(主动风险%)</td></tr>' +'</table>'+'</div>';
_legend.append(html);
var oc = $('#chart-container').orgchart({'data' : treeData,'nodeContent': 'title','nodeTitle':'name','toggleSiblingsResp': true,// 'direction': 'T2B',//   visibleLevel【number】:默认展开几级'visibleLevel': 3,parentNodeSymbol: null});

整个代码中最关键的部分就是怎么将数据处理为我们想要的或者说符合OrgChart格式的json对象,只要能搞定这个关键点,那么后面的都是小case了.


知识共享许可协议
本作品采用知识共享署名 4.0 国际许可协议进行许可。


http://chatgpt.dhexx.cn/article/1TPy7cMQ.shtml

相关文章

vue-orgchart 实现节点的增 删 改 功能

UI框架是 ant-design-vue 导出图片我是自己重新写的&#xff0c;要下载 html2canvas vue-orgchart 属性说明 在 这篇文章中https://blog.csdn.net/weixin_44164867/article/details/110871475 https://balkan.app/OrgChartJS-Demos/ 官网有好多例子可以使用 <template>…

最需要的时候遇见你OrgChart

聊聊OrgChart 使用&#xff0c;优雅的方式为你展现舒服的组织架构图&#xff0c; 前言 闲来无事写一个多级用户关系层&#xff0c;于是就存在展示的问题。这时OrgChart就派上了用场。 在用的过程中&#xff0c;有一耐耐的小问题&#xff0c;咔咔就借着问题点&#xff0c;给大…

使用OrgChart插件生成家谱组织结构图

1.orgchart插件&#xff1a; github地址&#xff1a;https://github.com/dabeng/OrgChart 2.前端代码&#xff1a; //1.加载树形数据&#xff1a;ajax请求获取json格式的数据&#xff08;flag参数可以无视&#xff0c;我自己的业务逻辑需要&#xff09;function setTreeInfo(fl…

OrgChart页面模仿编程简单记录

OrgChart页面模仿编程简单记录 导航栏 整体来看&#xff0c;导航栏设计的还是比较简洁&#xff0c;顶部有8个导航模块&#xff0c;每个模块点击后会跳转到相应模块页面。可以使用在App.js页面中使用<Router> <Navlink>来实现。 <Router> <nav> <…

如何在react中使用OrgChart?

最近在将OrgChart嵌入至React时&#xff0c;碰见了一些坑&#xff0c;希望能以此记录我是怎么爬出来的~ 一、什么是OrgChart&#xff1f; 一款基于jquery来画组织架构图的插件。有以下特点&#xff1a; 支持本地数据和远程数据&#xff08;JSON&#xff09;基于CSS3转换的平滑…

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…