diff --git a/README.md b/README.md index 2cbb281b0b1fa347689a0c48c63dafbdd996b45e..085732f5c732124e8dbfe9e97714bc82f9077c18 100644 --- a/README.md +++ b/README.md @@ -1,357 +1,116 @@ -# WenAntdUI - -控件使用了AntdUI https://gitee.com/AntdUI/AntdUI - -### 首次运行会自动初始化Sqlite 在运行目录下创建一个 data.db -## 首次登录账户:admin 密码:admin - - -| 功能 | 状态 | -| :------: | :---: | -| 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) +# WenAntdUI -[def]: Image/PixPin_2025-04-17_14-59-28.png +WenAntdUI 是一个基于 .NET 的 WinForms 开发框架,它提供了一套完整的管理系统基础功能,帮助开发者快速构建企业级桌面应用程序。 + +## 特性 + +- **Sqlite 初始化**:首次运行项目时,系统会自动在运行目录下初始化一个名为 `data.db` 的 Sqlite 数据库。 +- **用户认证**:默认登录账户为 `admin`,密码为 `admin`。 +- **基础功能模块**: + - 字典管理 + value => header.Icon = value; - 菜单管理 + - 角色管理 + - 用户管理 + - 文件管理 +- **封装组件**: + - AdminTable(表格管理) + - Auth(按钮权限) + - ModelEdit(模型编辑) + - DictSelect(字典选择) + - UserInfo(用户信息) + - MenuControlTypeSelect(菜单控件类型选择) + +## 使用说明 + +### 登录信息 +首次登录账户为 admin,密码为 admin。 + +### 数据库 +系统使用 Sqlite 作为默认数据库,数据库文件名为 data.db,位于运行目录下。你也可以通过配置文件更改数据库类型(支持 SQL Server �://wenantd-ui-dotnet.com")] +- [Gitee 仓库](https://gitee.com/wenantd-ui-dotnet/wenantd-ui) + +## 加密与安全 +加密解密功能由 AesRsaHelp 类实现,位于 Wen.Core.Helps 命名空间。出于安全考虑,通用查询功能默认不集成在 AdminTable 中,若需要使用,替换相应的增删改查代码即可。 + +## 功能演示 +- 数据管理:支持查询、更新、删除、插入数据。 +- 封装组件:演示了如何使用封装组件进行开发。 +- 数据绑定:支持与数据库实体类的绑定。 + +## 示例代码 +- **Form1.cs**:演示了如何使用 WenAntdUI 的基础控件。 +- **TableTest.cs**:展示了数据表格与绑定源的使用。 +- **SysUserPage.cs**:实现了用户管理页面。 +- **SysDictPage.cs**:实现了字典管理页面。 +- **SysRolePage.cs**:实现了角色管理页面。 +- **UserInfoPage.cs**:实现了用户信息设置页面。 + +## 贡献指南 +欢迎贡献代码和提出建议。请在 Gitee 上提交 Pull Request 和 Issues。 + +## 许可证 +本项目遵循 MIT 许可证,详情请参阅 LICENSE 文件。 + +## 图像资源 +部分图像资源位于 Image 目录,用于界面演示和图标显示。 + +## 相关项目 +- Wen.GrpcService:gRPC 服务模块。 +- Wen.Models:数据模型定义。 +- Wen.Core:核心功能模块。 +- WebServer:Web API 服务模块。 + +## 配置 +配置文件位于 WenAntdUI 项目下的 appsettings.json 和 appsettings.Development.json。 + +## 构建 +- 使用 .NET SDK 进行构建。 +- 配置文件构建路径为 WenAntdUI.csproj。 + +## 依赖注入 +通过 WenAntdUI.Extensions.ControlServiceHelpExtension 添加控制服务。 + +## 用户界面 +- 使用 AntdUI 作为 UI 控件库。 +- 提供了多样的表单和控件,如 MenuForm, WenForm, SettingsForm �://wenantd-ui-dotnet.com")] +- [Gitee 仓库](https://gitee.com/wenantd-ui-dotnet/wenantd-ui) + +## 加密与安全 +加密解密功能由 AesRsaHelp 类实现,位于 Wen.Core.Helps 命名空间。出于安全考虑,通用查询功能默认不集成在 AdminTable 中,若需要使用,替换相应的增删改查代码即可。 + +## 功能演示 +- 数据管理:支持查询、更新、删除、插入数据。 +- 封装组件:演示了如何使用封装组件进行开发。 +- 数据绑定:支持与数据库实体类的绑定。 + +## 示例代码 +- **Form1.cs**:演示了如何使用 WenAntdUI 的基础控件。 +- **TableTest.cs**:展示了数据表格与绑定源的使用。 +- **SysUserPage.cs**:实现了用户管理页面。 +- **SysDictPage.cs**:实现了字典管理页面。 +- **SysRolePage.cs**:实现了角色管理页面。 +- **UserInfoPage.cs**:实现了用户信息设置页面。 + +## 贡献指南 +欢迎贡献代码和提出建议。请在 Gitee 上提交 Pull Request 和 Issues。 + +## 许可证 +本项目遵循 MIT 许可证,详情请参阅 LICENSE 文件。 + +## 图像资源 +部分图像资源位于 Image 目录,用于界面演示和图标显示。 + +## 相关项目 +- Wen.GrpcService:gRPC 服务模块。 +- Wen.Models:数据模型定义。 +- Wen.Core:核心功能模块。 +- WebServer:Web API 服务模块。 + +## 配置 +配置文件位于 WenAntdUI 项目下的 appsettings.json 和 appsettings.Development.json。 + +## 构建 +- 使用 .NET SDK 进行构建。 +- 配置文件构建路径为 WenAntdUI.csproj。 \ No newline at end of file