table树形结构
此树形结构配置只对生成页面生效,单独使用voltable的树形table,请参照:组件示例->table组件

树形结构配置方式一
配置适用于表数据较少,配置会加载全表数据;优点:配置简单、无后台代码、修改刷新页面后展开的节点保持不变
vue3 代码
const conInit=($vm)=> {
gridRef=$vm;
//隐藏分页信息
gridRef.paginationHide = true;
//禁用延迟加载(必填)
gridRef.lazy = false;
//树形结点的id字段(必填)
gridRef.rowKey = 'DepartmentId';//DepartmentId为表的主键id字段
//父级id字段(必填)
gridRef.rowParentField = "ParentId";//ParentId为表的父级id字段
//是否展开所有节点(默认会记录展开的节点)
//gridRef.defaultExpandAll=true;
//默认展开的节点
//gridRef.expandRowKeys=["id值"]
}
隐藏高级查询按钮
vue2 代码
onInit() {
//隐藏分页信息
this.paginationHide = true;
//禁用延迟加载(必填)
this.lazy = false;
//树形结点的id字段(必填)
this.rowKey = 'DepartmentId';//DepartmentId为表的主键id字段
//父级id字段(必填)
this.rowParentField = "ParentId";//ParentId为表的父级id字段
//是否展开所有节点(默认会记录展开的节点)
//this.defaultExpandAll=true;
//默认展开的节点
//this.expandRowKeys=["id值"]
}
树形结构配置方式二
此配置适用于表数据量大的情况(所有节点都是延迟加载的)
vue3 代码
//生成的vue标签上添加方法
<view-grid :loadTreeChildren="loadTreeChildren"></view-grid>
const conInit=($vm)=> {
gridRef=$vm;
//设置treetable的唯一值字段(这个字段的值在表里面必须是唯一的)
gridRef.rowKey = 'Role_Id'; //Role_Id换为表的主键字段
}
/***加载后台数据***/
const loadTreeChildren=(tree, treeNode, resolve)=>{
//加载子节点
//Role_Id换为表的主键字段
let url = `api/表名/getTreeTableChildrenData?roleId=${tree.Role_Id}`;
proxy.http.post(url, {}).then((result) => {
resolve(result.rows);
});
}
vue2 代码
onInit() {
//设置treetable的唯一值字段(这个字段的值在表里面必须是唯一的)
this.rowKey = 'Role_Id'; //Role_Id换为表的主键字段
},
/***加载后台数据***/
loadTreeChildren(tree, treeNode, resolve) {
//加载子节点
//Role_Id换为表的主键字段
let url = `api/表名/getTreeTableChildrenData?roleId=${tree.Role_Id}`;
this.http.post(url, {}).then((result) => {
resolve(result.rows);
});
}
后台代码
/********************************后台代码**************************************/
//后台代码见:Sys_RoleController.cs文件(Sys_RoleController改为你当前表的Controller)
public partial class Sys_RoleController
{
private readonly ISys_RoleService _service;//访问业务代码
private readonly ISys_RoleRepository _repository;
private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor]
public Sys_RoleController(
ISys_RoleService service,
ISys_RoleRepository repository,
IHttpContextAccessor httpContextAccessor
)
: base(service)
{
_service = service;
_repository = repository;
_httpContextAccessor = httpContextAccessor;
}
/// <summary>
/// treetable 获取子节点数据(2021.05.02)
/// </summary>
/// <param name="loadData"></param>
/// <returns></returns>
[ApiActionPermission(ActionPermissionOptions.Search)]
[HttpPost, Route("GetPageData")]
public override ActionResult GetPageData([FromBody] PageDataOptions loadData)
{
return GetTreeTableRootData(loadData).Result;
}
/// <summary>
/// treetable 获取一级(根)节点数据
/// </summary>
/// <returns></returns>
[HttpPost, Route("getTreeTableRootData")]
[ApiActionPermission(ActionPermissionOptions.Search)]
public async Task<ActionResult> GetTreeTableRootData([FromBody] PageDataOptions options)
{
//页面加载根节点数据条件x => x.ParentId == 0,自己根据需要设置
var dbServiceId = UserContext.CurrentServiceId;
var query = _repository.FindAsIQueryable(x => x.ParentId == 0 || x.Role_Id == 1);
var queryChild = _repository.FindAsIQueryable(x => true);
var rows = await query.TakeOrderByPage(options.Page, options.Rows)
.OrderBy(x => x.Role_Id).Select(s => new
{
s.Role_Id,
s.ParentId,
s.RoleName,
s.DeptName,
s.Dept_Id,
s.Enable,
s.CreateDate,
s.Creator,
s.Modifier,
s.ModifyDate,
s.OrderNo,
s.DatAuth,
hasChildren = queryChild.Any(x => x.ParentId == s.Role_Id)
}).ToListAsync();
return JsonNormal(new { total = await query.CountAsync(), rows });
}
/// <summary>
///treetable 获取子节点数据
/// </summary>
/// <returns></returns>
[HttpPost, Route("getTreeTableChildrenData")]
[ApiActionPermission(ActionPermissionOptions.Search)]
public async Task<ActionResult> GetTreeTableChildrenData(int roleId)
{
//点击节点时,加载子节点数据
var roleRepository = Sys_RoleRepository.Instance.FindAsIQueryable(x => true);
var query = roleRepository.Where(x => x.ParentId == roleId);
if (AppSetting.UseDynamicShareDB)
{
query = query.Where(x => x.DbServiceId == UserContext.CurrentServiceId);
}
var rows = await query
.Select(s => new
{
s.Role_Id,
s.ParentId,
s.RoleName,
s.DeptName,
s.Dept_Id,
s.Enable,
s.CreateDate,
s.Creator,
s.Modifier,
s.ModifyDate,
s.OrderNo,
s.DatAuth,
hasChildren = roleRepository.Any(x => x.ParentId == s.Role_Id)
}).ToListAsync();
return JsonNormal(new { rows });
}
}