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;
    }
}

注意事项

  1. 用数据权限的话,实体必须实现 IDataPermission 接口
  2. 导入文件默认限制 5MB
  3. 树形表格要设 GetParentId 参数