ソースを参照

😎调整审批流程/数据审批相关

zuohuaijun 2 年 前
コミット
e1b6551f36
61 ファイル変更1882 行追加1340 行削除
  1. 1 0
      Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
  2. 6 6
      Admin.NET/Admin.NET.sln
  3. 23 27
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Admin.NET.Plugin.ApprovalFlow.csproj
  4. 13 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Configuration/ApprovalFlow.json
  5. 19 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Const/ApprovalFlowConst.cs
  6. 50 47
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFlow.cs
  7. 14 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Enum/FlowTypeEnum.cs
  8. 19 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs
  9. 46 45
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs
  10. 25 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/SeedData/SysMenuSeedData.cs
  11. 148 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs
  12. 88 83
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowDto.cs
  13. 147 149
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowInput.cs
  14. 88 85
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowOutput.cs
  15. 23 0
      Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Startup.cs
  16. 0 12
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/Const/FlowConst.cs
  17. 0 12
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/Enum/FlowTypeEnum.cs
  18. 0 19
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/GlobalUsings.cs
  19. 0 138
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/ApprovalFlow/ApprovalFlowService.cs
  20. 0 49
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/SysApprovalFlow/SysApprovalService.cs
  21. 0 26
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/SpeedData/SysMenuSeedData.cs
  22. 0 19
      Admin.NET/Plugins/Admin.NET.Plugin.Flow/Startup.cs
  23. 2 2
      Web/package.json
  24. 15 0
      Web/src/api-services/_approvalFlow/api.ts
  25. 66 16
      Web/src/api-services/_approvalFlow/apis/approval-flow-api.ts
  26. 70 0
      Web/src/api-services/_approvalFlow/base.ts
  27. 83 0
      Web/src/api-services/_approvalFlow/configuration.ts
  28. 18 0
      Web/src/api-services/_approvalFlow/index.ts
  29. 33 3
      Web/src/api-services/_approvalFlow/models/add-approval-flow-input.ts
  30. 16 4
      Web/src/api-services/_approvalFlow/models/admin-result-approval-flow.ts
  31. 70 0
      Web/src/api-services/_approvalFlow/models/admin-result-int64.ts
  32. 71 0
      Web/src/api-services/_approvalFlow/models/admin-result-list-approval-flow-output.ts
  33. 16 4
      Web/src/api-services/_approvalFlow/models/admin-result-sql-sugar-paged-list-approval-flow-output.ts
  34. 23 3
      Web/src/api-services/_approvalFlow/models/approval-flow-input.ts
  35. 35 3
      Web/src/api-services/_approvalFlow/models/approval-flow-output.ts
  36. 38 4
      Web/src/api-services/_approvalFlow/models/approval-flow.ts
  37. 7 3
      Web/src/api-services/_approvalFlow/models/delete-approval-flow-input.ts
  38. 11 0
      Web/src/api-services/_approvalFlow/models/index.ts
  39. 20 4
      Web/src/api-services/_approvalFlow/models/sql-sugar-paged-list-approval-flow-output.ts
  40. 35 3
      Web/src/api-services/_approvalFlow/models/update-approval-flow-input.ts
  41. 0 1
      Web/src/api-services/api.ts
  42. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelControl.vue
  43. 4 4
      Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelDataDialog.vue
  44. 1 1
      Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelNode.vue
  45. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Property/PropertyCommon.vue
  46. 4 6
      Web/src/views/approvalFlow/component/LogicFlow/Property/PropertyDialog.vue
  47. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Edges/EdgeSql.ts
  48. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeEnd.ts
  49. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeSql.ts
  50. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeStart.ts
  51. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeTask.ts
  52. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeUser.ts
  53. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/RegisterEdge.ts
  54. 0 0
      Web/src/views/approvalFlow/component/LogicFlow/Register/RegisterNode.ts
  55. 125 0
      Web/src/views/approvalFlow/component/detailDialog.vue
  56. 76 81
      Web/src/views/approvalFlow/component/editDialog.vue
  57. 12 11
      Web/src/views/approvalFlow/component/editFlowDialog.vue
  58. 102 103
      Web/src/views/approvalFlow/component/editFormDialog.vue
  59. 219 0
      Web/src/views/approvalFlow/index.vue
  60. 0 127
      Web/src/views/pages/approvalFlow/component/detailDialog.vue
  61. 0 240
      Web/src/views/pages/approvalFlow/index.vue

+ 1 - 0
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj

@@ -26,6 +26,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
+    <ProjectReference Include="..\Plugins\Admin.NET.Plugin.ApprovalFlow\Admin.NET.Plugin.ApprovalFlow.csproj" />
     <ProjectReference Include="..\Plugins\Admin.NET.Plugin.DingTalk\Admin.NET.Plugin.DingTalk.csproj" />
     <ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
     <ProjectReference Include="..\Plugins\Admin.NET.Plugin.ReZero\Admin.NET.Plugin.ReZero.csproj" />

+ 6 - 6
Admin.NET/Admin.NET.sln

