首页 > 其他分享 >使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题

使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题

时间:2024-10-22 15:10:46浏览次数:7  
标签:Abp Radzen 代码 ABP 炫酷 UI Blazor options 页面

一、项目简介

使用过ABP框架的童鞋应该知道它也自带了一款免费的Blazor UI主题,它的页面是长这样的:
image

个人感觉不太美观,于是网上搜了很多Blazor开源组件库,发现有一款样式非常不错的组件库,名叫:Radzen,它的组件库案例网址是:Sample Blazor Dashboard | Free UI Components by Radzen,比较符合我的审美,于是使用它开发了基于ABP框架的UI主题,项目名称叫Abp.RadzenUI,已在Github上开源:GitHub - ShaoHans/Abp.RadzenUI: Abp RadzenUI is a UI theme built on the Abp framework and developed using the Radzen Blazor component,欢迎大家star。已经提供了基本的功能:登录(支持多租户)、角色管理、用户管理、权限分配、租户管理、多语言切换、免费主题样式切换、侧边栏菜单等;

二、UI展示

1.登录页面,支持多租户的切换登录

image

2.用户列表

image

3.权限分配

image

4.支持多语言切换

image

5.支持多主题切换

image

要体验更多的功能,你可以下载本项目到本地亲自体验

三、如何使用

  1. 使用ABP CLI工具创建一个新的Abp Blazor Server应用,例如项目名称叫CRM
    abp new CRM -u blazor-server -dbms PostgreSQL -m none --theme leptonx-lite -csf
  2. 在CRM.Blazor项目安装AbpRadzen.Blazor.Server.UI包
    dotnet add package AbpRadzen.Blazor.Server.UI
  3. 移除CRM.Blazor项目中与leptonx-lite主题相关的nuget包和代码
    主要是 CRMBlazorModule 类中的代码需要精简,可以参考示例项目中的CRMBlazorWebModule.cs文件代码,你可以直接将它的代码覆盖你的代码;
    然后删除Pages目录中自带的razor页面文件。
  4. 对 Abp RadzenUI 进行配置
    将 ConfigureAbpRadzenUI 方法添加到ConfigService方法中
private void ConfigureAbpRadzenUI()
{
    // Configure AbpRadzenUI
    Configure<AbpRadzenUIOptions>(options =>
    {
        // 这句代码很重要,它会将你在Blazor Web项目中新建的razor页面组件添加到Router中,这样就可以访问到了
        options.RouterAdditionalAssemblies = [typeof(Home).Assembly];

        // 配置页面标题栏
        //options.TitleBar = new TitleBarSettings
        //{
        //    ShowLanguageMenu = false, // 是否显示多语言按钮菜单
        //    Title = "CRM" // 标题栏名称:一般是系统名称
        //};
        //options.LoginPage = new LoginPageSettings
        //{
        //    LogoPath = "xxx/xx.png" // 登录页面的logo图片
        //};
        //options.Theme = new ThemeSettings
        //{
        //    Default = "material",
        //    EnablePremiumTheme = true,
        //};
    });

    // 多租户配置, 这个会影响到登录页面是否展示租户信息
    Configure<AbpMultiTenancyOptions>(options =>
    {
        options.IsEnabled = MultiTenancyConsts.IsEnabled;
    });

    // Configure AbpLocalizationOptions
    Configure<AbpLocalizationOptions>(options =>
    {
        // 配置多语言资源,需要继承AbpRadzenUIResource,它包含了需要用到的多语言信息
        var crmResource = options.Resources.Get<CRMResource>();
        crmResource.AddBaseTypes(typeof(AbpRadzenUIResource));

        // 配置多语言菜单中显示的语言
        options.Languages.Clear();
        options.Languages.Add(new LanguageInfo("en", "en", "English"));
        options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
        options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
    });

    // 配置侧边栏菜单
    Configure<AbpNavigationOptions>(options =>
    {
        options.MenuContributors.Add(new CRMMenuContributor());
    });
}

最后在OnApplicationInitialization方法的最后添加以下代码,使用RadzenUI

app.UseRadzenUI();

关于更多的配置可以参考本项目的示例代码:Abp.RadzenUI/samples/CRM.Blazor.Web/CRMBlazorWebModule.cs at main · ShaoHans/Abp.RadzenUI · GitHub
5. 配置侧边栏菜单
当你添加了新的razor页面组件后,需要在CRMMenuContributor类文件中进行配置,这样它就会显示在页面的侧边栏菜单中

四、添加自己的页面

比如你现在要做一个商品管理的增删改查功能,你只要定义一个IProductAppService接口并继承ABP的ICrudAppService接口:
public interface IProductAppService : ICrudAppService<ProductDto, Guid, GetProductsInput, CreateProductDto, UpdateProductDto> { }
然后实现IProductAppService接口:

public class ProductAppService
    : CrudAppService<
        Product,
        ProductDto,
        Guid,
        GetProductsInput,
        CreateProductDto,
        UpdateProductDto
    >,
        IProductAppService{}

一个简单的增删改查业务代码就搞定了,而且接口带了权限验证,完全不用写那么多代码,当然一些其他业务逻辑也可以通过override的方式去实现。
接下来就是增加产品的列表页面,razor页面需要继承下面这个组件:
@inherits AbpCrudPageBase<IProductAppService, ProductDto, Guid, GetProductsInput, CreateProductDto, UpdateProductDto>
这个组件将CRUD的代码都实现了,你只需要编写DataGrid显示列的代码,以及创建产品、编辑产品弹框的代码,强烈建议你把项目代码下载下来学习一下,实现一个后台管理系统真的太简单了。

