復雜的業務系統中往往會集成工作流或審核流,但有些輕量及的業務系統對這些功能的需求並不大,有的系統甚至只需要審核功能就夠了。這里給大家介紹在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通用審核流設計方式已經結束完畢,審核流在業務系統中也是比較復雜的設計,所以這里給大家提供的是設計思路,詳細的業務代碼還是要看實際需求。希望大家看完有所啟發,如果有不太明白的可以在下方留言,我會詳細解答。