@@ -26,7 +26,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.DingTalk",
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.ReZero", "Plugins\Admin.NET.Plugin.ReZero\Admin.NET.Plugin.ReZero.csproj", "{04AB2E76-DE8B-4EFD-9F48-F8D4C0993106}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.Flow", "Plugins\Admin.NET.Plugin.Flow\Admin.NET.Plugin.Flow.csproj", "{C7B66502-7083-4831-8730-40CCC96C3BB4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.ApprovalFlow", "Plugins\Admin.NET.Plugin.ApprovalFlow\Admin.NET.Plugin.ApprovalFlow.csproj", "{902A91A7-5EF0-4A63-BC2C-9B783DC00880}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -66,10 +66,10 @@ Global
 		{04AB2E76-DE8B-4EFD-9F48-F8D4C0993106}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{04AB2E76-DE8B-4EFD-9F48-F8D4C0993106}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{04AB2E76-DE8B-4EFD-9F48-F8D4C0993106}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C7B66502-7083-4831-8730-40CCC96C3BB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C7B66502-7083-4831-8730-40CCC96C3BB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C7B66502-7083-4831-8730-40CCC96C3BB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C7B66502-7083-4831-8730-40CCC96C3BB4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{902A91A7-5EF0-4A63-BC2C-9B783DC00880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{902A91A7-5EF0-4A63-BC2C-9B783DC00880}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{902A91A7-5EF0-4A63-BC2C-9B783DC00880}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{902A91A7-5EF0-4A63-BC2C-9B783DC00880}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -79,7 +79,7 @@ Global
 		{48EFC3A6-BDC0-4D05-819A-B1FB927FA4C8} = {76F70D22-8D53-468E-A3B6-1704666A1D71}
 		{F6A002AD-CF7F-4771-8597-F12A50A93DAA} = {76F70D22-8D53-468E-A3B6-1704666A1D71}
 		{04AB2E76-DE8B-4EFD-9F48-F8D4C0993106} = {76F70D22-8D53-468E-A3B6-1704666A1D71}
-		{C7B66502-7083-4831-8730-40CCC96C3BB4} = {76F70D22-8D53-468E-A3B6-1704666A1D71}
+		{902A91A7-5EF0-4A63-BC2C-9B783DC00880} = {76F70D22-8D53-468E-A3B6-1704666A1D71}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {5CD801D7-984A-4F5C-8FA2-211B7A5EA9F3}

+ 23 - 27
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Admin.NET.Plugin.Flow.csproj → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Admin.NET.Plugin.ApprovalFlow.csproj

@@ -1,27 +1,23 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>disable</Nullable>
-    <GenerateDocumentationFile>True</GenerateDocumentationFile>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
-    <NoWarn>1701;1702;1591;8632</NoWarn>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
-    <NoWarn>1701;1702;1591;8632</NoWarn>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Update="Flow.json">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-  </ItemGroup>
-</Project>
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <NoWarn>1701;1702;1591;8632</NoWarn>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Copyright>© Admin.NET</Copyright>
+    <Description>Admin.NET 通用权限开发平台</Description>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <None Update="Configuration\**">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
+  </ItemGroup>
+	
+</Project>

+ 13 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Configuration/ApprovalFlow.json

@@ -0,0 +1,13 @@
+{
+  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+  "[openapi:审批流程]": {
+    "Group": "审批流程",
+    "Title": "审批流程",
+    "Description": "对业务实体数据的增删改操作进行流程审批。",
+    "Version": "1.0.0",
+    "Order": 100
+  },
+  "ApprovalFlow": {
+  }
+}

+ 19 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Const/ApprovalFlowConst.cs

@@ -0,0 +1,19 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+/// <summary>
+/// 审批流程相关常量
+/// </summary>
+[Const("审批流程相关常量")]
+public class ApprovalFlowConst
+{
+    /// <summary>
+    /// API分组名称
+    /// </summary>
+    public const string GroupName = "审批流程";
+}

+ 50 - 47
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Entity/ApprovalFlow.cs → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFlow.cs

@@ -1,47 +1,50 @@
-using Admin.NET.Core;
-
-namespace Admin.NET.Plugin.Flow.Entity;
-
-/// <summary>
-/// 审批流信息表
-/// </summary>
-[SugarTable("ApprovalFlow", "审批流信息表")]
-public class ApprovalFlow : EntityBaseData
-{
-    /// <summary>
-    /// 编号
-    /// </summary>
-    [SugarColumn(ColumnName = "Code", ColumnDescription = "编号", Length = 32)]
-    public string? Code { get; set; }
-    
-    /// <summary>
-    /// 名称
-    /// </summary>
-    [SugarColumn(ColumnName = "Name", ColumnDescription = "名称", Length = 32)]
-    public string? Name { get; set; }
-    
-    /// <summary>
-    /// 表单
-    /// </summary>
-    [SugarColumn(ColumnName = "FormJson", ColumnDescription = "表单", Length = 0)]
-    public string? FormJson { get; set; }
-    
-    /// <summary>
-    /// 流程
-    /// </summary>
-    [SugarColumn(ColumnName = "FlowJson", ColumnDescription = "流程", Length = 0)]
-    public string? FlowJson { get; set; }
-    
-    /// <summary>
-    /// 状态
-    /// </summary>
-    [SugarColumn(ColumnName = "Status", ColumnDescription = "状态")]
-    public int? Status { get; set; }
-    
-    /// <summary>
-    /// 备注
-    /// </summary>
-    [SugarColumn(ColumnName = "Remark", ColumnDescription = "备注", Length = 255)]
-    public string? Remark { get; set; }
-    
-}
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+/// <summary>
+/// 审批流程信息表
+/// </summary>
+[SugarTable(null, "审批流程信息表")]
+public class ApprovalFlow : EntityBaseData
+{
+    /// <summary>
+    /// 编号
+    /// </summary>
+    [SugarColumn(ColumnName = "Code", ColumnDescription = "编号", Length = 32)]
+    public string? Code { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    [SugarColumn(ColumnName = "Name", ColumnDescription = "名称", Length = 32)]
+    public string? Name { get; set; }
+
+    /// <summary>
+    /// 表单
+    /// </summary>
+    [SugarColumn(ColumnName = "FormJson", ColumnDescription = "表单", Length = 0)]
+    public string? FormJson { get; set; }
+
+    /// <summary>
+    /// 流程
+    /// </summary>
+    [SugarColumn(ColumnName = "FlowJson", ColumnDescription = "流程", Length = 0)]
+    public string? FlowJson { get; set; }
+
+    /// <summary>
+    /// 状态
+    /// </summary>
+    [SugarColumn(ColumnName = "Status", ColumnDescription = "状态")]
+    public int? Status { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    [SugarColumn(ColumnName = "Remark", ColumnDescription = "备注", Length = 255)]
+    public string? Remark { get; set; }
+}

+ 14 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Enum/FlowTypeEnum.cs

@@ -0,0 +1,14 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+/// <summary>
+/// 流程类型枚举
+/// </summary>
+public enum FlowTypeEnum
+{
+}

+ 19 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs

@@ -0,0 +1,19 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+global using Admin.NET.Core;
+global using Furion;
+global using Furion.DependencyInjection;
+global using Furion.DynamicApiController;
+global using Furion.FriendlyException;
+global using Mapster;
+global using Microsoft.AspNetCore.Mvc;
+global using Microsoft.Extensions.DependencyInjection;
+global using SqlSugar;
+global using System;
+global using System.Collections.Generic;
+global using System.ComponentModel.DataAnnotations;
+global using System.Threading.Tasks;

+ 46 - 45
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Middleware/ApprovalFlowMiddleware.cs → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs

@@ -1,45 +1,46 @@
-// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
-//
-// 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
-
-using Admin.NET.Plugin.Flow.Service;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Http;
-
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 扩展审批流中间件
-/// </summary>
-public static class ApprovalFlowMiddlewareExtensions
-{
-    /// <summary>
-    /// 使用审批流
-    /// </summary>
-    /// <param name="builder"></param>
-    /// <returns></returns>
-    public static IApplicationBuilder UseApprovalFlow(this IApplicationBuilder builder)
-    {
-        return builder.UseMiddleware<ApprovalFlowMiddleware>();
-    }
-}
-
-/// <summary>
-/// 审批流中间件
-/// </summary>
-public class ApprovalFlowMiddleware
-{
-    private readonly RequestDelegate _next;
-
-    public ApprovalFlowMiddleware(RequestDelegate next)
-    {
-        _next = next;
-    }
-
-    public async Task Invoke(HttpContext context)
-    {
-        await App.GetService<SysApprovalService>().MatchApproval(context);
-
-        await _next.Invoke(context);
-    }
-}
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+/// <summary>
+/// 扩展审批流中间件
+/// </summary>
+public static class ApprovalFlowMiddlewareExtensions
+{
+    /// <summary>
+    /// 使用审批流
+    /// </summary>
+    /// <param name="builder"></param>
+    /// <returns></returns>
+    public static IApplicationBuilder UseApprovalFlow(this IApplicationBuilder builder)
+    {
+        return builder.UseMiddleware<ApprovalFlowMiddleware>();
+    }
+}
+
+/// <summary>
+/// 审批流中间件
+/// </summary>
+public class ApprovalFlowMiddleware
+{
+    private readonly RequestDelegate _next;
+
+    public ApprovalFlowMiddleware(RequestDelegate next)
+    {
+        _next = next;
+    }
+
+    public async Task Invoke(HttpContext context)
+    {
+        //await App.GetService<SysApprovalService>().MatchApproval(context);
+
+        await _next.Invoke(context);
+    }
+}

+ 25 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/SeedData/SysMenuSeedData.cs

@@ -0,0 +1,25 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+/// <summary>
+/// 审批流程菜单表种子数据
+/// </summary>
+public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
+{
+    /// <summary>
+    /// 种子数据
+    /// </summary>
+    /// <returns></returns>
+    public IEnumerable<SysMenu> HasData()
+    {
+        return new[]
+        {
+            new SysMenu{ Id=1320000000001, Pid=1310000000301, Title="审批流程", Path="/platform/approvalFlow", Name="approvalFlow", Component="/approvalFlow/index", Icon="ele-Help", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=2000 },
+        };
+    }
+}

+ 148 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs

@@ -0,0 +1,148 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+/// <summary>
+/// 审批流程服务
+/// </summary>
+[ApiDescriptionSettings(ApprovalFlowConst.GroupName, Order = 100)]
+public class ApprovalFlowService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<ApprovalFlow> _approvalFlowRep;
+
+    public ApprovalFlowService(SqlSugarRepository<ApprovalFlow> approvalFlowRep)
+    {
+        _approvalFlowRep = approvalFlowRep;
+    }
+
+    /// <summary>
+    /// 分页查询审批流
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    public async Task<SqlSugarPagedList<ApprovalFlowOutput>> Page(ApprovalFlowInput input)
+    {
+        return await _approvalFlowRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.Code.Contains(input.SearchKey.Trim()) || u.Name.Contains(input.SearchKey.Trim()) || u.Remark.Contains(input.SearchKey.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
+            .Select<ApprovalFlowOutput>()
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 增加审批流
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Add"), HttpPost]
+    public async Task<long> Add(AddApprovalFlowInput input)
+    {
+        var entity = input.Adapt<ApprovalFlow>();
+        if (input.Code == null)
+        {
+            entity.Code = await LastCode("");
+        }
+        await _approvalFlowRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 更新审批流
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Update"), HttpPost]
+    public async Task Update(UpdateApprovalFlowInput input)
+    {
+        var entity = input.Adapt<ApprovalFlow>();
+        await _approvalFlowRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 删除审批流
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+    public async Task Delete(DeleteApprovalFlowInput input)
+    {
+        var entity = await _approvalFlowRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _approvalFlowRep.FakeDeleteAsync(entity);  // 假删除
+    }
+
+    /// <summary>
+    /// 获取审批流
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<ApprovalFlow> GetDetail([FromQuery] QueryByIdApprovalFlowInput input)
+    {
+        return await _approvalFlowRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 根据编码获取审批流信息
+    /// </summary>
+    /// <param name="code"></param>
+    /// <returns></returns>
+    public async Task<ApprovalFlow> GetInfo([FromQuery] string code)
+    {
+        return await _approvalFlowRep.GetFirstAsync(u => u.Code == code);
+    }
+
+    /// <summary>
+    /// 获取审批流列表
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<List<ApprovalFlowOutput>> GetList([FromQuery] ApprovalFlowInput input)
+    {
+        return await _approvalFlowRep.AsQueryable().Select<ApprovalFlowOutput>().ToListAsync();
+    }
+
+    /// <summary>
+    /// 获取今天创建的最大编号
+    /// </summary>
+    /// <param name="prefix"></param>
+    /// <returns></returns>
+    private async Task<string> LastCode(string prefix)
+    {
+        var today = DateTime.Now.Date;
+        var count = await _approvalFlowRep.AsQueryable().Where(u => u.CreateTime >= today).CountAsync();
+        return prefix + DateTime.Now.ToString("yyMMdd") + string.Format("{0:d2}", count + 1);
+    }
+
+    /// <summary>
+    /// 匹配审批流程
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [NonAction]
+    public async Task MatchApproval(HttpContext context)
+    {
+        var request = context.Request;
+        var response = context.Response;
+
+        var path = request.Path.ToString().Split("/");
+
+        var method = request.Method;
+        var qs = request.QueryString;
+        var h = request.Headers;
+        var b = request.Body;
+
+        var requestHeaders = request.Headers;
+        var responseHeaders = response.Headers;
+
+        await Task.CompletedTask;
+    }
+}

+ 88 - 83
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/ApprovalFlow/Dto/ApprovalFlowDto.cs → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowDto.cs

@@ -1,83 +1,88 @@
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 审批流输出参数
-/// </summary>
-public class ApprovalFlowDto
-{
-    /// <summary>
-    /// 主键Id
-    /// </summary>
-    public long Id { get; set; }
-    
-    /// <summary>
-    /// 编号
-    /// </summary>
-    public string? Code { get; set; }
-    
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string? Name { get; set; }
-    
-    /// <summary>
-    /// 表单
-    /// </summary>
-    public string? FormJson { get; set; }
-    
-    /// <summary>
-    /// 流程
-    /// </summary>
-    public string? FlowJson { get; set; }
-    
-    /// <summary>
-    /// 备注
-    /// </summary>
-    public string? Remark { get; set; }
-    
-    /// <summary>
-    /// 创建时间
-    /// </summary>
-    public DateTime? CreateTime { get; set; }
-    
-    /// <summary>
-    /// 更新时间
-    /// </summary>
-    public DateTime? UpdateTime { get; set; }
-    
-    /// <summary>
-    /// 创建者Id
-    /// </summary>
-    public long? CreateUserId { get; set; }
-    
-    /// <summary>
-    /// 创建者姓名
-    /// </summary>
-    public string? CreateUserName { get; set; }
-    
-    /// <summary>
-    /// 修改者Id
-    /// </summary>
-    public long? UpdateUserId { get; set; }
-    
-    /// <summary>
-    /// 修改者姓名
-    /// </summary>
-    public string? UpdateUserName { get; set; }
-    
-    /// <summary>
-    /// 创建者部门Id
-    /// </summary>
-    public long? CreateOrgId { get; set; }
-    
-    /// <summary>
-    /// 创建者部门名称
-    /// </summary>
-    public string? CreateOrgName { get; set; }
-    
-    /// <summary>
-    /// 软删除
-    /// </summary>
-    public bool IsDelete { get; set; }
-    
-}
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+/// <summary>
+/// 审批流输出参数
+/// </summary>
+public class ApprovalFlowDto
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 编号
+    /// </summary>
+    public string? Code { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string? Name { get; set; }
+
+    /// <summary>
+    /// 表单
+    /// </summary>
+    public string? FormJson { get; set; }
+
+    /// <summary>
+    /// 流程
+    /// </summary>
+    public string? FlowJson { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+
+    /// <summary>
+    /// 更新时间
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+
+    /// <summary>
+    /// 创建者Id
+    /// </summary>
+    public long? CreateUserId { get; set; }
+
+    /// <summary>
+    /// 创建者姓名
+    /// </summary>
+    public string? CreateUserName { get; set; }
+
+    /// <summary>
+    /// 修改者Id
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+
+    /// <summary>
+    /// 修改者姓名
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+
+    /// <summary>
+    /// 创建者部门Id
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+
+    /// <summary>
+    /// 创建者部门名称
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+
+    /// <summary>
+    /// 软删除
+    /// </summary>
+    public bool IsDelete { get; set; }
+}

+ 147 - 149
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/ApprovalFlow/Dto/ApprovalFlowInput.cs → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowInput.cs

@@ -1,149 +1,147 @@
-using Admin.NET.Core;
-using System.ComponentModel.DataAnnotations;
-
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 审批流基础输入参数
-/// </summary>
-public class ApprovalFlowBaseInput
-{
-    /// <summary>
-    /// 编号
-    /// </summary>
-    public virtual string? Code { get; set; }
-    
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public virtual string? Name { get; set; }
-    
-    /// <summary>
-    /// 表单
-    /// </summary>
-    public virtual string? FormJson { get; set; }
-    
-    /// <summary>
-    /// 流程
-    /// </summary>
-    public virtual string? FlowJson { get; set; }
-    
-    /// <summary>
-    /// 备注
-    /// </summary>
-    public virtual string? Remark { get; set; }
-    
-    /// <summary>
-    /// 创建时间
-    /// </summary>
-    public virtual DateTime? CreateTime { get; set; }
-    
-    /// <summary>
-    /// 更新时间
-    /// </summary>
-    public virtual DateTime? UpdateTime { get; set; }
-    
-    /// <summary>
-    /// 创建者Id
-    /// </summary>
-    public virtual long? CreateUserId { get; set; }
-    
-    /// <summary>
-    /// 创建者姓名
-    /// </summary>
-    public virtual string? CreateUserName { get; set; }
-    
-    /// <summary>
-    /// 修改者Id
-    /// </summary>
-    public virtual long? UpdateUserId { get; set; }
-    
-    /// <summary>
-    /// 修改者姓名
-    /// </summary>
-    public virtual string? UpdateUserName { get; set; }
-    
-    /// <summary>
-    /// 创建者部门Id
-    /// </summary>
-    public virtual long? CreateOrgId { get; set; }
-    
-    /// <summary>
-    /// 创建者部门名称
-    /// </summary>
-    public virtual string? CreateOrgName { get; set; }
-    
-    /// <summary>
-    /// 软删除
-    /// </summary>
-    public virtual bool IsDelete { get; set; }
-    
-}
-
-/// <summary>
-/// 审批流分页查询输入参数
-/// </summary>
-public class ApprovalFlowInput : BasePageInput
-{
-    /// <summary>
-    /// 关键字查询
-    /// </summary>
-    public string? SearchKey { get; set; }
-
-    /// <summary>
-    /// 编号
-    /// </summary>
-    public string? Code { get; set; }
-    
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string? Name { get; set; }
-    
-    /// <summary>
-    /// 备注
-    /// </summary>
-    public string? Remark { get; set; }
-    
-}
-
-/// <summary>
-/// 审批流增加输入参数
-/// </summary>
-public class AddApprovalFlowInput : ApprovalFlowBaseInput
-{
-    /// <summary>
-    /// 软删除
-    /// </summary>
-    [Required(ErrorMessage = "软删除不能为空")]
-    public override bool IsDelete { get; set; }
-    
-}
-
-/// <summary>
-/// 审批流删除输入参数
-/// </summary>
-public class DeleteApprovalFlowInput : BaseIdInput
-{
-}
-
-/// <summary>
-/// 审批流更新输入参数
-/// </summary>
-public class UpdateApprovalFlowInput : ApprovalFlowBaseInput
-{
-    /// <summary>
-    /// 主键Id
-    /// </summary>
-    [Required(ErrorMessage = "主键Id不能为空")]
-    public long Id { get; set; }
-    
-}
-
-/// <summary>
-/// 审批流主键查询输入参数
-/// </summary>
-public class QueryByIdApprovalFlowInput : DeleteApprovalFlowInput
-{
-
-}
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+/// <summary>
+/// 审批流基础输入参数
+/// </summary>
+public class ApprovalFlowBaseInput
+{
+    /// <summary>
+    /// 编号
+    /// </summary>
+    public virtual string? Code { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public virtual string? Name { get; set; }
+
+    /// <summary>
+    /// 表单
+    /// </summary>
+    public virtual string? FormJson { get; set; }
+
+    /// <summary>
+    /// 流程
+    /// </summary>
+    public virtual string? FlowJson { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    public virtual string? Remark { get; set; }
+
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public virtual DateTime? CreateTime { get; set; }
+
+    /// <summary>
+    /// 更新时间
+    /// </summary>
+    public virtual DateTime? UpdateTime { get; set; }
+
+    /// <summary>
+    /// 创建者Id
+    /// </summary>
+    public virtual long? CreateUserId { get; set; }
+
+    /// <summary>
+    /// 创建者姓名
+    /// </summary>
+    public virtual string? CreateUserName { get; set; }
+
+    /// <summary>
+    /// 修改者Id
+    /// </summary>
+    public virtual long? UpdateUserId { get; set; }
+
+    /// <summary>
+    /// 修改者姓名
+    /// </summary>
+    public virtual string? UpdateUserName { get; set; }
+
+    /// <summary>
+    /// 创建者部门Id
+    /// </summary>
+    public virtual long? CreateOrgId { get; set; }
+
+    /// <summary>
+    /// 创建者部门名称
+    /// </summary>
+    public virtual string? CreateOrgName { get; set; }
+
+    /// <summary>
+    /// 软删除
+    /// </summary>
+    public virtual bool IsDelete { get; set; }
+}
+
+/// <summary>
+/// 审批流分页查询输入参数
+/// </summary>
+public class ApprovalFlowInput : BasePageInput
+{
+    /// <summary>
+    /// 关键字查询
+    /// </summary>
+    public string? SearchKey { get; set; }
+
+    /// <summary>
+    /// 编号
+    /// </summary>
+    public string? Code { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string? Name { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    public string? Remark { get; set; }
+}
+
+/// <summary>
+/// 审批流增加输入参数
+/// </summary>
+public class AddApprovalFlowInput : ApprovalFlowBaseInput
+{
+    /// <summary>
+    /// 软删除
+    /// </summary>
+    [Required(ErrorMessage = "软删除不能为空")]
+    public override bool IsDelete { get; set; }
+}
+
+/// <summary>
+/// 审批流删除输入参数
+/// </summary>
+public class DeleteApprovalFlowInput : BaseIdInput
+{
+}
+
+/// <summary>
+/// 审批流更新输入参数
+/// </summary>
+public class UpdateApprovalFlowInput : ApprovalFlowBaseInput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    [Required(ErrorMessage = "主键Id不能为空")]
+    public long Id { get; set; }
+}
+
+/// <summary>
+/// 审批流主键查询输入参数
+/// </summary>
+public class QueryByIdApprovalFlowInput : DeleteApprovalFlowInput
+{
+}

+ 88 - 85
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/ApprovalFlow/Dto/ApprovalFlowOutput.cs → Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowOutput.cs

@@ -1,85 +1,88 @@
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 审批流输出参数
-/// </summary>
-public class ApprovalFlowOutput
-{
-    /// <summary>
-    /// 主键Id
-    /// </summary>
-    public long Id { get; set; }
-    
-    /// <summary>
-    /// 编号
-    /// </summary>
-    public string? Code { get; set; }
-    
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string? Name { get; set; }
-    
-    /// <summary>
-    /// 表单
-    /// </summary>
-    public string? FormJson { get; set; }
-    
-    /// <summary>
-    /// 流程
-    /// </summary>
-    public string? FlowJson { get; set; }
-    
-    /// <summary>
-    /// 备注
-    /// </summary>
-    public string? Remark { get; set; }
-    
-    /// <summary>
-    /// 创建时间
-    /// </summary>
-    public DateTime? CreateTime { get; set; }
-    
-    /// <summary>
-    /// 更新时间
-    /// </summary>
-    public DateTime? UpdateTime { get; set; }
-    
-    /// <summary>
-    /// 创建者Id
-    /// </summary>
-    public long? CreateUserId { get; set; }
-    
-    /// <summary>
-    /// 创建者姓名
-    /// </summary>
-    public string? CreateUserName { get; set; }
-    
-    /// <summary>
-    /// 修改者Id
-    /// </summary>
-    public long? UpdateUserId { get; set; }
-    
-    /// <summary>
-    /// 修改者姓名
-    /// </summary>
-    public string? UpdateUserName { get; set; }
-    
-    /// <summary>
-    /// 创建者部门Id
-    /// </summary>
-    public long? CreateOrgId { get; set; }
-    
-    /// <summary>
-    /// 创建者部门名称
-    /// </summary>
-    public string? CreateOrgName { get; set; }
-    
-    /// <summary>
-    /// 软删除
-    /// </summary>
-    public bool IsDelete { get; set; }
-    
-}
- 
-
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+/// <summary>
+/// 审批流输出参数
+/// </summary>
+public class ApprovalFlowOutput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 编号
+    /// </summary>
+    public string? Code { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string? Name { get; set; }
+
+    /// <summary>
+    /// 表单
+    /// </summary>
+    public string? FormJson { get; set; }
+
+    /// <summary>
+    /// 流程
+    /// </summary>
+    public string? FlowJson { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+
+    /// <summary>
+    /// 更新时间
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+
+    /// <summary>
+    /// 创建者Id
+    /// </summary>
+    public long? CreateUserId { get; set; }
+
+    /// <summary>
+    /// 创建者姓名
+    /// </summary>
+    public string? CreateUserName { get; set; }
+
+    /// <summary>
+    /// 修改者Id
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+
+    /// <summary>
+    /// 修改者姓名
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+
+    /// <summary>
+    /// 创建者部门Id
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+
+    /// <summary>
+    /// 创建者部门名称
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+
+    /// <summary>
+    /// 软删除
+    /// </summary>
+    public bool IsDelete { get; set; }
+}

+ 23 - 0
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Startup.cs

@@ -0,0 +1,23 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+[AppStartup(100)]
+public class Startup : AppStartup
+{
+    public void ConfigureServices(IServiceCollection services)
+    {
+    }
+
+    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+    {
+        app.UseApprovalFlow();
+    }
+}

+ 0 - 12
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Const/FlowConst.cs

@@ -1,12 +0,0 @@
-namespace Admin.NET.Plugin.Flow.Const;
-
-/// <summary>
-/// 业务应用相关常量
-/// </summary>
-public class FlowConst
-{
-    /// <summary>
-    /// API分组名称
-    /// </summary>
-    public const string GroupName = "审批流";
-}

+ 0 - 12
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Enum/FlowTypeEnum.cs

@@ -1,12 +0,0 @@
-using System;
-
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 流类型枚举
-/// </summary>
-public enum FlowTypeEnum
-{
-
-}
-

+ 0 - 19
Admin.NET/Plugins/Admin.NET.Plugin.Flow/GlobalUsings.cs

@@ -1,19 +0,0 @@
-// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
-//
-// 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
-
-global using Admin.NET.Core;
-global using Furion;
-global using Furion.DependencyInjection;
-global using Furion.DynamicApiController;
-global using Furion.FriendlyException;
-global using Mapster;
-global using Microsoft.AspNetCore.Authorization;
-global using Microsoft.AspNetCore.Mvc;
-global using Microsoft.Extensions.DependencyInjection;
-global using SqlSugar;
-global using System;
-global using System.Collections.Generic;
-global using System.ComponentModel;
-global using System.ComponentModel.DataAnnotations;
-global using System.Threading.Tasks;

+ 0 - 138
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/ApprovalFlow/ApprovalFlowService.cs

@@ -1,138 +0,0 @@
-using Admin.NET.Core.Service;
-using Admin.NET.Plugin.Flow.Const;
-using Admin.NET.Plugin.Flow.Entity;
-using Microsoft.AspNetCore.Http;
-
-namespace Admin.NET.Plugin.Flow;
-
-/// <summary>
-/// 审批流服务
-/// </summary>
-[ApiDescriptionSettings(FlowConst.GroupName, Order = 100)]
-public class ApprovalFlowService : IDynamicApiController, ITransient
-{
-    private readonly SqlSugarRepository<ApprovalFlow> _rep;
-    public ApprovalFlowService(SqlSugarRepository<ApprovalFlow> rep)
-    {
-        _rep = rep;
-    }
-
-    /// <summary>
-    /// 分页查询审批流
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost]
-    [ApiDescriptionSettings(Name = "Page")]
-    public async Task<SqlSugarPagedList<ApprovalFlowOutput>> Page(ApprovalFlowInput input)
-    {
-        var query = _rep.AsQueryable()
-            .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
-                u.Code.Contains(input.SearchKey.Trim())
-                || u.Name.Contains(input.SearchKey.Trim())
-                || u.Remark.Contains(input.SearchKey.Trim())
-            )
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
-            .Select<ApprovalFlowOutput>();
-        return await query.ToPagedListAsync(input.Page, input.PageSize);
-    }
-
-    /// <summary>
-    /// 增加审批流
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost]
-    [ApiDescriptionSettings(Name = "Add")]
-    public async Task<long> Add(AddApprovalFlowInput input)
-    {
-        var entity = input.Adapt<ApprovalFlow>();
-        if (input.Code == null)
-        {
-            entity.Code = await LastCode("");
-        }
-        await _rep.InsertAsync(entity);
-        return entity.Id;
-    }
-
-    /// <summary>
-    /// 删除审批流
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost]
-    [ApiDescriptionSettings(Name = "Delete")]
-    public async Task Delete(DeleteApprovalFlowInput input)
-    {
-        var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        await _rep.FakeDeleteAsync(entity);   //假删除
-        //await _rep.DeleteAsync(entity);   //真删除
-    }
-
-    /// <summary>
-    /// 更新审批流
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost]
-    [ApiDescriptionSettings(Name = "Update")]
-    public async Task Update(UpdateApprovalFlowInput input)
-    {
-        var entity = input.Adapt<ApprovalFlow>();
-        await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
-    }
-
-    /// <summary>
-    /// 获取审批流
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet]
-    [ApiDescriptionSettings(Name = "Detail")]
-    public async Task<ApprovalFlow> Detail([FromQuery] QueryByIdApprovalFlowInput input)
-    {
-        return await _rep.GetFirstAsync(u => u.Id == input.Id);
-    }
-
-    /// <summary>
-    /// 通过 code 获取审批流信息
-    /// </summary>
-    /// <param name="code"></param>
-    /// <returns></returns>
-    [HttpGet]
-    [ApiDescriptionSettings(Name = "Info")]
-    public async Task<ApprovalFlow> Info([FromQuery] string code)
-    {
-        return await _rep.GetFirstAsync(u => u.Code == code);
-    }
-
-    /// <summary>
-    /// 获取审批流列表
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet]
-    [ApiDescriptionSettings(Name = "List")]
-    public async Task<List<ApprovalFlowOutput>> List([FromQuery] ApprovalFlowInput input)
-    {
-        return await _rep.AsQueryable().Select<ApprovalFlowOutput>().ToListAsync();
-    }
-
-
-
-
-    /// <summary>
-    /// 获取今天创建的最大编号
-    /// </summary>
-    /// <param name="prefix"></param>
-    /// <returns></returns>
-    private async Task<string> LastCode(string prefix)
-    {
-        var today = DateTime.Now.Date;
-        var count = await _rep.AsQueryable().Where(u => u.CreateTime >= today).CountAsync();
-        return prefix + DateTime.Now.ToString("yyMMdd") + string.Format("{0:d2}", count + 1);
-    }
-}
-

+ 0 - 49
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Service/SysApprovalFlow/SysApprovalService.cs

@@ -1,49 +0,0 @@
-// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
-//
-// 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
-
-using System.IO;
-using System.Linq;
-using System.Text;
-using Admin.NET.Plugin.Flow.Entity;
-using Furion.Logging.Extensions;
-using Microsoft.AspNetCore.Http;
-using NewLife;
-using RazorEngine.Compilation.ImpromptuInterface.InvokeExt;
-
-namespace Admin.NET.Plugin.Flow.Service;
-
-[ApiDescriptionSettings(Order = 300)]
-public class SysApprovalService : IDynamicApiController, ITransient
-{
-    public SysApprovalService()
-    {
-
-    }
-
-    /// <summary>
-    /// 匹配审批流程
-    /// </summary>
-    /// <param name="context"></param>
-    /// <returns></returns>
-    [NonAction]
-    public async Task MatchApproval(HttpContext context)
-    {
-        var request = context.Request;
-        var response = context.Response;
-
-        var path = request.Path.ToString().Split("/");
-
-        var method = request.Method;
-        var qs = request.QueryString;
-        var h = request.Headers;
-        var b = request.Body;
-
-        var requestHeaders = request.Headers;
-        var responseHeaders = response.Headers;
-
-        path.Join(",").LogTrace();
-        
-        await Task.CompletedTask;
-    }
-}

+ 0 - 26
Admin.NET/Plugins/Admin.NET.Plugin.Flow/SpeedData/SysMenuSeedData.cs

@@ -1,26 +0,0 @@
-// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
-//
-// 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
-
-using Admin.NET.Core;
-
-namespace Admin.NET.Plugin.Report;
-
-/// <summary>
-/// 审批流菜单表种子数据
-/// </summary>
-public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
-{
-    /// <summary>
-    /// 种子数据
-    /// </summary>
-    /// <returns></returns>
-    public IEnumerable<SysMenu> HasData()
-    {
-        return new[]
-        {
-            new SysMenu{ Id=1300000000201, Pid=0, Title="平台功能", Path="/pages", Name="Pages", Component="Layout", Icon="ele-MagicStick", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 },
-            new SysMenu{ Id=1300000000211, Pid=1300000000201, Title="审批流管理", Path="/pages/approvalFlow", Name="approvalFlow", Component="/pages/approvalFlow/index", Icon="ele-Menu", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },  
-        };
-    }
-}

+ 0 - 19
Admin.NET/Plugins/Admin.NET.Plugin.Flow/Startup.cs

@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-
-namespace Admin.NET.Plugin.Flow;
-
-[AppStartup(100)]
-public class Startup : AppStartup
-{
-    public void ConfigureServices(IServiceCollection services)
-    {
-    }
-
-    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
-    {
-        // 使用审批流
-        app.UseApprovalFlow(); 
-    }
-}
-

+ 2 - 2
Web/package.json

@@ -12,8 +12,8 @@
 	},
 	"dependencies": {
 		"@element-plus/icons-vue": "^2.3.1",
-		"@logicflow/core": "^1.2.26",
-		"@logicflow/extension": "^1.2.26",
+		"@logicflow/core": "^1.2.27",
+		"@logicflow/extension": "^1.2.27",
 		"@microsoft/signalr": "^8.0.0",
 		"@vue-office/docx": "^1.6.1",
 		"@vue-office/excel": "^1.7.8",

+ 15 - 0
Web/src/api-services/_approvalFlow/api.ts

@@ -0,0 +1,15 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+export * from './apis/approval-flow-api';
+

+ 66 - 16
Web/src/api-services/apis/approval-flow-api.ts → Web/src/api-services/_approvalFlow/apis/approval-flow-api.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,18 +11,19 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+
 import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
 import { Configuration } from '../configuration';
 // Some imports not used depending on template conditions
 // @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
+import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../../base';
 import { AddApprovalFlowInput } from '../models';
-import { AdminResultInt64 } from '../models';
 import { AdminResultApprovalFlow } from '../models';
+import { AdminResultInt64 } from '../models';
 import { AdminResultListApprovalFlowOutput } from '../models';
 import { AdminResultSqlSugarPagedListApprovalFlowOutput } from '../models';
-import { DeleteApprovalFlowInput } from '../models';
 import { ApprovalFlowInput } from '../models';
+import { DeleteApprovalFlowInput } from '../models';
 import { UpdateApprovalFlowInput } from '../models';
 /**
  * ApprovalFlowApi - axios parameter creator
@@ -38,7 +39,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
          * @throws {RequiredError}
          */
         apiApprovalFlowAddPost: async (body?: AddApprovalFlowInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/add`;
+            const localVarPath = `/api/approvalFlow/add`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -50,6 +51,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
@@ -79,7 +87,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
          * @throws {RequiredError}
          */
         apiApprovalFlowDeletePost: async (body?: DeleteApprovalFlowInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/delete`;
+            const localVarPath = `/api/approvalFlow/delete`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -91,6 +99,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
@@ -124,7 +139,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             if (id === null || id === undefined) {
                 throw new RequiredError('id','Required parameter id was null or undefined when calling apiApprovalFlowDetailGet.');
             }
-            const localVarPath = `/api/labApprovalFlow/detail`;
+            const localVarPath = `/api/approvalFlow/detail`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -136,6 +151,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             if (id !== undefined) {
                 localVarQueryParameter['Id'] = id;
@@ -159,13 +181,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
         },
         /**
          * 
-         * @summary 通过 code 获取审批流信息
+         * @summary 根据编码获取审批流信息
          * @param {string} [code] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
         apiApprovalFlowInfoGet: async (code?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/info`;
+            const localVarPath = `/api/approvalFlow/info`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -177,6 +199,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             if (code !== undefined) {
                 localVarQueryParameter['code'] = code;
@@ -214,7 +243,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
          * @throws {RequiredError}
          */
         apiApprovalFlowListGet: async (searchKey?: string, code?: string, name?: string, remark?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/list`;
+            const localVarPath = `/api/approvalFlow/list`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -226,6 +255,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             if (searchKey !== undefined) {
                 localVarQueryParameter['SearchKey'] = searchKey;
@@ -287,7 +323,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
          * @throws {RequiredError}
          */
         apiApprovalFlowPagePost: async (body?: ApprovalFlowInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/page`;
+            const localVarPath = `/api/approvalFlow/page`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -299,6 +335,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
@@ -328,7 +371,7 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
          * @throws {RequiredError}
          */
         apiApprovalFlowUpdatePost: async (body?: UpdateApprovalFlowInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/labApprovalFlow/update`;
+            const localVarPath = `/api/approvalFlow/update`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -340,6 +383,13 @@ export const ApprovalFlowApiAxiosParamCreator = function (configuration?: Config
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
 
             localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
@@ -414,7 +464,7 @@ export const ApprovalFlowApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 通过 code 获取审批流信息
+         * @summary 根据编码获取审批流信息
          * @param {string} [code] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -517,7 +567,7 @@ export const ApprovalFlowApiFactory = function (configuration?: Configuration, b
         },
         /**
          * 
-         * @summary 通过 code 获取审批流信息
+         * @summary 根据编码获取审批流信息
          * @param {string} [code] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -608,7 +658,7 @@ export class ApprovalFlowApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 通过 code 获取审批流信息
+     * @summary 根据编码获取审批流信息
      * @param {string} [code] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}

+ 70 - 0
Web/src/api-services/_approvalFlow/base.ts

@@ -0,0 +1,70 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+import { Configuration } from "./configuration";
+// Some imports not used depending on template conditions
+// @ts-ignore
+import globalAxios, { AxiosRequestConfig, AxiosInstance } from 'axios';
+
+export const BASE_PATH = "/".replace(/\/+$/, "");
+
+/**
+ *
+ * @export
+ */
+export const COLLECTION_FORMATS = {
+    csv: ",",
+    ssv: " ",
+    tsv: "\t",
+    pipes: "|",
+};
+
+/**
+ *
+ * @export
+ * @interface RequestArgs
+ */
+export interface RequestArgs {
+    url: string;
+    options: AxiosRequestConfig;
+}
+
+/**
+ *
+ * @export
+ * @class BaseAPI
+ */
+export class BaseAPI {
+    protected configuration: Configuration | undefined;
+
+    constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
+        if (configuration) {
+            this.configuration = configuration;
+            this.basePath = configuration.basePath || this.basePath;
+        }
+    }
+};
+
+/**
+ *
+ * @export
+ * @class RequiredError
+ * @extends {Error}
+ */
+export class RequiredError extends Error {
+    name: "RequiredError" = "RequiredError";
+    constructor(public field: string, msg?: string) {
+        super(msg);
+    }
+}

+ 83 - 0
Web/src/api-services/_approvalFlow/configuration.ts

@@ -0,0 +1,83 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+export interface ConfigurationParameters {
+    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
+    username?: string;
+    password?: string;
+    accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
+    basePath?: string;
+    baseOptions?: any;
+}
+
+export class Configuration {
+
+    /**
+     * parameter for apiKey security
+     *
+     * @param name security name
+     * @memberof Configuration
+     */
+    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
+
+    /**
+     * parameter for basic security
+     *
+     * @type {string}
+     * @memberof Configuration
+     */
+    username?: string;
+
+    /**
+     * parameter for basic security
+     *
+     * @type {string}
+     * @memberof Configuration
+     */
+    password?: string;
+
+    /**
+     * parameter for oauth2 security
+     *
+     * @param name security name
+     * @param scopes oauth2 scope
+     * @memberof Configuration
+     */
+    accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
+
+    /**
+     * override base path
+     *
+     * @type {string}
+     * @memberof Configuration
+     */
+    basePath?: string;
+
+    /**
+     * base options for axios calls
+     *
+     * @type {any}
+     * @memberof Configuration
+     */
+    baseOptions?: any;
+
+    constructor(param: ConfigurationParameters = {}) {
+        this.apiKey = param.apiKey;
+        this.username = param.username;
+        this.password = param.password;
+        this.accessToken = param.accessToken;
+        this.basePath = param.basePath;
+        this.baseOptions = param.baseOptions;
+    }
+}

+ 18 - 0
Web/src/api-services/_approvalFlow/index.ts

@@ -0,0 +1,18 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+export * from "./api";
+export * from "./configuration";
+export * from "./models";
+

+ 33 - 3
Web/src/api-services/models/add-approval-flow-input.ts → Web/src/api-services/_approvalFlow/models/add-approval-flow-input.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,92 +11,122 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
+
+ /**
  * 审批流增加输入参数
+ *
  * @export
  * @interface AddApprovalFlowInput
  */
 export interface AddApprovalFlowInput {
+
     /**
      * 编号
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     code?: string | null;
+
     /**
      * 名称
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     name?: string | null;
+
     /**
      * 表单
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     formJson?: string | null;
+
     /**
      * 流程
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     flowJson?: string | null;
+
     /**
      * 备注
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     remark?: string | null;
+
     /**
      * 创建时间
+     *
      * @type {Date}
      * @memberof AddApprovalFlowInput
      */
     createTime?: Date | null;
+
     /**
      * 更新时间
+     *
      * @type {Date}
      * @memberof AddApprovalFlowInput
      */
     updateTime?: Date | null;
+
     /**
      * 创建者Id
+     *
      * @type {number}
      * @memberof AddApprovalFlowInput
      */
     createUserId?: number | null;
+
     /**
      * 创建者姓名
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     createUserName?: string | null;
+
     /**
      * 修改者Id
+     *
      * @type {number}
      * @memberof AddApprovalFlowInput
      */
     updateUserId?: number | null;
+
     /**
      * 修改者姓名
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     updateUserName?: string | null;
+
     /**
      * 创建者部门Id
+     *
      * @type {number}
      * @memberof AddApprovalFlowInput
      */
     createOrgId?: number | null;
+
     /**
      * 创建者部门名称
+     *
      * @type {string}
      * @memberof AddApprovalFlowInput
      */
     createOrgName?: string | null;
+
     /**
      * 软删除
+     *
      * @type {boolean}
      * @memberof AddApprovalFlowInput
      */

+ 16 - 4
Web/src/api-services/models/admin-result-approval-flow.ts → Web/src/api-services/_approvalFlow/models/admin-result-approval-flow.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,45 +11,57 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+
 import { ApprovalFlow } from './approval-flow';
-/**
+ /**
  * 全局返回结果
+ *
  * @export
  * @interface AdminResultApprovalFlow
  */
 export interface AdminResultApprovalFlow {
+
     /**
      * 状态码
+     *
      * @type {number}
      * @memberof AdminResultApprovalFlow
      */
     code?: number;
+
     /**
      * 类型success、warning、error
+     *
      * @type {string}
      * @memberof AdminResultApprovalFlow
      */
     type?: string | null;
+
     /**
      * 错误信息
+     *
      * @type {string}
      * @memberof AdminResultApprovalFlow
      */
     message?: string | null;
+
     /**
-     * 
      * @type {ApprovalFlow}
      * @memberof AdminResultApprovalFlow
      */
     result?: ApprovalFlow;
+
     /**
      * 附加数据
+     *
      * @type {any}
      * @memberof AdminResultApprovalFlow
      */
     extras?: any | null;
+
     /**
      * 时间
+     *
      * @type {Date}
      * @memberof AdminResultApprovalFlow
      */

+ 70 - 0
Web/src/api-services/_approvalFlow/models/admin-result-int64.ts

@@ -0,0 +1,70 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+ /**
+ * 全局返回结果
+ *
+ * @export
+ * @interface AdminResultInt64
+ */
+export interface AdminResultInt64 {
+
+    /**
+     * 状态码
+     *
+     * @type {number}
+     * @memberof AdminResultInt64
+     */
+    code?: number;
+
+    /**
+     * 类型success、warning、error
+     *
+     * @type {string}
+     * @memberof AdminResultInt64
+     */
+    type?: string | null;
+
+    /**
+     * 错误信息
+     *
+     * @type {string}
+     * @memberof AdminResultInt64
+     */
+    message?: string | null;
+
+    /**
+     * 数据
+     *
+     * @type {number}
+     * @memberof AdminResultInt64
+     */
+    result?: number;
+
+    /**
+     * 附加数据
+     *
+     * @type {any}
+     * @memberof AdminResultInt64
+     */
+    extras?: any | null;
+
+    /**
+     * 时间
+     *
+     * @type {Date}
+     * @memberof AdminResultInt64
+     */
+    time?: Date;
+}

+ 71 - 0
Web/src/api-services/_approvalFlow/models/admin-result-list-approval-flow-output.ts

@@ -0,0 +1,71 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+import { ApprovalFlowOutput } from './approval-flow-output';
+ /**
+ * 全局返回结果
+ *
+ * @export
+ * @interface AdminResultListApprovalFlowOutput
+ */
+export interface AdminResultListApprovalFlowOutput {
+
+    /**
+     * 状态码
+     *
+     * @type {number}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    code?: number;
+
+    /**
+     * 类型success、warning、error
+     *
+     * @type {string}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    type?: string | null;
+
+    /**
+     * 错误信息
+     *
+     * @type {string}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    message?: string | null;
+
+    /**
+     * 数据
+     *
+     * @type {Array<ApprovalFlowOutput>}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    result?: Array<ApprovalFlowOutput> | null;
+
+    /**
+     * 附加数据
+     *
+     * @type {any}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    extras?: any | null;
+
+    /**
+     * 时间
+     *
+     * @type {Date}
+     * @memberof AdminResultListApprovalFlowOutput
+     */
+    time?: Date;
+}

+ 16 - 4
Web/src/api-services/models/admin-result-sql-sugar-paged-list-approval-flow-output.ts → Web/src/api-services/_approvalFlow/models/admin-result-sql-sugar-paged-list-approval-flow-output.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,45 +11,57 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+
 import { SqlSugarPagedListApprovalFlowOutput } from './sql-sugar-paged-list-approval-flow-output';
-/**
+ /**
  * 全局返回结果
+ *
  * @export
  * @interface AdminResultSqlSugarPagedListApprovalFlowOutput
  */
 export interface AdminResultSqlSugarPagedListApprovalFlowOutput {
+
     /**
      * 状态码
+     *
      * @type {number}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */
     code?: number;
+
     /**
      * 类型success、warning、error
+     *
      * @type {string}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */
     type?: string | null;
+
     /**
      * 错误信息
+     *
      * @type {string}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */
     message?: string | null;
+
     /**
-     * 
      * @type {SqlSugarPagedListApprovalFlowOutput}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */
     result?: SqlSugarPagedListApprovalFlowOutput;
+
     /**
      * 附加数据
+     *
      * @type {any}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */
     extras?: any | null;
+
     /**
      * 时间
+     *
      * @type {Date}
      * @memberof AdminResultSqlSugarPagedListApprovalFlowOutput
      */

+ 23 - 3
Web/src/api-services/models/approval-flow-input.ts → Web/src/api-services/_approvalFlow/models/approval-flow-input.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,62 +11,82 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
+
+ /**
  * 审批流分页查询输入参数
+ *
  * @export
  * @interface ApprovalFlowInput
  */
 export interface ApprovalFlowInput {
+
     /**
      * 当前页码
+     *
      * @type {number}
      * @memberof ApprovalFlowInput
      */
     page?: number;
+
     /**
      * 页码容量
+     *
      * @type {number}
      * @memberof ApprovalFlowInput
      */
     pageSize?: number;
+
     /**
      * 排序字段
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     field?: string | null;
+
     /**
      * 排序方向
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     order?: string | null;
+
     /**
      * 降序排序
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     descStr?: string | null;
+
     /**
      * 关键字查询
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     searchKey?: string | null;
+
     /**
      * 编号
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     code?: string | null;
+
     /**
      * 名称
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */
     name?: string | null;
+
     /**
      * 备注
+     *
      * @type {string}
      * @memberof ApprovalFlowInput
      */

+ 35 - 3
Web/src/api-services/models/approval-flow-output.ts → Web/src/api-services/_approvalFlow/models/approval-flow-output.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,98 +11,130 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
+
+ /**
  * 审批流输出参数
+ *
  * @export
  * @interface ApprovalFlowOutput
  */
 export interface ApprovalFlowOutput {
+
     /**
      * 主键Id
+     *
      * @type {number}
      * @memberof ApprovalFlowOutput
      */
     id?: number;
+
     /**
      * 编号
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     code?: string | null;
+
     /**
      * 名称
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     name?: string | null;
+
     /**
      * 表单
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     formJson?: string | null;
+
     /**
      * 流程
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     flowJson?: string | null;
+
     /**
      * 备注
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     remark?: string | null;
+
     /**
      * 创建时间
+     *
      * @type {Date}
      * @memberof ApprovalFlowOutput
      */
     createTime?: Date | null;
+
     /**
      * 更新时间
+     *
      * @type {Date}
      * @memberof ApprovalFlowOutput
      */
     updateTime?: Date | null;
+
     /**
      * 创建者Id
+     *
      * @type {number}
      * @memberof ApprovalFlowOutput
      */
     createUserId?: number | null;
+
     /**
      * 创建者姓名
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     createUserName?: string | null;
+
     /**
      * 修改者Id
+     *
      * @type {number}
      * @memberof ApprovalFlowOutput
      */
     updateUserId?: number | null;
+
     /**
      * 修改者姓名
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     updateUserName?: string | null;
+
     /**
      * 创建者部门Id
+     *
      * @type {number}
      * @memberof ApprovalFlowOutput
      */
     createOrgId?: number | null;
+
     /**
      * 创建者部门名称
+     *
      * @type {string}
      * @memberof ApprovalFlowOutput
      */
     createOrgName?: string | null;
+
     /**
      * 软删除
+     *
      * @type {boolean}
      * @memberof ApprovalFlowOutput
      */

+ 38 - 4
Web/src/api-services/models/approval-flow.ts → Web/src/api-services/_approvalFlow/models/approval-flow.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,104 +11,138 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
- * 审批流信息表
+
+ /**
+ * 审批流程信息表
+ *
  * @export
  * @interface ApprovalFlow
  */
 export interface ApprovalFlow {
+
     /**
      * 雪花Id
+     *
      * @type {number}
      * @memberof ApprovalFlow
      */
     id?: number;
+
     /**
      * 创建时间
+     *
      * @type {Date}
      * @memberof ApprovalFlow
      */
     createTime?: Date | null;
+
     /**
      * 更新时间
+     *
      * @type {Date}
      * @memberof ApprovalFlow
      */
     updateTime?: Date | null;
+
     /**
      * 创建者Id
+     *
      * @type {number}
      * @memberof ApprovalFlow
      */
     createUserId?: number | null;
+
     /**
      * 创建者姓名
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     createUserName?: string | null;
+
     /**
      * 修改者Id
+     *
      * @type {number}
      * @memberof ApprovalFlow
      */
     updateUserId?: number | null;
+
     /**
      * 修改者姓名
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     updateUserName?: string | null;
+
     /**
      * 软删除
+     *
      * @type {boolean}
      * @memberof ApprovalFlow
      */
     isDelete?: boolean;
+
     /**
      * 创建者部门Id
+     *
      * @type {number}
      * @memberof ApprovalFlow
      */
     createOrgId?: number | null;
+
     /**
      * 创建者部门名称
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     createOrgName?: string | null;
+
     /**
      * 编号
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     code?: string | null;
+
     /**
      * 名称
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     name?: string | null;
+
     /**
      * 表单
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     formJson?: string | null;
+
     /**
      * 流程
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */
     flowJson?: string | null;
+
     /**
      * 状态
+     *
      * @type {number}
      * @memberof ApprovalFlow
      */
     status?: number | null;
+
     /**
      * 备注
+     *
      * @type {string}
      * @memberof ApprovalFlow
      */

+ 7 - 3
Web/src/api-services/models/delete-approval-flow-input.ts → Web/src/api-services/_approvalFlow/models/delete-approval-flow-input.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,14 +11,18 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
+
+ /**
  * 审批流删除输入参数
+ *
  * @export
  * @interface DeleteApprovalFlowInput
  */
 export interface DeleteApprovalFlowInput {
+
     /**
      * 主键Id
+     *
      * @type {number}
      * @memberof DeleteApprovalFlowInput
      */

+ 11 - 0
Web/src/api-services/_approvalFlow/models/index.ts

@@ -0,0 +1,11 @@
+export * from './add-approval-flow-input';
+export * from './admin-result-approval-flow';
+export * from './admin-result-int64';
+export * from './admin-result-list-approval-flow-output';
+export * from './admin-result-sql-sugar-paged-list-approval-flow-output';
+export * from './approval-flow';
+export * from './approval-flow-input';
+export * from './approval-flow-output';
+export * from './delete-approval-flow-input';
+export * from './sql-sugar-paged-list-approval-flow-output';
+export * from './update-approval-flow-input';

+ 20 - 4
Web/src/api-services/models/sql-sugar-paged-list-approval-flow-output.ts → Web/src/api-services/_approvalFlow/models/sql-sugar-paged-list-approval-flow-output.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,51 +11,67 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { ApprovalFlowOutput } from './lab-approval-flow-output';
-/**
+
+import { ApprovalFlowOutput } from './approval-flow-output';
+ /**
  * 分页泛型集合
+ *
  * @export
  * @interface SqlSugarPagedListApprovalFlowOutput
  */
 export interface SqlSugarPagedListApprovalFlowOutput {
+
     /**
      * 页码
+     *
      * @type {number}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     page?: number;
+
     /**
      * 页容量
+     *
      * @type {number}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     pageSize?: number;
+
     /**
      * 总条数
+     *
      * @type {number}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     total?: number;
+
     /**
      * 总页数
+     *
      * @type {number}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     totalPages?: number;
+
     /**
      * 当前页集合
+     *
      * @type {Array<ApprovalFlowOutput>}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     items?: Array<ApprovalFlowOutput> | null;
+
     /**
      * 是否有上一页
+     *
      * @type {boolean}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */
     hasPrevPage?: boolean;
+
     /**
      * 是否有下一页
+     *
      * @type {boolean}
      * @memberof SqlSugarPagedListApprovalFlowOutput
      */

+ 35 - 3
Web/src/api-services/models/update-approval-flow-input.ts → Web/src/api-services/_approvalFlow/models/update-approval-flow-input.ts

@@ -1,8 +1,8 @@
 /* tslint:disable */
 /* eslint-disable */
 /**
- * 所有接口
- * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!</font></b></u>
+ * 审批流程
+ * 对业务实体数据的增删改操作进行流程审批。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
  *
  * OpenAPI spec version: 1.0.0
  * 
@@ -11,98 +11,130 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-/**
+
+ /**
  * 审批流更新输入参数
+ *
  * @export
  * @interface UpdateApprovalFlowInput
  */
 export interface UpdateApprovalFlowInput {
+
     /**
      * 编号
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     code?: string | null;
+
     /**
      * 名称
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     name?: string | null;
+
     /**
      * 表单
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     formJson?: string | null;
+
     /**
      * 流程
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     flowJson?: string | null;
+
     /**
      * 备注
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     remark?: string | null;
+
     /**
      * 创建时间
+     *
      * @type {Date}
      * @memberof UpdateApprovalFlowInput
      */
     createTime?: Date | null;
+
     /**
      * 更新时间
+     *
      * @type {Date}
      * @memberof UpdateApprovalFlowInput
      */
     updateTime?: Date | null;
+
     /**
      * 创建者Id
+     *
      * @type {number}
      * @memberof UpdateApprovalFlowInput
      */
     createUserId?: number | null;
+
     /**
      * 创建者姓名
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     createUserName?: string | null;
+
     /**
      * 修改者Id
+     *
      * @type {number}
      * @memberof UpdateApprovalFlowInput
      */
     updateUserId?: number | null;
+
     /**
      * 修改者姓名
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     updateUserName?: string | null;
+
     /**
      * 创建者部门Id
+     *
      * @type {number}
      * @memberof UpdateApprovalFlowInput
      */
     createOrgId?: number | null;
+
     /**
      * 创建者部门名称
+     *
      * @type {string}
      * @memberof UpdateApprovalFlowInput
      */
     createOrgName?: string | null;
+
     /**
      * 软删除
+     *
      * @type {boolean}
      * @memberof UpdateApprovalFlowInput
      */
     isDelete?: boolean;
+
     /**
      * 主键Id
+     *
      * @type {number}
      * @memberof UpdateApprovalFlowInput
      */

+ 0 - 1
Web/src/api-services/api.ts

@@ -12,7 +12,6 @@
  * Do not edit the class manually.
  */
 export * from './apis/apijsonapi';
-export * from './apis/approval-flow-api';
 export * from './apis/sys-auth-api';
 export * from './apis/sys-cache-api';
 export * from './apis/sys-code-gen-api';

+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Panel/PanelControl.vue → Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelControl.vue


+ 4 - 4
Web/src/views/pages/approvalFlow/component/LogicFlow/Panel/PanelDataDialog.vue → Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelDataDialog.vue

@@ -1,7 +1,7 @@
 <template>
-    <div>
-        <vue-json-pretty  :path="'res'" :data="graphData"></vue-json-pretty>
-    </div>
+	<div>
+		<vue-json-pretty :path="'res'" :data="graphData"></vue-json-pretty>
+	</div>
 </template>
 
 <script setup lang="ts">
@@ -11,4 +11,4 @@ import 'vue-json-pretty/lib/styles.css';
 var props = defineProps({
 	graphData: Object,
 });
-</script>
+</script>

+ 1 - 1
Web/src/views/pages/approvalFlow/component/LogicFlow/Panel/PanelNode.vue → Web/src/views/approvalFlow/component/LogicFlow/Panel/PanelNode.vue

@@ -86,7 +86,7 @@ const dragNode = (item: any) => {
 		border: 1px solid black;
 	}
 	.node-task {
-		background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAAXNSR0IArs4c6QAAAm9JREFUSEu1lTFo1GAUx38vZ6sOooIoVsWKk23SCp1UkIrg0EHs0M5OOolY9NJz6XXpNaeidOhQB3G1oCLUTXRxK9pe7lykk7YKhdJZuDzJXXMkaXKpBd+Y7//93sv/ve/7hP8YshO2WdKiGPQ0tMpvVTaqBSlm7f0X+EQAU4/JXcNNR5/jsRoATEcnBFqVKhSrtkz6ycySDkqOKTcvF+N/sq1yy9FXwEjDAY9JMRgDDiRYsIJQQHkGdAE11xYzrIvAw+AsP1PW511bRoO1KLysIyh+5ckhfEK5AOxNEig8rNpSSoT7H62yfkQZjGxWCl4nc7Ux2egu6r6D+xnyYBY41q7JkcrPPdXje/6wFga7tqROlOXoMtAX6OPaxkazrNekTpdCtxi0Rg7htpuXuTSXrJIOYLAYrh6DH/5ZqI7LQgNuOboADMUhRgcnl8dktV1zrbIuogzENOuuLUcDeGv8WiKh4ualP2tqrGmdQbiTDk8WbLq2HM6EO/oGuBHTfXFtGWh67t8dOU6jnAKuhoTDri1v0xKcL2l33eArcGhL8wHhFx4/3XEpRCahd1r7DWEpNKdLRidXlu7JZlICq6wvUG4Ga16O3tp9+ZY656aj6wJHQrD3Rge34o21HH0CjashiPbHv/ex9hh1atuqFCpAVet8J8cZUU7E7GtuEUbdvMwnVm45qlkNzFwPJYh4bpZ0WAxehm7BFeBsG2B0vV3ljQM1rZcR5gRmKrbM9jl6HcgrXAr97megXLHlnRVcdjFw06WEMB9pX/WB+D43YuuZS32J/ARhr1OnJTFZ8w29C9SBNfV4vetnLrNpOxT8BWh07BjujplpAAAAAElFTkSuQmCC) 
+		background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAAXNSR0IArs4c6QAAAm9JREFUSEu1lTFo1GAUx38vZ6sOooIoVsWKk23SCp1UkIrg0EHs0M5OOolY9NJz6XXpNaeidOhQB3G1oCLUTXRxK9pe7lykk7YKhdJZuDzJXXMkaXKpBd+Y7//93sv/ve/7hP8YshO2WdKiGPQ0tMpvVTaqBSlm7f0X+EQAU4/JXcNNR5/jsRoATEcnBFqVKhSrtkz6ycySDkqOKTcvF+N/sq1yy9FXwEjDAY9JMRgDDiRYsIJQQHkGdAE11xYzrIvAw+AsP1PW511bRoO1KLysIyh+5ckhfEK5AOxNEig8rNpSSoT7H62yfkQZjGxWCl4nc7Ux2egu6r6D+xnyYBY41q7JkcrPPdXje/6wFga7tqROlOXoMtAX6OPaxkazrNekTpdCtxi0Rg7htpuXuTSXrJIOYLAYrh6DH/5ZqI7LQgNuOboADMUhRgcnl8dktV1zrbIuogzENOuuLUcDeGv8WiKh4ualP2tqrGmdQbiTDk8WbLq2HM6EO/oGuBHTfXFtGWh67t8dOU6jnAKuhoTDri1v0xKcL2l33eArcGhL8wHhFx4/3XEpRCahd1r7DWEpNKdLRidXlu7JZlICq6wvUG4Ga16O3tp9+ZY656aj6wJHQrD3Rge34o21HH0CjashiPbHv/ex9hh1atuqFCpAVet8J8cZUU7E7GtuEUbdvMwnVm45qlkNzFwPJYh4bpZ0WAxehm7BFeBsG2B0vV3ljQM1rZcR5gRmKrbM9jl6HcgrXAr97megXLHlnRVcdjFw06WEMB9pX/WB+D43YuuZS32J/ARhr1OnJTFZ8w29C9SBNfV4vetnLrNpOxT8BWh07BjujplpAAAAAElFTkSuQmCC)
 			center center no-repeat;
 		cursor: grab;
 	}

+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Property/PropertyCommon.vue → Web/src/views/approvalFlow/component/LogicFlow/Property/PropertyCommon.vue


+ 4 - 6
Web/src/views/pages/approvalFlow/component/LogicFlow/Property/PropertyDialog.vue → Web/src/views/approvalFlow/component/LogicFlow/Property/PropertyDialog.vue

@@ -7,7 +7,7 @@
 <script setup>
 import { reactive, ref } from 'vue';
 
-import PropertyCommon from '/@/views/pages/approvalFlow/component/LogicFlow/Property/PropertyCommon.vue';
+import PropertyCommon from '/@/views/approvalFlow/component/LogicFlow/Property/PropertyCommon.vue';
 
 var props = defineProps({
 	lf: Object,
@@ -17,16 +17,14 @@ const emit = defineEmits(['setPropertiesFinish']);
 
 const ruleFormRef = ref();
 
-const state = reactive({
-
-});
+const state = reactive({});
 
 const setProperties = () => {};
 </script>
 
 <style lang="scss" scoped>
 .property-dialog {
-    padding-left: 20px;
-    padding-right: 20px;
+	padding-left: 20px;
+	padding-right: 20px;
 }
 </style>

+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Edges/EdgeSql.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Edges/EdgeSql.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Nodes/NodeEnd.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeEnd.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Nodes/NodeSql.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeSql.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Nodes/NodeStart.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeStart.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Nodes/NodeTask.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeTask.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/Nodes/NodeUser.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/Nodes/NodeUser.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/RegisterEdge.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/RegisterEdge.ts


+ 0 - 0
Web/src/views/pages/approvalFlow/component/LogicFlow/Register/RegisterNode.ts → Web/src/views/approvalFlow/component/LogicFlow/Register/RegisterNode.ts


+ 125 - 0
Web/src/views/approvalFlow/component/detailDialog.vue

@@ -0,0 +1,125 @@
+<template lang="">
+	<div class="flow-container">
+		<el-dialog v-model="state.isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
+			<template #header>
+				<div style="color: #fff">
+					<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
+					<span>{{ props.title }}</span>
+				</div>
+			</template>
+			<el-timeline>
+				<el-timeline-item
+					v-for="(activity, index) in state.activities"
+					:key="index"
+					:icon="activity.icon"
+					:type="activity.type"
+					:color="activity.color"
+					:size="activity.size"
+					:hollow="activity.hollow"
+					:timestamp="activity.timestamp"
+					placement="top"
+				>
+					<el-card>
+						<h4>{{ activity.content }}</h4>
+						<br />
+						<div class="demo-type">
+							<el-avatar :icon="UserFilled" />
+						</div>
+					</el-card>
+				</el-timeline-item>
+			</el-timeline>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="cancel">取 消</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref, onMounted } from 'vue';
+import type { FormRules } from 'element-plus';
+
+var props = defineProps({
+	title: {
+		type: String,
+		default: '',
+	},
+});
+
+const emit = defineEmits(['reloadTable']);
+const ruleFormRef = ref();
+
+const state = reactive({
+	loading: false,
+	isShowDialog: false,
+	ruleForm: {},
+	circleUrl: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+	activities: [
+		{
+			content: 'Event start',
+			timestamp: '2018-04-12 20:46',
+			size: 'large',
+			type: 'primary',
+			user: 'admin',
+		},
+		{
+			content: 'Approved',
+			timestamp: '2018-04-13',
+			color: '#0bbd87',
+			user: 'admin',
+		},
+		{
+			content: 'Approved',
+			timestamp: '2018-04-11',
+			color: '#0bbd87',
+			user: 'admin',
+		},
+		{
+			content: 'Success',
+			timestamp: '2018-04-11 20:46',
+			hollow: true,
+			user: 'admin',
+		},
+	],
+});
+
+const rules = ref<FormRules>({});
+
+onMounted(() => {});
+
+const openDialog = (row: any) => {
+	state.ruleForm = JSON.parse(JSON.stringify(row));
+	state.isShowDialog = true;
+};
+
+const closeDialog = () => {
+	emit('reloadTable');
+	state.isShowDialog = false;
+};
+
+const cancel = () => {
+	state.isShowDialog = false;
+};
+
+defineExpose({ openDialog });
+</script>
+
+<style scoped lang="scss">
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+.demo-type {
+	display: flex;
+}
+.demo-type > div {
+	flex: 1;
+	text-align: center;
+}
+
+.demo-type > div:not(:last-child) {
+	border-right: 1px solid var(--el-border-color);
+}
+</style>

+ 76 - 81
Web/src/views/pages/approvalFlow/component/editDialog.vue → Web/src/views/approvalFlow/component/editDialog.vue

@@ -27,7 +27,7 @@
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="状态" prop="status" :rules="[{ required: true, message: '状态不能为空', trigger: 'blur' }]">
 									<el-select clearable v-model="state.ruleForm.status" placeholder="请选择状态">
-										<el-option v-for="(item,index) in getEnumStatusData" :key="index" :value="item.value" :label="`${item.describe} [${item.value}]`"></el-option>
+										<el-option v-for="(item, index) in getEnumStatusData" :key="index" :value="item.value" :label="`${item.describe} [${item.value}]`"></el-option>
 									</el-select>
 								</el-form-item>
 							</el-col>
@@ -51,7 +51,7 @@
 								</el-form-item>
 							</el-col>
 						</el-row>
-				    </el-tab-pane>
+					</el-tab-pane>
 				</el-tabs>
 			</el-form>
 			<template #footer>
@@ -65,97 +65,93 @@
 </template>
 
 <script setup lang="ts">
-	import { reactive, ref, onMounted } from "vue";
-	import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
-	import { ElMessage } from "element-plus";
-	import type { FormRules } from "element-plus";
+import { reactive, ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+import type { FormRules } from 'element-plus';
 
-	// 接口
-	import { getAPI } from '/@/utils/axios-utils';
+import { getAPI } from '/@/utils/axios-utils';
+import { ApprovalFlowApi } from '/@/api-services/_approvalFlow/api';
+import { SysEnumApi } from '/@/api-services/api';
 
-	import { addApprovalFlow, updateApprovalFlow, detailApprovalFlow } from "/@/api/main/labApprovalFlow";
-	// Api Services
-	import { ApprovalFlowApi } from '/@/api-services/api';
-	import { UpdateApprovalFlowInput } from "/@/api-services/models";
+const getEnumStatusData = ref<any>([]);
 
-	import { SysEnumApi } from '/@/api-services/api';
-	const getEnumStatusData = ref<any>([]);
-	
-	// 父级传递来的参数
-	var props = defineProps({
-		title: {
-			type: String,
-			default: "",
-		},
-		labStatus: {
-			type: Array,
-			default: () => [],
-		},
-	});
-	// 父级传递来的函数,用于回调
-	const emit = defineEmits(["reloadTable"]);
+// 父级传递来的参数
+var props = defineProps({
+	title: {
+		type: String,
+		default: '',
+	},
+	labStatus: {
+		type: Array,
+		default: () => [],
+	},
+});
+// 父级传递来的函数,用于回调
+const emit = defineEmits(['reloadTable']);
 
-	// 定义变量内容
-	const ruleFormRef = ref();
-	const state = reactive({
-		loading: false,
-		isShowDialog: false,
-		ruleForm: {} as any,
-	});
+// 定义变量内容
+const ruleFormRef = ref();
+const state = reactive({
+	loading: false,
+	isShowDialog: false,
+	ruleForm: {} as any,
+});
 
-	// 自行添加其他规则
-	const rules = ref<FormRules>({
-		name: [{
-		pattern: /^(?!^[0-9].*$).*/,
-		message: '不能以数字开头',
-		trigger: "blur"
-	   }]
-	});
+// 自行添加其他规则
+const rules = ref<FormRules>({
+	name: [
+		{
+			pattern: /^(?!^[0-9].*$).*/,
+			message: '不能以数字开头',
+			trigger: 'blur',
+		},
+	],
+});
+
+// 页面加载时
+onMounted(async () => {
+	// getEnumStatusData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LabStatusEnum')).data.result ?? [];
+});
 
-	// 打开弹窗
-	const openDialog = async (row: any) => {
-		let rowData = JSON.parse(JSON.stringify(row));
-		state.ruleForm = rowData.id ? (await getAPI(ApprovalFlowApi).apiApprovalFlowDetailGet(rowData.id)).data.result : rowData;
-		state.isShowDialog = true;
-	};
+// 打开弹窗
+const openDialog = async (row: any) => {
+	let rowData = JSON.parse(JSON.stringify(row));
+	state.ruleForm = rowData.id ? (await getAPI(ApprovalFlowApi).apiApprovalFlowDetailGet(rowData.id)).data.result : rowData;
+	state.isShowDialog = true;
+};
 
-	// 关闭弹窗
-	const closeDialog = () => {
-		emit("reloadTable");
-		state.isShowDialog = false;
-	};
+// 关闭弹窗
+const closeDialog = () => {
+	emit('reloadTable');
+	state.isShowDialog = false;
+};
 
-	// 取消
-	const cancel = () => {
-		state.isShowDialog = false;
-	};
+// 取消
+const cancel = () => {
+	state.isShowDialog = false;
+};
 
-	// 提交
-	const submit = async () => {
-		ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
-			if (isValid) {
-				if (state.ruleForm.id == undefined || state.ruleForm.id == null || state.ruleForm.id == 0) {
-					await getAPI(ApprovalFlowApi).apiApprovalFlowAddPost(state.ruleForm);
-				} else {
-					await getAPI(ApprovalFlowApi).apiApprovalFlowUpdatePost(state.ruleForm);
-				}
-				closeDialog();
+// 提交
+const submit = async () => {
+	ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+		if (isValid) {
+			if (state.ruleForm.id == undefined || state.ruleForm.id == null || state.ruleForm.id == 0) {
+				await getAPI(ApprovalFlowApi).apiApprovalFlowAddPost(state.ruleForm);
 			} else {
-				ElMessage({
-					message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
-					type: "error",
-				});
+				await getAPI(ApprovalFlowApi).apiApprovalFlowUpdatePost(state.ruleForm);
 			}
-		});
-	};
-
-	// 页面加载时
-	onMounted(async () => {
-        getEnumStatusData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LabStatusEnum')).data.result ?? [];
+			closeDialog();
+		} else {
+			ElMessage({
+				message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
+				type: 'error',
+			});
+		}
 	});
+};
 
-	// 将属性或者函数暴露给父组件
-	defineExpose({ openDialog });
+// 将属性或者函数暴露给父组件
+defineExpose({ openDialog });
 </script>
 
 <style scoped lang="scss">
@@ -164,4 +160,3 @@
 	width: 100%;
 }
 </style>
-

+ 12 - 11
Web/src/views/pages/approvalFlow/component/editFlowDialog.vue → Web/src/views/approvalFlow/component/editFlowDialog.vue

@@ -17,10 +17,7 @@
 					<el-drawer title="属性" v-model="drawer" :direction="direction" size="500px" :before-close="handleClose">
 						<PropertyDialog v-if="drawer" :nodeData="state.nodeData" :lf="lf" @setPropertiesFinish="handleClose"></PropertyDialog>
 					</el-drawer>
-					<el-dialog
-						title="数据"
-						v-model="dataVisible"
-						width="50%">
+					<el-dialog title="数据" v-model="dataVisible" width="50%">
 						<PanelDataDialog :graphData="state.graphData"></PanelDataDialog>
 					</el-dialog>
 				</div>
@@ -34,13 +31,15 @@
 		</el-dialog>
 	</div>
 </template>
+
 <script setup lang="ts">
 import { reactive, ref, nextTick } from 'vue';
+import { ElMessageBox } from 'element-plus';
+
 import LogicFlow from '@logicflow/core';
-import '@logicflow/core/dist/style/index.css';
 import { BpmnElement, InsertNodeInPolyline, Menu, MiniMap, SelectionSelect, Snapshot } from '@logicflow/extension';
+import '@logicflow/core/dist/style/index.css';
 import '@logicflow/extension/lib/style/index.css';
-import { ElMessageBox } from 'element-plus';
 
 import RegisterEdge from './LogicFlow/Register/RegisterEdge';
 import RegisterNode from './LogicFlow/Register/RegisterNode';
@@ -49,10 +48,9 @@ import PanelControl from './LogicFlow/Panel/PanelControl.vue';
 import PanelDataDialog from './LogicFlow/Panel/PanelDataDialog.vue';
 import PropertyDialog from './LogicFlow/Property/PropertyDialog.vue';
 
-// 接口
 import { getAPI } from '/@/utils/axios-utils';
-import { ApprovalFlowApi } from '/@/api-services/api';
-import { ApprovalFlowOutput, UpdateApprovalFlowInput } from '/@/api-services/models';
+import { ApprovalFlowApi } from '/@/api-services/_approvalFlow/api';
+import { ApprovalFlowOutput, UpdateApprovalFlowInput } from '/@/api-services/_approvalFlow/models';
 
 var props = defineProps({
 	title: {
@@ -149,7 +147,7 @@ const initGraph = () => {
 			// 框选
 			SelectionSelect,
 			// 快照
-			Snapshot
+			Snapshot,
 		],
 		container: container,
 		width: container.clientWidth,
@@ -181,6 +179,7 @@ const initGraph = () => {
 	// 画布居中
 	lf.value.focusOn({ coordinate: { x: 300, y: 300 } });
 };
+
 // 框选
 const change = (val: boolean) => {
 	if (val) {
@@ -189,12 +188,14 @@ const change = (val: boolean) => {
 		lf.value?.extension.selectionSelect.closeSelectionSelect();
 	}
 };
+
 // 获取数据
 const getData = () => {
 	var data = lf.value?.getGraphData();
-    state.graphData = data;
+	state.graphData = data;
 	dataVisible.value = true;
 };
+
 // 关闭属性界面提醒
 const handleClose = (done: () => void) => {
 	ElMessageBox.confirm('确认要关闭当前属性编辑?')

+ 102 - 103
Web/src/views/pages/approvalFlow/component/editFormDialog.vue → Web/src/views/approvalFlow/component/editFormDialog.vue

@@ -41,110 +41,109 @@
 		</el-dialog>
 	</div>
 </template>
+
 <script setup lang="ts">
-    import { reactive, ref, onMounted } from "vue";
-	import type { FormRules } from "element-plus";
-
-	// 接口
-	import { getAPI } from '/@/utils/axios-utils';
-	import { ApprovalFlowApi, SysDatabaseApi, SysCodeGenApi } from '/@/api-services/api';
-    import { DbTableInfo, ApprovalFlowOutput, UpdateApprovalFlowInput } from '/@/api-services/models';
-	import { stat } from "fs";
-
-	var props = defineProps({
-		title: {
-			type: String,
-			default: "",
+import { reactive, ref, onMounted } from 'vue';
+import type { FormRules } from 'element-plus';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { ApprovalFlowApi } from '/@/api-services/_approvalFlow/api';
+import { ApprovalFlowOutput, UpdateApprovalFlowInput } from '/@/api-services/_approvalFlow/models';
+import { SysDatabaseApi, SysCodeGenApi } from '/@/api-services/api';
+import { DbTableInfo } from '/@/api-services/models';
+
+var props = defineProps({
+	title: {
+		type: String,
+		default: '',
+	},
+});
+
+const emit = defineEmits(['reloadTable']);
+const ruleFormRef = ref();
+
+const state = reactive({
+	loading: false,
+	isShowDialog: false,
+	ruleSource: {} as UpdateApprovalFlowInput,
+	ruleForm: {} as any,
+	dbData: [] as any,
+	tableData: [] as Array<DbTableInfo>,
+	typeData: [
+		{
+			name: 'add',
+			value: 'add',
+			description: '新增',
+		},
+		{
+			name: 'update',
+			value: 'update',
+			description: '更新',
+		},
+		{
+			name: 'delete',
+			value: 'delete',
+			description: '删除',
+		},
+		{
+			name: 'select',
+			value: 'select',
+			description: '查询',
+		},
+		{
+			name: 'export',
+			value: 'export',
+			description: '导出',
 		},
-	});
-
-	const emit = defineEmits(["reloadTable"]);
-	const ruleFormRef = ref();
-
-	const state = reactive({
-		loading: false,
-		isShowDialog: false,
-		ruleSource: {} as UpdateApprovalFlowInput,
-		ruleForm: {} as any,
-		dbData: [] as any,
-		tableData: [] as Array<DbTableInfo>,
-		typeData: [
-			{
-				name: 'add',
-				value: 'add',
-				description: '新增'
-			},
-			{
-				name: 'update',
-				value: 'update',
-				description: '更新'
-			},
-			{
-				name: 'delete',
-				value: 'delete',
-				description: '删除'
-			},
-			{
-				name: 'select',
-				value: 'select',
-				description: '查询'
-			},
-			{
-				name: 'export',
-				value: 'export',
-				description: '导出'
-			}
-		]
-	});
-
-	const rules = ref<FormRules>({
-	});
-
-	const openDialog = (row: ApprovalFlowOutput) => {
-		state.ruleSource = row as UpdateApprovalFlowInput;
-		state.ruleForm = row.formJson ? JSON.parse(row.formJson) : {};
-		state.isShowDialog = true;
-	};
-
-    const closeDialog = () => {
-        emit("reloadTable");
-        state.isShowDialog = false;
-    };
-
-    const cancel = () => {
-        state.isShowDialog = false;
-    };
-
-    const submit = () => {
-        state.ruleSource.formJson = JSON.stringify(state.ruleForm);
-		// 保存
-        closeDialog();
-    };
-
-	// db改变
-	const dbChanged = async () => {
-		if (state.ruleForm.configId === '') return;
-
-		var res = await getAPI(SysDatabaseApi).apiSysDatabaseTableListConfigIdGet(state.ruleForm.configId);
-		state.tableData = res.data.result ?? [];
-	};
-
-	// table改变
-	const tableChanged = (item: any) => {
-		state.ruleForm.tableName = item.name;
-	};
-
-	// type改变
-	const typeChanged = (item: any) => {
-		state.ruleForm.typeName = item.name;
-	};
-
-    onMounted(async () => {
-		var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet();
-		state.dbData = resDb.data.result;
-    });
-
-	defineExpose({ openDialog });
+	],
+});
+
+const rules = ref<FormRules>({});
+
+onMounted(async () => {
+	var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet();
+	state.dbData = resDb.data.result;
+});
+
+const openDialog = (row: ApprovalFlowOutput) => {
+	state.ruleSource = row as UpdateApprovalFlowInput;
+	state.ruleForm = row.formJson ? JSON.parse(row.formJson) : {};
+	state.isShowDialog = true;
+};
+
+const closeDialog = () => {
+	emit('reloadTable');
+	state.isShowDialog = false;
+};
+
+const cancel = () => {
+	state.isShowDialog = false;
+};
+
+const submit = () => {
+	state.ruleSource.formJson = JSON.stringify(state.ruleForm);
+	closeDialog();
+};
+
+// db改变
+const dbChanged = async () => {
+	if (state.ruleForm.configId === '') return;
+
+	var res = await getAPI(SysDatabaseApi).apiSysDatabaseTableListConfigIdGet(state.ruleForm.configId);
+	state.tableData = res.data.result ?? [];
+};
+
+// table改变
+const tableChanged = (item: any) => {
+	state.ruleForm.tableName = item.name;
+};
+
+// type改变
+const typeChanged = (item: any) => {
+	state.ruleForm.typeName = item.name;
+};
+
+defineExpose({ openDialog });
 </script>
 
 <style scoped lang="scss">
@@ -152,4 +151,4 @@
 :deep(.el-input-number) {
 	width: 100%;
 }
-</style>
+</style>

+ 219 - 0
Web/src/views/approvalFlow/index.vue

@@ -0,0 +1,219 @@
+<template>
+	<div class="labApprovalFlow-container">
+		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+			<el-form :model="state.queryParams" ref="queryForm">
+				<el-row :gutter="35">
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+						<el-form-item label="关键字">
+							<el-input v-model="state.queryParams.searchKey" placeholder="请输入模糊查询关键字" clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+						<el-form-item label="编号">
+							<el-input v-model="state.queryParams.code" placeholder="请输入编号" clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+						<el-form-item label="名称">
+							<el-input v-model="state.queryParams.name" placeholder="请输入名称" clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+						<el-form-item label="备注">
+							<el-input v-model="state.queryParams.remark" placeholder="请输入备注" clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb10">
+						<el-form-item>
+							<el-button-group>
+								<el-button type="primary" icon="ele-Search" @click="handleQuery"> 查询 </el-button>
+								<el-button icon="ele-Refresh" @click="() => (state.queryParams = {})"> 重置 </el-button>
+							</el-button-group>
+							<el-button type="primary" icon="ele-Plus" @click="openAddApprovalFlow" style="margin-left: 30px"> 新增 </el-button>
+							<el-button icon="ele-ArrowDown" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left: 5px" text> </el-button>
+							<el-button icon="ele-ArrowUp" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left: 5px" text> </el-button>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+		</el-card>
+		<el-card class="full-table" shadow="hover" style="margin-top: 5px">
+			<el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" row-key="id" border="">
+				<el-table-column type="index" label="序号" width="55" align="center" />
+				<el-table-column prop="code" label="编号" width="140" show-overflow-tooltip="" />
+				<el-table-column prop="name" label="名称" width="120" show-overflow-tooltip="" />
+				<el-table-column prop="formJson" label="表单" align="center" width="120" show-overflow-tooltip="">
+					<template #default="scope">
+						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFormDialog(scope.row)"> 表单 </el-button>
+					</template>
+				</el-table-column>
+				<el-table-column prop="flowJson" label="流程" align="center" width="120" show-overflow-tooltip="">
+					<template #default="scope">
+						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFlowDialog(scope.row)"> 流程 </el-button>
+					</template>
+				</el-table-column>
+				<el-table-column label="修改记录" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<ModifyRecord :data="scope.row" />
+					</template>
+				</el-table-column>
+				<el-table-column label="操作" width="200" align="center" fixed="right" show-overflow-tooltip="">
+					<template #default="scope">
+						<el-button icon="ele-View" size="small" text="" type="primary" @click="openDetailDialog(scope.row)"> 查看 </el-button>
+						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditApprovalFlow(scope.row)"> 编辑 </el-button>
+						<el-button icon="ele-Delete" size="small" text="" type="primary" @click="delApprovalFlow(scope.row)"> 删除 </el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination
+				v-model:currentPage="state.tableParams.page"
+				v-model:page-size="state.tableParams.pageSize"
+				:total="state.tableParams.total"
+				:page-sizes="[10, 20, 50, 100, 200, 500]"
+				small=""
+				background=""
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+			/>
+		</el-card>
+
+		<detailDialog ref="detailDialogRef" :title="state.dialogTitle" @reloadTable="handleQuery" />
+		<printDialog ref="printDialogRef" :title="state.dialogTitle" @reloadTable="handleQuery" />
+		<editDialog ref="editDialogRef" :title="state.dialogTitle" @reloadTable="handleQuery" />
+		<editFormDialog ref="editFormDialogRef" :title="state.dialogTitle" @reloadTable="handleQuery" />
+		<editFlowDialog ref="editFlowDialogRef" :title="state.dialogTitle" @updateFlow="handleFlow" @reloadTable="handleQuery" />
+	</div>
+</template>
+
+<script lang="ts" setup="" name="approvalFlow">
+import { onMounted, reactive, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+// import { auth } from '/@/utils/authFunction';
+
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
+import editFormDialog from './component/editFormDialog.vue';
+import detailDialog from './component/detailDialog.vue';
+import editFlowDialog from './component/editFlowDialog.vue';
+import editDialog from './component/editDialog.vue';
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { ApprovalFlowApi } from '/@/api-services/_approvalFlow/api';
+import { ApprovalFlowInput, ApprovalFlowOutput } from '/@/api-services/_approvalFlow/models';
+
+const showAdvanceQueryUI = ref(false);
+
+const detailDialogRef = ref();
+const editFormDialogRef = ref();
+const editFlowDialogRef = ref();
+const printDialogRef = ref();
+const editDialogRef = ref();
+
+const state = reactive({
+	loading: false,
+	tableData: [] as Array<ApprovalFlowOutput>,
+	queryParams: {} as ApprovalFlowInput,
+	tableParams: {
+		page: 1,
+		pageSize: 20,
+		total: 0 as any,
+	},
+	dialogTitle: '',
+});
+
+onMounted(async () => {
+	handleQuery();
+});
+
+// 改变高级查询的控件显示状态
+const changeAdvanceQueryUI = () => {
+	showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
+};
+
+// 查询操作
+const handleQuery = async () => {
+	state.loading = true;
+	let params = Object.assign(state.queryParams, state.tableParams);
+	var res = await getAPI(ApprovalFlowApi).apiApprovalFlowPagePost(params);
+	state.tableData = res.data.result?.items ?? [];
+	state.tableParams.total = res.data.result?.total;
+	state.loading = false;
+};
+
+// 打开新增页面
+const openAddApprovalFlow = () => {
+	state.dialogTitle = '添加审批流';
+	editDialogRef.value.openDialog({ status: 1 });
+};
+
+// 打开编辑页面
+const openEditApprovalFlow = (row: ApprovalFlowOutput) => {
+	state.dialogTitle = '编辑审批流';
+	editDialogRef.value.openDialog(row);
+};
+
+// 打开打印页面
+const openEditDialog = (row: ApprovalFlowOutput) => {
+	state.dialogTitle = '编辑审批流';
+	editDialogRef.value.openDialog(row);
+};
+
+// 打开打印页面
+const openDetailDialog = (row: ApprovalFlowOutput) => {
+	state.dialogTitle = '查看审批流';
+	detailDialogRef.value.openDialog(row);
+};
+
+const openEditFormDialog = (row: ApprovalFlowOutput) => {
+	state.dialogTitle = '编辑表单';
+	editFormDialogRef.value.openDialog(row);
+};
+
+const openEditFlowDialog = (row: ApprovalFlowOutput) => {
+	state.dialogTitle = '编辑流程';
+	editFlowDialogRef.value.openDialog(row);
+};
+
+const handleFlow = (json: string) => {
+	console.log(JSON.stringify(json));
+	handleQuery();
+};
+
+// 删除
+const delApprovalFlow = (row: ApprovalFlowOutput) => {
+	ElMessageBox.confirm(`确定要删除吗?`, '提示', {
+		confirmButtonText: '确定',
+		cancelButtonText: '取消',
+		type: 'warning',
+	})
+		.then(async () => {
+			if (row.id) {
+				await getAPI(ApprovalFlowApi).apiApprovalFlowDeletePost({ id: row.id });
+				handleQuery();
+				ElMessage.success('删除成功');
+			}
+		})
+		.catch(() => {});
+};
+
+// 改变页面容量
+const handleSizeChange = (val: number) => {
+	state.tableParams.pageSize = val;
+	handleQuery();
+};
+
+// 改变页码序号
+const handleCurrentChange = (val: number) => {
+	state.tableParams.page = val;
+	handleQuery();
+};
+</script>
+
+<style scoped>
+:deep(.el-ipnut),
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>

+ 0 - 127
Web/src/views/pages/approvalFlow/component/detailDialog.vue

@@ -1,127 +0,0 @@
-<template lang="">
-	<div class="flow-container">
-		<el-dialog v-model="state.isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
-			<template #header>
-				<div style="color: #fff">
-					<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
-					<span>{{ props.title }}</span>
-				</div>
-			</template>
-			<el-timeline>
-				<el-timeline-item
-				v-for="(activity, index) in state.activities"
-				:key="index"
-				:icon="activity.icon"
-				:type="activity.type"
-				:color="activity.color"
-				:size="activity.size"
-				:hollow="activity.hollow"
-				:timestamp="activity.timestamp"
-				placement="top">
-					<el-card>
-						<h4>{{ activity.content }}</h4>
-						<br>
-						<div class="demo-type">
-							<el-avatar :icon="UserFilled" />
-						</div>
-					</el-card>
-				</el-timeline-item>
-			</el-timeline>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="cancel">取 消</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-<script setup lang="ts">
-    import { reactive, ref, onMounted } from "vue";
-	import type { FormRules } from "element-plus";
-	import { MoreFilled, UserFilled } from '@element-plus/icons-vue'
-
-	var props = defineProps({
-		title: {
-			type: String,
-			default: "",
-		},
-	});
-
-	const emit = defineEmits(["reloadTable"]);
-	const ruleFormRef = ref();
-
-	const state = reactive({
-		loading: false,
-		isShowDialog: false,
-		ruleForm: {},
-		circleUrl: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
-		activities: [
-			{
-				content: 'Event start',
-				timestamp: '2018-04-12 20:46',
-				size: 'large',
-				type: 'primary',
-				user: 'admin'
-			},
-			{
-				content: 'Approved',
-				timestamp: '2018-04-13',
-				color: '#0bbd87',
-				user: 'admin'
-			},
-			{
-				content: 'Approved',
-				timestamp: '2018-04-11',
-				color: '#0bbd87',
-				user: 'admin'
-			},
-			{
-				content: 'Success',
-				timestamp: '2018-04-11 20:46',
-				hollow: true,
-				user: 'admin'
-			},
-		]
-	});
-
-	const rules = ref<FormRules>({
-	});
-
-	const openDialog = (row: any) => {
-		state.ruleForm = JSON.parse(JSON.stringify(row));
-		state.isShowDialog = true;
-	};
-
-    const closeDialog = () => {
-        emit("reloadTable");
-        state.isShowDialog = false;
-    };
-
-    const cancel = () => {
-        state.isShowDialog = false;
-    };
-
-    onMounted(() => {
-
-    });
-
-	defineExpose({ openDialog });
-</script>
-
-<style scoped lang="scss">
-:deep(.el-select),
-:deep(.el-input-number) {
-	width: 100%;
-}
-.demo-type {
-  display: flex;
-}
-.demo-type > div {
-  flex: 1;
-  text-align: center;
-}
-
-.demo-type > div:not(:last-child) {
-  border-right: 1px solid var(--el-border-color);
-}
-</style>

+ 0 - 240
Web/src/views/pages/approvalFlow/index.vue

@@ -1,240 +0,0 @@
-<template>
-    <div class="labApprovalFlow-container">
-        <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
-            <el-form :model="state.queryParams" ref="queryForm" labelWidth="90">
-                <el-row>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
-                        <el-form-item label="关键字">
-                            <el-input v-model="state.queryParams.searchKey" clearable="" placeholder="请输入模糊查询关键字"/>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
-                        <el-form-item label="编号">
-                            <el-input v-model="state.queryParams.code" clearable="" placeholder="请输入编号"/>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
-                        <el-form-item label="名称">
-                            <el-input v-model="state.queryParams.name" clearable="" placeholder="请输入名称"/>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
-                        <el-form-item label="备注">
-                            <el-input v-model="state.queryParams.remark" clearable="" placeholder="请输入备注"/>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb10">
-                        <el-form-item>
-                            <el-button-group style="display: flex; align-items: center;">
-                                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'labApprovalFlow:page'"> 查询 </el-button>
-                                <el-button icon="ele-Refresh" @click="() => state.queryParams = {}"> 重置 </el-button>
-                                <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> 高级查询 </el-button>
-                                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 隐藏 </el-button>
-                                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddLabApprovalFlow" v-auth="'labApprovalFlow:add'"> 新增 </el-button>
-                            </el-button-group>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-form>
-        </el-card>
-        <el-card class="full-table" shadow="hover" style="margin-top: 8px">
-            <el-table
-                :data="state.tableData"
-                style="width: 100%"
-                v-loading="state.loading"
-                tooltip-effect="light"
-                row-key="id"
-                border="">
-                <el-table-column type="index" label="序号" width="55" align="center"/>
-                <el-table-column prop="code" label="编号" width="140" show-overflow-tooltip="" />
-                <el-table-column prop="name" label="名称" width="120" show-overflow-tooltip="" />
-                <el-table-column prop="formJson" label="表单" align="center" width="120" show-overflow-tooltip="" >
-                    <template #default="scope">
-                        <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFormDialog(scope.row)" v-auth="'labCellInspectRecord:update'"> 表单 </el-button>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="flowJson" label="流程" align="center" width="120" show-overflow-tooltip="" >
-                    <template #default="scope">
-                        <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFlowDialog(scope.row)" v-auth="'labCellInspectRecord:update'"> 流程 </el-button>
-                    </template>
-                </el-table-column>
-                <el-table-column label="修改记录" align="center" show-overflow-tooltip>
-                    <template #default="scope">
-                        <ModifyRecord :data="scope.row" />
-                    </template>
-                </el-table-column>
-                <el-table-column label="操作" width="200" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('approvalFlow:update') || auth('approvalFlow:delete')">
-                    <template #default="scope">
-                        <el-button icon="ele-View" size="small" text="" type="primary" @click="openDetailDialog(scope.row)" v-auth="'approvalFlow:detail'"> 查看 </el-button>
-                        <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditApprovalFlow(scope.row)" v-auth="'approvalFlow:update'"> 编辑 </el-button>
-                        <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delApprovalFlow(scope.row)" v-auth="'approvalFlow:delete'"> 删除 </el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <el-pagination
-                v-model:currentPage="state.tableParams.page"
-                v-model:page-size="state.tableParams.pageSize"
-                :total="state.tableParams.total"
-                :page-sizes="[10, 20, 50, 100, 200, 500]"
-                small=""
-                background=""
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                layout="total, sizes, prev, pager, next, jumper" />
-            <detailDialog
-                ref="detailDialogRef"
-                :title="editTitle"
-                @reloadTable="handleQuery" />
-            <printDialog
-                ref="printDialogRef"
-                :title="editTitle"
-                @reloadTable="handleQuery" />
-            <editDialog
-                ref="editDialogRef"
-                :title="editTitle"
-                @reloadTable="handleQuery" />
-            <editFormDialog
-                ref="editFormDialogRef"
-                :title="editTitle"
-                @reloadTable="handleQuery" />
-            <editFlowDialog
-                ref="editFlowDialogRef"
-                :title="editTitle"
-                @updateFlow="handleFlow"
-                @reloadTable="handleQuery" />
-        </el-card>
-    </div>
-</template>
-
-<script lang="ts" setup="" name="approvalFlow">
-    import { reactive, ref } from "vue";
-    import { ElMessageBox, ElMessage } from "element-plus";
-    import { auth } from '/@/utils/authFunction';
-    import { formatDate } from '/@/utils/formatTime';
-
-    import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
-    import editFormDialog from '/@/views/pages/approvalFlow/component/editFormDialog.vue';
-    import detailDialog from '/@/views/pages/approvalFlow/component/detailDialog.vue';
-    import editFlowDialog from '/@/views/pages/approvalFlow/component/editFlowDialog.vue';
-    import editDialog from '/@/views/pages/approvalFlow/component/editDialog.vue';
-    import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
-    // 接口
-    import { getAPI } from '/@/utils/axios-utils';
-    
-    import { ApprovalFlowApi } from '/@/api-services/api';
-    import { ApprovalFlowInput, ApprovalFlowOutput } from '/@/api-services/models';
-
-    import commonFunction from '/@/utils/commonFunction';
-
-    const showAdvanceQueryUI = ref(false);
-
-    const detailDialogRef = ref();
-    const editFormDialogRef = ref();
-    const editFlowDialogRef = ref();
-    const printDialogRef = ref();
-    const editDialogRef = ref();
-
-    const state = reactive({
-		loading: false,
-        tableData: [] as Array<ApprovalFlowOutput>,
-		queryParams: {} as ApprovalFlowInput,
-        tableParams: {
-            page: 1,
-            pageSize: 20,
-            total: 0,
-        }
-	});
-    const detailTitle = ref("");
-    const editTitle = ref("");
-
-    // 改变高级查询的控件显示状态
-    const changeAdvanceQueryUI = () => {
-        showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
-    }
-    
-    // 查询操作
-    const handleQuery = async () => {
-        state.loading = true;
-        let params = Object.assign(state.queryParams, state.tableParams);
-        var res = await getAPI(ApprovalFlowApi).apiApprovalFlowPagePost(params);
-        state.tableData = res.data.result?.items ?? [];
-        state.tableParams.total = res.data.result?.total;
-        state.loading = false;
-    };
-
-    // 打开新增页面
-    const openAddApprovalFlow = () => {
-        editTitle.value = '添加审批流';
-        editDialogRef.value.openDialog({ status: 1 });
-    };
-
-    // 打开编辑页面
-    const openEditApprovalFlow = (row: ApprovalFlowOutput) => {
-        editTitle.value = '编辑审批流';
-        editDialogRef.value.openDialog(row);
-     };
-    
-    // 打开打印页面
-    const openEditDialog = (row: ApprovalFlowOutput) => {
-        editTitle.value = '编辑审批流';
-        editDialogRef.value.openDialog(row);
-    };
-
-    // 打开打印页面
-    const openDetailDialog = (row: ApprovalFlowOutput) => {
-        detailTitle.value = '查看审批流';
-        detailDialogRef.value.openDialog(row);
-    };
-    const openEditFormDialog = (row: ApprovalFlowOutput) => {
-        editFormTitle.value = '编辑表单';
-        editFormDialogRef.value.openDialog(row);
-    };
-
-    const openEditFlowDialog = (row: ApprovalFlowOutput) => {
-        editFlowTitle.value = '编辑流程';
-        editFlowDialogRef.value.openDialog(row);
-    };
-
-    const handleFlow = (json: string) => {
-        console.log(JSON.stringify(json));
-        handleQuery();
-    };
-    // 删除
-    const delApprovalFlow = (row: ApprovalFlowOutput) => {
-        ElMessageBox.confirm(`确定要删除吗?`, "提示", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning",
-        }).then(async () => {
-            if (row.id) {
-                await getAPI(ApprovalFlowApi).apiApprovalFlowDeletePost({ id: row.id });
-                handleQuery();
-                ElMessage.success("删除成功");
-            }
-        }).catch(() => {});
-    };
-
-    // 改变页面容量
-    const handleSizeChange = (val: number) => {
-        state.tableParams.pageSize = val;
-        handleQuery();
-    };
-
-    // 改变页码序号
-    const handleCurrentChange = (val: number) => {
-        state.tableParams.page = val;
-        handleQuery();
-    };
-
-    handleQuery();
-</script>
-
-<style scoped>
-:deep(.el-ipnut),
-:deep(.el-select),
-:deep(.el-input-number) {
-	width: 100%;
-}
-</style>
-