Stories

Detail Return Return

一行代碼快速開發 AntdUI 風格的 WinForm 通用後台框架 - Stories Detail

前言

在快速迭代的軟件開發環境中,如何高效地開發一個功能完整、界面美觀的 WinForm 管理系統,是許多開發者面臨的現實問題。今天推薦一款基於 Ant Design 設計語言的 WinForm UI 框架,它通過深度封裝和現代化設計,徹底改變了傳統 WinForm 應用的開發模式。大家無需再為繁瑣的基礎設施代碼所困擾,只需聚焦核心業務邏輯,能夠用極簡的方式快速搭建企業級桌面應用。

項目介紹

WenAntdUI 項目的主要模塊及其對應的功能説明,涵蓋了從示例測試到核心應用的各個組成部分,便於大家瞭解項目結構和功能分佈。

項目結構具體如表所示:

內部運行集成:一行代碼搞定一個完整的管理系統基礎功能

項目功能

AOT發佈:支持AOT(Ahead-of-Time)編譯發佈,提升應用性能。

字典管理:提供增刪改查功能,方便管理系統中的各類字典數據。

用户管理:支持用户的增刪改查、角色分配和密碼重置。

菜單管理:實現菜單的增刪改查,支持自定義頁面控件和樣式。

權限管理:精細的權限控制,確保系統的安全性。

用户設置:允許用户更改密碼和修改圖像,圖像存儲在SQL中。

項目説明

初次運行與登錄

首次運行WenAntdUI時,它會自動初始化一個Sqlite數據庫,並在運行目錄下創建data.db文件。可以使用默認的登錄賬户admin和密碼admin快速進入系統,開始體驗各項功能。

集成啓動方式

應用WenAntdUI,可以使用頂級語句:

App.Run(); // 只需要此代碼即可啓動一個項目

// services 主要是注入服務,將項目控件注入到服務中。
App.Run(services =>
{
    services.AddControlServices(Assembly.GetExecutingAssembly());
});
// AddControlServices 內部封裝了Control注入功能,只需要傳遞程序集即可
// 很多開發項目,需要使用註冊機功能,也只需要在 App.Run修改,即可擁有一個完整的註冊機功能,硬件信息生成唯一註冊碼
App.Run(services =>
{
    services.AddControlServices(Assembly.GetExecutingAssembly());
}, true); // 此處增加參數

加密解密

加密解密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<SysRole>();
        this.adminTable1.Query();

        InitMenuItem();

        this.adminTable1.CellClick += AdminTable1_CellClick;
    }
}

AdminTable

封裝控件 AdminTable 只需要一行代碼即可實現一個表的增刪改查。

this.adminTable1.SetColumns<SysRole>();

[Index($"index_{nameof(SysRole)}_{nameof(RoleName)}", nameof(RoleName), true)]
public class SysRole
{
    /// <summary>
    /// 獲得/設置 角色名稱
    /// </summary>
    [DisplayName("角色名稱")]
    [Col] // 自動編輯功能,需要在屬性上面加上 Col 特性
    [Key]
    public string? RoleName { get; set; }

    /// <summary>
    /// 獲得/設置 角色描述
    /// </summary>
    [DisplayName("角色描述")]
    [Col]
    public string? Description { get; set; }
}

1、自定義構建列

this.adminTable1.SetColumn<SysMenuDto>()
    .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);

2、查詢數據

this.adminTable1.QueryData = async e =>
{
    e.IsExpand = true;
    return await fsql.Select<SysMenuDto>()
        .WhereIf(!string.IsNullOrWhiteSpace(e.QueryText), a => a.Name.Contains(e.QueryText))
        .ToTreeList();
};
this.adminTable1.Query(); // 手動執行查詢

字典管理

支持增刪改查操作。

菜單管理

支持增刪改查、頁面控件、自定義樣式。開發中無需考慮 new,可以使用注入方式,在構造函數中使用:

public partial class UserControlTestTable : UserControl
{
    public UserControlTestTable(IFreeSql fsq1)
    {
        InitializeComponent();
        adminTable1.SetColumns<SysDict>();
    }
}
// 需要提前注入,若是採用插件方式開發,此處可以調用外部插件直接注入dll文件
App.Run(services =>
{
    services.AddControlServices(Assembly.GetExecutingAssembly());
}, true);

完成注入後即可在菜單中選中使用。

角色管理

支持增刪改查及權限分配。

用户管理

支持增刪改查、角色分配、密碼重置。

用户信息設置

支持更改密碼、修改圖像,圖像存儲在SQL中。

封裝組件演示

1、前後端分離增刪改查

2、圖像選擇組件

3、字典選擇組件

4、上傳功能集成組件

5、下載功能集成組件

6、Model編輯組件

7、雙向綁定

8、Auth組件(按鈕權限)

注意:前後分離通用查詢方式雖然方便,但出於安全考慮,不集成在 AdminTable。若需要使用,只要替換增刪改查代碼即可。

1、查詢數據

需要提供類型、搜索內容、頁碼、單頁數:

var client = new ApiClient();
var res = await client.GetListAsync(typeof(SysDict), "", true, 1, 5);
this.table1.DataSource = res.Data;

2、更新數據

var client = new ApiClient();
var res = client.UpdateObject(item);
await RefreshDataAsync();

3、刪除數據

var client = new ApiClient();
var res = client.DeleteObject(item);
await RefreshDataAsync();

4、插入數據

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.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 控件,然後點擊按鈕,按鈕上就會多一個權限屬性。

AdminTable 增刪改權限設置方法:

this.auth1.SetAuth(this.adminTable1, "useradmin");
// 菜單中請設置權限 useradmin:edit,useradmin:delete,useradmin:add

項目源碼

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

總結

WenAntdUI框架基於AntdUI,集成了多種實用功能,通過簡潔的集成方式和豐富的組件庫,為開發者提供了一站式的管理後台開發解決方案。不管是初始化與登錄、項目結構與啓動、數據演示與配置,還是功能集成與組件使用,WenAntdUI都表現出了極高的易用性和靈活性。對於希望快速開發管理後台系統的團隊來説,WenAntdUI無疑是一個值得嘗試的選擇。

最後

如果你覺得這篇文章對你有幫助,不妨點個贊支持一下!你的支持是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號[DotNet技術匠] 社區,與其他熱愛技術的同行一起交流心得,共同成長!

user avatar u_9849794 Avatar leoyi Avatar ligaai Avatar shumile_5f6954c414184 Avatar eolink Avatar yian Avatar buildyuan Avatar aipaobudeshoutao Avatar dalideshoushudao Avatar wnhyang Avatar chaoxi_67109d31bc42f Avatar cbuc Avatar
Favorites 58 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.