AllocTable2组件使用指南
AllocTable2是一个基于Blazor和FreeSql的数据分配组件,主要用于处理一对多、多对多等关系的数据分配场景。本文将详细介绍其使用方法。
组件特点
- 基于FreeSql的实体关系
- 支持一对多、多对多数据分配
- 自动处理数据状态
- 提供丰富的自定义模板
- 支持树形结构展示
基本用法
<AllocTable2 TItem="RoleEntity" TChild="UserEntity"
@bind-Item="@allocItemUsers"
ChildProperty="Users"
Title="@($"【分配用户】{allocItemUsers?.Name}")">
<TableTd1>@context.Username</TableTd1>
</AllocTable2>
@code {
RoleEntity allocItemUsers;
void BeginAllocUsers(RoleEntity item)
{
allocItemUsers = item;
}
}基本用法
如果只有,那么会显示Id,并且4列 如果包含了其他的标签,那么会按row展示.
<TableTd1>@context.Id</TableTd1>
<TableHeader>
<th>试题内容</th>
<th>正确答案</th>
</TableHeader>
<TableRow>
<td>@context.Content</td>
<td>@context.Answer</td>
</TableRow>主要参数
1. 泛型参数
TItem: 主实体类型TChild: 子实体类型
2. 基础属性
Item: 当前正在分配的主实体对象ChildProperty: 主实体中的子集合属性名称Title: 弹窗标题PageSize: 分页大小,默认20条IsSearchText: 是否启用搜索功能,默认true
3. 模板参数
TableTh1: 第一列表头模板TableTd1: 第一列内容模板TableHeader: 表格头部模板TableRow: 表格行模板
4. 事件回调
ItemChanged: Item属性变化时的回调OnQuery: 查询数据时的回调
使用场景
1. 角色分配用户
<AllocTable2 TItem="RoleEntity" TChild="UserEntity"
@bind-Item="@allocItemRoles"
ChildProperty="Users"
Title="@($"【分配用户】{allocItemRoles?.Name}")">
<TableTd1>@context.Username</TableTd1>
</AllocTable2>2. 角色分配菜单
<AllocTable2 TItem="RoleEntity" TChild="MenuEntity"
@bind-Item="@allocItemMenus"
ChildProperty="Menus"
Title="@($"【分配菜单】{allocItemMenus?.Name}")"
OnQuery="BeginAllocMenusOnQuery">
<TableTd1>@context.Label</TableTd1>
</AllocTable2>
@code {
void BeginAllocMenusOnQuery(AdminQueryEventArgs<MenuEntity> e)
{
var menuIds = admin.RoleMenus.Select(b => b.Id);
e.Select.WhereIf(admin.Tenant.Id != "main",
a => menuIds.Contains(a.Id))
.OrderBy(a => a.Sort);
}
}工作原理
- 组件会自动处理一对多、多对多关系的数据绑定
- 使用FreeSql的导航属性功能自动加载关联数据
- 支持树形结构的数据展示
- 提供选择、重置、确认等基本操作
- 自动维护数据状态和关系
注意事项
- 实体类必须使用单一主键
- 需要正确配置FreeSql的实体关系映射
ChildProperty必须是主实体中存在的导航属性- 建议使用
@bind-Item双向绑定来处理数据更新
最佳实践
- 合理使用
OnQuery事件来过滤和排序数据 - 使用
TableTd1来自定义每行的显示内容 - 根据需要设置合适的
PageSize来优化性能 - 使用
Title属性来提供清晰的操作提示
总结
AllocTable2组件极大地简化了数据分配的操作流程,通过与FreeSql的深度集成,使得复杂的数据关系处理变得简单直观。合理使用这个组件,可以快速实现角色权限分配、用户组管理等常见的后台管理功能。
