- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
使用过ABP框架的童鞋应该知道它也自带了一款免费的Blazor UI主题,它的页面是长这样的:
个人感觉不太美观,于是网上搜了很多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。已经提供了基本的功能:登录(支持多租户)、角色管理、用户管理、权限分配、租户管理、多语言切换、免费主题样式切换、侧边栏菜单等; 。
要体验更多的功能,你可以下载本项目到本地亲自体验 。
abp new CRM -u blazor-server -dbms PostgreSQL -m none --theme leptonx-lite -csf
dotnet add package AbpRadzen.Blazor.Server.UI
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组件也支持这种筛选,它会把所有列头的筛选条件最后组装成一个过滤字符串,放到了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.
最后此篇关于使用RadzenBlazor组件库开发的基于ABP框架炫酷UI主题的文章就讲到这里了,如果你想了解更多关于使用RadzenBlazor组件库开发的基于ABP框架炫酷UI主题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我刚刚开始探索 Abp 功能,我从他们的网站创建了一个示例项目并能够成功构建该项目。但是当我运行 dbmigrator 项目时出现异常,下面是错误的截图, 我按照这篇文章运行了应用 https://d
我正在尝试使用 abp.framework(版本 3)为 Entity Framework 数据库播种和 AppUser。我知道如何使用 IdentityUserManager 为 IdentityU
我使用具有商业许可的 abp 套件生成了一个 MVC 项目。它有默认的 Lepton 主题,但我想切换到基本主题,因为它更容易定制。 最佳答案 安装 Volo.Abp.AspNetCore.Mvc.U
我使用具有商业许可的 abp 套件生成了一个 MVC 项目。它有默认的 Lepton 主题,但我想切换到基本主题,因为它更容易定制。 最佳答案 安装 Volo.Abp.AspNetCore.Mvc.U
在我的公司,我们使用全新的 Abp 框架 (abp.io)。由于它是一个新框架,因此缺少很多文档,因此我们必须搜索源代码。看了这么多代码,我意识到这是他们使用的模式,总是出现 Providers、Pr
1. 事件总线 在我们的一个应用中,经常会出现一个逻辑执行之后要跟随执行另一个逻辑的情况,例如一个用户创建了后续还需要发送邮件进行通知,或者需要初始化相应的权限等。面对这样的情况,我们当然可以
ABP框架 ABP是用于创建现代化Web应用程序的完整体系结构和强大的基础架构,以模块化的方式进行开发,所有模块以nuget包的方式提供,开箱即用,遵循最佳实践和约定,提供 SOLID 开
Abp是一个基于模块化开发的应用程序框架,提供了模块化基础的架构和模块化加载的引擎。 理解模块 一个模块是对一个功能点的封装,可以独立成为一个包,实现了松耦合的代码组织方式。A
Abp.NHibernate动态库连接PostgreSQl数据库,供大家参考,具体内容如下 初次接触Abp框架,其框架中封装的操作各类数据的方法还是很好用的,本人还在进一步的学习当中,并将利用ab
在apb-vnext的实体的创建中可以确实字段的长度、说明、对应的表、表中给字段加的索引 以项目中的订单表为例,如下: [Comment("订单主表")] [Tabl
我不能完全理解在什么情况下我会使用 DomainService 和在这种情况下你的文件不详细在这个问题上足够了。你能给出更详细的解释吗举个例子? 如果我只使用 ApplicationService 而
1. 缓存模块源码解析 个人觉得 ABP 分布式缓存模块有三个值得关注的核心点。首先是 AbpRedisCache 类继承了微软原生的 RedisCache,并 通过反射的方式获取RedisC
依赖注入的使用 构造方法注入 这是将服务注入类的最常用方法,是将依赖项注入类的首选方式,也是微软推崇的模式。这样,除非提供了所有构造方法注入的依赖项,否则无法构造类,显示的声明了类必需的服
1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching ,而对于分布式缓存的支持,abp 官方提供了基于 Redis 的方案,需要安装
依赖注入实现了系统之间、模块之间和对象之间依赖关系的解耦,基本上是现代应用程序框架必不可少的一个组成部分。 ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microso
默认情况下,AbpUserRole 和AbpRole 实现ISoftDelete。是否可以禁用它? 我试着这样做: [AbpAuthorize(AppPermissions.Pages_Adminis
默认情况下,AbpUserRole 和AbpRole 实现ISoftDelete。是否可以禁用它? 我试着这样做: [AbpAuthorize(AppPermissions.Pages_Adminis
我在构建网站时了解到客户想要 2 个 300x250 的广告和 1 个 728x90 的广告。我已经使用以下 HTML 将这些添加到设计中: 这很好用。我添加
我有一个具有一些可选关系的实体,我正在执行 GetAllIncluding(someProperties),但是当 GetAll 完成时,导航属性保持为 null。 include (Cliente,
为了回应被搁置的问题,我修改了我的问题。希望这能更好地符合 SO 标准。 该程序的目的是构建和发送使用交替位协议(protocol)作为简单重发机制的 UDP 数据包。我已经确认数据包可以正确发送和接
我是一名优秀的程序员,十分优秀!