From 452514a487bcee0d2986972773633f66a6dd5757 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 10 Jan 2025 14:47:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:fire:=20chore:=20=E4=BF=AE=E6=94=B9IP?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LINGYUN.MicroService.SingleProject.sln | 31 ++- ...LY.MicroService.Applications.Single.csproj | 3 +- .../MicroServiceApplicationsSingleModule.cs | 180 +++++++++++++++++- .../appsettings.Development.json | 3 + 4 files changed, 200 insertions(+), 17 deletions(-) diff --git a/aspnet-core/LINGYUN.MicroService.SingleProject.sln b/aspnet-core/LINGYUN.MicroService.SingleProject.sln index 7b047fb43..82e482ef5 100644 --- a/aspnet-core/LINGYUN.MicroService.SingleProject.sln +++ b/aspnet-core/LINGYUN.MicroService.SingleProject.sln @@ -606,7 +606,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cap", "cap", "{7C35101B-EA2 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{4539FCDB-7192-442C-BD9B-0AC71E882F4F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AuditLogging.IP2Region", "framework\auditing\LINGYUN.Abp.AuditLogging.IP2Region\LINGYUN.Abp.AuditLogging.IP2Region.csproj", "{DFDF367D-EDE1-4365-90F9-32F529117B60}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ip-location", "ip-location", "{4247CF91-95D4-44AB-956B-4002E320DDE0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP.Location", "framework\common\LINGYUN.Abp.IP.Location\LINGYUN.Abp.IP.Location.csproj", "{B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AuditLogging.IP.Location", "framework\auditing\LINGYUN.Abp.AuditLogging.IP.Location\LINGYUN.Abp.AuditLogging.IP.Location.csproj", "{DCB3F9C2-B843-46AE-A203-091AA5D0C7D2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Messaging", "framework\common\LINGYUN.Abp.Messaging\LINGYUN.Abp.Messaging.csproj", "{5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1594,10 +1600,18 @@ Global {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Release|Any CPU.Build.0 = Release|Any CPU - {DFDF367D-EDE1-4365-90F9-32F529117B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFDF367D-EDE1-4365-90F9-32F529117B60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFDF367D-EDE1-4365-90F9-32F529117B60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFDF367D-EDE1-4365-90F9-32F529117B60}.Release|Any CPU.Build.0 = Release|Any CPU + {B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4}.Release|Any CPU.Build.0 = Release|Any CPU + {DCB3F9C2-B843-46AE-A203-091AA5D0C7D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCB3F9C2-B843-46AE-A203-091AA5D0C7D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCB3F9C2-B843-46AE-A203-091AA5D0C7D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCB3F9C2-B843-46AE-A203-091AA5D0C7D2}.Release|Any CPU.Build.0 = Release|Any CPU + {5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1860,7 +1874,7 @@ Global {BB2DF96A-6ED8-4F47-948C-230EA2065C4C} = {91867618-0D86-4410-91C6-B1166A9ACDF9} {DB80C55F-8B70-4840-942A-ED021ED88BD6} = {91867618-0D86-4410-91C6-B1166A9ACDF9} {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26} = {ECE6E6D7-A4F6-4F50-BC21-AE2EB14A3129} - {DA54E88E-C43E-4E31-92D0-08A753F2C08D} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} + {DA54E88E-C43E-4E31-92D0-08A753F2C08D} = {4247CF91-95D4-44AB-956B-4002E320DDE0} {A7417E7F-DB97-48DB-B849-AFC15854A6E7} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} {8DDE4291-BC57-4C56-9871-B982462F4C3D} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} {C5D64A2B-7E7E-4509-9F31-425D59712E6F} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} @@ -1892,7 +1906,10 @@ Global {BC7A8662-4313-4F1D-B267-9B1B69444CD3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {7C35101B-EA29-4B3D-B424-FAD625977E4D} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} {4539FCDB-7192-442C-BD9B-0AC71E882F4F} = {7C35101B-EA29-4B3D-B424-FAD625977E4D} - {DFDF367D-EDE1-4365-90F9-32F529117B60} = {C22741F9-FC56-4AE3-B543-9F15C779D345} + {4247CF91-95D4-44AB-956B-4002E320DDE0} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} + {B97E0C95-F97D-4EA7-B4DF-8B063C78CEC4} = {4247CF91-95D4-44AB-956B-4002E320DDE0} + {DCB3F9C2-B843-46AE-A203-091AA5D0C7D2} = {C22741F9-FC56-4AE3-B543-9F15C779D345} + {5A04460E-B3E8-4380-9A8E-D5E1FA6A2BBA} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {711A43C0-A2F8-4E5C-9B9F-F2551E4B3FF1} diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj index 9816ccf80..a6af244d1 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj +++ b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj @@ -64,7 +64,7 @@ - + @@ -84,6 +84,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs index 5551c0b04..14ab9d9f8 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs @@ -1,40 +1,87 @@ -using LINGYUN.Abp.AuditLogging.IP2Region; +using LINGYUN.Abp.AuditLogging.IP.Location; using LINGYUN.Abp.EventBus.CAP; +using LINGYUN.Abp.IP2Region; using Volo.Abp.MailKit; namespace LY.MicroService.Applications.Single; [DependsOn( + + // 账户模块 应用服务 typeof(AbpAccountApplicationModule), + // 账户模块 控制器 typeof(AbpAccountHttpApiModule), + // 账户模块 OpenIddict集成 typeof(AbpAccountWebOpenIddictModule), + // 账户模块 模板 + typeof(AbpAccountTemplatesModule), + + // 审计日志模块 应用服务 typeof(AbpAuditingApplicationModule), + // 审计日志模块 控制器 typeof(AbpAuditingHttpApiModule), - typeof(AbpAuditLoggingIP2RegionModule), + // 审计日志模块 IP 地址定位 + typeof(AbpAuditLoggingIPLocationModule), + // 审计日志模块 实体框架 typeof(AbpAuditLoggingEntityFrameworkCoreModule), + + // 缓存模块 Redis集成 + typeof(AbpCachingStackExchangeRedisModule), + // 缓存管理模块 Redis集成 typeof(AbpCachingManagementStackExchangeRedisModule), + // 缓存管理模块 应用服务 typeof(AbpCachingManagementApplicationModule), + // 缓存管理模块 控制器 typeof(AbpCachingManagementHttpApiModule), + + // 身份认证模块 会话管理集成 typeof(AbpIdentityAspNetCoreSessionModule), + // 身份认证模块 会话中间件 typeof(AbpIdentitySessionAspNetCoreModule), + // 身份认证模块 通知集成 typeof(AbpIdentityNotificationsModule), + // 身份认证模块 组织机构集成 + typeof(AbpIdentityOrganizaztionUnitsModule), + // 身份认证模块 微信身份标识 + typeof(AbpIdentityWeChatModule), + // 身份认证模块 领域服务 typeof(AbpIdentityDomainModule), + // 身份认证模块 应用服务 typeof(AbpIdentityApplicationModule), + // 身份认证模块 控制器 typeof(AbpIdentityHttpApiModule), + // 身份认证模块 实体框架 typeof(AbpIdentityEntityFrameworkCoreModule), + + // 多语言管理模块 领域服务 typeof(AbpLocalizationManagementDomainModule), + // 多语言管理模块 应用服务 typeof(AbpLocalizationManagementApplicationModule), + // 多语言管理模块 控制器 typeof(AbpLocalizationManagementHttpApiModule), + // 多语言管理模块 实体框架 typeof(AbpLocalizationManagementEntityFrameworkCoreModule), + + // Serilog扩展模块 应用程序信息 typeof(AbpSerilogEnrichersApplicationModule), + // Serilog扩展模块 全局唯一Id typeof(AbpSerilogEnrichersUniqueIdModule), + + // 消息模块 领域服务 typeof(AbpMessageServiceDomainModule), + // 消息模块 应用服务 typeof(AbpMessageServiceApplicationModule), + // 消息模块 控制器 typeof(AbpMessageServiceHttpApiModule), + // 消息模块 实体框架 typeof(AbpMessageServiceEntityFrameworkCoreModule), + // 通知模块 领域服务 typeof(AbpNotificationsDomainModule), + // 通知模块 应用服务 typeof(AbpNotificationsApplicationModule), + // 通知模块 控制器 typeof(AbpNotificationsHttpApiModule), + // 通知模块 实体框架 typeof(AbpNotificationsEntityFrameworkCoreModule), //typeof(AbpIdentityServerSessionModule), @@ -42,154 +89,269 @@ namespace LY.MicroService.Applications.Single; //typeof(AbpIdentityServerHttpApiModule), //typeof(AbpIdentityServerEntityFrameworkCoreModule), + // OpenIddict扩展模块 自定义身份标识 typeof(LINGYUN.Abp.OpenIddict.AspNetCore.AbpOpenIddictAspNetCoreModule), + // OpenIddict扩展模块 会话 typeof(AbpOpenIddictAspNetCoreSessionModule), + // OpenIddict扩展模块 应用服务 typeof(AbpOpenIddictApplicationModule), + // OpenIddict扩展模块 控制器 typeof(AbpOpenIddictHttpApiModule), + // OpenIddict扩展模块 实体框架 typeof(AbpOpenIddictEntityFrameworkCoreModule), + // OpenIddict扩展模块 短信认证 typeof(AbpOpenIddictSmsModule), + // OpenIddict扩展模块 平台认证 typeof(AbpOpenIddictPortalModule), + // OpenIddict扩展模块 微信认证 typeof(AbpOpenIddictWeChatModule), + // OpenIddict扩展模块 企业微信认证 typeof(AbpOpenIddictWeChatWorkModule), //typeof(AbpOssManagementMinioModule), // 取消注释以使用Minio + // 对象存储模块 文件系统 typeof(AbpOssManagementFileSystemModule), + // 对象存储模块 图片处理 typeof(AbpOssManagementImagingModule), + // 对象存储模块 应用服务 typeof(AbpOssManagementDomainModule), + // 对象存储模块 控制器 typeof(AbpOssManagementApplicationModule), + // 对象存储模块 控制器 typeof(AbpOssManagementHttpApiModule), + // 对象存储模块 设置管理 typeof(AbpOssManagementSettingManagementModule), + // 图形处理模块 typeof(AbpImagingImageSharpModule), + // 平台模块 领域服务 typeof(PlatformDomainModule), + // 平台模块 应用服务 typeof(PlatformApplicationModule), + // 平台模块 控制器 typeof(PlatformHttpApiModule), + // 平台模块 实体框架 typeof(PlatformEntityFrameworkCoreModule), + // 平台模块 VueVbenAdmin设置 typeof(PlatformSettingsVueVbenAdminModule), + // 平台模块 VueVbenAdmin主题 typeof(PlatformThemeVueVbenAdminModule), + // 平台模块 VueVbenAdmin导航 typeof(AbpUINavigationVueVbenAdminModule), + // Saas模块 领域服务 typeof(AbpSaasDomainModule), + // Saas模块 应用服务 typeof(AbpSaasApplicationModule), + // Saas模块 控制器 typeof(AbpSaasHttpApiModule), + // Saas模块 实体框架 typeof(AbpSaasEntityFrameworkCoreModule), + // 任务管理模块 领域服务 typeof(TaskManagementDomainModule), + // 任务管理模块 应用服务 typeof(TaskManagementApplicationModule), + // 任务管理模块 控制器 typeof(TaskManagementHttpApiModule), + // 任务管理模块 实体框架 typeof(TaskManagementEntityFrameworkCoreModule), + // 文本模板模块 领域服务 typeof(AbpTextTemplatingDomainModule), + // 文本模板模块 应用服务 typeof(AbpTextTemplatingApplicationModule), + // 文本模板模块 控制器 typeof(AbpTextTemplatingHttpApiModule), + // 文本模板模块 实体框架 typeof(AbpTextTemplatingEntityFrameworkCoreModule), + // Webhooks模块 领域服务 typeof(AbpWebhooksModule), + // Webhooks模块 事件总线 typeof(AbpWebhooksEventBusModule), + // Webhooks模块 身份认证事件 typeof(AbpWebhooksIdentityModule), + // Webhooks模块 Saas事件 typeof(AbpWebhooksSaasModule), + // Webhooks模块 应用服务 typeof(WebhooksManagementDomainModule), + // Webhooks模块 控制器 typeof(WebhooksManagementApplicationModule), + // Webhooks模块 控制器 typeof(WebhooksManagementHttpApiModule), + // Webhooks模块 实体框架 typeof(WebhooksManagementEntityFrameworkCoreModule), + // 功能管理模块 应用服务 typeof(LINGYUN.Abp.FeatureManagement.AbpFeatureManagementApplicationModule), + // 功能管理模块 控制器 typeof(LINGYUN.Abp.FeatureManagement.HttpApi.AbpFeatureManagementHttpApiModule), + // 功能管理模块 实体框架 typeof(AbpFeatureManagementEntityFrameworkCoreModule), + // 设置管理模块 领域服务 typeof(AbpSettingManagementDomainModule), + // 设置管理模块 应用服务 typeof(AbpSettingManagementApplicationModule), + // 设置管理模块 控制器 typeof(AbpSettingManagementHttpApiModule), + // 设置管理模块 实体框架 typeof(AbpSettingManagementEntityFrameworkCoreModule), + // 权限管理模块 应用服务 typeof(LINGYUN.Abp.PermissionManagement.AbpPermissionManagementApplicationModule), + // 权限管理模块 控制器 typeof(AbpPermissionManagementHttpApiModule), + // 权限管理模块 身份认证集成 typeof(AbpPermissionManagementDomainIdentityModule), + // 权限管理模块 OpenIddict集成 typeof(AbpPermissionManagementDomainOpenIddictModule), // typeof(AbpPermissionManagementDomainIdentityServerModule), + // 权限管理模块 实体框架 typeof(AbpPermissionManagementEntityFrameworkCoreModule), + // 权限管理模块 组织机构集成 typeof(AbpPermissionManagementDomainOrganizationUnitsModule), // 组织机构权限管理 + // 单体服务实体框架迁移模块 typeof(SingleMigrationsEntityFrameworkCoreModule), + // 实体框架MySQL集成 typeof(AbpEntityFrameworkCoreMySQLModule), + // 短信模块 阿里云集成 typeof(AbpAliyunSmsModule), + // 阿里云模块 设置管理 typeof(AbpAliyunSettingManagementModule), + // 认证模块 腾讯QQ集成 typeof(AbpAuthenticationQQModule), + // 认证模块 微信集成 typeof(AbpAuthenticationWeChatModule), + // 认证模块 JWT认证 + typeof(AbpAspNetCoreAuthenticationJwtBearerModule), + // 授权模块 组织机构集成 typeof(AbpAuthorizationOrganizationUnitsModule), - typeof(AbpIdentityOrganizaztionUnitsModule), + // 后台任务模块 typeof(AbpBackgroundTasksModule), + // 后台任务模块 行为处理 typeof(AbpBackgroundTasksActivitiesModule), + // 后台任务模块 分布式锁 typeof(AbpBackgroundTasksDistributedLockingModule), + // 后台任务模块 事件总线 typeof(AbpBackgroundTasksEventBusModule), + // 后台任务模块 异常处理 typeof(AbpBackgroundTasksExceptionHandlingModule), + // 后台任务模块 默认作业 typeof(AbpBackgroundTasksJobsModule), + // 后台任务模块 通知 typeof(AbpBackgroundTasksNotificationsModule), + // 后台任务模块 Quartz集成 typeof(AbpBackgroundTasksQuartzModule), + // 数据审计模块 应用服务 typeof(AbpDataProtectionManagementApplicationModule), + // 数据审计模块 控制器 typeof(AbpDataProtectionManagementHttpApiModule), + // 数据审计模块 实体框架 typeof(AbpDataProtectionManagementEntityFrameworkCoreModule), + // Demo模块 应用服务 typeof(AbpDemoApplicationModule), + // Demo模块 控制器 typeof(AbpDemoHttpApiModule), + // Demo模块 实体框架 typeof(AbpDemoEntityFrameworkCoreModule), + // Dapr模块 客户端 typeof(AbpDaprClientModule), + // 异常处理模块 typeof(AbpExceptionHandlingModule), + // 异常处理模块 邮件通知 typeof(AbpEmailingExceptionHandlingModule), + + // 功能限制模块 typeof(AbpFeaturesLimitValidationModule), + // 客户端功能限制模块 Redis集成 typeof(AbpFeaturesValidationRedisClientModule), + // 多语言模块 typeof(AbpAspNetCoreMvcLocalizationModule), - + // 多语言模块 语言映射 typeof(AbpLocalizationCultureMapModule), + // 多语言模块 持久化 typeof(AbpLocalizationPersistenceModule), + // OpenApi模块 授权 typeof(AbpOpenApiAuthorizationModule), + // 消息模块 实时框架 typeof(AbpIMSignalRModule), + // 通知模块 typeof(AbpNotificationsModule), + // 通知模块 默认通知 typeof(AbpNotificationsCommonModule), + // 通知模块 实时框架 typeof(AbpNotificationsSignalRModule), + // 通知模块 邮件通知 typeof(AbpNotificationsEmailingModule), + // 通知模块 微信小程序 + typeof(AbpNotificationsWeChatMiniProgramModule), + // 多租户模块 版本 typeof(AbpMultiTenancyEditionsModule), + // 腾讯QQ模块 typeof(AbpTencentQQModule), + // 腾讯云模块 设置管理 typeof(AbpTencentCloudSettingManagementModule), - typeof(AbpIdentityWeChatModule), - typeof(AbpNotificationsWeChatMiniProgramModule), + // 微信模块 微信小程序 typeof(AbpWeChatMiniProgramModule), + // 微信模块 微信公众号 typeof(AbpWeChatOfficialModule), + // 微信模块 微信公众号 应用服务 typeof(AbpWeChatOfficialApplicationModule), + // 微信模块 微信公众号 控制器 typeof(AbpWeChatOfficialHttpApiModule), + // 微信模块 企业微信 typeof(AbpWeChatWorkModule), + // 微信模块 企业微信 应用服务 typeof(AbpWeChatWorkApplicationModule), + // 微信模块 企业微信 控制器 typeof(AbpWeChatWorkHttpApiModule), + // 微信模块 微信公众号 事件处理 typeof(AbpWeChatOfficialHandlersModule), + // 微信模块 企业微信 事件处理 typeof(AbpWeChatWorkHandlersModule), + // 微信模块 设置管理 typeof(AbpWeChatSettingManagementModule), + // 数据迁移模块 typeof(AbpDataDbMigratorModule), + // IP解析模块 IP2Region集成 + typeof(AbpIP2RegionModule), + // 分布式Id生成器模块 typeof(AbpIdGeneratorModule), + // 自定义导航模块 typeof(AbpUINavigationModule), - typeof(AbpAccountTemplatesModule), - typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpCachingStackExchangeRedisModule), + // Elsa工作流模块 typeof(AbpElsaModule), + // Elsa工作流模块 工作流服务器 typeof(AbpElsaServerModule), + // Elsa工作流模块 活动 typeof(AbpElsaActivitiesModule), + // Elsa工作流模块 实体框架 typeof(AbpElsaEntityFrameworkCoreModule), + // Elsa工作流模块 MySql集成 typeof(AbpElsaEntityFrameworkCoreMySqlModule), + // CAP事件总线模块 typeof(AbpCAPEventBusModule), + // 数据导出模块 MiniExcel集成 typeof(AbpExporterMiniExcelModule), + typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpHttpClientWrapperModule), diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json b/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json index 2b7449070..fd0f3a25f 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json @@ -253,6 +253,9 @@ } }, "AuditLogging": { + "IPLocation": { + "IsEnabled": true + }, "Elasticsearch": { "IndexPrefix": "abp.dev.auditing" } From 3f02d0057c783fc9bef141ccb83f3efe8e10317c Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 10 Jan 2025 19:40:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?:sparkles:=20feat:=20=E4=BD=BF=E7=94=A8=20`?= =?UTF-8?q?useRequest`=20=E7=AE=A1=E7=90=86=E4=B8=AD=E6=96=AD=E8=AF=B7?= =?UTF-8?q?=E6=B1=82.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../@abp/identity/src/api/claim-types.ts | 85 ------ .../packages/@abp/identity/src/api/index.ts | 12 +- .../identity/src/api/organization-units.ts | 227 --------------- .../packages/@abp/identity/src/api/roles.ts | 136 --------- .../@abp/identity/src/api/security-logs.ts | 41 --- .../@abp/identity/src/api/useClaimTypesApi.ts | 105 +++++++ .../src/api/useOrganizationUnitsApi.ts | 271 ++++++++++++++++++ .../@abp/identity/src/api/useRolesApi.ts | 164 +++++++++++ .../identity/src/api/useSecurityLogsApi.ts | 57 ++++ .../@abp/identity/src/api/useUserLookup.ts | 74 +++++ .../@abp/identity/src/api/useUsersApi.ts | 249 ++++++++++++++++ .../@abp/identity/src/api/users-lookup.ts | 55 ---- .../packages/@abp/identity/src/api/users.ts | 205 ------------- .../components/claim-types/ClaimTypeModal.vue | 6 +- .../components/claim-types/ClaimTypeTable.vue | 6 +- .../src/components/claims/ClaimModal.vue | 7 +- .../OrganizationUnitModal.vue | 12 +- .../OrganizationUnitRoleTable.vue | 57 ++-- .../OrganizationUnitTree.vue | 15 +- .../OrganizationUnitUserTable.vue | 9 +- .../organization-units/SelectMemberModal.vue | 6 +- .../organization-units/SelectRoleModal.vue | 6 +- .../src/components/roles/RoleClaimModal.vue | 12 +- .../src/components/roles/RoleModal.vue | 6 +- .../src/components/roles/RoleTable.vue | 7 +- .../security-logs/SecurityLogDrawer.vue | 7 +- .../security-logs/SecurityLogTable.vue | 7 +- .../src/components/users/UserClaimModal.vue | 13 +- .../src/components/users/UserLockModal.vue | 6 +- .../src/components/users/UserModal.vue | 40 ++- .../components/users/UserPasswordModal.vue | 6 +- .../src/components/users/UserTable.vue | 6 +- apps/vben5/packages/@abp/request/package.json | 4 +- .../packages/@abp/request/src/hooks/index.ts | 1 + .../@abp/request/src/hooks/useRequest.ts | 60 ++++ apps/vben5/packages/@abp/request/src/index.ts | 3 + .../packages/@abp/request/src/types/index.ts | 1 + 37 files changed, 1148 insertions(+), 836 deletions(-) delete mode 100644 apps/vben5/packages/@abp/identity/src/api/claim-types.ts delete mode 100644 apps/vben5/packages/@abp/identity/src/api/organization-units.ts delete mode 100644 apps/vben5/packages/@abp/identity/src/api/roles.ts delete mode 100644 apps/vben5/packages/@abp/identity/src/api/security-logs.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useClaimTypesApi.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useOrganizationUnitsApi.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useRolesApi.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useSecurityLogsApi.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useUserLookup.ts create mode 100644 apps/vben5/packages/@abp/identity/src/api/useUsersApi.ts delete mode 100644 apps/vben5/packages/@abp/identity/src/api/users-lookup.ts delete mode 100644 apps/vben5/packages/@abp/identity/src/api/users.ts create mode 100644 apps/vben5/packages/@abp/request/src/hooks/index.ts create mode 100644 apps/vben5/packages/@abp/request/src/hooks/useRequest.ts create mode 100644 apps/vben5/packages/@abp/request/src/types/index.ts diff --git a/apps/vben5/packages/@abp/identity/src/api/claim-types.ts b/apps/vben5/packages/@abp/identity/src/api/claim-types.ts deleted file mode 100644 index b42816c5c..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/claim-types.ts +++ /dev/null @@ -1,85 +0,0 @@ -import type { ListResultDto, PagedResultDto } from '@abp/core'; - -import type { - GetIdentityClaimTypePagedListInput, - IdentityClaimTypeCreateDto, - IdentityClaimTypeDto, - IdentityClaimTypeUpdateDto, -} from '../types/claim-types'; - -import { requestClient } from '@abp/request'; - -/** - * 新增用户声明 - * @param input 参数 - * @returns 用户声明实体数据传输对象 - */ -export function createApi( - input: IdentityClaimTypeCreateDto, -): Promise { - return requestClient.post( - '/api/identity/claim-types', - input, - ); -} - -/** - * 删除用户声明 - * @param id 用户声明id - */ -export function deleteApi(id: string): Promise { - return requestClient.delete(`/api/identity/claim-types/${id}`); -} - -/** - * 查询用户声明 - * @param id 用户声明id - * @returns 用户声明实体数据传输对象 - */ -export function getApi(id: string): Promise { - return requestClient.get( - `/api/identity/claim-types/${id}`, - ); -} - -/** - * 更新用户声明 - * @param id 用户声明id - * @returns 用户声明实体数据传输对象 - */ -export function updateApi( - id: string, - input: IdentityClaimTypeUpdateDto, -): Promise { - return requestClient.put( - `/api/identity/claim-types/${id}`, - input, - ); -} - -/** - * 查询用户声明分页列表 - * @param input 过滤参数 - * @returns 用户声明实体数据传输对象分页列表 - */ -export function getPagedListApi( - input?: GetIdentityClaimTypePagedListInput, -): Promise> { - return requestClient.get>( - `/api/identity/claim-types`, - { - params: input, - }, - ); -} - -/** - * 获取可用的声明类型列表 - */ -export function getAssignableClaimsApi(): Promise< - ListResultDto -> { - return requestClient.get>( - `/api/identity/claim-types/actived-list`, - ); -} diff --git a/apps/vben5/packages/@abp/identity/src/api/index.ts b/apps/vben5/packages/@abp/identity/src/api/index.ts index c422a50dc..a1d18a620 100644 --- a/apps/vben5/packages/@abp/identity/src/api/index.ts +++ b/apps/vben5/packages/@abp/identity/src/api/index.ts @@ -1,6 +1,6 @@ -export * as claimTypesApi from './claim-types'; -export * as organizationUnitsApi from './organization-units'; -export * as rolesApi from './roles'; -export * as securityLogsApi from './security-logs'; -export * as usersApi from './users'; -export * as userLookupApi from './users-lookup'; +export * as useClaimTypesApi from './useClaimTypesApi'; +export * as useOrganizationUnitsApi from './useOrganizationUnitsApi'; +export * as useRolesApi from './useRolesApi'; +export * as useSecurityLogsApi from './useSecurityLogsApi'; +export * as useUserLookup from './useUserLookup'; +export * as useUsersApi from './useUsersApi'; diff --git a/apps/vben5/packages/@abp/identity/src/api/organization-units.ts b/apps/vben5/packages/@abp/identity/src/api/organization-units.ts deleted file mode 100644 index aba2b746e..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/organization-units.ts +++ /dev/null @@ -1,227 +0,0 @@ -import type { ListResultDto, PagedResultDto } from '@abp/core'; - -import type { IdentityRoleDto, IdentityUserDto } from '../types'; -import type { - GetIdentityRolesInput, - GetIdentityUsersInput, - GetOrganizationUnitPagedListInput, - GetUnaddedRoleListInput, - GetUnaddedUserListInput, - OrganizationUnitAddRoleDto, - OrganizationUnitAddUserDto, - OrganizationUnitCreateDto, - OrganizationUnitDto, - OrganizationUnitGetChildrenDto, - OrganizationUnitUpdateDto, -} from '../types/organization-units'; - -import { requestClient } from '@abp/request'; - -/** - * 新增组织机构 - * @param input 参数 - * @returns 组织机构实体数据传输对象 - */ -export function createApi( - input: OrganizationUnitCreateDto, -): Promise { - return requestClient.post( - '/api/identity/organization-units', - input, - ); -} - -/** - * 删除组织机构 - * @param id 组织机构id - */ -export function deleteApi(id: string): Promise { - return requestClient.delete(`/api/identity/organization-units/${id}`); -} - -/** - * 查询组织机构 - * @param id 组织机构id - * @returns 组织机构实体数据传输对象 - */ -export function getApi(id: string): Promise { - return requestClient.get( - `/api/identity/organization-units/${id}`, - ); -} - -/** - * 更新组织机构 - * @param id 组织机构id - * @returns 组织机构实体数据传输对象 - */ -export function updateApi( - id: string, - input: OrganizationUnitUpdateDto, -): Promise { - return requestClient.put( - `/api/identity/organization-units/${id}`, - input, - ); -} - -/** - * 查询组织机构分页列表 - * @param input 过滤参数 - * @returns 组织机构实体数据传输对象分页列表 - */ -export function getPagedListApi( - input?: GetOrganizationUnitPagedListInput, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units`, - { - params: input, - }, - ); -} - -/** - * 查询根组织机构列表 - * @returns 组织机构实体数据传输对象列表 - */ -export function getRootListApi(): Promise> { - return requestClient.get>( - `/api/identity/organization-units/root-node`, - ); -} - -/** - * 查询组织机构列表 - * @returns 组织机构实体数据传输对象列表 - */ -export function getAllListApi(): Promise> { - return requestClient.get>( - `/api/identity/organization-units/all`, - ); -} - -/** - * 查询下级组织机构列表 - * @param input 查询参数 - * @returns 组织机构实体数据传输对象列表 - */ -export function getChildrenApi( - input: OrganizationUnitGetChildrenDto, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units/find-children`, - { - params: input, - }, - ); -} - -/** - * 查询组织机构用户列表 - * @param id 组织机构id - * @param input 查询过滤参数 - * @returns 用户实体数据传输对象分页列表 - */ -export function getUserListApi( - id: string, - input?: GetIdentityUsersInput, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units/${id}/users`, - { - params: input, - }, - ); -} - -/** - * 查询未加入组织机构的用户列表 - * @param input 查询过滤参数 - * @returns 用户实体数据传输对象分页列表 - */ -export function getUnaddedUserListApi( - input: GetUnaddedUserListInput, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units/${input.id}/unadded-users`, - { - params: input, - }, - ); -} - -/** - * 用户添加到组织机构 - * @param id 组织机构id - * @param input 用户id列表 - */ -export function addMembers( - id: string, - input: OrganizationUnitAddUserDto, -): Promise { - return requestClient.post( - `/api/identity/organization-units/${id}/users`, - input, - ); -} - -/** - * 查询组织机构角色列表 - * @param id 组织机构id - * @param input 查询过滤参数 - * @returns 角色实体数据传输对象分页列表 - */ -export function getRoleListApi( - id: string, - input?: GetIdentityRolesInput, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units/${id}/roles`, - { - params: input, - }, - ); -} - -/** - * 查询未加入组织机构的角色列表 - * @param input 查询过滤参数 - * @returns 角色实体数据传输对象分页列表 - */ -export function getUnaddedRoleListApi( - input: GetUnaddedRoleListInput, -): Promise> { - return requestClient.get>( - `/api/identity/organization-units/${input.id}/unadded-roles`, - { - params: input, - }, - ); -} - -/** - * 角色添加到组织机构 - * @param id 组织机构id - * @param input 角色id列表 - */ -export function addRoles( - id: string, - input: OrganizationUnitAddRoleDto, -): Promise { - return requestClient.post( - `/api/identity/organization-units/${id}/roles`, - input, - ); -} - -/** - * 移动组织机构 - * @param id 组织机构id - * @param parentId 父级组织机构id - */ -export function moveTo(id: string, parentId?: string): Promise { - return requestClient.put(`api/identity/organization-units/${id}/move`, { - parentId, - }); -} diff --git a/apps/vben5/packages/@abp/identity/src/api/roles.ts b/apps/vben5/packages/@abp/identity/src/api/roles.ts deleted file mode 100644 index 652cd79b5..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/roles.ts +++ /dev/null @@ -1,136 +0,0 @@ -import type { ListResultDto, PagedResultDto } from '@abp/core'; - -import type { - IdentityClaimCreateDto, - IdentityClaimDeleteDto, - IdentityClaimDto, - IdentityClaimUpdateDto, -} from '../types/claims'; -import type { - GetRolePagedListInput, - IdentityRoleCreateDto, - IdentityRoleDto, - IdentityRoleUpdateDto, -} from '../types/roles'; - -import { requestClient } from '@abp/request'; - -/** - * 新增角色 - * @param input 参数 - * @returns 角色实体数据传输对象 - */ -export function createApi( - input: IdentityRoleCreateDto, -): Promise { - return requestClient.post('/api/identity/roles', input); -} - -/** - * 删除角色 - * @param id 角色id - */ -export function deleteApi(id: string): Promise { - return requestClient.delete(`/api/identity/roles/${id}`); -} - -/** - * 查询角色 - * @param id 角色id - * @returns 角色实体数据传输对象 - */ -export function getApi(id: string): Promise { - return requestClient.get(`/api/identity/roles/${id}`); -} - -/** - * 更新角色 - * @param id 角色id - * @returns 角色实体数据传输对象 - */ -export function updateApi( - id: string, - input: IdentityRoleUpdateDto, -): Promise { - return requestClient.put(`/api/identity/roles/${id}`, input); -} - -/** - * 查询角色分页列表 - * @param input 过滤参数 - * @returns 角色实体数据传输对象分页列表 - */ -export function getPagedListApi( - input?: GetRolePagedListInput, -): Promise> { - return requestClient.get>( - `/api/identity/roles`, - { - params: input, - }, - ); -} - -/** - * 从组织机构中移除角色 - * @param id 角色id - * @param ouId 组织机构id - */ -export function removeOrganizationUnitApi( - id: string, - ouId: string, -): Promise { - return requestClient.delete( - `/api/identity/roles/${id}/organization-units/${ouId}`, - ); -} - -/** - * 获取角色声明列表 - * @param id 角色id - */ -export function getClaimsApi( - id: string, -): Promise> { - return requestClient.get>( - `/api/identity/roles/${id}/claims`, - ); -} - -/** - * 删除角色声明 - * @param id 角色id - * @param input 角色声明dto - */ -export function deleteClaimApi( - id: string, - input: IdentityClaimDeleteDto, -): Promise { - return requestClient.delete(`/api/identity/roles/${id}/claims`, { - params: input, - }); -} - -/** - * 创建角色声明 - * @param id 角色id - * @param input 角色声明dto - */ -export function createClaimApi( - id: string, - input: IdentityClaimCreateDto, -): Promise { - return requestClient.post(`/api/identity/roles/${id}/claims`, input); -} - -/** - * 更新角色声明 - * @param id 角色id - * @param input 用户角色dto - */ -export function updateClaimApi( - id: string, - input: IdentityClaimUpdateDto, -): Promise { - return requestClient.put(`/api/identity/roles/${id}/claims`, input); -} diff --git a/apps/vben5/packages/@abp/identity/src/api/security-logs.ts b/apps/vben5/packages/@abp/identity/src/api/security-logs.ts deleted file mode 100644 index 686f612b5..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/security-logs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { PagedResultDto } from '@abp/core'; - -import type { - GetSecurityLogPagedRequest, - SecurityLogDto, -} from '../types/security-logs'; - -import { requestClient } from '@abp/request'; - -/** - * 删除安全日志 - * @param id id - */ -export function deleteApi(id: string): Promise { - return requestClient.delete(`/api/auditing/security-log/${id}`); -} - -/** - * 查询安全日志 - * @param id id - * @returns 安全日志实体数据传输对象 - */ -export function getApi(id: string): Promise { - return requestClient.get(`/api/auditing/security-log/${id}`); -} - -/** - * 查询安全日志分页列表 - * @param input 过滤参数 - * @returns 安全日志实体数据传输对象分页列表 - */ -export function getPagedListApi( - input?: GetSecurityLogPagedRequest, -): Promise> { - return requestClient.get>( - `/api/auditing/security-log`, - { - params: input, - }, - ); -} diff --git a/apps/vben5/packages/@abp/identity/src/api/useClaimTypesApi.ts b/apps/vben5/packages/@abp/identity/src/api/useClaimTypesApi.ts new file mode 100644 index 000000000..0fe0bdd7b --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useClaimTypesApi.ts @@ -0,0 +1,105 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { + GetIdentityClaimTypePagedListInput, + IdentityClaimTypeCreateDto, + IdentityClaimTypeDto, + IdentityClaimTypeUpdateDto, +} from '../types'; + +import { useRequest } from '@abp/request'; + +export function useClaimTypesApi() { + const { cancel, request } = useRequest(); + + /** + * 新增用户声明 + * @param input 参数 + * @returns 用户声明实体数据传输对象 + */ + function createApi( + input: IdentityClaimTypeCreateDto, + ): Promise { + return request('/api/identity/claim-types', { + data: input, + method: 'POST', + }); + } + + /** + * 删除用户声明 + * @param id 用户声明id + */ + function deleteApi(id: string): Promise { + return request(`/api/identity/claim-types/${id}`, { + method: 'DELETE', + }); + } + + /** + * 查询用户声明 + * @param id 用户声明id + * @returns 用户声明实体数据传输对象 + */ + function getApi(id: string): Promise { + return request(`/api/identity/claim-types/${id}`, { + method: 'GET', + }); + } + + /** + * 更新用户声明 + * @param id 用户声明id + * @returns 用户声明实体数据传输对象 + */ + function updateApi( + id: string, + input: IdentityClaimTypeUpdateDto, + ): Promise { + return request(`/api/identity/claim-types/${id}`, { + data: input, + method: 'PUT', + }); + } + + /** + * 查询用户声明分页列表 + * @param input 过滤参数 + * @returns 用户声明实体数据传输对象分页列表 + */ + function getPagedListApi( + input?: GetIdentityClaimTypePagedListInput, + ): Promise> { + return request>( + `/api/identity/claim-types`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 获取可用的声明类型列表 + */ + function getAssignableClaimsApi(): Promise< + ListResultDto + > { + return request>( + `/api/identity/claim-types/actived-list`, + { + method: 'GET', + }, + ); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getAssignableClaimsApi, + getPagedListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/useOrganizationUnitsApi.ts b/apps/vben5/packages/@abp/identity/src/api/useOrganizationUnitsApi.ts new file mode 100644 index 000000000..adba78017 --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useOrganizationUnitsApi.ts @@ -0,0 +1,271 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { IdentityRoleDto, IdentityUserDto } from '../types'; +import type { + GetIdentityRolesInput, + GetIdentityUsersInput, + GetOrganizationUnitPagedListInput, + GetUnaddedRoleListInput, + GetUnaddedUserListInput, + OrganizationUnitAddRoleDto, + OrganizationUnitAddUserDto, + OrganizationUnitCreateDto, + OrganizationUnitDto, + OrganizationUnitGetChildrenDto, + OrganizationUnitUpdateDto, +} from '../types/organization-units'; + +import { useRequest } from '@abp/request'; + +export function useOrganizationUnitsApi() { + const { cancel, request } = useRequest(); + + /** + * 新增组织机构 + * @param input 参数 + * @returns 组织机构实体数据传输对象 + */ + function createApi( + input: OrganizationUnitCreateDto, + ): Promise { + return request('/api/identity/organization-units', { + data: input, + method: 'GET', + }); + } + + /** + * 删除组织机构 + * @param id 组织机构id + */ + function deleteApi(id: string): Promise { + return request(`/api/identity/organization-units/${id}`, { + method: 'DELETE', + }); + } + + /** + * 查询组织机构 + * @param id 组织机构id + * @returns 组织机构实体数据传输对象 + */ + function getApi(id: string): Promise { + return request( + `/api/identity/organization-units/${id}`, + { + method: 'GET', + }, + ); + } + + /** + * 更新组织机构 + * @param id 组织机构id + * @returns 组织机构实体数据传输对象 + */ + function updateApi( + id: string, + input: OrganizationUnitUpdateDto, + ): Promise { + return request( + `/api/identity/organization-units/${id}`, + { + data: input, + method: 'PUT', + }, + ); + } + + /** + * 查询组织机构分页列表 + * @param input 过滤参数 + * @returns 组织机构实体数据传输对象分页列表 + */ + function getPagedListApi( + input?: GetOrganizationUnitPagedListInput, + ): Promise> { + return request>( + `/api/identity/organization-units`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 查询根组织机构列表 + * @returns 组织机构实体数据传输对象列表 + */ + function getRootListApi(): Promise> { + return request>( + `/api/identity/organization-units/root-node`, + { + method: 'GET', + }, + ); + } + + /** + * 查询组织机构列表 + * @returns 组织机构实体数据传输对象列表 + */ + function getAllListApi(): Promise> { + return request>( + `/api/identity/organization-units/all`, + { + method: 'GET', + }, + ); + } + + /** + * 查询下级组织机构列表 + * @param input 查询参数 + * @returns 组织机构实体数据传输对象列表 + */ + function getChildrenApi( + input: OrganizationUnitGetChildrenDto, + ): Promise> { + return request>( + `/api/identity/organization-units/find-children`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 查询组织机构用户列表 + * @param id 组织机构id + * @param input 查询过滤参数 + * @returns 用户实体数据传输对象分页列表 + */ + function getUserListApi( + id: string, + input?: GetIdentityUsersInput, + ): Promise> { + return request>( + `/api/identity/organization-units/${id}/users`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 查询未加入组织机构的用户列表 + * @param input 查询过滤参数 + * @returns 用户实体数据传输对象分页列表 + */ + function getUnaddedUserListApi( + input: GetUnaddedUserListInput, + ): Promise> { + return request>( + `/api/identity/organization-units/${input.id}/unadded-users`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 用户添加到组织机构 + * @param id 组织机构id + * @param input 用户id列表 + */ + function addMembers( + id: string, + input: OrganizationUnitAddUserDto, + ): Promise { + return request(`/api/identity/organization-units/${id}/users`, { + data: input, + method: 'POST', + }); + } + + /** + * 查询组织机构角色列表 + * @param id 组织机构id + * @param input 查询过滤参数 + * @returns 角色实体数据传输对象分页列表 + */ + function getRoleListApi( + id: string, + input?: GetIdentityRolesInput, + ): Promise> { + return request>( + `/api/identity/organization-units/${id}/roles`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 查询未加入组织机构的角色列表 + * @param input 查询过滤参数 + * @returns 角色实体数据传输对象分页列表 + */ + function getUnaddedRoleListApi( + input: GetUnaddedRoleListInput, + ): Promise> { + return request>( + `/api/identity/organization-units/${input.id}/unadded-roles`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 角色添加到组织机构 + * @param id 组织机构id + * @param input 角色id列表 + */ + function addRoles( + id: string, + input: OrganizationUnitAddRoleDto, + ): Promise { + return request(`/api/identity/organization-units/${id}/roles`, { + data: input, + method: 'GET', + }); + } + + /** + * 移动组织机构 + * @param id 组织机构id + * @param parentId 父级组织机构id + */ + function moveTo(id: string, parentId?: string): Promise { + return request(`api/identity/organization-units/${id}/move`, { + data: { parentId }, + method: 'PUT', + }); + } + + return { + addMembers, + addRoles, + cancel, + createApi, + deleteApi, + getAllListApi, + getApi, + getChildrenApi, + getPagedListApi, + getRoleListApi, + getRootListApi, + getUnaddedRoleListApi, + getUnaddedUserListApi, + getUserListApi, + moveTo, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/useRolesApi.ts b/apps/vben5/packages/@abp/identity/src/api/useRolesApi.ts new file mode 100644 index 000000000..993d1cf3b --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useRolesApi.ts @@ -0,0 +1,164 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +} from '../types/claims'; +import type { + GetRolePagedListInput, + IdentityRoleCreateDto, + IdentityRoleDto, + IdentityRoleUpdateDto, +} from '../types/roles'; + +import { useRequest } from '@abp/request'; + +export function useRolesApi() { + const { cancel, request } = useRequest(); + /** + * 新增角色 + * @param input 参数 + * @returns 角色实体数据传输对象 + */ + function createApi(input: IdentityRoleCreateDto): Promise { + return request('/api/identity/roles', { + data: input, + method: 'POST', + }); + } + + /** + * 删除角色 + * @param id 角色id + */ + function deleteApi(id: string): Promise { + return request(`/api/identity/roles/${id}`, { + method: 'DELETE', + }); + } + + /** + * 查询角色 + * @param id 角色id + * @returns 角色实体数据传输对象 + */ + function getApi(id: string): Promise { + return request(`/api/identity/roles/${id}`, { + method: 'GET', + }); + } + + /** + * 更新角色 + * @param id 角色id + * @returns 角色实体数据传输对象 + */ + function updateApi( + id: string, + input: IdentityRoleUpdateDto, + ): Promise { + return request(`/api/identity/roles/${id}`, { + data: input, + method: 'PUT', + }); + } + + /** + * 查询角色分页列表 + * @param input 过滤参数 + * @returns 角色实体数据传输对象分页列表 + */ + function getPagedListApi( + input?: GetRolePagedListInput, + ): Promise> { + return request>(`/api/identity/roles`, { + method: 'GET', + params: input, + }); + } + + /** + * 从组织机构中移除角色 + * @param id 角色id + * @param ouId 组织机构id + */ + function removeOrganizationUnitApi(id: string, ouId: string): Promise { + return request(`/api/identity/roles/${id}/organization-units/${ouId}`, { + method: 'DELETE', + }); + } + + /** + * 获取角色声明列表 + * @param id 角色id + */ + function getClaimsApi(id: string): Promise> { + return request>( + `/api/identity/roles/${id}/claims`, + { + method: 'GET', + }, + ); + } + + /** + * 删除角色声明 + * @param id 角色id + * @param input 角色声明dto + */ + function deleteClaimApi( + id: string, + input: IdentityClaimDeleteDto, + ): Promise { + return request(`/api/identity/roles/${id}/claims`, { + method: 'DELETE', + params: input, + }); + } + + /** + * 创建角色声明 + * @param id 角色id + * @param input 角色声明dto + */ + function createClaimApi( + id: string, + input: IdentityClaimCreateDto, + ): Promise { + return request(`/api/identity/roles/${id}/claims`, { + data: input, + method: 'POST', + }); + } + + /** + * 更新角色声明 + * @param id 角色id + * @param input 用户角色dto + */ + function updateClaimApi( + id: string, + input: IdentityClaimUpdateDto, + ): Promise { + return request(`/api/identity/roles/${id}/claims`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + createApi, + createClaimApi, + deleteApi, + deleteClaimApi, + getApi, + getClaimsApi, + getPagedListApi, + removeOrganizationUnitApi, + updateApi, + updateClaimApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/useSecurityLogsApi.ts b/apps/vben5/packages/@abp/identity/src/api/useSecurityLogsApi.ts new file mode 100644 index 000000000..3bb99497b --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useSecurityLogsApi.ts @@ -0,0 +1,57 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { + GetSecurityLogPagedRequest, + SecurityLogDto, +} from '../types/security-logs'; + +import { useRequest } from '@abp/request'; + +export function useSecurityLogsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除安全日志 + * @param id id + */ + function deleteApi(id: string): Promise { + return request(`/api/auditing/security-log/${id}`, { + method: 'DELETE', + }); + } + + /** + * 查询安全日志 + * @param id id + * @returns 安全日志实体数据传输对象 + */ + function getApi(id: string): Promise { + return request(`/api/auditing/security-log/${id}`, { + method: 'GET', + }); + } + + /** + * 查询安全日志分页列表 + * @param input 过滤参数 + * @returns 安全日志实体数据传输对象分页列表 + */ + function getPagedListApi( + input?: GetSecurityLogPagedRequest, + ): Promise> { + return request>( + `/api/auditing/security-log`, + { + method: 'GET', + params: input, + }, + ); + } + + return { + cancel, + deleteApi, + getApi, + getPagedListApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/useUserLookup.ts b/apps/vben5/packages/@abp/identity/src/api/useUserLookup.ts new file mode 100644 index 000000000..df1c698f7 --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useUserLookup.ts @@ -0,0 +1,74 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + IdentityUserDto, + UserLookupCountInput, + UserLookupSearchInput, +} from '../types/users'; + +import { useRequest } from '@abp/request'; + +export function useUserLookup() { + const { cancel, request } = useRequest(); + + /** + * 通过id查询用户 + * @param id 用户id + * @returns 用户实体数据传输对象 + */ + function findByIdApi(id: string): Promise { + return request(`/api/identity/users/lookup/${id}`, { + method: 'GET', + }); + } + + /** + * 通过用户名查询用户 + * @param userName 用户名 + * @returns 用户实体数据传输对象 + */ + function findByUserNameApi(userName: string): Promise { + return request( + `/api/identity/users/lookup/by-username/${userName}`, + { + method: 'GET', + }, + ); + } + + /** + * 搜索用户列表 + * @param input 搜索过滤条件 + * @returns 用户实体数据传输对象列表 + */ + function searchApi( + input?: UserLookupSearchInput, + ): Promise> { + return request>( + `/api/identity/users/lookup/search`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 搜索用户数量 + * @param input 搜索过滤条件 + */ + function countApi(input?: UserLookupCountInput): Promise { + return request(`/api/identity/users/lookup/count`, { + method: 'GET', + params: input, + }); + } + + return { + cancel, + countApi, + findByIdApi, + findByUserNameApi, + searchApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/useUsersApi.ts b/apps/vben5/packages/@abp/identity/src/api/useUsersApi.ts new file mode 100644 index 000000000..482cf167d --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/api/useUsersApi.ts @@ -0,0 +1,249 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { IdentityRoleDto, OrganizationUnitDto } from '../types'; +import type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +} from '../types/claims'; +import type { + ChangeUserPasswordInput, + GetUserPagedListInput, + IdentityUserCreateDto, + IdentityUserDto, + IdentityUserUpdateDto, +} from '../types/users'; + +import { useRequest } from '@abp/request'; + +export function useUserApi() { + const { cancel, request } = useRequest(); + + /** + * 新增用户 + * @param input 参数 + * @returns 用户实体数据传输对象 + */ + function createApi(input: IdentityUserCreateDto): Promise { + return request('/api/identity/users', { + data: input, + method: 'POST', + }); + } + + /** + * 删除用户 + * @param id 用户id + */ + function deleteApi(id: string): Promise { + return request(`/api/identity/users/${id}`, { + method: 'DELETE', + }); + } + + /** + * 查询用户 + * @param id 用户id + * @returns 用户实体数据传输对象 + */ + function getApi(id: string): Promise { + return request(`/api/identity/users/${id}`, { + method: 'GET', + }); + } + + /** + * 更新用户 + * @param id 用户id + * @returns 用户实体数据传输对象 + */ + function updateApi( + id: string, + input: IdentityUserUpdateDto, + ): Promise { + return request(`/api/identity/users/${id}`, { + data: input, + method: 'PUT', + }); + } + + /** + * 查询用户分页列表 + * @param input 过滤参数 + * @returns 用户实体数据传输对象分页列表 + */ + function getPagedListApi( + input?: GetUserPagedListInput, + ): Promise> { + return request>(`/api/identity/users`, { + method: 'GET', + params: input, + }); + } + + /** + * 从组织机构中移除用户 + * @param id 用户id + * @param ouId 组织机构id + */ + function removeOrganizationUnitApi(id: string, ouId: string): Promise { + return request(`/api/identity/users/${id}/organization-units/${ouId}`, { + method: 'DELETE', + }); + } + + /** + * 获取用户组织机构列表 + * @param id 用户id + */ + function getOrganizationUnitsApi( + id: string, + ): Promise> { + return request>( + `/api/identity/users/${id}/organization-units`, + { + method: 'GET', + }, + ); + } + + /** + * 锁定用户 + * @param id 用户id + * @param seconds 锁定时长(秒) + */ + function lockApi(id: string, seconds: number): Promise { + return request(`/api/identity/users/${id}/lock/${seconds}`, { + method: 'PUT', + }); + } + + /** + * 解锁用户 + * @param id 用户id + */ + function unLockApi(id: string): Promise { + return request(`/api/identity/users/${id}/unlock`, { + method: 'PUT', + }); + } + + /** + * 更改用户密码 + * @param id 用户id + * @param input 密码变更dto + */ + function changePasswordApi( + id: string, + input: ChangeUserPasswordInput, + ): Promise { + return request(`/api/identity/users/change-password?id=${id}`, { + data: input, + method: 'PUT', + }); + } + + /** + * 获取可用的角色列表 + */ + function getAssignableRolesApi(): Promise> { + return request>( + `/api/identity/users/assignable-roles`, + { + method: 'GET', + }, + ); + } + + /** + * 获取用户角色列表 + * @param id 用户id + */ + function getRolesApi(id: string): Promise> { + return request>( + `/api/identity/users/${id}/roles`, + { + method: 'GET', + }, + ); + } + + /** + * 获取用户声明列表 + * @param id 用户id + */ + function getClaimsApi(id: string): Promise> { + return request>( + `/api/identity/users/${id}/claims`, + { + method: 'GET', + }, + ); + } + + /** + * 删除用户声明 + * @param id 用户id + * @param input 用户声明dto + */ + function deleteClaimApi( + id: string, + input: IdentityClaimDeleteDto, + ): Promise { + return request(`/api/identity/users/${id}/claims`, { + method: 'DELETE', + params: input, + }); + } + + /** + * 创建用户声明 + * @param id 用户id + * @param input 用户声明dto + */ + function createClaimApi( + id: string, + input: IdentityClaimCreateDto, + ): Promise { + return request(`/api/identity/users/${id}/claims`, { + data: input, + method: 'POST', + }); + } + + /** + * 更新用户声明 + * @param id 用户id + * @param input 用户声明dto + */ + function updateClaimApi( + id: string, + input: IdentityClaimUpdateDto, + ): Promise { + return request(`/api/identity/users/${id}/claims`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + changePasswordApi, + createApi, + createClaimApi, + deleteApi, + deleteClaimApi, + getApi, + getAssignableRolesApi, + getClaimsApi, + getOrganizationUnitsApi, + getPagedListApi, + getRolesApi, + lockApi, + removeOrganizationUnitApi, + unLockApi, + updateApi, + updateClaimApi, + }; +} diff --git a/apps/vben5/packages/@abp/identity/src/api/users-lookup.ts b/apps/vben5/packages/@abp/identity/src/api/users-lookup.ts deleted file mode 100644 index 443970ece..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/users-lookup.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { ListResultDto } from '@abp/core'; - -import type { - IdentityUserDto, - UserLookupCountInput, - UserLookupSearchInput, -} from '../types/users'; - -import { requestClient } from '@abp/request'; - -/** - * 通过id查询用户 - * @param id 用户id - * @returns 用户实体数据传输对象 - */ -export function findByIdApi(id: string): Promise { - return requestClient.get(`/api/identity/users/lookup/${id}`); -} - -/** - * 通过用户名查询用户 - * @param userName 用户名 - * @returns 用户实体数据传输对象 - */ -export function findByUserNameApi(userName: string): Promise { - return requestClient.get( - `/api/identity/users/lookup/by-username/${userName}`, - ); -} - -/** - * 搜索用户列表 - * @param input 搜索过滤条件 - * @returns 用户实体数据传输对象列表 - */ -export function searchApi( - input?: UserLookupSearchInput, -): Promise> { - return requestClient.get>( - `/api/identity/users/lookup/search`, - { - params: input, - }, - ); -} - -/** - * 搜索用户数量 - * @param input 搜索过滤条件 - */ -export function countApi(input?: UserLookupCountInput): Promise { - return requestClient.get(`/api/identity/users/lookup/count`, { - params: input, - }); -} diff --git a/apps/vben5/packages/@abp/identity/src/api/users.ts b/apps/vben5/packages/@abp/identity/src/api/users.ts deleted file mode 100644 index 56848c068..000000000 --- a/apps/vben5/packages/@abp/identity/src/api/users.ts +++ /dev/null @@ -1,205 +0,0 @@ -import type { ListResultDto, PagedResultDto } from '@abp/core'; - -import type { IdentityRoleDto, OrganizationUnitDto } from '../types'; -import type { - IdentityClaimCreateDto, - IdentityClaimDeleteDto, - IdentityClaimDto, - IdentityClaimUpdateDto, -} from '../types/claims'; -import type { - ChangeUserPasswordInput, - GetUserPagedListInput, - IdentityUserCreateDto, - IdentityUserDto, - IdentityUserUpdateDto, -} from '../types/users'; - -import { requestClient } from '@abp/request'; - -/** - * 新增用户 - * @param input 参数 - * @returns 用户实体数据传输对象 - */ -export function createApi( - input: IdentityUserCreateDto, -): Promise { - return requestClient.post('/api/identity/users', input); -} - -/** - * 删除用户 - * @param id 用户id - */ -export function deleteApi(id: string): Promise { - return requestClient.delete(`/api/identity/users/${id}`); -} - -/** - * 查询用户 - * @param id 用户id - * @returns 用户实体数据传输对象 - */ -export function getApi(id: string): Promise { - return requestClient.get(`/api/identity/users/${id}`); -} - -/** - * 更新用户 - * @param id 用户id - * @returns 用户实体数据传输对象 - */ -export function updateApi( - id: string, - input: IdentityUserUpdateDto, -): Promise { - return requestClient.put(`/api/identity/users/${id}`, input); -} - -/** - * 查询用户分页列表 - * @param input 过滤参数 - * @returns 用户实体数据传输对象分页列表 - */ -export function getPagedListApi( - input?: GetUserPagedListInput, -): Promise> { - return requestClient.get>( - `/api/identity/users`, - { - params: input, - }, - ); -} - -/** - * 从组织机构中移除用户 - * @param id 用户id - * @param ouId 组织机构id - */ -export function removeOrganizationUnitApi( - id: string, - ouId: string, -): Promise { - return requestClient.delete( - `/api/identity/users/${id}/organization-units/${ouId}`, - ); -} - -/** - * 获取用户组织机构列表 - * @param id 用户id - */ -export function getOrganizationUnitsApi( - id: string, -): Promise> { - return requestClient.get>( - `/api/identity/users/${id}/organization-units`, - ); -} - -/** - * 锁定用户 - * @param id 用户id - * @param seconds 锁定时长(秒) - */ -export function lockApi(id: string, seconds: number): Promise { - return requestClient.put(`/api/identity/users/${id}/lock/${seconds}`); -} - -/** - * 解锁用户 - * @param id 用户id - */ -export function unLockApi(id: string): Promise { - return requestClient.put(`/api/identity/users/${id}/unlock`); -} - -/** - * 更改用户密码 - * @param id 用户id - * @param input 密码变更dto - */ -export function changePasswordApi( - id: string, - input: ChangeUserPasswordInput, -): Promise { - return requestClient.put( - `/api/identity/users/change-password?id=${id}`, - input, - ); -} - -/** - * 获取可用的角色列表 - */ -export function getAssignableRolesApi(): Promise< - ListResultDto -> { - return requestClient.get>( - `/api/identity/users/assignable-roles`, - ); -} - -/** - * 获取用户角色列表 - * @param id 用户id - */ -export function getRolesApi( - id: string, -): Promise> { - return requestClient.get>( - `/api/identity/users/${id}/roles`, - ); -} - -/** - * 获取用户声明列表 - * @param id 用户id - */ -export function getClaimsApi( - id: string, -): Promise> { - return requestClient.get>( - `/api/identity/users/${id}/claims`, - ); -} - -/** - * 删除用户声明 - * @param id 用户id - * @param input 用户声明dto - */ -export function deleteClaimApi( - id: string, - input: IdentityClaimDeleteDto, -): Promise { - return requestClient.delete(`/api/identity/users/${id}/claims`, { - params: input, - }); -} - -/** - * 创建用户声明 - * @param id 用户id - * @param input 用户声明dto - */ -export function createClaimApi( - id: string, - input: IdentityClaimCreateDto, -): Promise { - return requestClient.post(`/api/identity/users/${id}/claims`, input); -} - -/** - * 更新用户声明 - * @param id 用户id - * @param input 用户声明dto - */ -export function updateClaimApi( - id: string, - input: IdentityClaimUpdateDto, -): Promise { - return requestClient.put(`/api/identity/users/${id}/claims`, input); -} diff --git a/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeModal.vue b/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeModal.vue index 754e08fe7..17ed126ba 100644 --- a/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeModal.vue @@ -18,7 +18,7 @@ import { Textarea, } from 'ant-design-vue'; -import { createApi, getApi, updateApi } from '../../api/claim-types'; +import { useClaimTypesApi } from '../../api/useClaimTypesApi'; import { ValueType } from '../../types/claim-types'; defineOptions({ @@ -55,12 +55,16 @@ const valueTypeOptions = reactive([ }, ]); +const { cancel, createApi, getApi, updateApi } = useClaimTypesApi(); const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, onCancel() { modalApi.close(); }, + onClosed() { + cancel('ClaimType Modal has closed!'); + }, onConfirm: async () => { await form.value?.validate(); const api = formModel.value.id diff --git a/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeTable.vue b/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeTable.vue index 174f5ef52..6a8ba2ae9 100644 --- a/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/claim-types/ClaimTypeTable.vue @@ -14,7 +14,7 @@ import { useVbenVxeGrid } from '@abp/ui'; import { DeleteOutlined, EditOutlined } from '@ant-design/icons-vue'; import { Button, message, Modal } from 'ant-design-vue'; -import { deleteApi, getPagedListApi } from '../../api/claim-types'; +import { useClaimTypesApi } from '../../api/useClaimTypesApi'; import { IdentityClaimTypePermissions } from '../../constants/permissions'; import { ValueType } from '../../types/claim-types'; @@ -29,6 +29,7 @@ const CheckIcon = createIconifyIcon('ant-design:check-outlined'); const CloseIcon = createIconifyIcon('ant-design:close-outlined'); const { hasAccessByCodes } = useAccess(); +const { cancel, deleteApi, getPagedListApi } = useClaimTypesApi(); const formOptions: VbenFormProps = { // 默认展开 @@ -165,6 +166,9 @@ const handleDelete = (row: IdentityClaimTypeDto) => { Modal.confirm({ centered: true, content: $t('AbpIdentity.WillDeleteClaim', [row.name]), + onCancel: () => { + cancel('User closed delete modal.'); + }, onOk: async () => { await deleteApi(row.id); message.success($t('AbpUi.SuccessfullyDeleted')); diff --git a/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue index 4709cd7e4..029479902 100644 --- a/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue @@ -5,7 +5,7 @@ import type { ClaimEditModalProps } from './types'; import { useVbenForm, useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { getAssignableClaimsApi } from '../../api/claim-types'; +import { useClaimTypesApi } from '../../api/useClaimTypesApi'; defineOptions({ name: 'ClaimModal', @@ -15,7 +15,7 @@ const { createApi, updateApi } = defineProps(); const emits = defineEmits<{ (event: 'change', data: IdentityClaimDto): void; }>(); - +const { cancel, getAssignableClaimsApi } = useClaimTypesApi(); const [Form, formApi] = useVbenForm({ commonConfig: { // 所有表单项 @@ -43,6 +43,9 @@ const [Form, formApi] = useVbenForm({ const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, + onClosed() { + cancel('Claim modal has closed!'); + }, async onConfirm() { await formApi.validateAndSubmitForm(); }, diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitModal.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitModal.vue index e9e25200e..7b9fcbf2f 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitModal.vue @@ -10,7 +10,7 @@ import { $t } from '@vben/locales'; import { useVbenForm } from '@abp/ui'; -import { createApi, getApi, updateApi } from '../../api/organization-units'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; defineOptions({ name: 'OrganizationUnitModal', @@ -23,6 +23,7 @@ const defaultModel = { displayName: '', } as OrganizationUnitDto; +const { cancel, createApi, getApi, updateApi } = useOrganizationUnitsApi(); const [Form, formApi] = useVbenForm({ handleSubmit: onSubmit, schema: [ @@ -65,6 +66,9 @@ const [Modal, modalApi] = useVbenModal({ onCancel() { modalApi.close(); }, + onClosed() { + cancel('Organization Unit Modal has closed!'); + }, onConfirm: async () => { await formApi.validateAndSubmitForm(); }, @@ -97,13 +101,13 @@ const [Modal, modalApi] = useVbenModal({ }); async function onSubmit(input: Record) { - const api = input.id - ? updateApi(input.id, input as OrganizationUnitUpdateDto) - : createApi(input as OrganizationUnitCreateDto); try { modalApi.setState({ confirmLoading: true, }); + const api = input.id + ? updateApi(input.id, input as OrganizationUnitUpdateDto) + : createApi(input as OrganizationUnitCreateDto); const dto = await api; emits('change', dto); modalApi.close(); diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitRoleTable.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitRoleTable.vue index 3f50eb0bc..6d55021d2 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitRoleTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitRoleTable.vue @@ -15,8 +15,8 @@ import { import { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue'; import { Button, Modal } from 'ant-design-vue'; -import { addRoles, getRoleListApi } from '../../api/organization-units'; -import { removeOrganizationUnitApi } from '../../api/roles'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; +import { useRolesApi } from '../../api/useRolesApi'; import { OrganizationUnitPermissions } from '../../constants/permissions'; defineOptions({ @@ -32,6 +32,8 @@ const SelectRoleModal = defineAsyncComponent( ); const { hasAccessByCodes } = useAccess(); +const { addRoles, getRoleListApi } = useOrganizationUnitsApi(); +const { cancel, removeOrganizationUnitApi } = useRolesApi(); const getAddRoleEnabled = computed(() => { return ( @@ -100,7 +102,7 @@ const [RoleModal, roleModalApi] = useVbenModal({ }); const onRefresh = () => { - nextTick(query); + return nextTick(query); }; const onDelete = (row: IdentityRoleDto) => { @@ -109,11 +111,17 @@ const onDelete = (row: IdentityRoleDto) => { content: $t('AbpIdentity.OrganizationUnit:AreYouSureRemoveRole', [ row.name, ]), - onOk: () => { - setLoading(true); - return removeOrganizationUnitApi(row.id, props.selectedKey!) - .then(onRefresh) - .finally(() => setLoading(false)); + onCancel: () => { + cancel('User closed cancel delete modal.'); + }, + onOk: async () => { + try { + setLoading(true); + await removeOrganizationUnitApi(row.id, props.selectedKey!); + await onRefresh(); + } finally { + setLoading(false); + } }, title: $t('AbpUi.AreYouSure'), }); @@ -126,24 +134,23 @@ const onShowRole = () => { roleModalApi.open(); }; -const onCreateRole = (roles: IdentityRoleDto[]) => { - roleModalApi.setState({ - closable: false, - confirmLoading: true, - }); - addRoles(props.selectedKey!, { - roleIds: roles.map((item) => item.id), - }) - .then(() => { - roleModalApi.close(); - query(); - }) - .finally(() => { - roleModalApi.setState({ - closable: true, - confirmLoading: false, - }); +const onCreateRole = async (roles: IdentityRoleDto[]) => { + try { + roleModalApi.setState({ + closable: false, + confirmLoading: true, + }); + await addRoles(props.selectedKey!, { + roleIds: roles.map((item) => item.id), + }); + roleModalApi.close(); + await query(); + } finally { + roleModalApi.setState({ + closable: true, + confirmLoading: false, }); + } }; watch(() => props.selectedKey, onRefresh); diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitTree.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitTree.vue index e4e7034ac..99f53aca3 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitTree.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitTree.vue @@ -29,13 +29,7 @@ import { Tree, } from 'ant-design-vue'; -import { - deleteApi, - getApi, - getChildrenApi, - getRootListApi, - moveTo, -} from '../../api/organization-units'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; defineOptions({ name: 'OrganizationUnitTree', @@ -45,6 +39,9 @@ const emits = defineEmits<{ (event: 'selected', id?: string): void; }>(); +const { deleteApi, getApi, getChildrenApi, getRootListApi, moveTo } = + useOrganizationUnitsApi(); + const MenuItem = Menu.Item; const PermissionsOutlined = createIconifyIcon('icon-park-outline:permissions'); const OrganizationUnitModal = defineAsyncComponent( @@ -169,9 +166,9 @@ function onDrop(info: AntTreeNodeDropEvent) { const eventKey = String(info.dragNode.eventKey); const api = info.dropPosition === -1 - ? moveTo(eventKey) // parent + ? moveTo(eventKey, undefined) // parent : moveTo(eventKey, String(info.node.eventKey)); // children - api.then(() => onRefresh()); + api.then(onRefresh); } onMounted(onRefresh); diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitUserTable.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitUserTable.vue index 250105026..f304696a6 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitUserTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/OrganizationUnitUserTable.vue @@ -13,8 +13,8 @@ import { useVbenVxeGrid } from '@abp/ui'; import { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue'; import { Button, Modal } from 'ant-design-vue'; -import { addMembers, getUserListApi } from '../../api/organization-units'; -import { removeOrganizationUnitApi } from '../../api/users'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; +import { useUserApi } from '../../api/useUsersApi'; import { OrganizationUnitPermissions } from '../../constants/permissions'; defineOptions({ @@ -24,6 +24,8 @@ defineOptions({ const props = defineProps<{ selectedKey?: string; }>(); +const { cancel, removeOrganizationUnitApi } = useUserApi(); +const { addMembers, getUserListApi } = useOrganizationUnitsApi(); const SelectMemberModal = defineAsyncComponent( () => import('./SelectMemberModal.vue'), @@ -111,6 +113,9 @@ const onDelete = (row: IdentityUserDto) => { content: $t('AbpIdentity.OrganizationUnit:AreYouSureRemoveUser', [ row.userName, ]), + onCancel: () => { + cancel('User closed cancel delete modal.'); + }, onOk: () => { setLoading(true); return removeOrganizationUnitApi(row.id, props.selectedKey!) diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectMemberModal.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectMemberModal.vue index 7980d2edf..c60fedc98 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectMemberModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectMemberModal.vue @@ -10,7 +10,7 @@ import { $t } from '@vben/locales'; import { useVbenVxeGrid } from '@abp/ui'; -import { getUnaddedUserListApi } from '../../api/organization-units'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; defineOptions({ name: 'SelectMemberModal', @@ -18,6 +18,7 @@ defineOptions({ const emits = defineEmits<{ (event: 'confirm', items: IdentityUserDto[]): void; }>(); +const { cancel, getUnaddedUserListApi } = useOrganizationUnitsApi(); const selectedUsers = ref([]); @@ -52,6 +53,9 @@ const [Modal, modalApi] = useVbenModal({ onCancel() { modalApi.close(); }, + onClosed() { + cancel(); + }, onConfirm: async () => { emits('confirm', toValue(selectedUsers)); }, diff --git a/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectRoleModal.vue b/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectRoleModal.vue index 218818fc0..2ccea7392 100644 --- a/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectRoleModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/organization-units/SelectRoleModal.vue @@ -12,7 +12,7 @@ import { type VxeGridProps, } from '@abp/ui'; -import { getUnaddedRoleListApi } from '../../api/organization-units'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; defineOptions({ name: 'SelectRoleModal', @@ -20,6 +20,7 @@ defineOptions({ const emits = defineEmits<{ (event: 'confirm', items: IdentityRoleDto[]): void; }>(); +const { cancel, getUnaddedRoleListApi } = useOrganizationUnitsApi(); const selectedRoles = ref([]); @@ -54,6 +55,9 @@ const [Modal, modalApi] = useVbenModal({ onCancel() { modalApi.close(); }, + onClosed() { + cancel(); + }, onConfirm: async () => { emits('confirm', toValue(selectedRoles)); }, diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue index 6fcc1c115..417745deb 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue @@ -11,12 +11,7 @@ import { defineAsyncComponent } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { - createClaimApi, - deleteClaimApi, - getClaimsApi, - updateClaimApi, -} from '../../api/roles'; +import { useRolesApi } from '../../api/useRolesApi'; import { IdentityRolePermissions } from '../../constants/permissions'; defineOptions({ @@ -27,12 +22,17 @@ const ClaimTable = defineAsyncComponent( () => import('../claims/ClaimTable.vue'), ); +const { cancel, createClaimApi, deleteClaimApi, getClaimsApi, updateClaimApi } = + useRolesApi(); const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, onCancel() { modalApi.close(); }, + onClosed() { + cancel('Role Claim modal has closed!'); + }, onConfirm: async () => {}, showCancelButton: false, showConfirmButton: false, diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleModal.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleModal.vue index 2a94f5b4d..b4739a371 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleModal.vue @@ -10,7 +10,7 @@ import { $t } from '@vben/locales'; import { Checkbox, Form, Input, message } from 'ant-design-vue'; -import { createApi, getApi, updateApi } from '../../api/roles'; +import { useRolesApi } from '../../api/useRolesApi'; defineOptions({ name: 'RoleModal', @@ -30,12 +30,16 @@ const defaultModel = { const form = ref(); const formModel = ref({ ...defaultModel }); +const { cancel, createApi, getApi, updateApi } = useRolesApi(); const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, onCancel() { modalApi.close(); }, + onClosed() { + cancel('Role modal has closed!'); + }, onConfirm: async () => { await form.value?.validate(); const api = formModel.value.id diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue index e9c78dfb0..699d037e6 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue @@ -22,7 +22,7 @@ import { } from '@ant-design/icons-vue'; import { Button, Dropdown, Menu, message, Modal, Tag } from 'ant-design-vue'; -import { deleteApi, getPagedListApi } from '../../api/roles'; +import { useRolesApi } from '../../api/useRolesApi'; import { IdentityRolePermissions } from '../../constants/permissions'; defineOptions({ @@ -39,6 +39,8 @@ const RoleModal = defineAsyncComponent(() => import('./RoleModal.vue')); const ClaimModal = defineAsyncComponent(() => import('./RoleClaimModal.vue')); const abpStore = useAbpStore(); const { hasAccessByCodes } = useAccess(); +const { cancel, deleteApi, getPagedListApi } = useRolesApi(); + const [RolePermissionModal, permissionModalApi] = useVbenModal({ connectedComponent: PermissionModal, }); @@ -134,6 +136,9 @@ const handleDelete = (row: IdentityRoleDto) => { Modal.confirm({ centered: true, content: $t('AbpIdentity.RoleDeletionConfirmationMessage', [row.name]), + onCancel: () => { + cancel('User closed cancel delete modal.'); + }, onOk: async () => { await deleteApi(row.id); message.success($t('AbpUi.SuccessfullyDeleted')); diff --git a/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogDrawer.vue b/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogDrawer.vue index 39cd7f6ce..3ff85694c 100644 --- a/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogDrawer.vue +++ b/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogDrawer.vue @@ -9,7 +9,7 @@ import { $t } from '@vben/locales'; import { formatToDateTime } from '@abp/core'; import { Descriptions } from 'ant-design-vue'; -import { getApi } from '../../api/security-logs'; +import { useSecurityLogsApi } from '../../api/useSecurityLogsApi'; defineOptions({ name: 'SecurityLogDrawer', @@ -19,8 +19,13 @@ const DescriptionsItem = Descriptions.Item; const formModel = ref({} as SecurityLogDto); +const { cancel, getApi } = useSecurityLogsApi(); + const [Drawer, drawerApi] = useVbenDrawer({ class: 'w-auto', + onBeforeClose() { + cancel('Security log drawer has closed!'); + }, onCancel() { drawerApi.close(); }, diff --git a/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogTable.vue b/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogTable.vue index 77448e6f1..4cf9b08d0 100644 --- a/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/security-logs/SecurityLogTable.vue @@ -13,13 +13,14 @@ import { useVbenVxeGrid } from '@abp/ui'; import { DeleteOutlined, EditOutlined } from '@ant-design/icons-vue'; import { Button, message, Modal, Tag } from 'ant-design-vue'; -import { deleteApi, getPagedListApi } from '../../api/security-logs'; +import { useSecurityLogsApi } from '../../api/useSecurityLogsApi'; import { SecurityLogPermissions } from '../../constants/permissions'; defineOptions({ name: 'SecurityLogTable', }); +const { cancel, deleteApi, getPagedListApi } = useSecurityLogsApi(); const formOptions: VbenFormProps = { // 默认展开 collapsed: false, @@ -182,6 +183,7 @@ const gridOptions: VxeGridProps = { const gridEvents: VxeGridListeners = { sortChange: onSort, }; + const [Grid, gridApi] = useVbenVxeGrid({ formOptions, gridEvents, @@ -202,6 +204,9 @@ function onDelete(row: SecurityLogDto) { Modal.confirm({ centered: true, content: $t('AbpUi.ItemWillBeDeletedMessage'), + onCancel: () => { + cancel('User closed cancel delete modal.'); + }, onOk: async () => { await deleteApi(row.id); message.success($t('AbpUi.SuccessfullyDeleted')); diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue index 1ce9b43e2..0b602428d 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue @@ -11,12 +11,7 @@ import { defineAsyncComponent } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { - createClaimApi, - deleteClaimApi, - getClaimsApi, - updateClaimApi, -} from '../../api/users'; +import { useUserApi } from '../../api/useUsersApi'; import { IdentityUserPermissions } from '../../constants/permissions'; defineOptions({ @@ -27,13 +22,17 @@ const ClaimTable = defineAsyncComponent( () => import('../claims/ClaimTable.vue'), ); +const { cancel, createClaimApi, deleteClaimApi, getClaimsApi, updateClaimApi } = + useUserApi(); const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, onCancel() { modalApi.close(); }, - onConfirm: async () => {}, + onClosed() { + cancel('User claim modal has closed!'); + }, showCancelButton: false, showConfirmButton: false, title: $t('AbpIdentity.ManageClaim'), diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserLockModal.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserLockModal.vue index 235a7c03b..2a5b778d1 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserLockModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserLockModal.vue @@ -5,7 +5,7 @@ import { $t } from '@vben/locales'; import { useVbenForm } from '@abp/ui'; -import { lockApi } from '../../api/users'; +import { useUserApi } from '../../api/useUsersApi'; defineOptions({ name: 'UserLockModal', @@ -23,6 +23,7 @@ enum LockType { Years = 32_140_800, // 按31*12天计算 } +const { cancel, lockApi } = useUserApi(); const [Form, formApi] = useVbenForm({ commonConfig: { // 所有表单项 @@ -77,6 +78,9 @@ const [Modal, modalApi] = useVbenModal({ onCancel() { modalApi.close(); }, + onClosed() { + cancel('User lock modal has closed!'); + }, onConfirm: async () => { await formApi.validateAndSubmitForm(); }, diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserModal.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserModal.vue index e0b7b3023..d56e643e7 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserModal.vue @@ -23,15 +23,8 @@ import { Tree, } from 'ant-design-vue'; -import { getChildrenApi, getRootListApi } from '../../api/organization-units'; -import { - createApi, - getApi, - getAssignableRolesApi, - getOrganizationUnitsApi, - getRolesApi, - updateApi, -} from '../../api/users'; +import { useOrganizationUnitsApi } from '../../api/useOrganizationUnitsApi'; +import { useUserApi } from '../../api/useUsersApi'; defineOptions({ name: 'UserModal', @@ -62,12 +55,25 @@ const formModel = ref({ ...defaultModel }); const { isTrue } = useSettings(); const { hasAccessByCodes } = useAccess(); +const { + cancel, + createApi, + getApi, + getAssignableRolesApi, + getOrganizationUnitsApi, + getRolesApi, + updateApi, +} = useUserApi(); +const { getChildrenApi, getRootListApi } = useOrganizationUnitsApi(); const [Modal, modalApi] = useVbenModal({ draggable: true, fullscreenButton: false, onCancel() { modalApi.close(); }, + onClosed() { + cancel('User modal has closed!'); + }, onConfirm: async () => { await form.value?.validate(); const api = formModel.value.id @@ -99,12 +105,16 @@ const [Modal, modalApi] = useVbenModal({ const userDto = modalApi.getData(); const manageRolePolicy = checkManageRolePolicy(); if (userDto?.id) { - await initUserInfo(userDto.id); - manageRolePolicy && (await initUserRoles(userDto.id)); - checkManageOuPolicy() && (await initOrganizationUnitTree(userDto.id)); + await Promise.all([ + initUserInfo(userDto.id), + manageRolePolicy && initUserRoles(userDto.id), + manageRolePolicy && initAssignableRoles(), + checkManageOuPolicy() && initOrganizationUnitTree(userDto.id), + ]); modalApi.setState({ title: `${$t('AbpIdentity.Users')} - ${userDto.userName}`, }); + return; } manageRolePolicy && (await initAssignableRoles()); } finally { @@ -165,7 +175,10 @@ async function initAssignableRoles() { * @param userId 用户id */ async function initOrganizationUnitTree(userId: string) { - const ouResult = await getRootListApi(); + const [ouResult, userOuResult] = await Promise.all([ + getRootListApi(), + getOrganizationUnitsApi(userId), + ]); organizationUnits.value = ouResult.items.map((item) => { return { isLeaf: false, @@ -174,7 +187,6 @@ async function initOrganizationUnitTree(userId: string) { children: [], }; }); - const userOuResult = await getOrganizationUnitsApi(userId); checkedOuKeys.value = userOuResult.items.map((item) => item.id); } diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserPasswordModal.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserPasswordModal.vue index 7b25e3e6e..b516ee8f1 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserPasswordModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserPasswordModal.vue @@ -7,7 +7,7 @@ import { $t } from '@vben/locales'; import { Button, message } from 'ant-design-vue'; -import { changePasswordApi } from '../../api/users'; +import { useUserApi } from '../../api/useUsersApi'; import { useRandomPassword } from '../../hooks'; defineOptions({ @@ -18,6 +18,7 @@ const emits = defineEmits<{ }>(); const { generatePassword } = useRandomPassword(); +const { cancel, changePasswordApi } = useUserApi(); const [Form, formApi] = useVbenForm({ commonConfig: { @@ -62,6 +63,9 @@ const [Modal, modalApi] = useVbenModal({ onCancel() { modalApi.close(); }, + onClosed() { + cancel('User password modal has closed!'); + }, onConfirm: async () => { try { modalApi.setState({ confirmLoading: true }); diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue index 97000c259..f4e579c6b 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue @@ -25,7 +25,7 @@ import { } from '@ant-design/icons-vue'; import { Button, Dropdown, Menu, message, Modal } from 'ant-design-vue'; -import { deleteApi, getPagedListApi, unLockApi } from '../../api/users'; +import { useUserApi } from '../../api/useUsersApi'; import { IdentityUserPermissions } from '../../constants/permissions'; defineOptions({ @@ -64,6 +64,7 @@ const getLockEnd = computed(() => { const abpStore = useAbpStore(); const { hasAccessByCodes } = useAccess(); +const { cancel, deleteApi, getPagedListApi, unLockApi } = useUserApi(); const formOptions: VbenFormProps = { // 默认展开 @@ -184,6 +185,9 @@ const handleDelete = (row: IdentityUserDto) => { Modal.confirm({ centered: true, content: $t('AbpIdentity.UserDeletionConfirmationMessage', [row.userName]), + onCancel: () => { + cancel('User closed cancel delete modal.'); + }, onOk: async () => { await deleteApi(row.id); message.success($t('AbpUi.SuccessfullyDeleted')); diff --git a/apps/vben5/packages/@abp/request/package.json b/apps/vben5/packages/@abp/request/package.json index edaf1f8ab..e409b6b2b 100644 --- a/apps/vben5/packages/@abp/request/package.json +++ b/apps/vben5/packages/@abp/request/package.json @@ -22,6 +22,8 @@ "dependencies": { "@abp/core": "workspace:*", "@vben/hooks": "workspace:*", - "@vben/request": "workspace:*" + "@vben/request": "workspace:*", + "axios": "catalog:", + "vue": "catalog:" } } diff --git a/apps/vben5/packages/@abp/request/src/hooks/index.ts b/apps/vben5/packages/@abp/request/src/hooks/index.ts new file mode 100644 index 000000000..46b76416d --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/hooks/index.ts @@ -0,0 +1 @@ +export * from './useRequest'; diff --git a/apps/vben5/packages/@abp/request/src/hooks/useRequest.ts b/apps/vben5/packages/@abp/request/src/hooks/useRequest.ts new file mode 100644 index 000000000..723e05352 --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/hooks/useRequest.ts @@ -0,0 +1,60 @@ +import type { AxiosRequestConfig } from 'axios'; + +import { onUnmounted } from 'vue'; + +import { requestClient } from '@abp/request'; + +type HttpMethod = + | 'CONNECT' + | 'DELETE' + | 'GET' + | 'HEAD' + | 'OPTIONS' + | 'PATCH' + | 'POST' + | 'PURGE' + | 'PUT' + | 'TRACE'; + +interface RequestConfig extends AxiosRequestConfig { + method: HttpMethod; +} + +interface RequestLifeCycle { + /** 是否自动销毁令牌 */ + autoDestroy?: boolean; +} + +export function useRequest(options?: RequestLifeCycle) { + const controllers = new Set(); + + function request(url: string, config: RequestConfig): Promise { + const controller = new AbortController(); + controllers.add(controller); + return requestClient + .request(url, { + ...config, + signal: controller.signal, + }) + .finally(() => { + controllers.delete(controller); + }); + } + + function cancel(message?: string) { + controllers.forEach((controller) => controller.abort(message)); + controllers.clear(); + } + + onUnmounted(() => { + if (options?.autoDestroy === false) { + return; + } + cancel('The Component has Unmounted!'); + }); + + return { + cancel, + request, + }; +} diff --git a/apps/vben5/packages/@abp/request/src/index.ts b/apps/vben5/packages/@abp/request/src/index.ts index 680d6d093..7afea27eb 100644 --- a/apps/vben5/packages/@abp/request/src/index.ts +++ b/apps/vben5/packages/@abp/request/src/index.ts @@ -5,6 +5,9 @@ import { useAppConfig } from '@vben/hooks'; import { RequestClient } from '@vben/request'; +export * from './hooks'; +export * from './types'; + const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); function createRequestClient(baseURL: string) { diff --git a/apps/vben5/packages/@abp/request/src/types/index.ts b/apps/vben5/packages/@abp/request/src/types/index.ts new file mode 100644 index 000000000..f0417c8db --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/types/index.ts @@ -0,0 +1 @@ +export type { CancelToken as CancellationToken } from 'axios';