具体入门与开发原理可参考此地址
https://blog.csdn.net/wulex/article/category/7256369/3
abp入门系列
https://www.jianshu.com/p/a6e9ace79345
我们以通知公告为示例
- 首先我们有一个公告信息的表结构,如下,像是否删除、新增时间等七个字段只需要继承FullAuditedEntity类即可
项目目录位置,在Domain/Plat建立NoticeItems目录,以类+s设置文件夹。
TelSCode.Domain.Plat.NoticeItems 此命名空间下的类如下,
public class NoticeItem : FullAuditedEntity |
在此文件夹下把相关权限配置好
具体配置如下
数据以树的形式存放,公告信息这个菜单放到基础资料管理下,TypeCode为permission时,在菜单下不展示,是菜单下的权限配置,EnCode不能出现重复值,修改菜单时应在此位置修改对应的文字与排序方式、地址。如果是图标,将不自动更新。
new SysMenu { DisplayName = "公告信息管理", Icon = "icon-standard-date-add", EnCode = "Plat.NoticeItem", LinkUrl = "/Plat/NoticeItem/Index", TypeCode = menu, SortCode = 20 , |
然后在EntityFramework的TelSCodeDbContext中增加一行
public virtual IDbSet<NoticeItem> NoticeItem { get; set; } |
在Application的Plat区域增加NoticeItems文件夹,我们以类名后缀加s建立文件夹,
NoticeItemInput.cs文件夹,一般情况下只需要将NoticeItem中的字段复制过来即可
[AutoMap(typeof(NoticeItem))] |
NoticeItemListDto 为列表上展示的数据字段
[AutoMapFrom(typeof(NoticeItem))] |
NoticeItemSearchDto为查询条件,继承PageDto即可,需要增加查询条件,则在此类中增加对应的属性。
public class NoticeItemSearchDto : PageDto |
INoticeItemAppService .cs文件 夹
public interface INoticeItemAppService : IUsualCrudAppService<NoticeItemInput, NoticeItemSearchDto, NoticeItemInput, int> |
NoticeItemAppService.cs文件,一般情况下,此类继承UsualCrudAppService,继承接口INoticeItemAppService,即可拥有增、删、改、查的功能,如果想自定义查询实现,需要重写父类的CreateFilteredQuery方法,由于公告信息中业务要求,有置顶和置顶时间字段,需要根据最后置顶的时间倒序取数据,所以GetGridByCondition方法需要override下,即可解决,权限配置包括二部分,一种是给父类继承的UsualCurdAppService传相应的权限编码,分别:
base.DeletePermissionName="Plat.NoticeItem.Delete"; |
在方法名上使用此权限属性配置该方法对应的权限信息。
[AbpAuthorize("Plat.NoticeItem.GetGrid")] |
调用 base.CreateOrUpdate方法时,即会判断用户是否有Plat.NoticeItem.Add权限
public class NoticeItemAppService : UsualCrudAppService<NoticeItem, NoticeItemInput, NoticeItemSearchDto, NoticeItemInput, int>, INoticeItemAppService |
NoticeItemController.cs 此类注入IAbpFileManager 去解析保存的文件,供前台编辑页面时使用。
|
公告信息因为有文件上传,所以需要新建一个NoticeItemViewModel 类
在TelSCode.Web中Plat区域Models新建文件夹NoticeItems,新建类NoticeItemViewModel.cs
[AutoMapFrom(typeof(NoticeItemInput))] |
接下来是界面,新增编辑在一个界面中,一个页面对应一个js,使用@Html.InCludeScript引用,不会有缓存问题,发布之后会生成版本号。
Index.cshtml
@using Abp.Web.Mvc.Extensions |
同目录下建一个Index.js ,我们使用闭包的形式来组织代码结构,将可配置项放在了上面,不强制要求,这里只为方便修改。使用时,将NoticeItem替换相应的类名,noticeServcice替换成相应的xxxservcie。abp.services.app.noticeItem中的noticeItem中n是首字母变成小写,这是后台生成的service,要按照此规定使用。
var gridUI = gridUI || {}; |
CreateOrUpdate.cshtml
@using Abp.Web.Mvc.Extensions |
CreateOrUpdate.js
var Img; |