AdminTable 组件

概述

AdminTable 是系统中最核心的通用数据表格组件,基于 BootstrapBlazor 的 Table<TItem> 组件扩展而来,封装了增删改查、分页排序、搜索筛选、导入导出、数据权限、树形展示等全套功能。系统中所有后台管理页面几乎都使用此组件实现。

功能特性

  • 支持数据的增删改查,自动处理分页和排序
  • 支持 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 是否启用数据权限过滤
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 参数