AdminTable 组件
概述
AdminTable 是系统里最核心的表格组件,在 BootstrapBlazor 的 Table<TItem> 基础上扩展而来,把增删改查、分页排序、搜索筛选、导入导出、数据权限、树形展示这些功能都打包好了。后台管理页面基本上都用它。
功能特性
- CRUD 全支持,分页排序自动搞定
- Excel 导入导出,还能下载模板
- 树形表格(
IsTree),父子层级自动处理
- 内置数据权限(
UseDataPermission),自动按部门过滤
- 简单搜索 + 高级搜索(多条件组合)
- 查询前、保存前后、删除前后、导入前后都有生命周期事件
- 按钮权限(
[AdminButton])控制显示隐藏
- 自定义编辑弹窗模板(
EditTemplate)
参数说明
类型参数
| 参数 |
说明 |
| TItem |
实体类型,必须实现 IEntity<TKey> 接口 |
| TKey |
主键类型 |
属性参数
| 参数 |
类型 |
说明 |
| IsTree |
bool |
是否为树形表格 |
| IsMultipleSelect |
bool |
是否启用多选 |
| ShowSearch |
bool |
是否显示搜索框 |
| ShowAdvancedSearch |
bool |
是否显示高级搜索按钮 |
| ShowExtendButtons |
bool |
是否显示扩展按钮 |
| ShowImportButton |
bool |
是否显示导入按钮 |
| ShowExportButton |
bool |
是否显示导出按钮 |
| UseDataPermission |
bool |
是否启用数据权限过滤 |
| EnableDraft |
bool |
是否启用草稿自动保存功能,防止因意外关闭页面而丢失数据 |
| EnableSaveWithoutClose |
bool |
是否启用保存不关闭功能 |
| DraftAutoSaveInterval |
int |
草稿自动保存间隔(秒),默认 30 秒 |
| EditDialogSize |
Size |
编辑弹窗尺寸 |
| IgnoreSearchColumns |
Expression |
指定忽略搜索的列 |
| GetParentId |
Func |
树形表格的父级 ID 委托 |
| OnBeforeQuery |
EventCallback |
查询前事件,用于追加 Include、Where 等 |
| OnBeforeSaveAsync |
EventCallback |
保存前事件,用于数据验证或预处理 |
| OnFinishSaveAsync |
EventCallback |
保存后事件,用于后续处理(如创建租户管理员) |
| OnBeforeDeleteAsync |
EventCallback |
删除前事件,用于级联加载或拦截 |
| OnBeforeImportAsync |
EventCallback |
导入前事件,用于自定义导入逻辑 |
使用示例
基本用法
<AdminTable TItem="SysUser" TKey="long"
ShowSearch ShowAdvancedSearch ShowExtendButtons
OnBeforeQuery="OnBeforeQuery"
OnBeforeSaveAsync="OnBeforeSaveAsync"
OnBeforeDeleteAsync="OnBeforeDeleteAsync">
<TableColumns>
<TableColumn @bind-Field="context.Username" Text="用户名" />
<TableColumn @bind-Field="context.Nickname" Text="昵称" />
<TableColumn @bind-Field="context.IsEnabled" Text="状态" />
</TableColumns>
</AdminTable>
树形表格
<AdminTable TItem="SysMenu" TKey="long" IsTree IsMultipleSelect
OnBeforeQuery="OnBeforeQuery" ... />
查询前追加 Include
private void OnBeforeQuery(AdminQueryEventArgs<SysUser> e)
{
e.Select.IncludeMany(a => a.Roles).Include(a => a.Org);
}
保存前验证
private async Task OnBeforeSaveAsync(AdminSaveEventArgs<SysUser> e)
{
if (await _repo.Select.Where(a => a.Username == e.Item.Username).AnyAsync())
{
await SwalService.Error("用户名已存在");
e.Cancel = true;
}
}
注意事项
- 用数据权限的话,实体必须实现
IDataPermission 接口
- 导入文件默认限制 5MB
- 树形表格要设
GetParentId 参数