组织架构树的实现,前端和后端处理逻辑

渲染结果

组织架构树的实现,前端和后端处理逻辑_第1张图片

 

组织架构树的实现,前端和后端处理逻辑_第2张图片

第一种情况:后台处理了数据,前台只需要展示(后台返还的结果就是一个数组树)

组织架构树的实现,前端和后端处理逻辑_第3张图片

DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>组织架构title>
  <link rel="stylesheet" href="./lib/jquery.jOrgChart.css">
  <script src="./lib/jquery.js">script>
  <script src="./lib/jquery.jOrgChart.js">script>
  <script src="./lib/jquery-ui.min.js">script>
  <style>
    a {
      text-decoration: none;
      color: #fff;
      font-size: 12px;
    }

    .jOrgChart .node {
      width: 120px;
      height: 50px;
      line-height: 50px;
      border-radius: 4px;
      margin: 0 8px;
    }
  style>
head>

<body>
  
  <div id='jOrgChart'>div>

  <script type='text/javascript'>
    $(function () {
      /**
       * 数据返回
       * 测试数据源
       * json-server .\data02.json --port 3003
       */
      $.ajax({
        url: "http://localhost:3003/data",
        type: 'GET',
        dataType: 'JSON',
        data: {
          action: 'org_select'
        },
        success: function (result) {
          console.log(result)
          var showlist = $("");

          showall(result, showlist);
          $("#jOrgChart").append(showlist);

          $("#org").jOrgChart({
            chartElement: '#jOrgChart', //指定在某个dom生成jorgchart
            dragAndDrop: false //设置是否可拖动
          });

          function showall(result, parent) {
            $.each(result, function (index, val) {
              if (val.childrens.length > 0) {
                var li = $("
  • "); li.append("" + val.id + ");>" + val.name + "").append( "
      ").appendTo(parent); //递归显示 showall(val.childrens, $(li).children().eq(1)); } else { $("
    • ").append("" + val.id + ");>" + val.name + "").appendTo(parent); } }); } function getOrgId(val) { console.log(val); } } }); }); script> body> html>

       

      第二种情况:后台以单个对象的形式返还全部的数据,需要前端根据关系进行处理

      后台返还的数据

      组织架构树的实现,前端和后端处理逻辑_第4张图片

      经过前台处理后的数据

      组织架构树的实现,前端和后端处理逻辑_第5张图片

      代码如下

      DOCTYPE html>
      <html lang="en">
      
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Documenttitle>
        <link rel="stylesheet" href="./lib/jquery.jOrgChart.css">
        <script src="./lib/jquery.js">script>
        <script src="./lib/jquery.jOrgChart.js">script>
        <script src="./lib/jquery-ui.min.js">script>
        <style>
          a {
            text-decoration: none;
            color: #fff;
            font-size: 12px;
          }
      
          .jOrgChart .node {
            width: 100px;
            height: 50px;
            line-height: 50px;
            border-radius: 4px;
            margin: 0 8px;
          }
      
          #jOrgChart {
            width: 600px;
            height: 600px;
            overflow-x: scroll;
          }
      
          /* 浏览器滚动条样式 */
          ::-webkit-scrollbar {
            width: 4px;
            height: 4px;
          }
      
          ::-webkit-scrollbar-track {
            background: rgb(255, 255, 255);
            border-radius: 8px;
          }
      
          ::-webkit-scrollbar-thumb {
            background: rgb(201, 201, 202);
            border-radius: 8px;
          }
      
          ::-webkit-scrollbar-thumb:hover {
            background: rgb(162, 162, 163);
          }
        style>
      head>
      
      <body>
        
        <div id='jOrgChart'>div>
      
        <script>
          $(function () {
            /**
             * 数据返回 
             * 默认端口3000
             * 端口被我修改成了3002
             * json-server .\data01.json --port 3002
             * **/
            $.ajax({
              url: "http://localhost:3002/children",
              type: 'GET',
              dataType: 'JSON',
              data: {
                action: 'org_select'
              },
              success: function (_data) {
                console.log(_data)
                var node = {
                  id: _data[0].fatherId,
                  pid: _data[0].sonId,
                  name: _data[0].name,
                  childrens: []
                };
                getAreaTree(_data, node);
      
                function getAreaTree(data, pnode) {
                  var _Name = [];
                  var temp = {
                    id: "",
                    pid: "",
                    name: "",
                    childrens: []
                  };
                  for (var i = 0; i < data.length; i++) {
                    if (data[i].sonId == 0 && pnode.id == 0) {
                      temp = {};
                      if (_Name.indexOf(data[i].name) >= 0) {
                        continue;
                      }
                      _Name.push(data[i].name);
                      temp = {
                        id: data[i].fatherId,
                        pid: data[i].sonId,
                        name: data[i].name,
                        childrens: []
                      };
                      pnode.childrens.push(temp);
                      getAreaTree(data, pnode.childrens[pnode.childrens.length - 1]);
                    } else if (data[i].sonId == pnode.id) {
                      temp = {
                        id: data[i].fatherId,
                        pid: data[i].sonId,
                        name: data[i].name,
                        childrens: []
                      };
                      pnode.childrens.push(temp);
                      getAreaTree(data, pnode.childrens[pnode.childrens.length - 1]);
                    }
                  }
                }
                console.log(node)
                // 把对象转成数组(为了length)
                function objToArr(node) {
                  var nodeArr = []
                  nodeArr.push(node)
                  return nodeArr
                }
                var dd = objToArr(node)
                console.log(objToArr(node))
      
                // 渲染组织结构
                var showlist = $("");
                showall(dd, showlist);
                $("#jOrgChart").append(showlist);
                $("#org").jOrgChart({
                  //指定在某个dom生成jorgchart
                  chartElement: '#jOrgChart',
                  //设置是否可拖动
                  dragAndDrop: false
                });
      
                function showall(dd, parent) {
                  $.each(dd, function (index, val) {
                    console.log(val)
                    if (val.childrens.length > 0) {
      
                      var li = $("
    • "); li.append("" + val.id + ");>" + val.name + "").append( "
        ").appendTo(parent); //递归显示 showall(val.childrens, $(li).children().eq(1)); } else { $("
      • ").append("" + val.id + ");>" + val.name + "").appendTo(parent); } }); } } }); }) script> body> html>

         

        后端处理结果的逻辑

         第一种方式:

         [WebMethod]
                public string getTree()
                {
                    string msg = "";
                    try
                    {
                        string sql = "select * from tb_customer";
                        DataTable dt = SqlHelper.ExecuteDataTable(sql);
                        IList list = null;
                        if (dt.Rows.Count > 0)
                        {
                            list = Table2List(dt);
                        }
                        Tree tree = new Tree()
                        {
                            id = list[0].fatherId,
                            pid = list[0].sonId,
                            text = list[0].name,
                            children=new List()
                        };
                        string name = "";
                       tree= GetTree(list, tree, name);
                       msg = JsonConvert.SerializeObject(tree);
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                    }
                    return msg;
                }
                public Tree GetTree(IList list ,Tree pnode,string _name) 
                {
                    Tree temp = new Tree();
                    foreach (Area model in list) 
                    {
                        if (model.sonId == 0 && pnode.id == 0) 
                        {
                            if (_name==model.name)
                               {
                                   continue;
                               }
                            temp = new Tree()
                             {
                                 id = model.fatherId,
                                 pid = model.sonId,
                                 text = model.name,
                                 children = new List()
                             };
                            _name =model.name;
                             pnode.children.Add(temp);
                             GetTree(list, pnode.children[pnode.children.Count - 1], _name);
                        }
                        else if (model.sonId == pnode.id) 
                        {
         
         
                              temp = new Tree()
                             {
                                 id = model.fatherId,
                                 pid = model.sonId,
                                 text = model.name,
                                 children = new List()
                             };
                           pnode.children.Add(temp);
                           GetTree(list, pnode.children[pnode.children.Count - 1], _name);
                        }
                    }
                    return pnode;
                }
                public static IList Table2List(DataTable dt)
                {
                    IList ts = new List();// 定义集合
                    Type type = typeof(Area); // 获得此模型的类型
                    string tempName = "";
                    foreach (DataRow dr in dt.Rows)
                    {
                        Area t = new Area();
                        PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
                        foreach (PropertyInfo pi in propertys)
                        {
                            tempName = pi.Name;
                            if (dt.Columns.Contains(tempName))
                            {
                                if (!pi.CanWrite) continue;
                                object value = dr[tempName];
                                if (value != DBNull.Value)
                                    pi.SetValue(t, value, null);
                            }
                        }
                        ts.Add(t);
                    }
                    return ts;
                }
        "code" class="csharp">    
            public class Tree
            {
                public int id { get;set;}
         
                public int pid { get;set;}
         
                public string text { get;set;}
         
                public List children { get;set;}
         
            }

         

        第二种方式:利用了公司内部封装的一些方法

         

        using SmartA8.Common.Attributes;
        using SmartA8.Entities.A8SystemEntities;
        using System;
        using System.Linq;
        using System.Web.Script.Serialization;
        using System.Collections.Generic;
        using SmartA8.Models.Builders;
        
        namespace SmartA8.Models
        {
            [ModelCast(ClassName = "customer")]
            public class CustomerFirstModel
            {
                private IDAL.IA8SystemDAO A8SystemDAO = DALFactory.DataAccess.CreateA8SystemDAO();
        
                [ModelCast(PropertyName = "CustomerId")]
                public int CustomerId { get; set; }
        
                [ModelCast(PropertyName = "CompanyName")]
                public string CompanyName { get; set; }
        
                [ModelCast(PropertyName = "ParentCustomerId")]
                public int  ParentCustomerId { get; set; }
        
                [ModelCast(PropertyName = "IsUsing")]
                public bool IsUsing { get; set; }
        
                public List Childrens
                {
                    get {
                        List ccCustomer = A8SystemDAO.FindAll(g => g.ParentCustomerId == CustomerId).ToList();
                        return  BaseBuilder.Cast(ccCustomer);
                    }
                }
            }
        }
         #region
                //组织架构
                public OperateResult GetGeneratorSetOrganList(string username, SearchGeneratorSetOrganModel model = null)
                {
                    UserProfile user = A8SystemDAO.FindAll(u => u.UserName == username).FirstOrDefault();
                    int customerId = user.CustomerNo;
                    if (model != null && model.CustomerId != 0) customerId = model.CustomerId;
                    Customer FirstCustomer = A8SystemDAO.FindAll(g => g.CustomerId == customerId).FirstOrDefault();
                    CustomerFirstModel CustomerModel = BaseBuilder.Cast(FirstCustomer);
                    return OperateResult.Success("", CustomerModel);
                }
         #endregion

         

        转载于:https://www.cnblogs.com/m1754171640/p/10844982.html

        你可能感兴趣的:(前端,后端,javascript,ViewUI)