diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFlowRecord.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFlowRecord.cs
new file mode 100644
index 00000000..9d231dab
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFlowRecord.cs
@@ -0,0 +1,53 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Admin.NET.Core;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+///
+/// 审批流流程记录
+///
+[SugarTable("ApprovalFlowRecord", "审批流流程记录")]
+public class ApprovalFlowRecord : EntityBaseData
+{
+ ///
+ /// 表单名称
+ ///
+ [SugarColumn(ColumnName = "FormName", ColumnDescription = "表单名称", Length = 255)]
+ public string? FormName { get; set; }
+
+ ///
+ /// 表单状态
+ ///
+ [SugarColumn(ColumnName = "FormStatus", ColumnDescription = "表单状态", Length = 32)]
+ public string? FormStatus { get; set; }
+
+ ///
+ /// 表单触发
+ ///
+ [SugarColumn(ColumnName = "FormJson", ColumnDescription = "表单触发", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormJson { get; set; }
+
+ ///
+ /// 表单结果
+ ///
+ [SugarColumn(ColumnName = "FormResult", ColumnDescription = "表单结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormResult { get; set; }
+
+ ///
+ /// 流程结构
+ ///
+ [SugarColumn(ColumnName = "FlowJson", ColumnDescription = "流程结构", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FlowJson { get; set; }
+
+ ///
+ /// 流程结果
+ ///
+ [SugarColumn(ColumnName = "FlowResult", ColumnDescription = "流程结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FlowResult { get; set; }
+
+}
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalForm.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalForm.cs
new file mode 100644
index 00000000..65b7a1e6
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalForm.cs
@@ -0,0 +1,65 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Admin.NET.Core;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+///
+/// 审批流表单
+///
+[SugarTable("ApprovalForm", "审批流表单")]
+public class ApprovalForm : EntityBaseData
+{
+ ///
+ /// 编号
+ ///
+ [SugarColumn(ColumnName = "Code", ColumnDescription = "编号", Length = 32)]
+ public string? Code { get; set; }
+
+ ///
+ /// 名称
+ ///
+ [SugarColumn(ColumnName = "Name", ColumnDescription = "名称", Length = 32)]
+ public string? Name { get; set; }
+
+ ///
+ /// 表单名称
+ ///
+ [SugarColumn(ColumnName = "FormName", ColumnDescription = "表单名称", Length = 32)]
+ public string? FormName { get; set; }
+
+ ///
+ /// 表单属性
+ ///
+ [SugarColumn(ColumnName = "FormType", ColumnDescription = "表单属性", Length = 32)]
+ public string? FormType { get; set; }
+
+ ///
+ /// 表单状态
+ ///
+ [SugarColumn(ColumnName = "FormStatus", ColumnDescription = "表单状态")]
+ public int? FormStatus { get; set; }
+
+ ///
+ /// 表单结果
+ ///
+ [SugarColumn(ColumnName = "FormResult", ColumnDescription = "表单结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormResult { get; set; }
+
+ ///
+ /// 状态
+ ///
+ [SugarColumn(ColumnName = "Status", ColumnDescription = "状态")]
+ public int? Status { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [SugarColumn(ColumnName = "Remark", ColumnDescription = "备注", Length = 255)]
+ public string? Remark { get; set; }
+
+}
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFormRecord.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFormRecord.cs
new file mode 100644
index 00000000..5142870c
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Entity/ApprovalFormRecord.cs
@@ -0,0 +1,59 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Admin.NET.Core;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+///
+/// 审批流表单记录
+///
+[SugarTable("ApprovalFormRecord", "审批流表单记录")]
+public class ApprovalFormRecord : EntityBaseData
+{
+ ///
+ /// 流程Id
+ ///
+ [SugarColumn(ColumnName = "FlowId", ColumnDescription = "流程Id")]
+ public long? FlowId { get; set; }
+
+ ///
+ /// 表单名称
+ ///
+ [SugarColumn(ColumnName = "FormName", ColumnDescription = "表单名称", Length = 32)]
+ public string? FormName { get; set; }
+
+ ///
+ /// 表单类型
+ ///
+ [SugarColumn(ColumnName = "FormType", ColumnDescription = "表单类型", Length = 32)]
+ public string? FormType { get; set; }
+
+ ///
+ /// 表单状态
+ ///
+ [SugarColumn(ColumnName = "FormStatus", ColumnDescription = "表单状态", Length = 11)]
+ public string? FormStatus { get; set; }
+
+ ///
+ /// 修改前
+ ///
+ [SugarColumn(ColumnName = "FormBefore", ColumnDescription = "修改前", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormBefore { get; set; }
+
+ ///
+ /// 修改后
+ ///
+ [SugarColumn(ColumnName = "FormAfter", ColumnDescription = "修改后", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormAfter { get; set; }
+
+ ///
+ /// 表单结果
+ ///
+ [SugarColumn(ColumnName = "FormResult", ColumnDescription = "表单结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ public string? FormResult { get; set; }
+
+}
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs
index 99f56f15..ed9f17ae 100644
--- a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/GlobalUsings.cs
@@ -1,19 +1,20 @@
-// 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;
+// 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;
+global using System.ComponentModel.DataAnnotations;
global using System.Threading.Tasks;
\ No newline at end of file
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs
index ab8a80f0..59d64e25 100644
--- a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Middleware/ApprovalFlowMiddleware.cs
@@ -1,46 +1,47 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Http;
-
-namespace Admin.NET.Plugin.ApprovalFlow;
-
-///
-/// 扩展审批流中间件
-///
-public static class ApprovalFlowMiddlewareExtensions
-{
- ///
- /// 使用审批流
- ///
- ///
- ///
- public static IApplicationBuilder UseApprovalFlow(this IApplicationBuilder builder)
- {
- return builder.UseMiddleware();
- }
-}
-
-///
-/// 审批流中间件
-///
-public class ApprovalFlowMiddleware
-{
- private readonly RequestDelegate _next;
-
- public ApprovalFlowMiddleware(RequestDelegate next)
- {
- _next = next;
- }
-
- public async Task Invoke(HttpContext context)
- {
- //await App.GetRequiredService().MatchApproval(context);
-
- await _next.Invoke(context);
- }
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Admin.NET.Plugin.ApprovalFlow.Service;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Plugin.ApprovalFlow;
+
+///
+/// 扩展审批流中间件
+///
+public static class ApprovalFlowMiddlewareExtensions
+{
+ ///
+ /// 使用审批流
+ ///
+ ///
+ ///
+ public static IApplicationBuilder UseApprovalFlow(this IApplicationBuilder builder)
+ {
+ return builder.UseMiddleware();
+ }
+}
+
+///
+/// 审批流中间件
+///
+public class ApprovalFlowMiddleware
+{
+ private readonly RequestDelegate _next;
+
+ public ApprovalFlowMiddleware(RequestDelegate next)
+ {
+ _next = next;
+ }
+
+ public async Task Invoke(HttpContext context)
+ {
+ await App.GetRequiredService().MatchApproval(context);
+
+ await _next.Invoke(context);
+ }
}
\ No newline at end of file
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs
index 89ae520f..3b7e2bf8 100644
--- a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/ApprovalFlowService.cs
@@ -1,148 +1,156 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-using Microsoft.AspNetCore.Http;
-
-namespace Admin.NET.Plugin.ApprovalFlow.Service;
-
-///
-/// 审批流程服务
-///
-[ApiDescriptionSettings(ApprovalFlowConst.GroupName, Order = 100)]
-public class ApprovalFlowService : IDynamicApiController, ITransient
-{
- private readonly SqlSugarRepository _approvalFlowRep;
-
- public ApprovalFlowService(SqlSugarRepository approvalFlowRep)
- {
- _approvalFlowRep = approvalFlowRep;
- }
-
- ///
- /// 分页查询审批流
- ///
- ///
- ///
- [HttpPost]
- [ApiDescriptionSettings(Name = "Page")]
- public async Task> 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()
- .ToPagedListAsync(input.Page, input.PageSize);
- }
-
- ///
- /// 增加审批流
- ///
- ///
- ///
- [ApiDescriptionSettings(Name = "Add"), HttpPost]
- public async Task Add(AddApprovalFlowInput input)
- {
- var entity = input.Adapt();
- if (input.Code == null)
- {
- entity.Code = await LastCode("");
- }
- await _approvalFlowRep.InsertAsync(entity);
- return entity.Id;
- }
-
- ///
- /// 更新审批流
- ///
- ///
- ///
- [ApiDescriptionSettings(Name = "Update"), HttpPost]
- public async Task Update(UpdateApprovalFlowInput input)
- {
- var entity = input.Adapt();
- await _approvalFlowRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
- }
-
- ///
- /// 删除审批流
- ///
- ///
- ///
- [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); // 假删除
- }
-
- ///
- /// 获取审批流
- ///
- ///
- ///
- public async Task GetDetail([FromQuery] QueryByIdApprovalFlowInput input)
- {
- return await _approvalFlowRep.GetFirstAsync(u => u.Id == input.Id);
- }
-
- ///
- /// 根据编码获取审批流信息
- ///
- ///
- ///
- public async Task GetInfo([FromQuery] string code)
- {
- return await _approvalFlowRep.GetFirstAsync(u => u.Code == code);
- }
-
- ///
- /// 获取审批流列表
- ///
- ///
- ///
- public async Task> GetList([FromQuery] ApprovalFlowInput input)
- {
- return await _approvalFlowRep.AsQueryable().Select().ToListAsync();
- }
-
- ///
- /// 获取今天创建的最大编号
- ///
- ///
- ///
- private async Task 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);
- }
-
- ///
- /// 匹配审批流程
- ///
- ///
- ///
- [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;
- }
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using System.Text.Json;
+using Admin.NET.Plugin.ApprovalFlow.Const;
+using Admin.NET.Plugin.ApprovalFlow.Entity;
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+///
+/// 审批流程服务
+///
+[ApiDescriptionSettings(ApprovalFlowConst.GroupName, Order = 100)]
+public class ApprovalFlowService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository _approvalFlowRep;
+
+ public ApprovalFlowService(SqlSugarRepository approvalFlowRep)
+ {
+ _approvalFlowRep = approvalFlowRep;
+ }
+
+ ///
+ /// 分页查询审批流
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Page")]
+ public async Task> 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()
+ .ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ ///
+ /// 增加审批流
+ ///
+ ///
+ ///
+ [ApiDescriptionSettings(Name = "Add"), HttpPost]
+ public async Task Add(AddApprovalFlowInput input)
+ {
+ var entity = input.Adapt();
+ if (input.Code == null)
+ {
+ entity.Code = await LastCode("");
+ }
+ await _approvalFlowRep.InsertAsync(entity);
+ return entity.Id;
+ }
+
+ ///
+ /// 更新审批流
+ ///
+ ///
+ ///
+ [ApiDescriptionSettings(Name = "Update"), HttpPost]
+ public async Task Update(UpdateApprovalFlowInput input)
+ {
+ var entity = input.Adapt();
+ await _approvalFlowRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+ }
+
+ ///
+ /// 删除审批流
+ ///
+ ///
+ ///
+ [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); // 假删除
+ }
+
+ ///
+ /// 获取审批流
+ ///
+ ///
+ ///
+ public async Task GetDetail([FromQuery] QueryByIdApprovalFlowInput input)
+ {
+ return await _approvalFlowRep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ ///
+ /// 根据编码获取审批流信息
+ ///
+ ///
+ ///
+ public async Task GetInfo([FromQuery] string code)
+ {
+ return await _approvalFlowRep.GetFirstAsync(u => u.Code == code);
+ }
+
+ ///
+ /// 获取审批流列表
+ ///
+ ///
+ ///
+ public async Task> GetList([FromQuery] ApprovalFlowInput input)
+ {
+ return await _approvalFlowRep.AsQueryable().Select().ToListAsync();
+ }
+
+ ///
+ /// 获取今天创建的最大编号
+ ///
+ ///
+ ///
+ private async Task 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);
+ }
+
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "FlowList")]
+ [DisplayName("获取审批流结构")]
+ public async Task FlowList([FromQuery] string code)
+ {
+ var result = await _approvalFlowRep.AsQueryable().Where(u => u.Code == code).Select().FirstAsync();
+ var FlowJson = result.FlowJson != null ? JsonSerializer.Deserialize(result.FlowJson) : new ApprovalFlowItem();
+ var FormJson = result.FormJson != null ? JsonSerializer.Deserialize(result.FormJson) : new ApprovalFormItem();
+ return new {
+ FlowJson,
+ FormJson
+ };
+ }
+
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "FormRoutes")]
+ [DisplayName("获取审批流规则")]
+ public async Task> FormRoutes()
+ {
+ var results = await _approvalFlowRep.AsQueryable().Select().ToListAsync();
+ var list = new List();
+ foreach (var item in results)
+ {
+ var FormJson = item.FormJson != null ? JsonSerializer.Deserialize(item.FormJson) : new ApprovalFormItem();
+ if (item.FormJson != null) list.Add(FormJson.Route);
+ }
+ return list;
+ }
}
\ No newline at end of file
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowItem.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowItem.cs
new file mode 100644
index 00000000..8bd13b12
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFlowItem.cs
@@ -0,0 +1,97 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using System.Text.Json.Serialization;
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+public class ApprovalFlowItem
+{
+ [JsonPropertyName("nodes")]
+ public List Nodes { get; set; }
+
+ [JsonPropertyName("edges")]
+ public List Edges { get; set; }
+}
+
+public class ApprovalFlowNodeItem
+{
+ [JsonPropertyName("id")]
+ public string Id { get; set; }
+
+ [JsonPropertyName("type")]
+ public string Type { get; set; }
+
+ [JsonPropertyName("x")]
+ public float X { get; set; }
+
+ [JsonPropertyName("y")]
+ public float Y { get; set; }
+
+ [JsonPropertyName("properties")]
+ public FlowProperties Properties { get; set; }
+
+ [JsonPropertyName("text")]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ public FlowTextItem Text { get; set; }
+}
+
+public class ApprovalFlowEdgeItem
+{
+ [JsonPropertyName("id")]
+ public string Id { get; set; }
+
+ [JsonPropertyName("type")]
+ public string Type { get; set; }
+
+ [JsonPropertyName("sourceNodeId")]
+ public string SourceNodeId { get; set; }
+
+ [JsonPropertyName("targetNodeId")]
+ public string TargetNodeId { get; set; }
+
+ [JsonPropertyName("startPoint")]
+ public FlowEdgePointItem StartPoint { get; set; }
+
+ [JsonPropertyName("endPoint")]
+ public FlowEdgePointItem EndPoint { get; set; }
+
+ [JsonPropertyName("properties")]
+ public FlowProperties Properties { get; set; }
+
+ [JsonPropertyName("text")]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ public FlowTextItem Text { get; set; }
+
+ [JsonPropertyName("pointsList")]
+ public List PointsList { get; set; }
+}
+
+public class FlowProperties
+{
+
+}
+
+public class FlowTextItem
+{
+ [JsonPropertyName("x")]
+ public float X { get; set; }
+
+ [JsonPropertyName("y")]
+ public float Y { get; set; }
+
+ [JsonPropertyName("value")]
+ public string Value { get; set; }
+}
+
+public class FlowEdgePointItem
+{
+ [JsonPropertyName("x")]
+ public float X { get; set; }
+
+ [JsonPropertyName("y")]
+ public float Y { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFormItem.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFormItem.cs
new file mode 100644
index 00000000..e80b4b1c
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/ApprovalFlow/Dto/ApprovalFormItem.cs
@@ -0,0 +1,27 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using System.Text.Json.Serialization;
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+public class ApprovalFormItem
+{
+ [JsonPropertyName("configId")]
+ public string ConfigId { get; set; }
+
+ [JsonPropertyName("tableName")]
+ public string TableName { get; set; }
+
+ [JsonPropertyName("entityName")]
+ public string EntityName { get; set; }
+
+ [JsonPropertyName("typeName")]
+ public string TypeName { get; set; }
+
+ [JsonPropertyName("route")]
+ public string Route => EntityName[..1].ToLower() + EntityName[1..] + "/" + TypeName;
+}
\ No newline at end of file
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/SysApproval/SysApprovalService.cs b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/SysApproval/SysApprovalService.cs
new file mode 100644
index 00000000..c22a3c50
--- /dev/null
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Service/SysApproval/SysApprovalService.cs
@@ -0,0 +1,74 @@
+
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Plugin.ApprovalFlow.Service;
+
+public class SysApprovalService : ITransient
+{
+ private readonly SqlSugarRepository _approvalFlowRep;
+ private readonly SqlSugarRepository _approvalFormRep;
+
+ public SysApprovalService(SqlSugarRepository approvalFlowRep, SqlSugarRepository approvalFormRep)
+ {
+ _approvalFlowRep = approvalFlowRep;
+ _approvalFormRep = approvalFormRep;
+ }
+
+ ///
+ /// 匹配审批流程
+ ///
+ ///
+ ///
+ [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;
+
+ var serviceName = path[1];
+ if (serviceName.StartsWith("api"))
+ {
+ if (path.Length > 3)
+ {
+ var funcName = path[2];
+ var typeName = path[3];
+
+ var list = await App.GetService().FormRoutes();
+ if (list.Any(u => u.Contains(funcName) && u.Contains(typeName)))
+ {
+ var approvalFlow = new ApprovalFlowRecord
+ {
+ FormName = funcName,
+ CreateTime = DateTime.Now,
+ };
+
+ // 判断是否需要审批
+ await _approvalFlowRep.InsertAsync(approvalFlow);
+
+ var approvalForm = new ApprovalFormRecord
+ {
+ FlowId = approvalFlow.Id,
+ FormName = funcName,
+ FormType = typeName,
+ CreateTime = DateTime.Now,
+ };
+
+ // 判断是否需要审批
+ await _approvalFormRep.InsertAsync(approvalForm);
+ }
+ }
+ }
+
+ await Task.CompletedTask;
+ }
+}
\ No newline at end of file
diff --git a/Web/src/views/approvalFlow/component/editFormDialog.vue b/Web/src/views/approvalFlow/component/editFormDialog.vue
index 2758f90f..d3ded813 100644
--- a/Web/src/views/approvalFlow/component/editFormDialog.vue
+++ b/Web/src/views/approvalFlow/component/editFormDialog.vue
@@ -18,7 +18,7 @@
-
+
@@ -50,7 +50,7 @@ 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';
+import { DatabaseOutput, TableOutput } from '/@/api-services/models';
var props = defineProps({
title: {
@@ -67,8 +67,9 @@ const state = reactive({
isShowDialog: false,
ruleSource: {} as UpdateApprovalFlowInput,
ruleForm: {} as any,
- dbData: [] as any,
- tableData: [] as Array,
+ dbData: [] as Array,
+ tableData: [] as Array,
+ tableName: "",
typeData: [
{
name: 'Add',
@@ -131,11 +132,16 @@ const submit = async () => {
// 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 = (tableName: any) => {
+ var table = state.tableData.find((x) => x.tableName === tableName);
+ state.ruleForm.entityName = table?.entityName ?? '';
+};
+
defineExpose({ openDialog });