Asp.Net Zero轻量级审核流设计

时间:2022-08-31 14:59:09

复杂的业务系统中往往会集成工作流或审核流,但有些轻量及的业务系统对这些功能的需求并不大,有的系统甚至只需要审核功能就够了。这里给大家介绍在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
}

 审核流显示效果,新增单据和没有权限时审核、作废功能应该禁用,也可以改为隐藏

Asp.Net Zero轻量级审核流设计

已审核的单据在分配权限的情况下应该具备查看、删除、作废操作

Asp.Net Zero轻量级审核流设计

未审核的单据在分配权限的情况下应该具备编辑、删除、审核

Asp.Net Zero轻量级审核流设计

 实现如下:

在新增修改组件按钮组中加入审核按钮

        <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通用审核流设计方式已经结束完毕,审核流在业务系统中也是比较复杂的设计,所以这里给大家提供的是设计思路,详细的业务代码还是要看实际需求。希望大家看完有所启发,如果有不太明白的可以在下方留言,我会详细解答。