找回密码
 立即注册
首页 业界区 业界 一行代码快速开发 AntdUI 风格的 WinForm 通用后台框架 ...

一行代码快速开发 AntdUI 风格的 WinForm 通用后台框架

屋稷删 5 天前
前言

在快速迭代的软件开发环境中,如何高效地开发一个功能完整、界面美观的 WinForm 管理系统,是许多开发者面临的现实问题。今天推荐一款基于 Ant Design 设计语言的 WinForm UI 框架,它通过深度封装和现代化设计,彻底改变了传统 WinForm 应用的开发模式。大家无需再为繁琐的基础设施代码所困扰,只需聚焦核心业务逻辑,能够用极简的方式快速搭建企业级桌面应用。
项目介绍

WenAntdUI 项目的主要模块及其对应的功能说明,涵盖了从示例测试到核心应用的各个组成部分,便于大家了解项目结构和功能分布。
项目结构具体如表所示:
1.png

内部运行集成:一行代码搞定一个完整的管理系统基础功能
2.gif

3.png

4.png

5.png

项目功能

AOT发布:支持AOT(Ahead-of-Time)编译发布,提升应用性能。
字典管理:提供增删改查功能,方便管理系统中的各类字典数据。
用户管理:支持用户的增删改查、角色分配和密码重置。
菜单管理:实现菜单的增删改查,支持自定义页面控件和样式。
权限管理:精细的权限控制,确保系统的安全性。
用户设置:允许用户更改密码和修改图像,图像存储在SQL中。
项目说明

初次运行与登录

首次运行WenAntdUI时,它会自动初始化一个Sqlite数据库,并在运行目录下创建data.db文件。可以使用默认的登录账户admin和密码admin快速进入系统,开始体验各项功能。
6.png

集成启动方式

应用WenAntdUI,可以使用顶级语句:
  1. App.Run(); // 只需要此代码即可启动一个项目
  2. // services 主要是注入服务,将项目控件注入到服务中。
  3. App.Run(services =>
  4. {
  5.     services.AddControlServices(Assembly.GetExecutingAssembly());
  6. });
  7. // AddControlServices 内部封装了Control注入功能,只需要传递程序集即可
复制代码
  1. // 很多开发项目,需要使用注册机功能,也只需要在 App.Run修改,即可拥有一个完整的注册机功能,硬件信息生成唯一注册码
  2. App.Run(services =>
  3. {
  4.     services.AddControlServices(Assembly.GetExecutingAssembly());
  5. }, true); // 此处增加参数
复制代码
加密解密

加密解密KEY请自行生成替换 Wen.Core.Helps AesRsaHelp 中的内容:
  1. public static string RsaFromPem { get; set; } = @"-----BEGIN PUBLIC KEY-----
  2. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxot7LoZAVHZDhlGE8e6/
  3. WqTmgmGZhVepofQhhynB/jTA69lMXoKfcXJMr/8Zyfdug97re7NkJX8Jei4cJlEv
  4. nyzNRrY1tz1+dkrISYi0nBkwaDMTd2Wsw63QjcqZl1yCTVT6jboNR/0a7hyb2gwt
  5. 5cXW2ylgVZ6PttOUPXb3ZF8oWLe1BVWfcQXFIlErqVjsY3iFgcNxCucvYhiDzcbm
  6. qHFIbUj9760E666Ws3Io32OQK1EkkdufqNuL1gm9/9qYXE0KChGzetnFfhtOGmvK
  7. cPp3os07zdeeFOdKbwCbZjUxSy2a/6IKvEWilONNPNSMBxcc70oci565CtrIdyah
  8. IQIDAQAB
  9. -----END PUBLIC KEY-----";
  10. public static string AesKey = "u4GP+xHwd3slNDYCVeOvDpbe0eLJz7XpaEj46SA9EtM=";
  11. public static string AesIv = "8Daxh29YSAjUBulFYoMhdw==";
复制代码
功能集成

内部集成了枚举、字典等样式识别,全局采用注入方式。Page控件可以使用注入方式,直接调用:
  1. [Description("角色管理")] // 此处为菜单选择注释
  2. public partial class SysRolePage : UserControl
  3. {
  4.     private readonly IFreeSql fsql;
  5.     private readonly MenuService menuService;
  6.     public SysRolePage(IFreeSql fsql, MenuService menuService)
  7.     {
  8.         this.fsql = fsql;
  9.         this.menuService = menuService;
  10.         InitializeComponent();
  11.         this.adminTable1.SetColumns<SysRole>();
  12.         this.adminTable1.Query();
  13.         InitMenuItem();
  14.         this.adminTable1.CellClick += AdminTable1_CellClick;
  15.     }
  16. }
复制代码
AdminTable

