# WenAntdUI-Admin **Repository Path**: onlycheat/wen-antd-ui ## Basic Information - **Project Name**: WenAntdUI-Admin - **Description**: 基于AntdUI的管理系统,内部封装了很多常用组件,包含AdminTable等通用组件。 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2025-05-09 - **Last Updated**: 2025-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WenAntdUI 控件使用了AntdUI https://gitee.com/AntdUI/AntdUI | 功能 | 状态 | | :------: | :---: | | AOT发布 | ✅ | | 字典管理 | ✅ | | 用户管理 | ✅ | | 菜单管理 | ✅ | | 权限管理 | ✅ | | 用户设置 | ✅ | ### 启动项目 | 文件 | 项目 | 说明 | 进度 | | :---: | :--------------------------- | :---------------------------------------- | :---: | | gRPC | gRPC测试项目(演示示例项目) | | | | | Wen.GrpcClient | 客户端项目示例代码 | ✅ | | | Wen.GrpcService | 服务端项目示例代码 | ✅ | | Test | 项目测试功能测试代码 | | | | | ConsoleAppAotTest | 控制台AOT测试代码(SqlSugarCore) | ✅ | | | WinFormsAppAotTest | winform Aot(SqlSugarCore)测试 | ✅ | | | WinFormsAppFreeSqlAotTest | winform Aot (FreeSql) | ✅ | | | WinFormsAppTestHub | SignalR 客户端测试 | ✅ | | 项目 | 主要应用项目功能 | | | | | WebServer | 前后分离服务器项目(内含WebApi和SignalR) | ✅ | | | Wen.Models | Model层,主要声明实体 | ✅ | | | Wen.Core | 中间层,后续基础引用功能基本迁移到此处 | ✅ | | | WenAntdUI | 应用功能层,插件,封装组件等 | ✅ | | | WenAntdUI.Demo | 项目引用示例 | ✅ | ## 内部运行集成 一行代码搞定一个完整的管理系统基础功能 ![alt text](Image/PixPin_2025-04-17_11-40-55.webp) ### 数据演示 需要体验最新测试功能可以设置启动数据库 DataSource=..\\..\\..\\..\\data.db ![alt](Image/2025-04-17_19-21-09.png) ~~~ internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { App.Run(services => { services.AddControlServices(Assembly.GetExecutingAssembly()); }); } } ~~~ ### 集成启动方式 应用WenAntdUI,可以使用顶级语言 ~~~ App.Run();//只需要此代码即可启动一个项目 //services 主要是注入服务,将项目控件注入到服务中。 App.Run(services => { services.AddControlServices(Assembly.GetExecutingAssembly()); }); //AddControlServices 内部封装了Control注入功能,只需要传递程序集即可 ~~~ ~~~ //很多开发项目,需要使用注册机功能,也只需要在 App.Run修改,即可一个完整注册机功能,硬件信息生成唯一注册码 App.Run(services => { services.AddControlServices(Assembly.GetExecutingAssembly()); },true); //此处增加 ~~~ ![alt text](Image/image-7.png) ### 加密解密KEY请自行生成替换 Wen.Core.Helps AesRsaHelp中 ~~~ public static string RsaFromPem { get; set; } = @"-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxot7LoZAVHZDhlGE8e6/ WqTmgmGZhVepofQhhynB/jTA69lMXoKfcXJMr/8Zyfdug97re7NkJX8Jei4cJlEv nyzNRrY1tz1+dkrISYi0nBkwaDMTd2Wsw63QjcqZl1yCTVT6jboNR/0a7hyb2gwt 5cXW2ylgVZ6PttOUPXb3ZF8oWLe1BVWfcQXFIlErqVjsY3iFgcNxCucvYhiDzcbm qHFIbUj9760E666Ws3Io32OQK1EkkdufqNuL1gm9/9qYXE0KChGzetnFfhtOGmvK cPp3os07zdeeFOdKbwCbZjUxSy2a/6IKvEWilONNPNSMBxcc70oci565CtrIdyah IQIDAQAB -----END PUBLIC KEY-----"; public static string AesKey = "u4GP+xHwd3slNDYCVeOvDpbe0eLJz7XpaEj46SA9EtM="; public static string AesIv = "8Daxh29YSAjUBulFYoMhdw=="; ~~~ ## 功能集成 内部集成了 枚举,字典等样式识别 全局采用注入方式,Page控件可以使用注入方式,直接调用 ~~~ [Description("角色管理")] //此处为菜单选择注释 public partial class SysRolePage : UserControl { private readonly IFreeSql fsql; private readonly MenuService menuService; public SysRolePage(IFreeSql fsql, MenuService menuService) { this.fsql = fsql; this.menuService = menuService; InitializeComponent(); this.adminTable1.SetColumns(); this.adminTable1.Query(); InitMenuItem(); this.adminTable1.CellClick += AdminTable1_CellClick; } } ~~~ ### AdminTable 封装控件 AdminTable 只需要一行代码即可实现一个表增删改查 ![alt text](Image/20250417190707.png) ~~~ this.adminTable1.SetColumns(); [Index($"index_{nameof(SysRole)}_{nameof(RoleName)}", nameof(RoleName), true)] public class SysRole { /// /// 获得/设置 角色名称 /// [DisplayName("角色名称")] [Col] //自动编辑功能,需要在属性上面 加上 Col 特性 [Key] public string? RoleName { get; set; } /// /// 获得/设置 角色描述 /// [DisplayName("角色描述")] [Col] public string? Description { get; set; } } ~~~ 自定义构建列 ~~~ this.adminTable1.SetColumn() .Add(a => a.Name, 288, c => c.SetTree(nameof(SysMenuDto.Childs))) .Add(a => a.Code) .Add(a => a.ParentCode) .Add(a => a.OrderNo) .Add(a => a.IconImage) .Add(a => a.MenuType) .Add(a => a.Description) .Add(a => a.ControlType); ~~~ 查询数据 ~~~ this.adminTable1.QueryData = async e => { e.IsExpand = true; return fsql.Select() .WhereIf(!string.IsNullOrWhiteSpace(e.QueryText), a => a.Name.Contains(e.QueryText)) .ToTreeList(); }; this.adminTable1.Query(); //手动执行查询 ~~~ ![alt text](Image/image-6.png) ## 字典管理 | 功能 | 状态 | | :------: | :---: | | 增删改查 | ✅ | ![alt text](Image/image.png) ## 菜单管理 | 功能 | 状态 | | :--------: | :---: | | 增删改查 | ✅ | | 页面控件 | ✅ | | 自定义样式 | ✅ | 开发中无需考虑 new ,可以使用注入方式 ,在构造函数中使用 ~~~ public partial class UserControlTestTable : UserControl { public UserControlTestTable(IFreeSql fsq1) { InitializeComponent(); adminTable1.SetColumns(); } } //需要提前注入,若是采用插件方式开发,此处可以调用外部插件直接注入dll文件 App.Run(services => { services.AddControlServices(Assembly.GetExecutingAssembly()); }, true); ~~~ ### 完成注入后即可在菜单选中使用 ![alt text](Image/image-8.png) ![alt text](Image/image-1.png) ## 角色管理 | 功能 | 状态 | | :------: | :---: | | 增删改查 | ✅ | | 分配权限 | ✅ | ![alt text](Image/image-2.png) ## 用户管理 | 功能 | 状态 | | :------: | :---: | | 增删改查 | ✅ | | 分配角色 | ✅ | | 重置密码 | ✅ | ![alt text](Image/image-3.png) ## 用户信息设置 | 功能 | 状态 | | :------: | :---: | | 更改密码 | ✅ | | 修改图像 | ✅ | 图像存储在SQL中。 ![alt text](Image/image-5.png) ## 封装组件演示 | 功能 | 状态 | | :------------------- | :---: | | 前后端分离增删改查 | ✅ | | 图像选择组件 | ✅ | | 字典选择组件 | ✅ | | 上传功能集成组件 | ✅ | | 下载功能集成组件 | ✅ | | Model编辑组件 | ✅ | | 双向绑定 | ✅ | | Auth组件(按钮权限) | ✅ | ### 前后分离通用查询方式虽然方便,慎用慎用!!! ### 出于安全考虑,不集成在 AdminTable,若需要使用,只要替换增删改查代码即可 ### 查询数据 需要需要提供类型 搜索内容 页码 单页数 ~~~ var client = new ApiClient(); var res = await client.GetListAsync(typeof(SysDict), "", true, 1, 5); this.table1.DataSource = res.Data; ~~~ ### 更新数据 ~~~ var client = new ApiClient(); var res = client.UpdateObject(item); await RefreshDataAsync(); ~~~ ### 删除数据 ~~~ var client = new ApiClient(); var res = client.DeleteObject(item); await RefreshDataAsync(); ~~~ ### 插入数据 ~~~ var client = new ApiClient(); var res = client.InsertObject(item); await RefreshDataAsync(); ~~~ ### Model编辑组件 使用方式 ~~~ this.modelEditControl1.GetItemBuilder(value) .Add(a => a.Color) .Add(a => a.Name) .Add(a => a.CreateTime) .Add(a => a.Image) //.Add(a => a.Aa) //.Add(a => a.Name, content: new DictSelect("1")) .Add(a => a.KK) .Add(a => a.Dict) .Add(a => a.KKd) .Add(a => a.Typ) .Add(a => a.TestEditControlTest, content: new TestEditControl()) .Add(a => a.Check); ~~~ 更新数据 ~~~ this.modelEditControl1.Model = obj; ~~~ ### Auth组件(按钮权限) 设计页面拖入 Auth ,然后点击按钮,按钮上就会多一个属性 ![alt text](Image/PixPin_2025-04-17_15-00-38.png) ![alt text](Image/PixPin_2025-04-17_14-55-04.png) ![alt text][def] AdminTable 增删改 权限设置方法 ~~~ this.auth1.SetAuth(this.adminTable1, "useradmin"); //菜单中请设置权限 useradmin:edit, useradmin:delete, useradmin:add ~~~ ![alt text](Image/image-4.png) [def]: Image/PixPin_2025-04-17_14-59-28.png