渲染结果
第一种情况:后台处理了数据,前台只需要展示(后台返还的结果就是一个数组树)
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>
第二种情况:后台以单个对象的形式返还全部的数据,需要前端根据关系进行处理
后台返还的数据
经过前台处理后的数据
代码如下
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 Listchildren { 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 ListChildrens { 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