封装控件 AdminTable 只需要一行代码即可实现一个表的增删改查。
7.png
  1. this.adminTable1.SetColumns<SysRole>();
  2. [Index($"index_{nameof(SysRole)}_{nameof(RoleName)}", nameof(RoleName), true)]
  3. public class SysRole
  4. {
  5.     /// <summary>
  6.     /// 获得/设置 角色名称
  7.     /// </summary>
  8.     [DisplayName("角色名称")]
  9.     [Col] // 自动编辑功能,需要在属性上面加上 Col 特性
  10.     [Key]
  11.     public string? RoleName { get; set; }
  12.     /// <summary>
  13.     /// 获得/设置 角色描述
  14.     /// </summary>
  15.     [DisplayName("角色描述")]
  16.     [Col]
  17.     public string? Description { get; set; }
  18. }
复制代码
1、自定义构建列
  1. this.adminTable1.SetColumn<SysMenuDto>()
  2.     .Add(a => a.Name, 288, c => c.SetTree(nameof(SysMenuDto.Childs)))
  3.     .Add(a => a.Code)
  4.     .Add(a => a.ParentCode)
  5.     .Add(a => a.OrderNo)
  6.     .Add(a => a.IconImage)
  7.     .Add(a => a.MenuType)
  8.     .Add(a => a.Description)
  9.     .Add(a => a.ControlType);
复制代码
2、查询数据
  1. this.adminTable1.QueryData = async e =>
  2. {
  3.     e.IsExpand = true;
  4.     return await fsql.Select<SysMenuDto>()
  5.         .WhereIf(!string.IsNullOrWhiteSpace(e.QueryText), a => a.Name.Contains(e.QueryText))
  6.         .ToTreeList();
  7. };
  8. this.adminTable1.Query(); // 手动执行查询
复制代码
8.png

字典管理

支持增删改查操作。
9.png

菜单管理

支持增删改查、页面控件、自定义样式。开发中无需考虑 new,可以使用注入方式,在构造函数中使用:
  1. public partial class UserControlTestTable : UserControl
  2. {
  3.     public UserControlTestTable(IFreeSql fsq1)
  4.     {
  5.         InitializeComponent();
  6.         adminTable1.SetColumns<SysDict>();
  7.     }
  8. }
  9. // 需要提前注入,若是采用插件方式开发,此处可以调用外部插件直接注入dll文件
  10. App.Run(services =>
  11. {
  12.     services.AddControlServices(Assembly.GetExecutingAssembly());
  13. }, true);
复制代码
完成注入后即可在菜单中选中使用。
10.png

11.png

角色管理

支持增删改查及权限分配。
12.png

用户管理

支持增删改查、角色分配、密码重置。
13.png

用户信息设置

支持更改密码、修改图像,图像存储在SQL中。
14.png

封装组件演示

1、前后端分离增删改查
2、图像选择组件
3、字典选择组件
4、上传功能集成组件
5、下载功能集成组件
6、Model编辑组件
7、双向绑定
8、Auth组件(按钮权限)
注意:前后分离通用查询方式虽然方便,但出于安全考虑,不集成在 AdminTable。若需要使用,只要替换增删改查代码即可。
1、查询数据
需要提供类型、搜索内容、页码、单页数:
  1. var client = new ApiClient();
  2. var res = await client.GetListAsync(typeof(SysDict), "", true, 1, 5);
  3. this.table1.DataSource = res.Data;
复制代码
2、更新数据
  1. var client = new ApiClient();
  2. var res = client.UpdateObject(item);
  3. await RefreshDataAsync();
复制代码
3、删除数据
  1. var client = new ApiClient();
  2. var res = client.DeleteObject(item);
  3. await RefreshDataAsync();
复制代码
4、插入数据
  1. var client = new ApiClient();
  2. var res = client.InsertObject(item);
  3. await RefreshDataAsync();
复制代码
Model编辑组件

使用方式:
  1. this.modelEditControl1.GetItemBuilder(value)
  2.     .Add(a => a.Color)
  3.     .Add(a => a.Name)
  4.     .Add(a => a.CreateTime)
  5.     .Add(a => a.Image)
  6.     .Add(a => a.KK)
  7.     .Add(a => a.Dict)
  8.     .Add(a => a.KKd)
  9.     .Add(a => a.Typ)
  10.     .Add(a => a.TestEditControlTest, content: new TestEditControl())
  11.     .Add(a => a.Check);
复制代码
更新数据:
  1. this.modelEditControl1.Model = obj;
复制代码
Auth组件(按钮权限)

在设计页面拖入 Auth 控件,然后点击按钮,按钮上就会多一个权限属性。
15.png

16.png

AdminTable 增删改权限设置方法:
  1. this.auth1.SetAuth(this.adminTable1, "useradmin");
  2. // 菜单中请设置权限 useradmin:edit,useradmin:delete,useradmin:add
复制代码
17.png

项目源码

Gitee:https://gitee.com/AntdUI/wen-antd-ui
总结

WenAntdUI框架基于AntdUI,集成了多种实用功能,通过简洁的集成方式和丰富的组件库,为开发者提供了一站式的管理后台开发解决方案。不管是初始化与登录、项目结构与启动、数据演示与配置,还是功能集成与组件使用,WenAntdUI都表现出了极高的易用性和灵活性。对于希望快速开发管理后台系统的团队来说,WenAntdUI无疑是一个值得尝试的选择。
最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
18.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册