复杂的业务系统中往往会集成工作流或审核流,但有些轻量及的业务系统对这些功能的需求并不大,有的系统甚至只需要审核功能就够了。这里给大家介绍在Asp.Net Zero中通用轻量及审核流设计,功能具备审核权限、修改权限、查看权限等。
通用的审核流是在业务表中添加审核字段来实现,审核字段如下:
/// <summary> /// 单据状态 /// </summary> public short State { get; set; }
系统中该字段统一为short类型,State定义在系统的枚举中:
public enum State { /// <summary> /// 新单 /// </summary> New=1, /// <summary> /// 已审核 /// </summary> Checked=2, /// <summary> /// 作废 /// </summary> Cancel=3 }
审核权限、数据权限都应该根据该枚举判断。字段和枚举添加完成后开始为业务模块增加审核功能,普通的业务模块通常只需要CRUD接口,而需要审核和数据权限的业务模块应该添加审核和作废接口。
普通业务模块,档案、字典等模块应该具备的接口如下:
public interface IAreaManagerAppService: IApplicationService { Task DeleteArea(EntityDto<int> input); Task<PagedResultDto<CreateOrEditAreaInput>> GetAreas(GetAreaInput input); Task<CreateOrEditAreaInput> GetAreaForEdit(NullableIdDto<int> input); Task CreateOrUpdateArea(CreateOrEditAreaInput input); Task<ListResultDto<AreaDto>> GetAllAreaWithLevel(); }
包含审核、作废的模块接口:
public interface ISomeoneClassAppService: IApplicationService { Task CreateOrUpdate(CreateOrEditInput input); Task Delete(EntityDto<int> input); Task<PagedResultDto<Output>> Get(GetInput input); Task<CreateOrEditInput> GetForEdit(NullableIdDto<int> input); Task Check(int id); Task Cancel(int id); }
审核需要分配角色权限,所以在审核接口的实现中应该加上权限标签:
[AbpAuthorize(AppPermissions.Pages_SomeoneModule_SomeoneClass_Check)] public async Task Check(int id) { var master = await _MasterRepository.FirstOrDefaultAsync(id); if (master.State == Convert.ToInt16(State.Checked)) { throw new UserFriendlyException("单据已审核!"); } if (master.State == Convert.ToInt16(State.Cancel)) { throw new UserFriendlyException("单据已作废!"); } master.State = Convert.ToInt16(State.Checked); master.CheckerId = AbpSession.UserId.Value; await _MasterRepository.UpdateAsync(master); var details = await _DetailRepository.GetAllListAsync(_ => _.PID == master.Id);
//do something
}
审核流显示效果,新增单据和没有权限时审核、作废功能应该禁用,也可以改为隐藏
已审核的单据在分配权限的情况下应该具备查看、删除、作废操作
未审核的单据在分配权限的情况下应该具备编辑、删除、审核
实现如下:
在新增修改组件按钮组中加入审核按钮
<button type="button" class="btn btn-warning" (click)="check(data.id)" [disabled]="data.State!=1"><i class="fa fa-check"></i>审核</button> <button type="button" class="btn btn-danger" (click)="cancel(data.id)"
[disabled]="data.State!=2"><i class="fa fa-ban"></i>作废</button>
在父组件table中加入操作:
<a href="javascript:;" *ngIf="!record.isStatic && permission.isGranted('Pages.SomeoneModule.Class.Check') && record.State==1" (click)="check(record)"> 审核 </a> <a href="javascript:;" *ngIf="!record.isStatic && permission.isGranted('Pages.SomeoneModele.Class.Cancel') && record.State==2" (click)="cancel(record)"> 作废 </a>
总结:到这里Asp.Net Zero通用审核流设计方式已经结束完毕,审核流在业务系统中也是比较复杂的设计,所以这里给大家提供的是设计思路,详细的业务代码还是要看实际需求。希望大家看完有所启发,如果有不太明白的可以在下方留言,我会详细解答。