使用jOrgChart插件, 异步加载生成组织架构图

jOrgChart插件是一个用来实现组织结构图的Jquery的插件-

一、特点

1.支持拖拽修改子节点;

2.支持节点缩放展示;

3.方便修改css定义样式;

4.超轻量型;

5.兼容性好,基本支持所有浏览器。

二、异步加载生成自上而下的组织结构图前期准备

1.通过后台查询数据库,生成树形数组结构,返回前台;

2.需要引入js 插件和css 文件

a.jquery.jOrgChart.css(插件样式自行修改)

b.jquery.jOrgChart.js

c. jquery.min.js

d.jquery-ui.min.js  (想要拖拽布局的结构,需要引入jQuery UI插件)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="css/jquery.jOrgChart.css"  type="text/css"/>
    <script src="js/jquery.min.js"></script>
    <script src="js/jquery.jOrgChart.js"></script>
    <script src="js/jquery-ui.min.js"></script>
</head>
<body>
<ul id="org" style="display:none">
<li>
  Food
  <ul>
    <li>Beer</li>
    <li>Vegetables
      <ul>
        <li>Pumpkin</li>
        <li><a href="http://tquila.com" target="_blank">Aubergine</a></li>
      </ul>
    </li>
    <li>Bread</li>
    <li>Chocolate
      <ul>
        <li>Topdeck</li>
        <li>Reese‘s Cups</li>
      </ul>
    </li>
  </ul>
</li>
</ul>
    <script type="text/javascript">
    jQuery(document).ready(function() {
    $("#org").jOrgChart();
});

    </script>
</body>
</html>

以上代码调用插件,通常但不总是在文件加载。您需要在这个调用中指定列表的标识。例如:

jQuery(document).ready(function() {
    $("#org").jOrgChart();
});

这个调用将追加标记OrgChart默认<body>元,但您可以指定这个选项的一部分。

配置参数

只有3个配置选项:

  1. chartElement – 用于指定的HTML元素要添加组织结构图的标记。[default=’body’]
  2. depth – 告诉代码该解析的深度。默认值为“1”,它指示它要解析它的1999。 [default=-1]
  3. chartClass – 分配给生成标记的样式类的名称。[default=’jOrgChart’]
  4. dragAndDrop – 确定是否启用树节点元素的拖放功能。[default=false]

3.使用jOrgChart插件,根据返回的数据将其子节点加入到相应的<li></li>中。

三、后台数据数组结构表

首先数据表应该要有id(节点),pid(父节点的id), name的字段。

/**
 * 将一个有父类id和子类id关联的二维数组转化树状数组
 * @author holly
 * @since 2016/10/23
 * @param array $array          有关联的二维数组
 * @param string $parentId      父类id的名称
 * @param string $sonId         子类id的名称
 * @param number $pid           父类id的值,默认为0
 * @return array $arr           多维数组
 */
function FormatTree($array,$parentId,$sonId, $pid = 0)
{
    $arr = array();
    $tem = array();
    foreach ($array as $v) {
        if ($v[$parentId] == $pid) {
            $tem = FormatTree($array,$parentId,$sonId,$v[$sonId]);//递归,调用自身
            // 判断是否存在子数组
            $v[‘son‘] = $tem;
            $arr[] = $v;
        }
    }
    return $arr;
}
/**
    public function ajaxOrganize(){
        $JavaApiData = array(
            ‘SqlCondition‘ => ‘‘,//查询条件
            ‘pageIndex‘ => 1,//页数
            ‘pageSize‘ => 1000000,//每页纪录数
        );
        $url = C("URL")."deptorganmanage.do";//接口地址
        $result = json_decode(post($url, json_encode($JavaApiData),10),JSON_UNESCAPED_UNICODE);//请求接口,得到结果
        $OrganizeList = FormatTree($result[‘data‘],‘pr_deptid‘,‘id‘);
        die(json_encode($OrganizeList));
    }
}

通过后台查询数据将数组通过json_encode转化为json格式的字符串返回前端页面。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>组织架构图</title>
  <link rel="stylesheet" href="__PUBLIC__/Admin/css/jquery.jOrgChart.css"/>
<style type="text/css">
/*  .jOrgChart{width: calc(100% - 60px);}
  .jOrgChart .node{writing-mode: horizontal-tb;padding: 0 5px;width: auto;}*/
