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


    复杂的业务系统中往往会集成工作流或审核流,但有些轻量及的业务系统对这些功能的需求并不大,有的系统甚至只需要审核功能就够了。这里给大家介绍在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通用审核流设计方式已经结束完毕,审核流在业务系统中也是比较复杂的设计,所以这里给大家提供的是设计思路,详细的业务代码还是要看实际需求。希望大家看完有所启发,如果有不太明白的可以在下方留言,我会详细解答。

  • 相关阅读:
    [转]flash builder 4 编译器参数
    三种简洁的经典高效的DIV+CSS制作的Tab导航简析
    《api解读》第三期
    AS3中的条件编译
    比较少见的绘制虚线的方法
    一个关于SharedObject存储位置的讨论
    《api解读》写在前面的话
    wampserver配置本地测试环境_虚拟主机实现多站点
    AS3中的正则表达式 Flex正则表达式
    Flixel引擎学习笔记
  • 原文地址:https://www.cnblogs.com/william-xu/p/11133978.html
Copyright © 2020-2023  润新知