From 7817c5374c96d9e4063aba540c819b9d39614c7a Mon Sep 17 00:00:00 2001 From: owenchen Date: Thu, 3 Sep 2026 08:04:24 +0800 Subject: [PATCH] ow --- .../Security/LocaleRequest.auto.cs | 4 + .../LocaleService.cs | 115 ++++++++++++- .../YesNoPolicyService.cs | 160 +++++++++--------- .../Service/ILocaleService.auto.cs | 2 + .../Security/LocaleController.auto.cs | 20 +++ .../CloudBuilder.Web.Entry/appsettings.json | 1 - CloudBuilder/Data/20260825.zip | Bin 25680 -> 31601 bytes WebVue/src/router/index.ts | 17 ++ WebVue/src/service/security/localeService.ts | 9 + WebVue/src/views/error/page404.vue | 2 +- WebVue/src/views/login/index.vue | 2 +- 11 files changed, 248 insertions(+), 84 deletions(-) diff --git a/CloudBuilder/CloudBuilder.Request/Security/LocaleRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Security/LocaleRequest.auto.cs index 17821f0..d00e2d1 100644 --- a/CloudBuilder/CloudBuilder.Request/Security/LocaleRequest.auto.cs +++ b/CloudBuilder/CloudBuilder.Request/Security/LocaleRequest.auto.cs @@ -65,6 +65,10 @@ return Task.Run(() => serviceRequest.PostAsJsonAsync serviceRequest.PostAsJsonAsync("/Locale/Delete" , key)).GetAwaiter().GetResult(); } + public dynamic Copy() + { +return Task.Run(() => serviceRequest.GetAsync("/Locale/Copy")).GetAwaiter().GetResult(); } + } } \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Security.Service/LocaleService.cs b/CloudBuilder/CloudBuilder.Security.Service/LocaleService.cs index d47c538..566366b 100644 --- a/CloudBuilder/CloudBuilder.Security.Service/LocaleService.cs +++ b/CloudBuilder/CloudBuilder.Security.Service/LocaleService.cs @@ -1,4 +1,4 @@ -using CloudBuilder.Core.DatabaseAccessor; +using CloudBuilder.Core.DatabaseAccessor; using CloudBuilder.Core.DatabaseAccessor.Entity; using CloudBuilder.Core.Service; using CloudBuilder.Security.Data; @@ -180,5 +180,118 @@ namespace CloudBuilder.Security.Service } + [AllowAnonymous] + [HttpGet] + public dynamic Copy() + { + repository.ChangeSecondaryDatabase(); + //repositorySecurityUser.ChangeSecondaryDatabase(); + //repositorySecurityUserActor.ChangeSecondaryDatabase(); + //repositorySecurityActor.ChangeSecondaryDatabase(); + //repositorySecurityActorGroup.ChangeSecondaryDatabase(); + //repositorySecurityGroup.ChangeSecondaryDatabase(); + //repositorySecurityGroupPermission.ChangeSecondaryDatabase(); + //repositorySecurityGroupPermissionDependent.ChangeSecondaryDatabase(); + //repositorySecurityPermission.ChangeSecondaryDatabase(); + //repositorySecurityPermissionDependent.ChangeSecondaryDatabase(); + //repositorySecurityPermissionFunctionMap.ChangeSecondaryDatabase(); + //repositorySecurityFunction.ChangeSecondaryDatabase(); + //repositorySecurityFunctionMap.ChangeSecondaryDatabase(); + //repositorySecurityMaster.ChangeSecondaryDatabase(); + //repositorySecurityGeneratorNumber.ChangeSecondaryDatabase(); + + + var locales = repository.DetachedEntities.ToArray(); + //var SecurityUsers = repositorySecurityUser.DetachedEntities.ToArray(); + //var SecurityUserActors = repositorySecurityUserActor.DetachedEntities.ToArray(); + //var SecurityActors = repositorySecurityActor.DetachedEntities.ToArray(); + //var SecurityActorGroups = repositorySecurityActorGroup.DetachedEntities.ToArray(); + //var SecurityGroups = repositorySecurityGroup.DetachedEntities.ToArray(); + //var SecurityGroupPermissions = repositorySecurityGroupPermission.DetachedEntities.ToArray(); + //var SecurityGroupPermissionDependents = repositorySecurityGroupPermissionDependent.DetachedEntities.ToArray(); + //var SecurityPermissions = repositorySecurityPermission.DetachedEntities.ToArray(); + //var SecurityPermissionDependents = repositorySecurityPermissionDependent.DetachedEntities.ToArray(); + //var SecurityPermissionFunctionMaps = repositorySecurityPermissionFunctionMap.DetachedEntities.ToArray(); + //var SecurityFunctions = repositorySecurityFunction.DetachedEntities.ToArray(); + //var SecurityFunctionMaps = repositorySecurityFunctionMap.DetachedEntities.ToArray(); + //var SecurityMasters = repositorySecurityMaster.DetachedEntities.ToArray(); + //var SecurityGeneratorNumbers = repositorySecurityGeneratorNumber.DetachedEntities.ToArray(); + + repository.ChangeMasterDatabase(); + //repositorySecurityUser.ChangeMasterDatabase(); + //repositorySecurityUserActor.ChangeMasterDatabase(); + //repositorySecurityActor.ChangeMasterDatabase(); + //repositorySecurityActorGroup.ChangeMasterDatabase(); + //repositorySecurityGroup.ChangeMasterDatabase(); + //repositorySecurityGroupPermission.ChangeMasterDatabase(); + //repositorySecurityGroupPermissionDependent.ChangeMasterDatabase(); + //repositorySecurityPermission.ChangeMasterDatabase(); + //repositorySecurityPermissionDependent.ChangeMasterDatabase(); + //repositorySecurityPermissionFunctionMap.ChangeMasterDatabase(); + //repositorySecurityFunction.ChangeMasterDatabase(); + //repositorySecurityFunctionMap.ChangeMasterDatabase(); + //repositorySecurityMaster.ChangeMasterDatabase(); + //repositorySecurityGeneratorNumber.ChangeMasterDatabase(); + + // 取得 MasterDbContext,開啟跳審計,保留原始 CreatedBy / UpdatedBy + var secDbCtx = repository.GetDbContext() as MasterDbContext; + if (secDbCtx != null) + { + secDbCtx.SkipAudit = true; + } + + repository.ExecuteNonQuery("TRUNCATE TABLE " + LocaleEntity.DB_NAME_LOCALE); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserEntity.DB_NAME_SECURITY_USER); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorEntity.DB_NAME_SECURITY_ACTOR); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserActorEntity.DB_NAME_SECURITY_USER_ACTOR); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorGroupEntity.DB_NAME_SECURITY_ACTOR_GROUP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupEntity.DB_NAME_SECURITY_GROUP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionEntity.DB_NAME_SECURITY_GROUP_PERMISSION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionDependentEntity.DB_NAME_SECURITY_GROUP_PERMISSION_DEPENDENT); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionEntity.DB_NAME_SECURITY_PERMISSION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionDependentEntity.DB_NAME_SECURITY_PERMISSION_DEPENDENT); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionFunctionMapEntity.DB_NAME_SECURITY_PERMISSION_FUNCTION_MAP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionEntity.DB_NAME_SECURITY_FUNCTION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionMapEntity.DB_NAME_SECURITY_FUNCTION_MAP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityMasterEntity.DB_NAME_SECURITY_MASTER); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER); + + repository.InsertNow(locales); + //repositorySecurityUser.InsertNow(SecurityUsers); + //repositorySecurityUserActor.InsertNow(SecurityUserActors); + //repositorySecurityActor.InsertNow(SecurityActors); + //repositorySecurityActorGroup.InsertNow(SecurityActorGroups); + //repositorySecurityGroup.InsertNow(SecurityGroups); + //repositorySecurityGroupPermission.InsertNow(SecurityGroupPermissions); + //repositorySecurityGroupPermissionDependent.InsertNow(SecurityGroupPermissionDependents); + //repositorySecurityPermission.InsertNow(SecurityPermissions); + //repositorySecurityPermissionDependent.InsertNow(SecurityPermissionDependents); + //repositorySecurityPermissionFunctionMap.InsertNow(SecurityPermissionFunctionMaps); + //repositorySecurityFunction.InsertNow(SecurityFunctions); + //repositorySecurityFunctionMap.InsertNow(SecurityFunctionMaps); + //repositorySecurityMaster.InsertNow(SecurityMasters); + + ////Copy 到 MySQL 不需要 + //if (secDbCtx.Database.ProviderName.Contains("SqlServer")) + //{ + // repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " ON;"); + //} + + //repositorySecurityGeneratorNumber.InsertNow(SecurityGeneratorNumbers); + + ////Copy 到 MySQL 不需要 + //if (secDbCtx.Database.ProviderName.Contains("SqlServer")) + //{ + // repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " OFF;"); + //} + + // ⚠️務必關閉 SkipAudit,避免後續正常業務失效 + if (secDbCtx != null) + { + secDbCtx.SkipAudit = false; + } + + return string.Empty; + } } } diff --git a/CloudBuilder/CloudBuilder.Security.Service/YesNoPolicyService.cs b/CloudBuilder/CloudBuilder.Security.Service/YesNoPolicyService.cs index dd7f9dc..cfafd78 100644 --- a/CloudBuilder/CloudBuilder.Security.Service/YesNoPolicyService.cs +++ b/CloudBuilder/CloudBuilder.Security.Service/YesNoPolicyService.cs @@ -84,53 +84,53 @@ namespace CloudBuilder.Security.Service public dynamic Copy() { repository.ChangeSecondaryDatabase(); - repositorySecurityUser.ChangeSecondaryDatabase(); - repositorySecurityUserActor.ChangeSecondaryDatabase(); - repositorySecurityActor.ChangeSecondaryDatabase(); - repositorySecurityActorGroup.ChangeSecondaryDatabase(); - repositorySecurityGroup.ChangeSecondaryDatabase(); - repositorySecurityGroupPermission.ChangeSecondaryDatabase(); - repositorySecurityGroupPermissionDependent.ChangeSecondaryDatabase(); - repositorySecurityPermission.ChangeSecondaryDatabase(); - repositorySecurityPermissionDependent.ChangeSecondaryDatabase(); - repositorySecurityPermissionFunctionMap.ChangeSecondaryDatabase(); - repositorySecurityFunction.ChangeSecondaryDatabase(); - repositorySecurityFunctionMap.ChangeSecondaryDatabase(); - repositorySecurityMaster.ChangeSecondaryDatabase(); - repositorySecurityGeneratorNumber.ChangeSecondaryDatabase(); + //repositorySecurityUser.ChangeSecondaryDatabase(); + //repositorySecurityUserActor.ChangeSecondaryDatabase(); + //repositorySecurityActor.ChangeSecondaryDatabase(); + //repositorySecurityActorGroup.ChangeSecondaryDatabase(); + //repositorySecurityGroup.ChangeSecondaryDatabase(); + //repositorySecurityGroupPermission.ChangeSecondaryDatabase(); + //repositorySecurityGroupPermissionDependent.ChangeSecondaryDatabase(); + //repositorySecurityPermission.ChangeSecondaryDatabase(); + //repositorySecurityPermissionDependent.ChangeSecondaryDatabase(); + //repositorySecurityPermissionFunctionMap.ChangeSecondaryDatabase(); + //repositorySecurityFunction.ChangeSecondaryDatabase(); + //repositorySecurityFunctionMap.ChangeSecondaryDatabase(); + //repositorySecurityMaster.ChangeSecondaryDatabase(); + //repositorySecurityGeneratorNumber.ChangeSecondaryDatabase(); var locales = repository.DetachedEntities.ToArray(); - var SecurityUsers = repositorySecurityUser.DetachedEntities.ToArray(); - var SecurityUserActors = repositorySecurityUserActor.DetachedEntities.ToArray(); - var SecurityActors = repositorySecurityActor.DetachedEntities.ToArray(); - var SecurityActorGroups = repositorySecurityActorGroup.DetachedEntities.ToArray(); - var SecurityGroups = repositorySecurityGroup.DetachedEntities.ToArray(); - var SecurityGroupPermissions = repositorySecurityGroupPermission.DetachedEntities.ToArray(); - var SecurityGroupPermissionDependents = repositorySecurityGroupPermissionDependent.DetachedEntities.ToArray(); - var SecurityPermissions = repositorySecurityPermission.DetachedEntities.ToArray(); - var SecurityPermissionDependents = repositorySecurityPermissionDependent.DetachedEntities.ToArray(); - var SecurityPermissionFunctionMaps = repositorySecurityPermissionFunctionMap.DetachedEntities.ToArray(); - var SecurityFunctions = repositorySecurityFunction.DetachedEntities.ToArray(); - var SecurityFunctionMaps = repositorySecurityFunctionMap.DetachedEntities.ToArray(); - var SecurityMasters = repositorySecurityMaster.DetachedEntities.ToArray(); - var SecurityGeneratorNumbers = repositorySecurityGeneratorNumber.DetachedEntities.ToArray(); + //var SecurityUsers = repositorySecurityUser.DetachedEntities.ToArray(); + //var SecurityUserActors = repositorySecurityUserActor.DetachedEntities.ToArray(); + //var SecurityActors = repositorySecurityActor.DetachedEntities.ToArray(); + //var SecurityActorGroups = repositorySecurityActorGroup.DetachedEntities.ToArray(); + //var SecurityGroups = repositorySecurityGroup.DetachedEntities.ToArray(); + //var SecurityGroupPermissions = repositorySecurityGroupPermission.DetachedEntities.ToArray(); + //var SecurityGroupPermissionDependents = repositorySecurityGroupPermissionDependent.DetachedEntities.ToArray(); + //var SecurityPermissions = repositorySecurityPermission.DetachedEntities.ToArray(); + //var SecurityPermissionDependents = repositorySecurityPermissionDependent.DetachedEntities.ToArray(); + //var SecurityPermissionFunctionMaps = repositorySecurityPermissionFunctionMap.DetachedEntities.ToArray(); + //var SecurityFunctions = repositorySecurityFunction.DetachedEntities.ToArray(); + //var SecurityFunctionMaps = repositorySecurityFunctionMap.DetachedEntities.ToArray(); + //var SecurityMasters = repositorySecurityMaster.DetachedEntities.ToArray(); + //var SecurityGeneratorNumbers = repositorySecurityGeneratorNumber.DetachedEntities.ToArray(); repository.ChangeMasterDatabase(); - repositorySecurityUser.ChangeMasterDatabase(); - repositorySecurityUserActor.ChangeMasterDatabase(); - repositorySecurityActor.ChangeMasterDatabase(); - repositorySecurityActorGroup.ChangeMasterDatabase(); - repositorySecurityGroup.ChangeMasterDatabase(); - repositorySecurityGroupPermission.ChangeMasterDatabase(); - repositorySecurityGroupPermissionDependent.ChangeMasterDatabase(); - repositorySecurityPermission.ChangeMasterDatabase(); - repositorySecurityPermissionDependent.ChangeMasterDatabase(); - repositorySecurityPermissionFunctionMap.ChangeMasterDatabase(); - repositorySecurityFunction.ChangeMasterDatabase(); - repositorySecurityFunctionMap.ChangeMasterDatabase(); - repositorySecurityMaster.ChangeMasterDatabase(); - repositorySecurityGeneratorNumber.ChangeMasterDatabase(); + //repositorySecurityUser.ChangeMasterDatabase(); + //repositorySecurityUserActor.ChangeMasterDatabase(); + //repositorySecurityActor.ChangeMasterDatabase(); + //repositorySecurityActorGroup.ChangeMasterDatabase(); + //repositorySecurityGroup.ChangeMasterDatabase(); + //repositorySecurityGroupPermission.ChangeMasterDatabase(); + //repositorySecurityGroupPermissionDependent.ChangeMasterDatabase(); + //repositorySecurityPermission.ChangeMasterDatabase(); + //repositorySecurityPermissionDependent.ChangeMasterDatabase(); + //repositorySecurityPermissionFunctionMap.ChangeMasterDatabase(); + //repositorySecurityFunction.ChangeMasterDatabase(); + //repositorySecurityFunctionMap.ChangeMasterDatabase(); + //repositorySecurityMaster.ChangeMasterDatabase(); + //repositorySecurityGeneratorNumber.ChangeMasterDatabase(); // 取得 MasterDbContext,開啟跳審計,保留原始 CreatedBy / UpdatedBy var secDbCtx = repository.GetDbContext() as MasterDbContext; @@ -140,49 +140,49 @@ namespace CloudBuilder.Security.Service } repository.ExecuteNonQuery("TRUNCATE TABLE " + LocaleEntity.DB_NAME_LOCALE); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserEntity.DB_NAME_SECURITY_USER); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorEntity.DB_NAME_SECURITY_ACTOR); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserActorEntity.DB_NAME_SECURITY_USER_ACTOR); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorGroupEntity.DB_NAME_SECURITY_ACTOR_GROUP); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupEntity.DB_NAME_SECURITY_GROUP); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionEntity.DB_NAME_SECURITY_GROUP_PERMISSION); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionDependentEntity.DB_NAME_SECURITY_GROUP_PERMISSION_DEPENDENT); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionEntity.DB_NAME_SECURITY_PERMISSION); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionDependentEntity.DB_NAME_SECURITY_PERMISSION_DEPENDENT); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionFunctionMapEntity.DB_NAME_SECURITY_PERMISSION_FUNCTION_MAP); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionEntity.DB_NAME_SECURITY_FUNCTION); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionMapEntity.DB_NAME_SECURITY_FUNCTION_MAP); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityMasterEntity.DB_NAME_SECURITY_MASTER); - repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserEntity.DB_NAME_SECURITY_USER); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorEntity.DB_NAME_SECURITY_ACTOR); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityUserActorEntity.DB_NAME_SECURITY_USER_ACTOR); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityActorGroupEntity.DB_NAME_SECURITY_ACTOR_GROUP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupEntity.DB_NAME_SECURITY_GROUP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionEntity.DB_NAME_SECURITY_GROUP_PERMISSION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGroupPermissionDependentEntity.DB_NAME_SECURITY_GROUP_PERMISSION_DEPENDENT); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionEntity.DB_NAME_SECURITY_PERMISSION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionDependentEntity.DB_NAME_SECURITY_PERMISSION_DEPENDENT); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityPermissionFunctionMapEntity.DB_NAME_SECURITY_PERMISSION_FUNCTION_MAP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionEntity.DB_NAME_SECURITY_FUNCTION); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityFunctionMapEntity.DB_NAME_SECURITY_FUNCTION_MAP); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityMasterEntity.DB_NAME_SECURITY_MASTER); + //repository.ExecuteNonQuery("TRUNCATE TABLE " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER); repository.InsertNow(locales); - repositorySecurityUser.InsertNow(SecurityUsers); - repositorySecurityUserActor.InsertNow(SecurityUserActors); - repositorySecurityActor.InsertNow(SecurityActors); - repositorySecurityActorGroup.InsertNow(SecurityActorGroups); - repositorySecurityGroup.InsertNow(SecurityGroups); - repositorySecurityGroupPermission.InsertNow(SecurityGroupPermissions); - repositorySecurityGroupPermissionDependent.InsertNow(SecurityGroupPermissionDependents); - repositorySecurityPermission.InsertNow(SecurityPermissions); - repositorySecurityPermissionDependent.InsertNow(SecurityPermissionDependents); - repositorySecurityPermissionFunctionMap.InsertNow(SecurityPermissionFunctionMaps); - repositorySecurityFunction.InsertNow(SecurityFunctions); - repositorySecurityFunctionMap.InsertNow(SecurityFunctionMaps); - repositorySecurityMaster.InsertNow(SecurityMasters); + //repositorySecurityUser.InsertNow(SecurityUsers); + //repositorySecurityUserActor.InsertNow(SecurityUserActors); + //repositorySecurityActor.InsertNow(SecurityActors); + //repositorySecurityActorGroup.InsertNow(SecurityActorGroups); + //repositorySecurityGroup.InsertNow(SecurityGroups); + //repositorySecurityGroupPermission.InsertNow(SecurityGroupPermissions); + //repositorySecurityGroupPermissionDependent.InsertNow(SecurityGroupPermissionDependents); + //repositorySecurityPermission.InsertNow(SecurityPermissions); + //repositorySecurityPermissionDependent.InsertNow(SecurityPermissionDependents); + //repositorySecurityPermissionFunctionMap.InsertNow(SecurityPermissionFunctionMaps); + //repositorySecurityFunction.InsertNow(SecurityFunctions); + //repositorySecurityFunctionMap.InsertNow(SecurityFunctionMaps); + //repositorySecurityMaster.InsertNow(SecurityMasters); - //Copy 到 MySQL 不需要 - if (secDbCtx.Database.ProviderName.Contains("SqlServer")) - { - repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " ON;"); - } + ////Copy 到 MySQL 不需要 + //if (secDbCtx.Database.ProviderName.Contains("SqlServer")) + //{ + // repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " ON;"); + //} - repositorySecurityGeneratorNumber.InsertNow(SecurityGeneratorNumbers); + //repositorySecurityGeneratorNumber.InsertNow(SecurityGeneratorNumbers); - //Copy 到 MySQL 不需要 - if (secDbCtx.Database.ProviderName.Contains("SqlServer")) - { - repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " OFF;"); - } + ////Copy 到 MySQL 不需要 + //if (secDbCtx.Database.ProviderName.Contains("SqlServer")) + //{ + // repository.ExecuteNonQuery("SET IDENTITY_INSERT " + SecurityGeneratorNumberEntity.DB_NAME_SECURITY_GENERATOR_NUMBER + " OFF;"); + //} // ⚠️務必關閉 SkipAudit,避免後續正常業務失效 if (secDbCtx != null) diff --git a/CloudBuilder/CloudBuilder.Security/Service/ILocaleService.auto.cs b/CloudBuilder/CloudBuilder.Security/Service/ILocaleService.auto.cs index 9d563e6..b86e639 100644 --- a/CloudBuilder/CloudBuilder.Security/Service/ILocaleService.auto.cs +++ b/CloudBuilder/CloudBuilder.Security/Service/ILocaleService.auto.cs @@ -14,5 +14,7 @@ namespace CloudBuilder.Security.Service LocaleResultData FindBySearchCriteria(LocaleSearchCriteria tc); void UpdateLocaleData(LocaleData data); + + dynamic Copy(); } } diff --git a/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Security/LocaleController.auto.cs b/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Security/LocaleController.auto.cs index e221849..ca2dd7a 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Security/LocaleController.auto.cs +++ b/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Security/LocaleController.auto.cs @@ -201,6 +201,26 @@ this.localeService= localeService; } } + [AllowAnonymous] + [HttpGet] + public dynamic Copy() + { + try + { + + var result = localeService.Copy(); + return result; + } + catch (ValidatedException vex) + { + return vex; + } + catch (Exception ex) + { + return new ServiceErrorException(ex); + } + } + } } \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json index 24674a7..f2d5042 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json +++ b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json @@ -12,7 +12,6 @@ "DbContextTypeName": "MasterDbContext", "ConnectionString": "server=nas.youjiala.com;port=3307;database=Furion;uid=root;pwd=Root@1237890;CharSet=utf8mb4;", "DatabaseType": "MySql", - "LazyLoadingProxiesEnabled": true, "AuditEntityEnabled": true, "AutoMigrationEnabled": true diff --git a/CloudBuilder/Data/20260825.zip b/CloudBuilder/Data/20260825.zip index 733a431b5c8db069d96956b819faaf6d18f0c2c6..86f5ad9bd552d7294d7b3ae3da0c07d3a3f0c97d 100644 GIT binary patch literal 31601 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 yee=3#-u{lLst64Ofcn2nWPeo2{vE zX}db|UE=u)z05%1BVSLUoErCE4&~ckO{UuHlx^`z#Fw?1P3G%y-wGiQ%7WkqM@M&o zh5N?BL{9#PS@bi*b0hiv`` zX(r<~fnkhd!prNBUR^GZjBPI$6}>BZJ2M-*MXA=y@!Dff*CI}RRsAJdZ;8B z{?n>>|9KxwtkVDC?LH=wk}{>IIcjuY?`p-4j+;A)4=*Q+jcm}FpfPGxjIK^awU^B0 zxCtKe69!)|;8CZy{eXZ@HYD>&UC*d zXODU7Zy{qF6T0G{fB6h+IauvymX_lW3+iuPs|c?P*`~e0D@Ir6TK(m;ArOYP6Q84v z%u)&;dEYqx{G!V+`xZoq9u>p^cOqtj@xdCS8kIB(M@pkk*9;a0SI|+`yY?|+$J0k7NknF{*u8_m<`#lazOC z`@q0mM6gWk(hmsC(v~?`4ni@e1)ikJtfZUGEOC+s^DX0^G0D&Oax$Tp2#FvN?_ zut1CfWL&^V+3eK<>s)H{?LO_xrD;jAk}!c)g++c~;K#|=kY94U$~{p!315|izyDy} zK?1|yf*yDB6g}*Atm?MuxWPjLnl2S$8$NR2P1d`Ot?ym=*a#3T7gSHYMC?yt=oP$T z5B%tUyt^1%mE`5TTFB>bUj2okZiWA~YlPRAHdv_1!8r)jLNu-OgpPh;3J_!b&3Rnp zBTS+Kdwj|R;X{aE9n*GM&{kCYR%|@K^s&cvdj2Z4e zRa82NB}CM=(>o)*-lX)6GHD_Pxh32r8H+rgI+#)p-aCDj3P*^Fc0U7I1VR8st*3D~ z8XfZv9nfa@l74(IKwR3a?My-K++dEPA}AJl(4==F^WCd%gQc&hZa}MBTp)BKe&fc}6~z8r~#exZ6=5v-s^|b{8Oo zbZx2gHK>9yd`ot=U7pC;VG_DXSSTYwYkLn^O>Y|?bB$eF{&Ocre!%*f&BL=auWBsE zdQ7{~t>4LkW(f%)3rl_iG`@+!cK%Z9Rg!D++7CWn<#koPL`udf+?_K`bN&6bv~?=4 z3H9AFo=SznKqZ%8CA6uT3)g5U)Znzrvj`&hMMRJx%pX&B37z&WYpm~#sbJxYB|R6q znI_hsH3akYT~0!(jM0j_M$C652v&WEp@{b@439DJ7Zw1UO2LMnGKxk$E~zi@-O_sj zl2(_YC$>4QvSxFHeSY6?GX#e}2FAkU2`W%yw&*kw5ouuTyqPlKT)4^&#ehanSLmEIW>Mi(-1awQgs_ zL&zCi&zY4Fd3POAh)Hdk7DBfyVn|O5@g(RV{l~x%spH4rWM9rqDD0i1#xFR*TsnzmP)TLBMcE>Ck)c?7pFR|jV~_F{A8o7IuC z*kzsPUBVDNnU4sIhiooWng2V3=izd9gt1%f)I+R`?HZokj^!TJ3GjnUNkrK)ll zh1p27MCEP9M$;XXYtj;MuKkqC%lk3D)+(Du`xLa>qMXkoDPEFx#@PlSZYQ7qbZJvd z=kf&=O=}6{VMXI**cF1){(fK)$)|O>*e$ygwzJg?s95)?4z-?;`+{H_O4*UAO_?tJt{jTTG13^g?!ga@82n6R zlv&@lSm=%!PkJ9?|4>a6!Om0QA!OV^XwMkGQ)*nqCpNEPjhFy^o}mwy=<$bH0mO#6 z)1c=;;b0SCnm?70W`6(gqJHA{vx2@-;#N#0HF~UXz5qUP7 z0WG1QgG#9EuYBa5GHm&PHU7{^#pkDwXx?1Fwbjv7xX{G~!OKYp5ZH@(Jvv=Kt|k)O&J@jp(sW;bJp6%6tfYjyc;>+shGH{jgw2~KCsgG|Hv?`hba20;OthQs|nl6D+z z{P8FKOZAnW%N&xnJasDs+G$F?{;3*~*6Jfqi}qHnF40=;Ef1$+i^0)h)b80j->iRL z4%KPBt8FOMKD@Rw{m6kVoWj_mJu|-Q!tJQ$?b+F_EI`A@b07&9Z}`s^7SVG?m7d$k^;hyGgaxDyI+I!ojQm&Wk8*&IBd5UN)Z zzw0IDJOs;WBoad;DaLj)O|QWNtisu1k@&g(Ep-p2)H_Nl?)7W`IAmCxI~wzgC6hD_ zJ1B}_h1S{h<|b>opPI#k#JKXyo0=E(w7kCmyO)LQvwt6(f!_V-3vHR8SMX=X^s1cI zp&nAM2J2MMp;4`hkbsJcgm&*6Ds-Y|o6x)VGEwW;EfkcCx;AR++l~ftY96ZfDq0V%2*4 zJ8ojeci7ZTX2-=UcB*{bEt_{!AYI!_x;EdX%fANRt+D-wOpQSg^@9jOwI+j0@|2=< zI19@Rwui(NMsxq)Wk=0`RVzlpoT-1UUnRf5+tac`DW~(HjYiICp5|?iuD!WtInQk~ z!Xo2TYganSGy}@^`u?)R%gy0?>g2cEagqba?#hB)Agw3x zA$p7NePz>+yx^^L^1UY1Trqp5lVUJMqotJorucgt9P1Ov#a;&8SYeerSeH4KlHwP4 z9XXsFI`<=;%+E!~*BzuM#1T5UmzI9LkIQ+-x99^A;Z&KCc%nOaR9eiFRGK*Oy)LTm zj&5>`X6bzFmP6EWZH>{o;e+q!DP~O!(CqXOqM0V}=u1?G{-v=>_l>#Pg%hge(y3nb zWuIYIpD2%p`M-Zgxhcb8zt$lAZp#?Sh6JmHEtP|T8i-Lzrk$}Js!+EIj3htW@}&qJ)(gW3mePVbTv&?LElJdU1|zEx?DSrj6l8x&%!IsZCTt^Bd}$AKAW9-A5S@iN~f=%Y%PJo`pYL( zI-M500IDEs%*8F~PFgQ$JcFw;i2%%?m?5$7UytP_HEFSihctVpkvOOae)5;$!Dx_= zQL4kV*MJyXO(d!HV=Y|qFODoBl8-ELr!sCRJOxQ!S-1k6SjK?e?7CKAqUlikdsY)^ zt#`OOg207wg68|3$y`ZW@wY35UsEzjClS1{DbtCeMHyy2xu()& zgdU=M1D_s>2Zyh1^`wp2eMd^sAFHTIRNtXhBhv$;-WBrX|Y`Du3!V#)S?A~Hcv zUBxt7U*nZ~>!7E~puiW#?^anpB)8|bPf)1-=xUQaHuq2#pKrB)2#hW-ni$;HBU zVXON>ZJgBFf1EAJZXxXVBW-(J`+7O(MU$Yzg}c^P9oUkFKcZU<_cWamin^*{#`gFMn~dx0a$v!&#tS z_jUg@6>#yL;ck#lkGb2u-si3{^8HLBzUpeLzPml#DKi|BlRek-Ec|#W2@fAq=X^AD zO|w9Ai|-;a^?vC0+MecZ_;^|ZiN@uo?a>cuR`S=}pQ-XsE$O}S-;C59fDv;y-<`c- z%T7$tRj%_K1?u=a)ckLxdOt8P^ImS<%dZ#fe^gR>T{76IK^1ja^TuL$S9y|X=Iht{ z1qL4VaPoRiFZBv&`u4zKPSH(&dDsIEdW&@8O2+rC4Y{iPJ)x*6P#qrTpSpzE zX!mi+i0X5EdM5)B7S7MdLw3{#HQ@Rw@vkyC>xx#KdUXduN#sHU&)_k((|n!^eB?8U zLQ45luzka~M|>f~5Y(58MgN>o5-!he<^zOf)aLj%8BwqbnnMd46%>@6Q(FllB&S@B z`1_!i+dV^CPe$;#Ac$|BrVun+H!Mo_O>W=rbp?RIcC(#9ZtaiHQUC1B7VvF<5+^Or zun&iPGtV`L*DzP`cFS_wnpRSvVoxS5&HVT28xYJ?2)WSZto$?%L5Td{E1;KkQ=lOr z;G2`$v_ZZ92lQVOA0=}u&3d5#QmnV4ndf@@o_w;gGatjl}NS ze0w}=-#hqUJxWM4o||a}hHNm#owBoe3sdC@!pw_`w12!Lw?SmJTCH>pAX?~XvMk{zHdq@>7x+b4BhI8Z#lIuRNT*E)RIR@+ z{(jzU$=pA^X`19(Vx%gOmXG-QO$;q&8W%Vid?SatOTv(Y z(;W5gBC2~U!jMCu{CsH&K9&66Mc-CI3w^xhs>{bZx`4dq`L$%f$FawybV&greI1DS z`o}n3c|L8M%o@qhhj71_7}3jpJ?F#U-6FjoucCt^aeA~G+xey66!87#^l3NgTaQ2vE*Y_yvOem4kaZvQw@gZD+#!rNe}hZ z1KQ8ZFV6@}W%c}Bq>g>-XAWiqwtWlfoLi8rEf%ad{pht(V%Jr~zGu+)p)+cW-I6 z1dHWQ)tn53E|zA^ICS6dr5@%u(+Z~DQK5_r6AcAw1bXMtFiTvdMy7^hS_|^slyEV5 zX!kEHZ$rE&QoQVtvf)*3C~Ov8R8jN#xM#Ng~#19*RZqn5fTAK}HR|7~%C zoB7M8gEKI_U_H@MKap|k3Ko8W%L4cIVcaQW6*MI!ZeN^{aKN~A7V8u%&`RsqgQp<5 z(Ss!g!{3V~MU~f!B^~+Eizg?k55$s+>;YoQ9r1#(=EpyRYmn;CB58eZ1yX5Y-^zWU zVrfq;CIA4v8Jrty5HpDcGGA}oIb(__{M%)iRqxLbYV|(LwG_h<>#2}^`y>Gs{O^;H z4#MG}@Vi#vW>URih5mcn?H=t*m2Q_QK_f+KS1Z7Azx-&;P+DXX+rRRb69pd?Yt0)< zv8wLfsr~~|+8uw-<=`me0syUoMp>bCG3JhP8ew;3nLr+8cXdMXazTL7PTi*Y@!I)r zGY;wSy>_Gfn$}F~!331!37U@UXGig$goG?lgnIV@rF;hcV0Xx0K+^832YSyt2&WOu zNWWB|7pW4KJ3(hKNC7akY>C1s(><CVbgya(%~oD>wA6QHQ#pG%#{7pCJDeeoR&ka(?_cJVbu{L_EYE zf)qU2I%1@8#0cWJiGPAL^sMziJIJf(RFYH^GnJ zd4kx3-}B!G`~H)G|77@|5RIPL_25tZ_c;BZ%>6gEh-U}lYKWQF*0FIZd|13|1#R`m z!e#&~3?Yj$jo`OJ9wRE7zSepF6qB)$INAYUp?YN2JmTTf zOb_C9H#AHQ?j$a{t%N~QJNc`>F38!YC&Z4<8cVedm#)?N4c20AG=ixpP5G_sd4J4NAem7gGOp(Xq?*aRKRiM-xGd!a zYXdVhvStprfocFN+*=8R!bAXbx$8(9vUF^>E1vt~UPXack_%b9=I9yJO;fN{zwTqu z@z|0A7K5iu!)~Ko%FYXcM2u=K4D|+Fwxk6x_A>xQ3&|a_Qe-&TK>@Cso1I7O-fo;F!L|LUPFHw;l}j<^+`}F+cYk!J zIJNWTgh@ZiIlK?#H6M9w`ooI^DL^!PFc4j7j6t>a>I#RBP5owB=+XrP7c`PtTvf(e zCSBDt9}z1p8DESb85`HXM#lAA$oIj$VVu_nrz~Ym#mdr(KQHzl)5k%vw8m3HySI(S zL+hOJmZFTSRxxyX`2c)gfDEV{pp zQvLe_i2A?HN8OolCro^eyp6ex>U!^aOH!2nmVvLp!eTm&{rj))Nf1xR%A#0s*x;DX z#Yuru7=s(Lt+?(FJ7#5gW^tR%*lq7lVCYZr;9errI=vZ_nE%u9#t2N|>;-MEiR8rs zUw73X7JJr)91q454&pMH98cm<-un#x^+fwe1^w?nmgIi93{*E({p(S7z_2NdH!rc)R0u86t#$dGQXJi^85Mar?IbHUvF z@&?h=Jn7Tef>$W2DdJ(fO#hUiwM^Azu?a7-k5eKsdkl?5k##a?@i`AJ-aKF+(9~xr z(M|9+Mw@`oWQAiQgfVE#Iu9;jjZ;r1x(`H0v-UD*saZqUsGiZtGrN0O525LB*3_{< zE>%LMmu2#F4e!F%4vfa#V|P`UtdVxzC`N8-^!-xUW>_-GS!Ql8OAZ!d%K~vFlePU z8lB~bXF)gc06Cfo8Wb3(kDoi8!-u(wCwrwr*Hkv!8(cqi4(^^jF4wP-C$5~VB}O*w zt67`H6FZ6=R=`qKYN;B-2osQ|NuhJP-rqeigb-`HXSK!#Dmrl(2JWzwh*R zAI=9fOs&32v=PrO#CsUD+NQev#hwo4ak(%p?#^Cgz+SrR{}(Z?jfqvtJRHgbGW#-+ z-^4s>1qYaA$-L7W#}&BMs$8Bx7n~&Oy)I`#dmF1Xjt~8uLIr*lj-Bp>_m_4!X=^@1 zs*dW@;dcJMYqH#Dxghe>0A|BvtKl0`wV~f*8HRnRXTuSGdsUjTdpvt@2Fz_9WSbgm zYY8pYoAMs5vlIW^sq^R$I;sWRLC9TKipvs#L?OsH8|W`|TCb`m|XAs@lwtv|K6hjdJT_jisRc z%^*if;Sip_LXHH6Gv-~C3BDrhK|Pic5Fw3P@2}*4N5~G4RCxd08Qiz1T7v4TD;-?CBJy!SwPyeODCb$%}| zT$6u23&slyJ`4>+X|1TlC=uKme;qa^(qH9%xE-y-v^w@iuxfi=c_Yc~Du@!ya)kPK zsJ}hx9E=%O3vSJYMJ!C(>d}f&56IlhY(ihuqj)d?&vDtzAe^8|$@kmMbQ+DQwZ~?> zKdN?3Fh4ZQ4;(*(I{9Dz{Jy9~sZwMJRxE|CldrzO^TNh-i0|~c36Fk#d5GVcoUInA z%MG7U{&A4U%UQJ*sHoNpG~DRa`8e?xJZ7>z z%2y8z$0z{lYE}XL)Owu%H0zK)8K~W&WNAtS0o1y=_3*%X-Y*>g?ejio^NU2xm2}6n z&Hd;u2a3dC)PMSp{;k=XBx9U)qkw`}b(pU+TTp3Loqdl3_|3x#hp_zL6q9c zV{jD8I;syS_uPxVDAfh_mwtXY9Iuj3J57C)hQdd2q>jK22Eh;eqh`i`4z+UK8z=0< zKpQC*gu9)w4UxKAdfeS;bEMht%;b>x<>T&qhoAZ$DwzhVPg^8G0jKE;vXZAg*5Cpw z)vR?u?s5N`N~MSz=lxy1`6}M)hSYkxW!RO*>SoA<#m&+8`tEbofDO)L#oyVy`m!tW za59n~pTmyYM>q(+rtyB;=xQMYYWw^m5TOrZK>P!%kg$=oyW_$;CP8k zr|GvU;Ly+)`QxTuF!)cDCaz{05@#tEa~5P$OcSwg$5X@OWJX~ZM3TVV-5TSO@H1n< zmxO>XR36e57RNzcevMC|xyn!cE5z+= zL38~_)$b0c+S}VSzZV3x{^|e)BOy+zKNnbi2#51h{6f>ThFyXz4X$UU-4E<8!CZ$} zKd`@##Y8u+z9MJJT#Qn%!Gk%I60ZliBK3IulI+v0&j$6S(WT11DsttNN3h=B#qg|; zO#+-cPfoN+rCz4?E+)tGcP6MEeG5O7=tjU`($vA13>=H?&7za4eOrSV#uNn}>oip# zTZ=};es=%Jep{FgHbPMd^>F1F%F`qRH|rESqnYLe1oERG?H&wF z>Ch$XRq4^3B!j#k0ArFFN&7UKj2Cw6B3nJlBq3%#e>C#$eFA3rO5-eKQ^A0*m)Ii5 zi$9TZ>Bq5z3TxzS@O?|7;dRWnd+#>)@<5ie*Bh*A6soYws4*dJm_cUYPSnf==;M&V z;E^!p7>T<@Nfbjy6IwKE_Jpd7<1y>5-SL)-do z$orZ^MFLj<{Jvv=Sc>i~=+5fV!}l&qvsPcJX^A|BNsZ33Rh;eRUE&}Vs8KI?^Cn~% zQnu405f(vjL@sCR4~H)s4EFF_u?GRZ#wkct&J~-Fsx0F3?YyHXN%)$Z9US-+r>NfR zMGx$~%+j!yZ7u5%oVTfw{ArXL0-@M7AVgg3jeD9_bL!bu-Bw;}=?k;Z=0gHDoK-d? zXKoG$m6iY9S;wGtn$pwATpg+`q*!@9#;LC(H7>H@$?tNNNj6+{%n2RF(#ZHLe;2bL zKg=K1sW28=x%ajiKiY7;${-Md|E;t>6~N>ODKEO!b7x$2S6pjL_cyT8mM;Giq;yj< z_CoPymfG!(_bqvI*NDYUV3NYy+_s+ONrzMX@lfSpRMSdhOxNx-6EB1X?&Jl=h;I#! zODESTCHa#<^MYrzt?yXPR3jtQ%N$8?Yf?=&2dd@i^ z4oL<3^hs<$WC&NlZhAo$ROaEdbNuOG~*Y_5EDrVSM@Z zn=b5B{l?loYI+k_g#*U7DdKimhO8rvU@mS2YyB2H1;~o}-kt}$_A(JQswlQMu{qT; zF3d1gEwDQ9{>`IMpo616*dPCcx3{q_qfHSgNYcVcXn~g(6ke3>?B#~q$7~3Tu!9rF zR-|bk5~!HoROn@VxuCW!gP<7Zu{G9g$;wSXa6f6wK5NJ&vv^VYr}tv(-${O-%D}(TjcC(0BA_R zJBEhSY0iJ{hP7U~IQ%CU!Q(M}=Vg)7gB#_kfH*rr1WTgW3p}5QN^u64`|y0~@)0bYR7}hZPXP*}AHv*}F8T9#=5#B5QM>m5$2_Rxe$>G9%IivUIw@Ot$|nST-)OKx zOeVw-C>YA6WkKV%2B53HZ|or}&eGOJEhdp;WAN}<$~A~e-dGH0%sp*6nBu690gaCb zog}Wtuo{GuYY=>vayj!j3eV^dqh4aKs()a(pB47b9YN8t-Afel0d%&>gU5fnmd&Qy zuaJCtb-mW&fXkEpIsWYklBs}6T+pU$tGR6CSB2i)Z6yNyNX*E;sB<|}xX?Er2VpQ8 zq>BGd^{|DI@kZOPvnp!dk zv9w{f-T@FN$KzibKY=MvU$uo@98f_}763DFt8Y~+`cYtZOkI39L3de9`WeW5Xco(6 z-<-sjDWt*ibIInAyuk^J+~sY+cssXLJ%aQbJWWHuEdK%r2*H=4-L$j8V4U=`sQb_? zImr>6xWFoNZlSbxJ_1yswN7VCwINTLJOrGDh)U`vi5ht4>SRca!a*H~5b<1m@;_$4 zgd1&dVOt;?5LDo_j6L)@f_c1v&0!GO@4&rWh;$z}SsifNin=kn8897AN}L9fi?MeI zjb9tdCVkOWZ_S8W*B_yQCG3`2AXGSunYTPnD7(sDA3FmiNIKSgK-ieLoGcgNkq9 z$!+L^Q{~*JbLwA=vqq@l>Y{cH#?l5*GCGN@_Pihv&Ulc92V+DdTQEBX&8tTtX78Ns z>Omtn@Fq?5fkzzSArUgUsj5K2cSnSPFxcC-t;c_-5IcClfP+DG$R!rgh^+$sH13 zbaqRI`?r%!JS4unx{3U_qLW!U1W9jsUuMSH-LNxETAoz(^bjd^8N8y0wDQMZTu}atQNrUlAh1<98^`UyLqdG4%uW2B? zUOzqXqZ01A_Y!PsC781x^z_V-hdjpf!Fwbdi)~1p`YlsYg~ZDb z9>>t^)@arZuiTX)T{V-~{khzzErBQ9W11M=vh_ zbkC?JIQsAWCMV+|gBldA zA*KpDs74u9V zg0{NH>OU^ZLA8<=#@A;-=EoEKEXa8Uo{vS%_fukS>6_Y7Q%(L6$y&4vrE{ugop&!= zRh(D$j{G*90BUh*(8O33Bk_W~<#E76w5_;16ck)y(H&wr9n+^S@UfN1FO{>kbs5U! zIz}|86!v@c^$2R*hd$UxK3U+o3-7Wg^eH?g0}I1A#$zKcVAH9;V|5nJ~h z(|N`u1qouD$q&XRW28h$l=?@0y;BujrKY<|>6Y*x%=c2GC{D!3z0gCc+Lrr`w+xzD zoj9TL?w%D85`^-NQwSu>Dv!Dt7>T9JvV_Ee>C`y{{|}o@h5rwgbq0gbPAY2lC1XV; zIL{-hrWy*KJ^TYJKN%bQG)4C+VH(praEMR*ZzA!}CK#e*7>%A1x8BZ$ih=Ec?Vgmx zvfaPumY;i6rxoY_j-}KK{rYu}Zevc?8g_LcSg+^%`m|i|X*fp}MJv8#{PKs4sR71G zf^xSpE6maC2lGjx`vd+F;Ah5`u9wxT%GHeCCr<~-&E!M;4IT&}T2?eTPZ{jf7?wV%)sFe6%v+R6b61oR~f6ronUz#?{B)>{UWn6^Ljns@6Rzw`X@R{EE zl;p<-$7@{(pq&}xfCun!9P+*jvam_}9~JzTO%OGCb=Z?SQiu>b!6BgfnEj#l@{ChB z^#7sYOvnER1(VYJ%M2}CedK?M8a^>%1DKY1A??rqfxrO0jZTzB-PP|v;XcCG%+VIH z{&VfeaB#F0M(Ay4os;-ymwaUjNBT!`otJdpA0NSjPK+gsH>5;K3Il0gy5%0%iJ(G? zeeL1G(5oUBD4t1*ah0Vo2&zY(u%EEfMrah5q+)%w-8Xz_h!;2Br9T{yjccm*>~oD) zdby=Yi)+QwDkb4NrHPWn`632YYo4@uK(RahuEFZsW`#Hf=E@J&k}_(4vkcXwy<2( zu1Ydis{8xchU~58^uf`x?R0?3DGb8%s~B53dr{HcS7#77Iww2RuKjV+#ba@ne;&&{ zeA%u899(is3qnYH&r6ld7wrf{j0g93y*f_At$i~Sjja6)N4^wB!Oe~@*@q3oTFqDtta3=O`k2U)peRj-dzyp?F>ERS@ z%gL0+@aDU=7mh!T`Mt-q4so-m07H~lE<<_^gLKxQHRMW^YK5wGQCCnLu}!@3&xlMF9J?& zUxYCyW*rL8`Fj-d9To3bV8)tnF{E!|knHL19Fqq-caa z&2@ZFD0wMgwX$%>vGQtUxxW0VfjerR-pFVMQGleAn$rLE6Lpl zf9*ZFtJ^p)%Ea`!_mHIbF^Tyim3HCIsCr!@P4@E7M={CNp!#4e^xIO4H%!8!HzFf9 z3t@=L3UB2fn5&@Tuqxk6M!DmD7aKOhO`nw@AOXd?CXdSZrWUb=Z+~y)h^uO%)Bsg1U#Jb5@WEo^iM#tjp?U&+w&W9)M z2W=*^h;n>#W97-wj)BhGvw(YR7&s*$yX2-#K zkE1IHis>6wK9NR3-;=G>&=NV|M*K0y&3mvn--$R!#8y4!w$~tbs0jNb>U}pe)`!Fn zU~VWEb{aSXX$_87dV8IR`rphEB{-T`?9MC7+JRU2Q2qm#Ls&;QoAZMP`6@4y3o*KvR*z;#J#j{eAneh`YG)U1LePgxt8=M&zeZP z=G8vc@4RvuF>U>Kc%8-J`8XnW7f;7!{EdrQ`M8S+UmH)}d{Cw5VEYn~kd;IM>jDgy ztAq9gS|5H(XZ2;}G(n<5cDLV^h+WG}It#A!C&HX;>QIK`JsAE|MDS>GwB&@6K@e?Z zdD!x27)!ju(roQ+H{t<=xAIibKFiH}=hS7|=2~g!>^>0Aegpx-?hq#L!2rjTb^zV} zgA5MptOa@#c~%=o8MI@5PMhiQ9C)|CT4W%>y)aQXRkva$DsYJ3F-;AFC*QA5;7R3A zr)PJs@62rR$|@7dCluN+YL3L}8kOP7t)t`W`7zoLPIC>WKT#s4!=1yha@tjS=nm}Z z&eeI!t#&M5QkASPKOJu&!+^VExd7&hRL4k<&+Q5rlC-Aq%#7Du|I+6a(mp1{O**mf z=IF-HSu)8pGl28Z*^^B&&K{r- z^FD=i%DLu{LH{$UOuyyC0oCK9@pCmRY0$(4`>)(dCm2FmX_zTC^G% z0+iEwWMq8GigU6ZzE*22<+om>*pZab6jMl8_}8*fyv)Wwv*6*Rq#?J)Nqb!0gpmtB z7)aqoo#o=>ACbwijL1ykksszR8$uFUupf68oP~0WjVK649Owt4TfW&k)kL)jA)qVi zm_2hrVMHm#4P2!g?|ge+lRV0Z-H*L?EWnHSp6L|y4IWbSQuMiQ0W$B*;m`YK3%L^Sz@LG702DW$?W5eimug_9d6eIhTzH2JN0P0$OQwJ5#FDPd<(gLkw~9L6-CaEC zi_$4t(|`=q1`msG64V9N+*NMrhibkwf|>U9%4<~;Q$uX*y;OpxJ`RoyBk$XSJ&Gyc z(;Cg3!DyUJ4!}C168lhuz(}W?VZ03Z(;i8`!GrxV*c7nZIC(w8uY`11G3iS$sovpl zH>*}}`@;*OIN&@h+p4k-h}nFu)!F6*RN5lzZ=5L7>WX@9if;nHC?p zd?%ONQtMgsu7CMsgxe6PwiF(-Ynno~Ea&d{=#XJFr8=i|d0Wc!BCQCB6#aK|NgF+_ zw2i!7U8?v_0HKRrNOv2Tx4dWHCU9pRGX3<>o>9BFR(R8e?P$na6JUE(Wv}zpR7U(5 z5vS!lPsOpjSz&pPE%x>{B2m+GOhIt-SXFN~xHV4Pj0|~RgU_Pr&=ynu!jGuvFCY1Q zS|8YwLcQ*uYDbvLegB<-8eoo&MWJJF$xnYSC+e*DTz%%*!k7 zyn;L7m=vC;tM){+0B$UGphk9A942UZ5^_51_nZrEhDTR-C3)_JKT?uBuVnKCb~DmY zl62M|(JQzGN`hr|ANRs)tse_eb9uHOU4>p9cvq3a_{;qugQWgl zakS{B-1GVbIha2@Dd;f38iK5q+DW7AvZya)s;AnX-h*}=J$=>uf!+WUU$ACI+yfH? z(o~VSwe}$#x27M>3#ZS7>Gs~_b(o)!2_3?;{WipAGd+W~7hmf5KMkRP9)!1l6b;xl zN9zafmK$$9jH1{U_`(LyMgQuz5^B3w`^3utYEEo!1RLtA6_UW!=8D~fXog(Ih(yNZ ziv|xK9fe!yZ>vmKHM~f5&O{ zW*)*WgO@zFLBp-hO&-!o?@WEAhE{F54fb{xQ*|l^$(&nW++SPLppOTcvt_qwM-_6Q zxbu4_e*1&NdeLW%mc`qc2sRTR2OW{9BRdgmx{_&!h=$%C*Pc6-#6$-93;_jq{*jWy zK4E(*w;69S80B)Gj`qVn{sq3ItUfY_Y`KuxDk00JexmEWjmoHx@rbksSb5XW8pdRN zEA9C5@l_QUsC60aRw%U##^O3-el>qL4ovu2>WIa!nPWxUY8T%?ds7ldyLZ#>s-4>( ztKbG0uCc5kzR0ZGb_$&VS$1ELzovQ*XO5v@a_wrHJ-!wrEMjDiBTLU(+ahhx#D@=| zo|gm0YG`T2%aBsw6XFnVOG&C31>J1{A=aYb-n)9dz26>i(m*%>!;f7ZqS%YXYet^x zhR1X1iyLhm?aYkH)a*=T!uPkcxV49_TlVXNWZjVFD^ayB(Kqk;OFEn-M?SUHRmETK zY5E@uqG`6xWI7w-g_pl)pVy|)+|x3M4Xh>zr-j_oO3itT#+Cx)3aSxX)h*r}-zwGX znAk7;n?7<^Y{Ocgh!kPg&h8W1#w%5CG~YP5*$tsLJ&l(6exAi&i2Ms0`gL(QavTUd0JNY0o@u9FCl8=BLk>P; ze8zH@5Ogi|x~-K>pKWN>768pAFLuludgG?^8DoJ;naAGF<6(K>Jd7Y{I=P{VoX<#F zM?0Cgp`?b6no|oIR@~g?Z?RB34#fOPr%n(K>A5?Frn$W>!nMn z|3t-TFWKS2AmHFvOpCSQ`fELYK%c1CEazB{_pdtW?oy`0TrM_y`pPY@VP|54)Lu5# zgde}s9~GA?K-6C997wQO)|Uw$UHpZ|GzfS8iI*ggd^&9#PL8q8#(*qiY6eqKy8*S*mJon~9k- z%SIbw-Q!{kaqS0}sj9|@x0SuIDgQ=g9NpRv23v@%*Sk7?qs4R|>pPu8)xkBfP5pNr zm7LDzBz-CeewEhsF-hy1uAEA|+?4G5H_e!D5H8aPSD(_;=<;}Lnqb(sr zer`8s8%Ek&3CLv9{b3`3=u~i(19*P4gUb)F*#ym=HYsm}(lg>N3ckP?(6FdCx3XR) zy4A>vh%vQfxKjj=H^CIo7-1|6KRT`MZ(pdSh9;Ao+v`1V`cy|ijJMel$m|FWlEgVFqqjerCjzUy8Pf`%3OW)oIWmiGQ{K?&`ShFoB%eFtW?OaApeeu&I?D`<(g^n1ib+EUI%^ zxC@3o!OjcwF46hF0I?%Z+^T~lin)V!6v`Q`S-9xb8c$A=L`i)>weouJloEhQN|L}N zK>z>;2ma?1j<*EqKsU@k9- z*(^{@crvmk+QWcevxk&+0XosbQ`T_Sh-18sWKrO04qjV4`$`QgUD+*VRNh}7k@@Z6 zmERU8`AzYT-yXO4tpSMN7D@O`5rN;_wfikyx!>G%`<**szjJTueA(!5oT=5{w{}zh z-MSmUW3S@hwSVw8_VoTHKHG0~&3>DQ^*3~sezQOHJ3BVNlmGHJ_E-J}e#h_RRQ!#c zh`*6D@HaI0T{iUvn@*jY?ZT82Udr{{%FH#XD8VaK_3={hkz55 zU3P>`cEmwsM|D(o>gmuf%dUyukv7@cRcBAK3p&c~(AchGP`NDbRdgZC!P*qr9<{@d zW8`t9WxD8)y;_g6g_q2KTM-&g218gRh?68{dekJiLk@pU;!-Y|RL)wWaZMokQeZgH zw@RXxcPb{VTR!{Tev8m;W zV!Wu<_;8Uc`NX`hl;M2H{U5Q52!rRu z_n-@?J$@@q8#m1*vF=O9inMN%ABX4O3y7z>gL3X{(wx z5c8oPZBt5*bvKHm>?2TzaqM`IJWk@R$-b4Mi$CH>WO8vi)3*{Ht_T;*QnY8l{V3iwpHK^dNGe>Sr@69&wg`(s<^`CnGBb2 zBWWFelQZD=OVwq_M(AU;k{0(mnR3tXVXu?zDOdM8*=eJ_PNt4?U%Q;@mdy80MOzl$ z^Ij)&=e@skKNJFuYOx!M7WYCab<|QAvinFp+K|BBVnIg={|pVAo>Z4sA*c%-9el07 zSfZuU?ow;8{@7y7T3_Y*Q}sF!%sLy-!S`CJO9|j}Po}6pwKw}S9{U3uonA?0$v7pX zciowI;1OI}IX7m{R2()p6dd*z9cX)^MH(G29Fu;#U@ZlS<2jfEh})C77?17EUQEyZ zfei*$^&n^E=t4r9D)zTC*DUH*wq?}!AllhDRyZ9{d9#x4LFbzU^Lq{B+Y`Y5!9sWI z)~f?W{)yPa{^R}D9^Ol&zrv-E-`$gw)Sud$k2D@rU1X6%q1wKW&pMz#%812MQYajt z7gi{sF>BhEjdsub=+<77AHzo=c4irJf)eK1POohewAK<70kbR#@VE zLmaat0u{?hz*+X-K^(9E|M}uHPfLRONaMwPbunvjlsz3woLL!+mxA*`ii=~@>7MxD z#Cm=TE2U;9PxHBxr&9jmy zus%HW7vFj&z~ukpn;IL!am=TjuG7;uMf4scf^fsZF$@p3EVVgKg0|K}0d|@MaX{i& zFdPMlLJ{A%(yd#i=^N(O5_F*t8aOBQP@p9EpE_pU3PHfN6P!3sn#4Rd-+%N>q|h6j z%g&u1C`Ds@f)=Fo+Uz=yB~Fgc6cVwy=!x{~>6P?5jfm-DjxY=sBm*SNkO7Ja5`hQ@ z#7qR)D8q6bmI~75bqPf+I<0$n)CV^qQO9wUO)jm?kI>U19U0;&ar|TtEPXJ&diOpro-#i8Ne@F=l9G##57rdHBNd+qw7 z6Vv1pWpI{dm_Rrb!2%RRMFLTli3CC+j1Tg_Rq=d_eVaS_LbR$cxDO+a1D6mqHsTx_ zot`I#=d<|2%5Z+Xyu7l;#tI8rd^~efz?LQ$iqD*hvn6tFcxB|BM#QvLBbuUu1Ro7V zF+2i{i3_Nimk&hoR49O_NQP#k zEWvZpt`iD!lELtC++;zsOI**?>Uu0S7^YXL)Ij*?O#i@QnG4Zt%qp|iGhGU=&n}LT z*l?W%>BLl_ka(EKQyd+j*%S~8Pcs2J6ap5+k_<~?IL|Smt`iDqTu=`p2s#f#DB<#G zk;(M&xHz-eCl$}ErP*Qf3>G~Z<5%+dR4KDQ(Z5b4j+TgCyQb*GG@*oPnkOQ3fWkv8 z5DE{>CrpI`T#Dpq4iEA;gL~*!bb;*ZR zDK^}iT)g)z!Q*)NIALEX0 z0t_Vx&^?np769Q)3d0B{!bKxp>Rf^Z+Uu(dMM{m6%jLfH;fa~0%$c<^kDsLa6J-|T z7w6VkL7Y2@&x(B#^WIlc0(i!x*-_7&>RyCvEdNU2D{RTVE6^P zQ_y*sy63(jX?iNlPxSO@cg0tM8C7_5C4L&?_sWLlaZ+waG9xm@Q7lsKwZFDZ3mWPmL{!W70}I zGP4q2%$%NI#2k7zL`)Yn6^ardAPnJAJ^&mS7f6w0BmhPdbd*o=EY63!)LX$f6HL<- zRCau+UrMp7!@2c*czLjlmnO-9<-|NbesrB#N=WNM5SyIkN8+M`w?f2pp@0E74mx_4 z0A(l+3k9M)6AbXcJ|iScGiDMF~)q&~cJHPMU(l zS>Y(1K1qjq@lu{8#)_la(ovBqOiV2I^SQO*SY%Z!mxCp0GEq13)QPEb2@)h0ra`cb zhvA|G7=y#b8Y)2WScKx4C=pDN`wN0X&8OV|;#*lh$h3Pj3{b%S^H{XOqC9cwi0xAM41gg*nuLIcdz2PIiiQYb1>H#g}FtJV@ zCrs@z!eF_eI52qfOqR)|$l&;yGpD)mSY8+kFAbc`4vqE9_D!F`7UP9kr&)T1nARR) zEP`_>D!@ilKs)J33XJS%I)IZn8IA-AiekENA`SYX&~ZEpRLc+wpOX?}bkSj|YK4Dw;}xKq*KOz|p5d zB-NEdQ6@6X9bbN)CPUOf> zA_FNphy|il5C^?^BnrkKU8+4`U`d&Jq>-NB>N>eVogq1HIXW~xmmryi=vY2Dv5*-% z3Od+wWO{TqI9wXRoJXmY-Xn!EoFi#C;^4zrfC`5|*u()h%z!aRkWP_&2={aya1V1w zFyg>0osxtPuM`q|@4!H8a=afKUM8k7mWZ?CV-qAc8J-&+8yKCDPEHOD6`jHt%+x7` zF&4yRJm{1nA=oK_(R(Vz5CNVfs1y~Y!W_|JIO+XZl{`*`EPH>rr3{lUtfXd+&ZdOI zYTr7WT9_}9rT$TTjp*y2Iho0DCx?zwcz^v|qee`VODM%eQZyR~;RFu`@HhzTSds+h zM6fi$<8b>(*BOzzdIwW?7(xjzvC}J&vFVASfmCRa94m@krbwOPXII(TY;1aLWnpB9 z8(N&>*gB!;#5AFVF_H-pz<#(05Cu&ErxIcC0GXngD8(=&jitI#C|Cq$lrZmx!g>qS z%R^$g|MXg7L?UN`;i+kCd@iy=mqwOD@srEL($N(WU+oXog>^bHO(+b8M_HbOJ1^ku zD^CH(i!%Wd<1sEofPRW?aYu^xyXP=vF2ZC%^SNSiWVvT?is+ALhp^uMC47J!5>E`3 zL-=Agv9KUc4lkFc@nxyksT;yfJ9WY=A0aSsk6~yW^w;53AWC3VfMa-?iQqw&vt|?O zB4xqD7NHbKaUdI7o;!MCkcfnNhRNr0rE+?T4;SO4lp8-fKQ$UFVAI3J`t2whF;yrL zoQ_gajtekY7>wS73=j$xO$FE>mx_Weien<(7w)2|JP@{H5y#6Yf+k9*=GR+IUbNzFPo}*-WAdZcXI7}2G>Y9`y5d!o?aOWEz1ui!f3PiY2 zB#;7rm=80d5X*LLrxa2)3e*V-Tn-_(d}uk_Pvzs|Gs`(LJ(WpunGn-gT1hOG7P7t6 zc(62D7LG2Qo*Y}J>St6n>Z+ikOo$`#C>01nO`=k8x-1yt0(2OUM1n+!!|4`xeR&+! zC>xRp9KDUMni)C5j8Uii#i4=x!pUf6X_iFR<0{f7)qTSs|v$B^0D^ zoK6M8M34c(p~*mm25}B>EmRPw3m0bgw%q=^-sT;#EGkEr=T_(AWDiHojjbfIV=KhT zvBJVEMzbV#MmWt+6LaaKCkM-9JmNG0iPK&oC{93ZWHve4ntk9M8 zFei`s1(KtMqbDb)5>vqyvS*dcMwTK(Bq~g;q{6*xBm7dfz()zDXL^mDu3K8xiD^P% zg9M#Q(IAWl@}Pn#peYfC3k3NvOEVY~;z_Xzgv2zw3H!G%Kh#8@U?3@(nYMf;c2(e>38yk~J}Ha19zOUo0z zy&QLDA~@fdc9qI6c%qb*8vV&z45#GSjnIb~xrFl#prqi(~ODohPEW0>mH$yaL(7fSyi0MOfDWRPWMmEiToTheY$69q|6?j zFQ-PcD`(dFXU{BiIFq9n67`y*5mSZ2V=O~OLHNS4L7*w25O6Xi7X;mO1YF=FG#25y zPAKZ;q%fM%P=#`4g+H;_Gq_UB&6R>vy;I!!iHWfclf@%PCl~mUVnO6186hWSmg{Ga zHDa1jh!9UlfG43T1`kk7G!=-#Sum2N$S9QxaRk+s+r8BptB_@=H9j%SpP3lS=E9*| zVvJm3a*^Kg*wXsSXfzcrP7N`sfz_p01{>v;oTk4*rlA%e<|7p7lHr0Bi0N=1?f`?j zg9En`jxc;E)UDgSiLhk{$;k*FJW~*k2D$JMxi~mHS)iHu5<9w>pI==cx11XXM!*eDSj&c-5hN3MlY<6M?7(rP!k>E2k zgG0+p#fc&}G&{9ECJh(E!Fe{u#s^c8EH;GY2B{M(L})EuCl{UA-ttcC-Bb%KJ8B6Bl5xl5BM}UmqsD7_p`8Aj;G7n(!tIJYc;`;-&*qyWx}X4w|yrb zS}UrjiWWfaTFE?A|9~s0haAYF+(YQ;vLt5370|Z&0ohCYfASQ}eWF9${mg7#@)=>fawu;wZKf+tOxsP3iCO_dzPnibQF4aY;t0#VfH4o(!fVVeveP(=+$JF%ctRC zkbNUV<~CIB7a1Dny&8!114lJ>n85tl5o-ydn9P^6*(4NHiz&9SD263z!8l1=5tZgp zm+5R7P#TX7jLeRsI_xg(Rdmkit_im4S?5uoSXXmVJ2JuH9#nTHX*n8DL-6)S2a*(& zgT3Hkt4`#Bb;EpDwp%7!t3G2J)}JAj7EKJzIUXfsCPfjFb|^r6ijxCY8=c zvoO_OddG$)XGRjkz@VJ7k%jB3^H9OTE5=6ugGONrsO-7 zWBF6Z96}{f#338MtvGBlb3vGZUoE0=gK~oRwIABeav>|ynpwgE<_i`I44|79r8N^B z{gPHtl+sC4JOT?^FZoY_`fC)8LJbO_GgS}jv|ZCHA;Ib^0VNW?_R}JU5}h_l0shi%(^+7GNf6Bd(V1Y?U$#B~6ZMwrA246G z0#KZjfj~J}QL8PTXMvY3n913$X+=vCoi8fUn^Dwu&41_+Qfn!D%EyD@obT{qt0A63 zmghSy3VGit(^bgBC+0zU6LKj3cYHR>I&$QQFU#>IGYv%%Ar-cs2-53!d=^zkf$R|w zD7xppguGBn!Y<7|EIObk+l8*ls~uMV1%+W+T&4FsRzFHRg4#waaRjxx@&ocY<)%>d zI38t%OiN<9a6ox9CTVu?MH(86DTAeADaLQVxrE)b)m;Up)1WlsWt21hwv@2btG}vQ zhf`%vLG)?ONc0l=y|k+2u#gqgJH9%c&|GYU)MIC$0L+BU!g{A(fG%5$j)pJi85rpR z)pJcV>SUhDWzGCr;y<6%A^%JrPWf^DI{bI{G?Xk9bY3cJ7}wk0jxt~ z>dM`Be2(&Lm+~S*GiC2*xdNAmakN{iyc-9L&r26}cT%uO-DwGmlG-k6g&`YLpKtus z3ZO99RK$EiD+DO!S#!{0{ML%p1vb`@Mk}OMpXExlU{-$TTi`+TT#=E40@5T~bd4rhaWJ;VEqw|#t=%%rCyc;Ks?OZGh2QZZInw+fMhSO^ZUd{pO5MH?mL*qo3E2WsFaN&& zgu&S0WRq>B?#l*`XU3ixduGfakNQ9pjMe7C`b&9H8|dL! z#|}E|>dpeMI+D;}6w$y$pBX_=F~rep4^w?fLK!|6`=>)v4HAY+N1F#k5@yxe4o?^W z@I&Ve1)vWNs_{KN!`sDWmFle&)>U9jTl-j?D15cp^#p#lsC9&Vs(8trSUSu}M}Zl6 zUpPSggq;p_moaMgysJ0}Ah~O#$-U&e8M9^-BFW9z@uQH-Zn_C+Cm9_a>~LDTQRj@r zcuMtzmnTnU$_`Lcd&xRaKNXT;7%v-IVPAeTQ{9g>*py%I@pD}1A3t}O0lYsPGZR+;y-E`gm8x8v|I`4}7&<79D@a8+ zCkFGlzP()1Qo0-F;dO0<^l9JGg*&xcY#N~^`#gy&i2};>IWA&+4ZUfbR>#Ve*l-3) z8eI#N8klSc?yN;(q;&T=bWBmOPHc*Q|Ctu40efd9uFlB#p~TcMAJAyQM%bpS(3eCt zGEH36gyr>PXWFo=YOFD0k76a6z0UH@zSxo45>|19rvAlwi01z7{nCr> zgV`qsHIZ3F!ThtcoUH*ZT2po^9dEXDAQh$xT_WtUp#n?IP9ft3;cDi3At1%eX6y-j zDmT>8`J+IV%t|p$eo%UzmZm`c7v6)F;#Scc*o(1Kf#q)<(;@GUK$RP< zZ>XPX2T;jI2-J@NTvx5tJ$MW41dG&g7w~K+D32eJUaV9tE{&%&$#(IUR;#g`kpL;V zcEuViLup#z#Dto(W`=D5Mfu*8d3qU zbDqzMFA%Me&`P(6is_+sip}qa13n-~{$w%4{{ZVB{|(-B$K%-bBiH0EEvtC<%;8dM zTiwM)_;$ByvJ=xu6SkvlgEv)$C&e_q`=zsT=h5BDnY)4Odu#g__GcM4#@M36G&{8`s zqOdWR2K|c0BLB;@;-9Wq(3g$d{%b6HEIzifdZw<6%Le}xfy`w1@ahIKB-R<4l6uC@ z?7&1L+)rLa!u`+A{7cY6?}BY(B4duf0hrB0XBDBR zXnyNDUN|KrWDrPT(v05oLnr7ApR_h?{{c`-0Rj{N6aWAS2mrH88C?Pio{ZLG006}b z0{{#F0000000000AOHXW00000GB7eWFgP+bE^~2gP)h{{000000RRC2IsgCw0Av6F F0063lu08+& diff --git a/WebVue/src/router/index.ts b/WebVue/src/router/index.ts index ed2a3af..434b251 100644 --- a/WebVue/src/router/index.ts +++ b/WebVue/src/router/index.ts @@ -63,6 +63,23 @@ export async function setupRouter(app: App) { }, }); } + + // 错误页路由:地址不存在(拼错 / 菜单里没有)时统一跳到 404,不再白屏 + router.addRoute({ + path: "/error/page403", + name: "page403", + component: () => import("@/views/error/page403.vue"), + props: true, + meta: { + title: "页面不存在403", + }, + }); + // catch-all 必须最后注册,匹配所有未定义路径 + router.addRoute({ + path: "/:pathMatch(.*)*", + redirect: "/error/page403", + }); + app.use(router); } export default router; diff --git a/WebVue/src/service/security/localeService.ts b/WebVue/src/service/security/localeService.ts index 272d089..1d17a24 100644 --- a/WebVue/src/service/security/localeService.ts +++ b/WebVue/src/service/security/localeService.ts @@ -88,6 +88,15 @@ class LocaleService{ ) }; + async Copy() { + return request( + { + url: "/Locale/Copy", + method: "get", + } + ) + }; + } const localeService= new LocaleService(); diff --git a/WebVue/src/views/error/page404.vue b/WebVue/src/views/error/page404.vue index 54efa13..7773a83 100644 --- a/WebVue/src/views/error/page404.vue +++ b/WebVue/src/views/error/page404.vue @@ -1,2 +1,2 @@ - + \ No newline at end of file diff --git a/WebVue/src/views/login/index.vue b/WebVue/src/views/login/index.vue index 09ceed1..5d1c650 100644 --- a/WebVue/src/views/login/index.vue +++ b/WebVue/src/views/login/index.vue @@ -20,7 +20,7 @@ {{ t('login.login.login')}} -
+