五、RadzenDataGrid的过滤功能介绍

列表页面都有下面类似的筛选功能:
image

RadzenDataGrid组件也支持这种筛选,它会把所有列头的筛选条件最后组装成一个过滤字符串,放到了LoadDataArgs类的Filter参数中,这个过滤字符串类似这样:
(Name == null ? "" : Name).Contains("App") and StockCount < 10000 and Status = 0
你的查询接口只需要定义一个Filter属性接受这个字符串,通过这个字符串就能查到数据,当然这得归功于强大的工具包:Microsoft.EntityFrameworkCore.DynamicLinq,感兴趣的可以去查阅资料学习一下。

protected override async Task<IQueryable<Product>> CreateFilteredQueryAsync(
    GetProductsInput input
)
{
    var query = await base.CreateFilteredQueryAsync(input);

    /*
     在 CRM.EntityFrameworkCore 项目上安装包: Microsoft.EntityFrameworkCore.DynamicLinq
     然后引用命名空间 : using System.Linq.Dynamic.Core;
     Dynamic LINQ会自动将过滤字符串转成动态查询表达式
     */
    if (!string.IsNullOrEmpty(input.Filter))
    {
        query = query.Where(input.Filter);
    }

    return query;
}

六、总结

以上就是对我这个开源项目(https://github.com/ShaoHans/Abp.RadzenUI)简单介绍,如果你熟悉ABP且希望使用它开发一个后台管理系统,不妨一试,有什么问题欢迎大家提issue。

标签:Abp,Radzen,代码,ABP,炫酷,UI,Blazor,options,页面
From: https://www.cnblogs.com/chuandao/p/18491215

相关文章

  • ABP VNext 系列:框架启动流程以及依赖注入原理和源码分析
    简单介绍ABPVNextGithub地址:https://github.com/abpframework/abp官网文档地址:https://abp.io/docs/latest官网:https://abp.io/ABPVNext框架是一个基于ASP.NETCore的完整基础架构,也就是我们现在称的ABP框架,它遵循软件开发最佳实践和最新技术来创建现代Web应用程......
  • Vite和Wabpack进行打包项目
    问题:首先,咱们为什么要打包?答案:打包(Packaging)是软件开发中的一个重要步骤,主要目的是将开发好的代码和依赖项打包成一个可分发和运行的格式。关键原因:依赖管理、环境隔离、便于分发、版本控制、安全性、性能优化、部署简化在不同的编程语言和框架中,打包工具和方法可能会有所不......
  • Abp 使用app.UseStaticFiles配置静态文件中间件以达到创建虚拟路径
    若访问项目文件wwwroot以外的其他静态文件使用如下方式访问1.配置文件中配置路径(appsetting)"App":{"ServerRootAddress":"https://localhost:44301/","ClientRootAddress":"https://localhost:4200/","CorsOrigins":"......
  • C# Winform 如何查找TabControl中某个tabPage
    在C#WinForms应用程序中,如果你需要查找TabControl中的某个特定TabPage,可以使用多种方法来实现。以下是一些常见的方法:方法1:通过索引查找如果你知道TabPage的索引位置,可以直接使用TabControl的TabPages集合来获取它。Csharp深色版本//假设我们知道TabPage......
  • ABP CLI积累与实战分享
    ......
  • 打造民国风格炫酷个人网页:用HTML和CSS3传递民国风韵
    附源码!!!感谢支持小弟不断创作网站demo感兴趣的可以关注支持一下对了俺在结尾带上了自己用的背景大家可以尝试换一下效果更好哦~~~如何创建一个民国风格的炫酷网页在这篇博客中,我们将展示如何制作一个结合民国风格和现代设计元素的网页。这个网页不仅展现了古典魅力,......
  • ABP Framework Consuming HTTP APIs from a .NET Client
    1、AddBookStore_AppsectionintBookStore.DbMigrator\appsettings.json"BookStore_App":{"ClientId":"BookStore_App","ClientSecret":"1q2w3e*","RootUrl":"https://localhost:44333&qu......
  • 梦熊第二届省选挑战赛 T2 炫酷原神 genshin 唐氏记录
    需要复制一段文字,具体来说给定一个字符串si,然后你有一个剪贴板,初始为空,和一个初始为空的字符串t,然后对于所有1到n的i,小水母会依次进行如下操作:"Ctrl+C"操作,将剪贴板的内容修改为si。"Ctrl+V"操作,将剪贴板的内容添加到t末尾。每次"Ctrl+C"操作和"Ctrl+......
  • abp vnext请求头增加,以及请求头增加公共头部回调
    context.Services.AddHttpContextAccessor();要访问请求头的话,要加上这个语句;追加请求头的方法:1、服务层服务的HttpApi.Client项目Module类的ConfigureServices方法开头位置添加如下代码:context.Services.AddTransient<AddHeaderHandler>();context.Services.AddHttpClient(Prod......
  • Abp vNext+SignalR
    我的项目基于ABPvNext(版本8.2.0)+Blazor+SQLServer。从官网下载的模板默认不包含SignalR,因此这里记录了如何在ABPvNext中集成SignalR实现实时通信的过程。以下是一个详细的集成步骤指南:1.安装所需的NuGet包官方文档:https://abp.io/docs/latest/framework/rea......