如上图,要分成1级是组织,2级是部门,3级是人员,如下
[{
title: (组织名称)
,children: [{
title: (部门名称)
,children: [{
title: (人员名称)
}]
}]
}]
1.后端
首先建立一个类
public class RlRqpOutPut
{
public int EmployeeId { get; set; }//人员ID
public int DepartmentId { get; set; }//部门ID
public int OrganizationId { get; set; }//组织ID
public string Title { get; set; }
public List<RlRqpOutPut> Children { get; set; }
}
在逻辑层里面嵌入以下代码
//逻辑层调用方法
public Response QueryFLTreeList()
{
//查询出的sql结果
var orgs = pmbbfxDAL.QueryFLData();
//根据组织进行分组
var orgGroups = orgs.Select(x => new { name = (string)x["OrganizationName"], id = (int)x["OrganizationId"] }).GroupBy(x => x.id)
.Select(p => p.Key).ToList();
var result = new List<RlRqpOutPut>();
foreach (var orgId in orgGroups)
{
var name = (string)orgs.First(x => (int)x["OrganizationId"] == orgId)["OrganizationName"];
var id = (int)orgs.First(x => (int)x["OrganizationId"] == orgId)["OrganizationId"];
//得到第一层的组织名称与组织ID
var org = new RlRqpOutPut {
OrganizationId= id,
Title = name,
Children = new List<RlRqpOutPut>()
};
//查组织下部门
var depts = orgs.Where(x => (int)x["OrganizationId"] == orgId).Select(x => new { Name = (string)x["DepartmentName"], Id = (int)x["DepartmentId"] }).Distinct();
foreach (var deptItem in depts)
{
//得到第二层的部门ID和部门名称
var dept = new RlRqpOutPut
{
DepartmentId=deptItem.Id,
Title = deptItem.Name,
Children = new List<RlRqpOutPut>()
};
//查部门下人员
var users = orgs.Where(x => (int)x["OrganizationId"] == orgId && (int)x["DepartmentId"] == deptItem.Id)
.Select(x => new { Name = (string)x["EmployeeName"], Id = (int)x["EmployeeId"] }).Distinct();
foreach (var userItem in users)
{
//得到第三三层的人员ID和人员名称
var user = new RlRqpOutPut
{
EmployeeId= userItem.Id,
Title = userItem.Name
};
//把第三层的人员镶嵌到第二层的部门的Children中
dept.Children.Add(user);
}
//把第二层的部门镶嵌到第一层的组织的Children中
org.Children.Add(dept);
}
//把结果加入到result里面
result.Add(org);
}
return new Response
{
//返回result,result就是你想要的结果
Result = result
};
}
主要就是通过linq查询来实现的分级
2.前端
把返回的result作为layui中树形组件的data即可