</style>
</head>
<body  >

  <!--显示组织架构图-->
  <div id=‘jOrgChart‘></div>

  <!-- jQuery includes -->
  <script type="text/javascript" src="__PUBLIC__/Admin/js/jquery.min.js"></script>
  <script src="__PUBLIC__/Admin/js/jquery.jOrgChart.js"></script>
  <script src="__PUBLIC__/Admin/js/jquery-ui.min.js"></script>
  <script>
    $(function(){
      //数据返回
      $.ajax({
        url: "__APP__/Data/Dept/ajaxOrganize",
        type: ‘POST‘,
        dataType: ‘JSON‘,
        data: {},
        success: function(result){
            var showlist = $("<ul id=‘org‘ style=‘display:none‘></ul>");
            showall(result, showlist);
            $("#jOrgChart").append(showlist);
            $("#org").jOrgChart( {
                chartElement : ‘#jOrgChart‘,//指定在某个dom生成jorgchart
                dragAndDrop : false //设置是否可拖动
            });
          }
        });
    });
  //menu_list为json数据
  //parent为要组合成html的容器
  var count = 0;
  function showall(menu_list, parent) {
    count ++;
    //最多显示10层
    if (count <= 10) {
      $.each(menu_list, function(index, val) {
        if(val.son.length > 0){
          var li = $("<li></li>");
          li.append("<a href=‘javascript:void(0)‘ onclick=getOrgId("+val.id+");>"+val.deptname+"</a>").append("<ul></ul>").appendTo(parent);
          //递归显示
          showall(val.son, $(li).children().eq(1));
        }else{
          $("<li></li>").append("<a href=‘javascript:void(0)‘ onclick=getOrgId("+val.id+");>"+val.deptname+"</a>").appendTo(parent);
        }
      });
    }

  }
</script>
</body>
</html>

时间: 2024-08-05 11:14:48

使用jOrgChart插件, 异步加载生成组织架构图的相关文章

jQuery树形菜单,使用zTree插件,异步加载 &amp; 编辑功能&amp;Check 共存

一.下载zTree插件 地址:http://www.ztree.me 二.HTML代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="zTree.aspx.cs" Inherits="CssStudyWeb.zTree" %> <!DOCTYPE html> <html xmlns="http://www.w3.org

artdialog 异步加载页面 生成验证码

artdialog  异步加载一个页面 需求:例如现在好多网站的登录或注册 都是点击弹出一个层出来 然后在上面登录.注册 这个登录可能在网站的每个页面都会有,但是我们又不能在每个页面都这一段html加载出来不显示,到需要用的时候,在给shou出来,这样做于情于理都说!不!!过!!!去!!!!!! 恰好以前接触过artdialog  不多说上代码,(注意思维,代码是死的方法是活,解决需求不一定非要这个方法 ) 1.页面html代码 1 <head runat="server">

jQuery异步加载数据添加事件

几个月前在一个项目中涉及到树形栏,然后看了很多插件,觉得有点麻烦,于是自己写了一个,写着写着就出问题了.当时项目是通过树形栏进行权限控制的,管理员可以对从数据库去的数据动态生成树形栏进行增删改查操作,可是用$(".XX").click();方法是不行的.1.之前用的是jq1.4.3 ,jq1.7一下都可以使用live()方法,来实现该功能 $('#div').live('click',function(){ //do stuff }); 但是live方法也有不支持的事件,例如:togg

Javascript 异步加载详解(转)

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

seajs2.3学习日志 简单尝试模板+数据合并、模块异步加载、非标准CMD模式定义define模块

今天继续尝试seajs 2.3的版本,那做点什么demo好呢,就来一个简单是数据模板吧,然后通过其他一些细节深入学习 先看看目录结构,按照官方demo架设 index.html只是简单入口文件和seajs的配置项,最下面有一个seajs.use加载crontroller模块,然后回调暴露的combine方法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

Javascript 异步加载详解

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

javascript异步加载详解(转)

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

[转载]Javascript 同步异步加载详解

http://handyxuefeng.blog.163.com/blog/static/4545217220131125022640/ 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yo

实现异步加载js文件及加载完成后回调

模块化工具类实现方式 基于AMD.CMD模式的JS模块化管理工具越来越流行,这些工具通常只需在页面中加载对应的工具JS,其他JS文件都是异步加载的,比如RequireJS就可以象下面这样做. 首先在页面加载 <script data-main="scripts/main.js" src="scripts/require.js"></script> 然后工具会自动识别data-main属性值,并加载对应的JS文件,在main.js可以加载更多模