Browse Source

feat: 模板集成多语言模块

pull/126/head
wangjun 3 years ago
parent
commit
40b2a74a69
  1. 2
      templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
  2. 4
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs
  3. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
  4. 7
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs
  5. 2
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs
  6. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj
  7. 3
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs
  8. 27
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
  9. 6
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs
  10. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  11. 7
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs
  12. 4
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs
  13. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
  14. 7
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
  15. 16
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs
  16. 6
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs
  17. 10
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs
  18. 164
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095018_Init.Designer.cs
  19. 82
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095018_Init.cs
  20. 162
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs
  21. 11
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj
  22. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj
  23. 4
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs
  24. 1
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj
  25. 4
      templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs
  26. 24
      templates/abp-vnext-pro-nuget-all/vben28/src/router/routes/modules/admin.ts
  27. 7968
      templates/abp-vnext-pro-nuget-all/vben28/src/services/ServiceProxies.ts
  28. 65
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/CreateLanguage.vue
  29. 160
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/Index.ts
  30. 129
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/Index.vue
  31. 65
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/UpdateLanguage.vue
  32. 65
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/CreateLanguageText.vue
  33. 201
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/Index.ts
  34. 104
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/Index.vue
  35. 63
      templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/UpdateLanguageText.vue
  36. 2
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
  37. 4
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs
  38. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
  39. 7
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs
  40. 2
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs
  41. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj
  42. 3
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs
  43. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs
  44. 24
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
  45. 6
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs
  46. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  47. 7
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs
  48. 4
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs
  49. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
  50. 7
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
  51. 15
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs
  52. 8
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs
  53. 5
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs
  54. 164
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095633_Init.Designer.cs
  55. 82
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095633_Init.cs
  56. 162
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs
  57. 11
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj
  58. 4
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs
  59. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj
  60. 7
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs
  61. 2
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs
  62. 1
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj
  63. 5
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs
  64. 8
      templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts
  65. 11
      templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts
  66. 8
      templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts
  67. 12
      templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts
  68. 24
      templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts
  69. 7968
      templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts
  70. 65
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue
  71. 160
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts
  72. 129
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue
  73. 65
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue
  74. 65
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue
  75. 201
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts
  76. 104
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue
  77. 63
      templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue

2
templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs

@ -32,7 +32,7 @@ namespace MyCompanyName.MyProjectName
var app = context.GetApplicationBuilder();
var configuration = context.GetConfiguration();
app.UseAbpRequestLocalization();
app.UseAbpProRequestLocalization();
app.UseCorrelationId();
app.UseStaticFiles();
app.UseMiniProfiler();

4
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs

@ -2,6 +2,10 @@
global using System;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Volo.Abp.Application.Services;
global using Volo.Abp.Authorization.Permissions;
global using Volo.Abp.DependencyInjection;

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj

@ -17,6 +17,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application.Contracts\Lion.AbpPro.BasicManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application.Contracts\Lion.AbpPro.NotificationManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application.Contracts\Lion.AbpPro.DataDictionaryManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application.Contracts\Lion.AbpPro.LanguageManagement.Application.Contracts.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs

@ -1,7 +1,3 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
@ -9,7 +5,8 @@ namespace MyCompanyName.MyProjectName
typeof(AbpObjectExtendingModule),
typeof(BasicManagementApplicationContractsModule),
typeof(NotificationManagementApplicationContractsModule),
typeof(DataDictionaryManagementApplicationContractsModule)
typeof(DataDictionaryManagementApplicationContractsModule),
typeof(LanguageManagementApplicationContractsModule)
)]
public class MyProjectNameApplicationContractsModule : AbpModule
{

2
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs

@ -5,6 +5,8 @@ global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using MyCompanyName.MyProjectName.FreeSqlRepository;
global using MyCompanyName.MyProjectName.Permissions;

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj

@ -16,6 +16,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application\Lion.AbpPro.BasicManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application\Lion.AbpPro.NotificationManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application\Lion.AbpPro.DataDictionaryManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application\Lion.AbpPro.LanguageManagement.Application.csproj"/>
</ItemGroup>
<ItemGroup>

3
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs

@ -1,5 +1,3 @@
using Lion.AbpPro.DataDictionaryManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
@ -8,6 +6,7 @@ namespace MyCompanyName.MyProjectName
typeof(BasicManagementApplicationModule),
typeof(NotificationManagementApplicationModule),
typeof(DataDictionaryManagementApplicationModule),
typeof(LanguageManagementApplicationModule),
typeof(MyProjectNameFreeSqlModule)
)]
public class MyProjectNameApplicationModule : AbpModule

27
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs

@ -1,3 +1,5 @@
using Volo.Abp.Localization;
namespace MyCompanyName.MyProjectName.DbMigrator
{
[DependsOn(
@ -10,6 +12,31 @@ namespace MyCompanyName.MyProjectName.DbMigrator
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobOptions>(options => options.IsJobExecutionEnabled = false);
ConfigureLocalization();
}
/// <summary>
/// 多语言配置
/// </summary>
private void ConfigureLocalization()
{
Configure<AbpLocalizationOptions>(options =>
{
options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
options.Languages.Add(new LanguageInfo("es", "es", "Español", "es"));
});
}
}
}

6
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs

@ -7,6 +7,12 @@ global using System.Linq;
global using System.Reflection;
global using System.Text;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.BasicManagement.Localization;
global using Lion.AbpPro.Core;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Localization;
global using Volo.Abp;

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -16,6 +16,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain\Lion.AbpPro.BasicManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain\Lion.AbpPro.NotificationManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain\Lion.AbpPro.DataDictionaryManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain\Lion.AbpPro.LanguageManagement.Domain.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs

@ -1,15 +1,10 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.BasicManagement.Localization;
using Lion.AbpPro.Core;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(BasicManagementDomainSharedModule),
typeof(NotificationManagementDomainSharedModule),
typeof(DataDictionaryManagementDomainSharedModule),
typeof(LanguageManagementDomainSharedModule),
typeof(AbpProCoreModule)
)]
public class MyProjectNameDomainSharedModule : AbpModule

4
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs

@ -7,6 +7,10 @@ global using System.IO;
global using System.Linq;
global using System.Runtime.InteropServices;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using MyCompanyName.MyProjectName.MultiTenancy;
global using MyCompanyName.MyProjectName.Users.Dto;
global using Microsoft.Extensions.DependencyInjection;

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj

@ -12,6 +12,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain\Lion.AbpPro.BasicManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain\Lion.AbpPro.NotificationManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain\Lion.AbpPro.DataDictionaryManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain\Lion.AbpPro.LanguageManagement.Domain.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs

@ -1,14 +1,11 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(MyProjectNameDomainSharedModule),
typeof(BasicManagementDomainModule),
typeof(NotificationManagementDomainModule),
typeof(DataDictionaryManagementDomainModule)
typeof(DataDictionaryManagementDomainModule),
typeof(LanguageManagementDomainModule)
)]
public class MyProjectNameDomainModule : AbpModule
{

16
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs

@ -1,11 +1,3 @@
using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates;
using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
using Lion.AbpPro.NotificationManagement;
using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
using Lion.AbpPro.NotificationManagement.Notifications.Aggregates;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
/* This is your actual DbContext used on runtime.
@ -21,7 +13,8 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
public class MyProjectNameDbContext : AbpDbContext<MyProjectNameDbContext>, IMyProjectNameDbContext,
IBasicManagementDbContext,
INotificationManagementDbContext,
IDataDictionaryManagementDbContext
IDataDictionaryManagementDbContext,
ILanguageManagementDbContext
{
public DbSet<IdentityUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
@ -43,6 +36,8 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
public DbSet<AuditLog> AuditLogs { get; set; }
public DbSet<Notification> Notifications { get; set; }
public DbSet<DataDictionary> DataDictionaries { get; set; }
public DbSet<Language> Languages { get; set; }
public DbSet<LanguageText> LanguageTexts { get; set; }
public MyProjectNameDbContext(DbContextOptions<MyProjectNameDbContext> options)
: base(options)
{
@ -63,6 +58,9 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
//数据字典
builder.ConfigureDataDictionaryManagement();
// 多语言
builder.ConfigureLanguageManagement();
}
}

6
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs

@ -1,6 +1,3 @@
using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
using Volo.Abp.Guids;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
@ -10,7 +7,8 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(BasicManagementEntityFrameworkCoreModule),
typeof(DataDictionaryManagementEntityFrameworkCoreModule),
typeof(NotificationManagementEntityFrameworkCoreModule)
typeof(NotificationManagementEntityFrameworkCoreModule),
typeof(LanguageManagementEntityFrameworkCoreModule)
)]
public class MyProjectNameEntityFrameworkCoreModule : AbpModule
{

10
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs

@ -6,6 +6,16 @@ global using System.IO;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates;
global using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
global using Lion.AbpPro.LanguageManagement.EntityFrameworkCore;
global using Lion.AbpPro.LanguageManagement.Languages.Aggregates;
global using Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates;
global using Lion.AbpPro.NotificationManagement;
global using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
global using Lion.AbpPro.NotificationManagement.Notifications.Aggregates;
global using MyCompanyName.MyProjectName.Data;
global using MyCompanyName.MyProjectName.Users;
global using Microsoft.EntityFrameworkCore;

164
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230617073909_Init.Designer.cs → templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095018_Init.Designer.cs

@ -12,7 +12,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20230617073909_Init")]
[Migration("20230710095018_Init")]
partial class Init
{
/// <inheritdoc />
@ -139,6 +139,168 @@ namespace MyCompanyName.MyProjectName.Migrations
b.ToTable("AbpDataDictionaryDetails", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("名称");
b.Property<string>("ResourceName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("资源名称");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("值");
b.HasKey("Id");
b.HasIndex("TenantId", "ResourceName", "CultureName");
b.ToTable("AbpLanguageTexts", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("显示名称");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("FlagIcon")
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("图标");
b.Property<bool>("IsDefault")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("UiCultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("Ui语言名称");
b.HasKey("Id");
b.HasIndex("CultureName")
.IsUnique();
b.ToTable("AbpLanguages", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b =>
{
b.Property<Guid>("Id")

82
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230617073909_Init.cs → templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095018_Init.cs

@ -218,6 +218,71 @@ namespace MyCompanyName.MyProjectName.Migrations
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLanguages",
columns: table => new
{
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
CultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
UiCultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "Ui语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
DisplayName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "显示名称")
.Annotation("MySql:CharSet", "utf8mb4"),
FlagIcon = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: true, comment: "图标")
.Annotation("MySql:CharSet", "utf8mb4"),
IsEnabled = table.Column<bool>(type: "tinyint(1)", nullable: false),
IsDefault = table.Column<bool>(type: "tinyint(1)", nullable: false),
ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpLanguages", x => x.Id);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLanguageTexts",
columns: table => new
{
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
TenantId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
CultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
ResourceName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "资源名称")
.Annotation("MySql:CharSet", "utf8mb4"),
Name = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "名称")
.Annotation("MySql:CharSet", "utf8mb4"),
Value = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "值")
.Annotation("MySql:CharSet", "utf8mb4"),
ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpLanguageTexts", x => x.Id);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLinkUsers",
columns: table => new
@ -959,6 +1024,17 @@ namespace MyCompanyName.MyProjectName.Migrations
columns: new[] { "Name", "ProviderName", "ProviderKey" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AbpLanguages_CultureName",
table: "AbpLanguages",
column: "CultureName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AbpLanguageTexts_TenantId_ResourceName_CultureName",
table: "AbpLanguageTexts",
columns: new[] { "TenantId", "ResourceName", "CultureName" });
migrationBuilder.CreateIndex(
name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_Target~",
table: "AbpLinkUsers",
@ -1117,6 +1193,12 @@ namespace MyCompanyName.MyProjectName.Migrations
migrationBuilder.DropTable(
name: "AbpFeatureValues");
migrationBuilder.DropTable(
name: "AbpLanguages");
migrationBuilder.DropTable(
name: "AbpLanguageTexts");
migrationBuilder.DropTable(
name: "AbpLinkUsers");

162
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -136,6 +136,168 @@ namespace MyCompanyName.MyProjectName.Migrations
b.ToTable("AbpDataDictionaryDetails", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("名称");
b.Property<string>("ResourceName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("资源名称");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("值");
b.HasKey("Id");
b.HasIndex("TenantId", "ResourceName", "CultureName");
b.ToTable("AbpLanguageTexts", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("显示名称");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("FlagIcon")
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("图标");
b.Property<bool>("IsDefault")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("UiCultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("Ui语言名称");
b.HasKey("Id");
b.HasIndex("CultureName")
.IsUnique();
b.ToTable("AbpLanguages", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b =>
{
b.Property<Guid>("Id")

11
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj

@ -5,14 +5,15 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj"/>
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL"/>
<ProjectReference Include="..\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.EntityFrameworkCore\Lion.AbpPro.BasicManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.EntityFrameworkCore\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.EntityFrameworkCore\Lion.AbpPro.BasicManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.EntityFrameworkCore\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.EntityFrameworkCore\Lion.AbpPro.LanguageManagement.EntityFrameworkCore.csproj" />
</ItemGroup>
<ItemGroup>

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj

@ -12,6 +12,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi.Client\Lion.AbpPro.BasicManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi.Client\Lion.AbpPro.NotificationManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi.Client\Lion.AbpPro.LanguageManagement.HttpApi.Client.csproj"/>
</ItemGroup>
</Project>

4
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs

@ -1,5 +1,6 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.LanguageManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
@ -8,7 +9,8 @@ namespace MyCompanyName.MyProjectName
typeof(MyProjectNameApplicationContractsModule),
typeof(BasicManagementHttpApiClientModule),
typeof(NotificationManagementHttpApiClientModule),
typeof(DataDictionaryManagementHttpApiClientModule)
typeof(DataDictionaryManagementHttpApiClientModule),
typeof(LanguageManagementHttpApiClientModule)
)]
public class MyProjectNameHttpApiClientModule : AbpModule
{

1
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj

@ -17,6 +17,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi\Lion.AbpPro.BasicManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi\Lion.AbpPro.NotificationManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi\Lion.AbpPro.DataDictionaryManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi\Lion.AbpPro.LanguageManagement.HttpApi.csproj"/>
</ItemGroup>
</Project>

4
templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs

@ -1,4 +1,5 @@
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.LanguageManagement;
namespace MyCompanyName.MyProjectName
{
@ -6,7 +7,8 @@ namespace MyCompanyName.MyProjectName
typeof(MyProjectNameApplicationContractsModule),
typeof(BasicManagementHttpApiModule),
typeof(NotificationManagementHttpApiModule),
typeof(DataDictionaryManagementHttpApiModule)
typeof(DataDictionaryManagementHttpApiModule),
typeof(LanguageManagementHttpApiModule)
)]
public class MyProjectNameHttpApiModule : AbpModule
{

24
templates/abp-vnext-pro-nuget-all/vben28/src/router/routes/modules/admin.ts

@ -11,7 +11,7 @@ const admin: AppRouteModule = {
orderNo: 20,
icon: 'ion:grid-outline',
title: t('routes.admin.systemManagement'),
policy: 'AbpIdentity'
policy: 'AbpIdentity',
},
children: [
{
@ -73,7 +73,27 @@ const admin: AppRouteModule = {
icon: 'ant-design:table-outlined',
policy: 'AbpIdentity.DataDictionaryManagement',
},
}
},
{
path: 'language',
name: 'language',
component: () => import('/@/views/admin/language/Index.vue'),
meta: {
title: t('routes.admin.languageManagement'),
icon: 'ant-design:read-outlined',
policy: 'AbpIdentity.Languages',
},
},
{
path: 'languageText',
name: 'languageText',
component: () => import('/@/views/admin/languageText/Index.vue'),
meta: {
title: t('routes.admin.languageTextManagement'),
icon: 'ant-design:font-size-outlined',
policy: 'AbpIdentity.LanguageTexts',
},
},
],
};

7968
templates/abp-vnext-pro-nuget-all/vben28/src/services/ServiceProxies.ts

File diff suppressed because it is too large

65
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/CreateLanguage.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.createText')"
:canFullscreen="false"
@ok="submit"
@cancel="cancel"
@register="registerLanguageModal"
>
<BasicForm @register="registerLanguageForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { createFormSchema, createAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'CreateLanguage',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageForm, { getFieldsValue, resetFields, validate }] = useForm({
labelWidth: 120,
schemas: createFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageModal, { changeOkLoading, closeModal }] = useModalInner();
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await validate();
await createAsync({ params });
await resetFields();
emit('reload');
closeModal();
} finally {
changeOkLoading(false);
}
};
const cancel = () => {
resetFields();
closeModal();
};
return {
registerLanguageModal,
registerLanguageForm,
submit,
cancel,
t,
};
},
});
</script>
<style lang="less" scoped></style>

160
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/Index.ts

@ -0,0 +1,160 @@
import { FormSchema } from '/@/components/Table';
import { BasicColumn } from '/@/components/Table';
import {
LanguagesServiceProxy,
DeleteLanguageInput,
PageLanguageInput,
} from '/@/services/ServiceProxies';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
// 分页表格语言 BasicColumn
export const tableColumns: BasicColumn[] = [
{
title: t('routes.admin.language_cultureName'),
dataIndex: 'cultureName',
},
{
title: t('routes.admin.language_uiCultureName'),
dataIndex: 'uiCultureName',
},
{
title: t('routes.admin.language_displayName'),
dataIndex: 'displayName',
},
{
title: t('routes.admin.language_flagIcon'),
dataIndex: 'flagIcon',
},
{
title: t('common.isEnabled'),
dataIndex: 'isEnabled',
},
];
// 分页查询语言 FormSchema
export const searchFormSchema: FormSchema[] = [
{
field: 'filter',
label: t('common.key'),
component: 'Input',
colProps: { span: 8 },
},
];
// 创建语言 FormSchema
export const createFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'uiCultureName',
label: t('routes.admin.language_uiCultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'displayName',
label: t('routes.admin.language_displayName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'isEnabled',
label: t('common.isEnabled'),
component: 'Switch',
colProps: { span: 18 },
},
{
field: 'flagIcon',
label: t('routes.admin.language_flagIcon'),
component: 'Input',
required: false,
colProps: { span: 18 },
},
];
// 编辑语言 FormSchema
export const updateFormSchema: FormSchema[] = [
{
field: 'id',
label: 'Id',
component: 'Input',
ifShow: false,
colProps: { span: 18 },
},
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'uiCultureName',
label: t('routes.admin.language_uiCultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'displayName',
label: t('routes.admin.language_displayName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'isEnabled',
label: t('common.isEnabled'),
component: 'Switch',
colProps: { span: 18 },
},
{
field: 'flagIcon',
label: t('routes.admin.language_flagIcon'),
component: 'Input',
required: false,
colProps: { span: 18 },
},
];
/**
*
*/
export async function pageAsync(params: PageLanguageInput) {
const languageServiceProxy = new LanguagesServiceProxy();
return languageServiceProxy.page(params);
}
/**
*
*/
export async function createAsync({ params }) {
const languageServiceProxy = new LanguagesServiceProxy();
await languageServiceProxy.create(params);
}
/**
*
*/
export async function updateAsync({ params }) {
const languageServiceProxy = new LanguagesServiceProxy();
await languageServiceProxy.update(params);
}
/**
*
*/
export async function deleteAsync({ id }) {
const languageServiceProxy = new LanguagesServiceProxy();
const request = new DeleteLanguageInput();
request.id = id;
await languageServiceProxy.delete(request);
}

129
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/Index.vue

@ -0,0 +1,129 @@
<template>
<div>
<BasicTable @register="registerTable" size="small">
<template #toolbar>
<a-button
preIcon="ant-design:plus-circle-outlined"
type="primary"
@click="openCreateLanguageModal"
>
{{ t('common.createText') }}
</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'cultureName'">
{{ record.cultureName }}
<Tag v-if="record.isDefault" color="green">{{ t('common.default') }}</Tag>
</template>
<template v-if="column.key === 'isEnabled'">
<Tag :color="record.isEnabled ? 'green' : 'red'">
{{ record.isEnabled ? t('common.enabled') : t('common.disEnabled') }}
</Tag>
</template>
</template>
<template #action="{ record }">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
label: t('common.editText'),
onClick: handleEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
color: 'error',
label: t('common.delText'),
popConfirm: {
title: t('common.askDelete'),
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</BasicTable>
<CreateLanguage
@register="registerCreateLanguageModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
<UpdateLanguage
@register="registerUpdateLanguageModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { Tag } from 'ant-design-vue';
import { BasicTable, TableAction, useTable } from '/@/components/Table';
import { tableColumns, searchFormSchema, pageAsync, deleteAsync } from './Index';
import { useModal } from '/@/components/Modal';
import CreateLanguage from './CreateLanguage.vue';
import UpdateLanguage from './UpdateLanguage.vue';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'Language',
components: {
BasicTable,
TableAction,
CreateLanguage,
UpdateLanguage,
Tag,
},
setup() {
const { t } = useI18n();
// table
const [registerTable, { reload }] = useTable({
columns: tableColumns,
formConfig: {
labelWidth: 70,
schemas: searchFormSchema,
},
api: pageAsync,
showTableSetting: true,
useSearchForm: true,
bordered: true,
canResize: true,
showIndexColumn: true,
immediate: true,
scroll: { x: true },
actionColumn: {
width: 220,
title: t('common.action'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
});
const [registerCreateLanguageModal, { openModal: openCreateLanguageModal }] = useModal();
const [registerUpdateLanguageModal, { openModal: openUpdateLanguageModal }] = useModal();
function handleEdit(record: Recordable) {
openUpdateLanguageModal(true, {
record: record,
});
}
async function handleDelete(record: Recordable) {
await deleteAsync({ id: record.id });
await reload();
}
return {
t,
registerTable,
reload,
handleEdit,
handleDelete,
registerCreateLanguageModal,
registerUpdateLanguageModal,
openCreateLanguageModal,
};
},
});
</script>

65
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/language/UpdateLanguage.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.editText')"
:canFullscreen="false"
@ok="submit"
@register="registerLanguageModal"
>
<BasicForm @register="registerLanguageForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { updateFormSchema, updateAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'UpdateLanguage',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageForm, { getFieldsValue, setFieldsValue }] = useForm({
labelWidth: 120,
schemas: updateFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageModal, { changeOkLoading, closeModal }] = useModalInner((data) => {
setFieldsValue({
id: data.record.id,
cultureName: data.record.cultureName,
uiCultureName: data.record.uiCultureName,
displayName: data.record.displayName,
flagIcon: data.record.flagIcon,
isEnabled: data.record.isEnabled,
});
});
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await updateAsync({ params });
closeModal();
emit('reload');
} finally {
changeOkLoading(false);
}
};
return {
registerLanguageModal,
registerLanguageForm,
submit,
t,
};
},
});
</script>
<style lang="less" scoped></style>

65
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/CreateLanguageText.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.createText')"
:canFullscreen="false"
@ok="submit"
@cancel="cancel"
@register="registerLanguageTextModal"
>
<BasicForm @register="registerLanguageTextForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { createFormSchema, createAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'CreateLanguageText',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageTextForm, { getFieldsValue, resetFields, validate }] = useForm({
labelWidth: 120,
schemas: createFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageTextModal, { changeOkLoading, closeModal }] = useModalInner();
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await validate();
await createAsync({ params });
await resetFields();
emit('reload');
closeModal();
} finally {
changeOkLoading(false);
}
};
const cancel = () => {
resetFields();
closeModal();
};
return {
registerLanguageTextModal,
registerLanguageTextForm,
submit,
cancel,
t,
};
},
});
</script>
<style lang="less" scoped></style>

201
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/Index.ts

@ -0,0 +1,201 @@
import { FormSchema } from '/@/components/Table';
import { BasicColumn } from '/@/components/Table';
import {
LanguageTextsServiceProxy,
PageLanguageTextInput,
LanguagesServiceProxy,
} from '/@/services/ServiceProxies';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
// 分页表格语言文本 BasicColumn
export const tableColumns: BasicColumn[] = [
{
title: t('common.name'),
dataIndex: 'name',
},
{
title: t('common.value'),
dataIndex: 'value',
},
{
title: t('routes.admin.languageTexts_resourceName'),
dataIndex: 'resourceName',
},
];
// 分页查询语言文本 FormSchema
export const searchFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
labelWidth: 120,
component: 'ApiSelect',
defaultValue: 'zh-Hans',
colProps: { span: 4 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
labelWidth: 120,
component: 'ApiSelect',
colProps: { span: 4 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'filter',
label: t('common.key'),
component: 'Input',
colProps: { span: 6 },
},
];
// 创建语言文本 FormSchema
export const createFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'name',
label: t('common.name'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'value',
label: t('common.value'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
];
// 编辑语言文本 FormSchema
export const updateFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'name',
label: t('common.name'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'value',
label: t('common.value'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
];
/**
*
*/
export async function getLanguageAsync() {
const languagesServiceProxy = new LanguagesServiceProxy();
return languagesServiceProxy.all();
}
/**
*
*/
export async function getResourceAsync() {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
return languageTextServiceProxy.allResource();
}
/**
*
*/
export async function pageAsync(params: PageLanguageTextInput) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
return languageTextServiceProxy.page(params);
}
/**
*
*/
export async function createAsync({ params }) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
await languageTextServiceProxy.create(params);
}
/**
*
*/
export async function updateAsync({ params }) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
await languageTextServiceProxy.update(params);
}

104
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/Index.vue

@ -0,0 +1,104 @@
<template>
<div>
<BasicTable @register="registerTable" size="small">
<template #toolbar>
<a-button
preIcon="ant-design:plus-circle-outlined"
type="primary"
@click="openCreateLanguageTextModal"
>
{{ t('common.createText') }}
</a-button>
</template>
<template #action="{ record }">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
label: t('common.editText'),
onClick: handleEdit.bind(null, record),
},
]"
/>
</template>
</BasicTable>
<CreateLanguageText
@register="registerCreateLanguageTextModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
<UpdateLanguageText
@register="registerUpdateLanguageTextModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicTable, TableAction, useTable } from '/@/components/Table';
import { tableColumns, searchFormSchema, pageAsync } from './Index';
import { useModal } from '/@/components/Modal';
import CreateLanguageText from './CreateLanguageText.vue';
import UpdateLanguageText from './UpdateLanguageText.vue';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'LanguageText',
components: {
BasicTable,
TableAction,
CreateLanguageText,
UpdateLanguageText,
},
setup() {
const { t } = useI18n();
// table
const [registerTable, { reload, getForm }] = useTable({
columns: tableColumns,
formConfig: {
labelWidth: 70,
schemas: searchFormSchema,
},
api: pageAsync,
showTableSetting: true,
useSearchForm: true,
bordered: true,
canResize: true,
showIndexColumn: true,
immediate: true,
scroll: { x: true },
actionColumn: {
width: 220,
title: t('common.action'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
});
const [registerCreateLanguageTextModal, { openModal: openCreateLanguageTextModal }] =
useModal();
const [registerUpdateLanguageTextModal, { openModal: openUpdateLanguageTextModal }] =
useModal();
function handleEdit(record: Recordable) {
let fieldValue = getForm().getFieldsValue();
openUpdateLanguageTextModal(true, {
record: record,
cultureName: fieldValue.cultureName,
});
}
return {
registerTable,
reload,
handleEdit,
registerCreateLanguageTextModal,
registerUpdateLanguageTextModal,
openCreateLanguageTextModal,
t,
};
},
});
</script>

63
templates/abp-vnext-pro-nuget-all/vben28/src/views/admin/languageText/UpdateLanguageText.vue

@ -0,0 +1,63 @@
<template>
<BasicModal
:title="t('common.editText')"
:canFullscreen="false"
@ok="submit"
@register="registerLanguageTextModal"
>
<BasicForm @register="registerLanguageTextForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { updateFormSchema, updateAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'UpdateLanguageText',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageTextForm, { getFieldsValue, setFieldsValue }] = useForm({
labelWidth: 120,
schemas: updateFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageTextModal, { changeOkLoading, closeModal }] = useModalInner((data) => {
setFieldsValue({
resourceName: data.record.resourceName,
cultureName: data.cultureName,
name: data.record.name,
value: data.record.value,
});
});
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await updateAsync({ params });
closeModal();
emit('reload');
} finally {
changeOkLoading(false);
}
};
return {
registerLanguageTextModal,
registerLanguageTextForm,
submit,
t,
};
},
});
</script>
<style lang="less" scoped></style>

2
templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs

@ -31,7 +31,7 @@ public class MyProjectNameHttpApiHostModule : AbpModule
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
app.UseAbpRequestLocalization();
app.UseAbpProRequestLocalization();
app.UseCorrelationId();
app.UseStaticFiles();
app.UseMiniProfiler();

4
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs

@ -2,6 +2,10 @@
global using System;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Volo.Abp.Application.Services;
global using Volo.Abp.Authorization.Permissions;
global using Volo.Abp.DependencyInjection;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj

@ -14,6 +14,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application.Contracts\Lion.AbpPro.BasicManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application.Contracts\Lion.AbpPro.NotificationManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application.Contracts\Lion.AbpPro.DataDictionaryManagement.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application.Contracts\Lion.AbpPro.LanguageManagement.Application.Contracts.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs

@ -1,7 +1,3 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
@ -9,7 +5,8 @@ namespace MyCompanyName.MyProjectName
typeof(AbpObjectExtendingModule),
typeof(BasicManagementApplicationContractsModule),
typeof(NotificationManagementApplicationContractsModule),
typeof(DataDictionaryManagementApplicationContractsModule)
typeof(DataDictionaryManagementApplicationContractsModule),
typeof(LanguageManagementApplicationContractsModule)
)]
public class MyProjectNameApplicationContractsModule : AbpModule
{

2
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs

@ -5,6 +5,8 @@ global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using MyCompanyName.MyProjectName.FreeSqlRepository;
global using MyCompanyName.MyProjectName.Permissions;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj

@ -21,6 +21,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application\Lion.AbpPro.BasicManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application\Lion.AbpPro.NotificationManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application\Lion.AbpPro.DataDictionaryManagement.Application.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application\Lion.AbpPro.LanguageManagement.Application.csproj"/>
</ItemGroup>
</Project>

3
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs

@ -1,5 +1,3 @@
using Lion.AbpPro.DataDictionaryManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
@ -8,6 +6,7 @@ namespace MyCompanyName.MyProjectName
typeof(BasicManagementApplicationModule),
typeof(NotificationManagementApplicationModule),
typeof(DataDictionaryManagementApplicationModule),
typeof(LanguageManagementApplicationModule),
typeof(MyProjectNameFreeSqlModule)
)]
public class MyProjectNameApplicationModule : AbpModule

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs

@ -15,4 +15,5 @@ global using Serilog.Events;
global using Volo.Abp;
global using Volo.Abp.Autofac;
global using Volo.Abp.BackgroundJobs;
global using Volo.Abp.Localization;
global using Volo.Abp.Modularity;

24
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs

@ -10,6 +10,30 @@ namespace MyCompanyName.MyProjectName.DbMigrator
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobOptions>(options => options.IsJobExecutionEnabled = false);
ConfigureLocalization();
}
/// <summary>
/// 多语言配置
/// </summary>
private void ConfigureLocalization()
{
Configure<AbpLocalizationOptions>(options =>
{
options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
options.Languages.Add(new LanguageInfo("es", "es", "Español", "es"));
});
}
}
}

6
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs

@ -7,6 +7,12 @@ global using System.Linq;
global using System.Reflection;
global using System.Text;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.BasicManagement.Localization;
global using Lion.AbpPro.Core;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Localization;
global using Volo.Abp;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -16,6 +16,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain.Shared\Lion.AbpPro.BasicManagement.Domain.Shared.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain.Shared\Lion.AbpPro.NotificationManagement.Domain.Shared.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain.Shared\Lion.AbpPro.DataDictionaryManagement.Domain.Shared.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain.Shared\Lion.AbpPro.LanguageManagement.Domain.Shared.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs

@ -1,15 +1,10 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.BasicManagement.Localization;
using Lion.AbpPro.Core;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(BasicManagementDomainSharedModule),
typeof(NotificationManagementDomainSharedModule),
typeof(DataDictionaryManagementDomainSharedModule),
typeof(LanguageManagementDomainSharedModule),
typeof(AbpProCoreModule)
)]
public class MyProjectNameDomainSharedModule : AbpModule

4
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs

@ -7,6 +7,10 @@ global using System.IO;
global using System.Linq;
global using System.Runtime.InteropServices;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using MyCompanyName.MyProjectName.MultiTenancy;
global using MyCompanyName.MyProjectName.Users.Dto;
global using Microsoft.Extensions.DependencyInjection;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj

@ -13,6 +13,7 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain\Lion.AbpPro.BasicManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain\Lion.AbpPro.NotificationManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain\Lion.AbpPro.DataDictionaryManagement.Domain.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain\Lion.AbpPro.LanguageManagement.Domain.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs

@ -1,14 +1,11 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(MyProjectNameDomainSharedModule),
typeof(BasicManagementDomainModule),
typeof(NotificationManagementDomainModule),
typeof(DataDictionaryManagementDomainModule)
typeof(DataDictionaryManagementDomainModule),
typeof(LanguageManagementDomainModule)
)]
public class MyProjectNameDomainModule : AbpModule
{

15
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs

@ -1,9 +1,8 @@
using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates;
using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
using Lion.AbpPro.LanguageManagement.Languages.Aggregates;
using Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates;
using Lion.AbpPro.NotificationManagement;
using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
using Lion.AbpPro.NotificationManagement.Notifications.Aggregates;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
@ -21,7 +20,8 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
public class MyProjectNameDbContext : AbpDbContext<MyProjectNameDbContext>, IMyProjectNameDbContext,
IBasicManagementDbContext,
INotificationManagementDbContext,
IDataDictionaryManagementDbContext
IDataDictionaryManagementDbContext,
ILanguageManagementDbContext
{
public DbSet<IdentityUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
@ -43,6 +43,9 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
public DbSet<AuditLog> AuditLogs { get; set; }
public DbSet<Notification> Notifications { get; set; }
public DbSet<DataDictionary> DataDictionaries { get; set; }
public DbSet<Language> Languages { get; set; }
public DbSet<LanguageText> LanguageTexts { get; set; }
public MyProjectNameDbContext(DbContextOptions<MyProjectNameDbContext> options)
: base(options)
{
@ -63,6 +66,10 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
//数据字典
builder.ConfigureDataDictionaryManagement();
// 多语言
builder.ConfigureLanguageManagement();
}
}
}

8
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs

@ -1,8 +1,3 @@
using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
using Volo.Abp.Guids;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
[DependsOn(
@ -10,7 +5,8 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(BasicManagementEntityFrameworkCoreModule),
typeof(DataDictionaryManagementEntityFrameworkCoreModule),
typeof(NotificationManagementEntityFrameworkCoreModule)
typeof(NotificationManagementEntityFrameworkCoreModule),
typeof(LanguageManagementEntityFrameworkCoreModule)
)]
public class MyProjectNameEntityFrameworkCoreModule : AbpModule
{

5
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs

@ -6,6 +6,10 @@ global using System.IO;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
global using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
global using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
global using Lion.AbpPro.LanguageManagement.EntityFrameworkCore;
global using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
global using MyCompanyName.MyProjectName.Data;
global using MyCompanyName.MyProjectName.Users;
global using Microsoft.EntityFrameworkCore;
@ -22,6 +26,7 @@ global using Volo.Abp.DependencyInjection;
global using Volo.Abp.EntityFrameworkCore;
global using Volo.Abp.EntityFrameworkCore.MySQL;
global using Volo.Abp.FeatureManagement;
global using Volo.Abp.Guids;
global using Volo.Abp.Identity;
global using Volo.Abp.Modularity;
global using Volo.Abp.PermissionManagement;

164
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230617074136_Init.Designer.cs → templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095633_Init.Designer.cs

@ -12,7 +12,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20230617074136_Init")]
[Migration("20230710095633_Init")]
partial class Init
{
/// <inheritdoc />
@ -139,6 +139,168 @@ namespace MyCompanyName.MyProjectName.Migrations
b.ToTable("AbpDataDictionaryDetails", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("名称");
b.Property<string>("ResourceName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("资源名称");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("值");
b.HasKey("Id");
b.HasIndex("TenantId", "ResourceName", "CultureName");
b.ToTable("AbpLanguageTexts", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("显示名称");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("FlagIcon")
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("图标");
b.Property<bool>("IsDefault")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("UiCultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("Ui语言名称");
b.HasKey("Id");
b.HasIndex("CultureName")
.IsUnique();
b.ToTable("AbpLanguages", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b =>
{
b.Property<Guid>("Id")

82
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230617074136_Init.cs → templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230710095633_Init.cs

@ -218,6 +218,71 @@ namespace MyCompanyName.MyProjectName.Migrations
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLanguages",
columns: table => new
{
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
CultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
UiCultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "Ui语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
DisplayName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "显示名称")
.Annotation("MySql:CharSet", "utf8mb4"),
FlagIcon = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: true, comment: "图标")
.Annotation("MySql:CharSet", "utf8mb4"),
IsEnabled = table.Column<bool>(type: "tinyint(1)", nullable: false),
IsDefault = table.Column<bool>(type: "tinyint(1)", nullable: false),
ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpLanguages", x => x.Id);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLanguageTexts",
columns: table => new
{
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
TenantId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
CultureName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称")
.Annotation("MySql:CharSet", "utf8mb4"),
ResourceName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "资源名称")
.Annotation("MySql:CharSet", "utf8mb4"),
Name = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "名称")
.Annotation("MySql:CharSet", "utf8mb4"),
Value = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "值")
.Annotation("MySql:CharSet", "utf8mb4"),
ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
.Annotation("MySql:CharSet", "utf8mb4"),
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpLanguageTexts", x => x.Id);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "AbpLinkUsers",
columns: table => new
@ -959,6 +1024,17 @@ namespace MyCompanyName.MyProjectName.Migrations
columns: new[] { "Name", "ProviderName", "ProviderKey" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AbpLanguages_CultureName",
table: "AbpLanguages",
column: "CultureName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AbpLanguageTexts_TenantId_ResourceName_CultureName",
table: "AbpLanguageTexts",
columns: new[] { "TenantId", "ResourceName", "CultureName" });
migrationBuilder.CreateIndex(
name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_Target~",
table: "AbpLinkUsers",
@ -1117,6 +1193,12 @@ namespace MyCompanyName.MyProjectName.Migrations
migrationBuilder.DropTable(
name: "AbpFeatureValues");
migrationBuilder.DropTable(
name: "AbpLanguages");
migrationBuilder.DropTable(
name: "AbpLanguageTexts");
migrationBuilder.DropTable(
name: "AbpLinkUsers");

162
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -136,6 +136,168 @@ namespace MyCompanyName.MyProjectName.Migrations
b.ToTable("AbpDataDictionaryDetails", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("名称");
b.Property<string>("ResourceName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("资源名称");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasComment("值");
b.HasKey("Id");
b.HasIndex("TenantId", "ResourceName", "CultureName");
b.ToTable("AbpLanguageTexts", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b =>
{
b.Property<Guid>("Id")
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("CultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("语言名称");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("显示名称");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("FlagIcon")
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("图标");
b.Property<bool>("IsDefault")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("UiCultureName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasComment("Ui语言名称");
b.HasKey("Id");
b.HasIndex("CultureName")
.IsUnique();
b.ToTable("AbpLanguages", (string)null);
});
modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b =>
{
b.Property<Guid>("Id")

11
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj

@ -7,14 +7,15 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj"/>
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL"/>
<ProjectReference Include="..\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.EntityFrameworkCore\Lion.AbpPro.BasicManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.EntityFrameworkCore\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.EntityFrameworkCore\Lion.AbpPro.BasicManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.EntityFrameworkCore\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.EntityFrameworkCore\Lion.AbpPro.LanguageManagement.EntityFrameworkCore.csproj" />
</ItemGroup>
<ItemGroup>

4
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs

@ -1,5 +1,9 @@
// Global using directives
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Microsoft.Extensions.DependencyInjection;
global using Volo.Abp.Account;
global using Volo.Abp.FeatureManagement;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj

@ -12,5 +12,6 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi.Client\Lion.AbpPro.BasicManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi.Client\Lion.AbpPro.NotificationManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi.Client\Lion.AbpPro.LanguageManagement.HttpApi.Client.csproj"/>
</ItemGroup>
</Project>

7
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs

@ -1,14 +1,11 @@
using Lion.AbpPro.BasicManagement;
using Lion.AbpPro.DataDictionaryManagement;
using Lion.AbpPro.NotificationManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(MyProjectNameApplicationContractsModule),
typeof(BasicManagementHttpApiClientModule),
typeof(NotificationManagementHttpApiClientModule),
typeof(DataDictionaryManagementHttpApiClientModule)
typeof(DataDictionaryManagementHttpApiClientModule),
typeof(LanguageManagementHttpApiClientModule)
)]
public class MyProjectNameHttpApiClientModule : AbpModule
{

2
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs

@ -2,6 +2,8 @@
global using Lion.AbpPro.BasicManagement;
global using Lion.AbpPro.DataDictionaryManagement;
global using Lion.AbpPro.LanguageManagement;
global using Lion.AbpPro.NotificationManagement;
global using Localization.Resources.AbpUi;
global using Microsoft.AspNetCore.Mvc;

1
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj

@ -18,5 +18,6 @@
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi\Lion.AbpPro.BasicManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi\Lion.AbpPro.NotificationManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi\Lion.AbpPro.DataDictionaryManagement.HttpApi.csproj"/>
<ProjectReference Include="..\..\..\..\..\aspnet-core\modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi\Lion.AbpPro.LanguageManagement.HttpApi.csproj"/>
</ItemGroup>
</Project>

5
templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs

@ -1,12 +1,11 @@
using Lion.AbpPro.DataDictionaryManagement;
namespace MyCompanyName.MyProjectName
{
[DependsOn(
typeof(MyProjectNameApplicationContractsModule),
typeof(BasicManagementHttpApiModule),
typeof(NotificationManagementHttpApiModule),
typeof(DataDictionaryManagementHttpApiModule)
typeof(DataDictionaryManagementHttpApiModule),
typeof(LanguageManagementHttpApiModule)
)]
public class MyProjectNameHttpApiModule : AbpModule
{

8
templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts

@ -33,5 +33,11 @@ export default {
status: 'Status',
active: 'IsActive',
download: 'DownLoad',
export:"Export"
export: 'Export',
isEnabled: 'IsEnabled',
default: 'Default',
name: 'Name',
value: 'Value',
parameterValidationFailure: 'Parameter Validation Failure',
permissionDenied: 'Permission Denied',
};

11
templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts

@ -2,7 +2,13 @@ export default {
systemManagement: 'SystemManagement',
userManagement: 'UserManagement',
roleManagement: 'RoleManagement',
languageManagement: 'LanguageManagement',
languageTextManagement: 'LanguageTextManagement',
language_cultureName: 'CultureName',
language_uiCultureName: 'UICultureName',
language_displayName: 'DisplayName',
language_flagIcon: 'FlagIcon',
languageTexts_resourceName: 'ResourceName',
userManagement_userName: 'UserName',
userManagement_name: 'Name',
userManagement_email: 'Email',
@ -40,6 +46,9 @@ export default {
audit_hasException_yes: 'Yes',
audit_hasException_no: 'No',
audit_applicationName: 'ApplicationName',
audit_serviceName: 'serviceName',
audit_methodName: 'methodName',
audit_parameters: 'parameters',
grantedMessage: 'Authorization Successful, Please Login Again.',
close: 'close',
auditLog: 'AuditLog',

8
templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts

@ -36,5 +36,11 @@ export default {
status: '状态',
active: '是否激活',
download: '下载',
export:"导出"
export: '导出',
isEnabled: '是否启用',
default: '默认',
name: '名称',
value: '值',
parameterValidationFailure: '参数验证失败',
permissionDenied: '权限不足',
};

12
templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts

@ -2,7 +2,13 @@ export default {
systemManagement: '系统管理',
userManagement: '用户管理',
roleManagement: '角色管理',
languageManagement: '语言管理',
languageTextManagement: '语言文本管理',
language_cultureName: '语言名称',
language_uiCultureName: 'UI语言名称',
language_displayName: '显示名称',
language_flagIcon: '图标',
languageTexts_resourceName: '资源名称',
userManagement_userName: '用户名',
userManagement_name: '真实名称',
userManagement_email: '邮箱',
@ -37,6 +43,9 @@ export default {
audit_hasException_all: '全部',
audit_hasException_yes: '是',
audit_hasException_no: '否',
audit_serviceName: '服务名',
audit_methodName: '方法名',
audit_parameters: '参数',
grantedMessage: '授权成功,请重新登录.',
close: '关闭',
@ -71,6 +80,7 @@ export default {
editPasswordMessage: '输入的2次密码不一致',
executionTime: '执行时间',
executionDuration: '响应时间(毫秒)',
executionMessage: '异常内容',
organizationUnitName: '名称',
parentOrganizationUnitName: '上级组织机构',
organizationUnitManagement: '组织机构管理',

24
templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts

@ -11,7 +11,7 @@ const admin: AppRouteModule = {
orderNo: 20,
icon: 'ion:grid-outline',
title: t('routes.admin.systemManagement'),
policy: 'AbpIdentity'
policy: 'AbpIdentity',
},
children: [
{
@ -73,7 +73,27 @@ const admin: AppRouteModule = {
icon: 'ant-design:table-outlined',
policy: 'AbpIdentity.DataDictionaryManagement',
},
}
},
{
path: 'language',
name: 'language',
component: () => import('/@/views/admin/language/Index.vue'),
meta: {
title: t('routes.admin.languageManagement'),
icon: 'ant-design:read-outlined',
policy: 'AbpIdentity.Languages',
},
},
{
path: 'languageText',
name: 'languageText',
component: () => import('/@/views/admin/languageText/Index.vue'),
meta: {
title: t('routes.admin.languageTextManagement'),
icon: 'ant-design:font-size-outlined',
policy: 'AbpIdentity.LanguageTexts',
},
},
],
};

7968
templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts

File diff suppressed because it is too large

65
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.createText')"
:canFullscreen="false"
@ok="submit"
@cancel="cancel"
@register="registerLanguageModal"
>
<BasicForm @register="registerLanguageForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { createFormSchema, createAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'CreateLanguage',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageForm, { getFieldsValue, resetFields, validate }] = useForm({
labelWidth: 120,
schemas: createFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageModal, { changeOkLoading, closeModal }] = useModalInner();
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await validate();
await createAsync({ params });
await resetFields();
emit('reload');
closeModal();
} finally {
changeOkLoading(false);
}
};
const cancel = () => {
resetFields();
closeModal();
};
return {
registerLanguageModal,
registerLanguageForm,
submit,
cancel,
t,
};
},
});
</script>
<style lang="less" scoped></style>

160
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts

@ -0,0 +1,160 @@
import { FormSchema } from '/@/components/Table';
import { BasicColumn } from '/@/components/Table';
import {
LanguagesServiceProxy,
DeleteLanguageInput,
PageLanguageInput,
} from '/@/services/ServiceProxies';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
// 分页表格语言 BasicColumn
export const tableColumns: BasicColumn[] = [
{
title: t('routes.admin.language_cultureName'),
dataIndex: 'cultureName',
},
{
title: t('routes.admin.language_uiCultureName'),
dataIndex: 'uiCultureName',
},
{
title: t('routes.admin.language_displayName'),
dataIndex: 'displayName',
},
{
title: t('routes.admin.language_flagIcon'),
dataIndex: 'flagIcon',
},
{
title: t('common.isEnabled'),
dataIndex: 'isEnabled',
},
];
// 分页查询语言 FormSchema
export const searchFormSchema: FormSchema[] = [
{
field: 'filter',
label: t('common.key'),
component: 'Input',
colProps: { span: 8 },
},
];
// 创建语言 FormSchema
export const createFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'uiCultureName',
label: t('routes.admin.language_uiCultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'displayName',
label: t('routes.admin.language_displayName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'isEnabled',
label: t('common.isEnabled'),
component: 'Switch',
colProps: { span: 18 },
},
{
field: 'flagIcon',
label: t('routes.admin.language_flagIcon'),
component: 'Input',
required: false,
colProps: { span: 18 },
},
];
// 编辑语言 FormSchema
export const updateFormSchema: FormSchema[] = [
{
field: 'id',
label: 'Id',
component: 'Input',
ifShow: false,
colProps: { span: 18 },
},
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'uiCultureName',
label: t('routes.admin.language_uiCultureName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'displayName',
label: t('routes.admin.language_displayName'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'isEnabled',
label: t('common.isEnabled'),
component: 'Switch',
colProps: { span: 18 },
},
{
field: 'flagIcon',
label: t('routes.admin.language_flagIcon'),
component: 'Input',
required: false,
colProps: { span: 18 },
},
];
/**
*
*/
export async function pageAsync(params: PageLanguageInput) {
const languageServiceProxy = new LanguagesServiceProxy();
return languageServiceProxy.page(params);
}
/**
*
*/
export async function createAsync({ params }) {
const languageServiceProxy = new LanguagesServiceProxy();
await languageServiceProxy.create(params);
}
/**
*
*/
export async function updateAsync({ params }) {
const languageServiceProxy = new LanguagesServiceProxy();
await languageServiceProxy.update(params);
}
/**
*
*/
export async function deleteAsync({ id }) {
const languageServiceProxy = new LanguagesServiceProxy();
const request = new DeleteLanguageInput();
request.id = id;
await languageServiceProxy.delete(request);
}

129
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue

@ -0,0 +1,129 @@
<template>
<div>
<BasicTable @register="registerTable" size="small">
<template #toolbar>
<a-button
preIcon="ant-design:plus-circle-outlined"
type="primary"
@click="openCreateLanguageModal"
>
{{ t('common.createText') }}
</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'cultureName'">
{{ record.cultureName }}
<Tag v-if="record.isDefault" color="green">{{ t('common.default') }}</Tag>
</template>
<template v-if="column.key === 'isEnabled'">
<Tag :color="record.isEnabled ? 'green' : 'red'">
{{ record.isEnabled ? t('common.enabled') : t('common.disEnabled') }}
</Tag>
</template>
</template>
<template #action="{ record }">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
label: t('common.editText'),
onClick: handleEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
color: 'error',
label: t('common.delText'),
popConfirm: {
title: t('common.askDelete'),
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</BasicTable>
<CreateLanguage
@register="registerCreateLanguageModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
<UpdateLanguage
@register="registerUpdateLanguageModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { Tag } from 'ant-design-vue';
import { BasicTable, TableAction, useTable } from '/@/components/Table';
import { tableColumns, searchFormSchema, pageAsync, deleteAsync } from './Index';
import { useModal } from '/@/components/Modal';
import CreateLanguage from './CreateLanguage.vue';
import UpdateLanguage from './UpdateLanguage.vue';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'Language',
components: {
BasicTable,
TableAction,
CreateLanguage,
UpdateLanguage,
Tag,
},
setup() {
const { t } = useI18n();
// table
const [registerTable, { reload }] = useTable({
columns: tableColumns,
formConfig: {
labelWidth: 70,
schemas: searchFormSchema,
},
api: pageAsync,
showTableSetting: true,
useSearchForm: true,
bordered: true,
canResize: true,
showIndexColumn: true,
immediate: true,
scroll: { x: true },
actionColumn: {
width: 220,
title: t('common.action'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
});
const [registerCreateLanguageModal, { openModal: openCreateLanguageModal }] = useModal();
const [registerUpdateLanguageModal, { openModal: openUpdateLanguageModal }] = useModal();
function handleEdit(record: Recordable) {
openUpdateLanguageModal(true, {
record: record,
});
}
async function handleDelete(record: Recordable) {
await deleteAsync({ id: record.id });
await reload();
}
return {
t,
registerTable,
reload,
handleEdit,
handleDelete,
registerCreateLanguageModal,
registerUpdateLanguageModal,
openCreateLanguageModal,
};
},
});
</script>

65
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.editText')"
:canFullscreen="false"
@ok="submit"
@register="registerLanguageModal"
>
<BasicForm @register="registerLanguageForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { updateFormSchema, updateAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'UpdateLanguage',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageForm, { getFieldsValue, setFieldsValue }] = useForm({
labelWidth: 120,
schemas: updateFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageModal, { changeOkLoading, closeModal }] = useModalInner((data) => {
setFieldsValue({
id: data.record.id,
cultureName: data.record.cultureName,
uiCultureName: data.record.uiCultureName,
displayName: data.record.displayName,
flagIcon: data.record.flagIcon,
isEnabled: data.record.isEnabled,
});
});
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await updateAsync({ params });
closeModal();
emit('reload');
} finally {
changeOkLoading(false);
}
};
return {
registerLanguageModal,
registerLanguageForm,
submit,
t,
};
},
});
</script>
<style lang="less" scoped></style>

65
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue

@ -0,0 +1,65 @@
<template>
<BasicModal
:title="t('common.createText')"
:canFullscreen="false"
@ok="submit"
@cancel="cancel"
@register="registerLanguageTextModal"
>
<BasicForm @register="registerLanguageTextForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { createFormSchema, createAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'CreateLanguageText',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageTextForm, { getFieldsValue, resetFields, validate }] = useForm({
labelWidth: 120,
schemas: createFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageTextModal, { changeOkLoading, closeModal }] = useModalInner();
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await validate();
await createAsync({ params });
await resetFields();
emit('reload');
closeModal();
} finally {
changeOkLoading(false);
}
};
const cancel = () => {
resetFields();
closeModal();
};
return {
registerLanguageTextModal,
registerLanguageTextForm,
submit,
cancel,
t,
};
},
});
</script>
<style lang="less" scoped></style>

201
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts

@ -0,0 +1,201 @@
import { FormSchema } from '/@/components/Table';
import { BasicColumn } from '/@/components/Table';
import {
LanguageTextsServiceProxy,
PageLanguageTextInput,
LanguagesServiceProxy,
} from '/@/services/ServiceProxies';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
// 分页表格语言文本 BasicColumn
export const tableColumns: BasicColumn[] = [
{
title: t('common.name'),
dataIndex: 'name',
},
{
title: t('common.value'),
dataIndex: 'value',
},
{
title: t('routes.admin.languageTexts_resourceName'),
dataIndex: 'resourceName',
},
];
// 分页查询语言文本 FormSchema
export const searchFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
labelWidth: 120,
component: 'ApiSelect',
defaultValue: 'zh-Hans',
colProps: { span: 4 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
labelWidth: 120,
component: 'ApiSelect',
colProps: { span: 4 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'filter',
label: t('common.key'),
component: 'Input',
colProps: { span: 6 },
},
];
// 创建语言文本 FormSchema
export const createFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'name',
label: t('common.name'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'value',
label: t('common.value'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
];
// 编辑语言文本 FormSchema
export const updateFormSchema: FormSchema[] = [
{
field: 'cultureName',
label: t('routes.admin.language_cultureName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getLanguageAsync,
labelField: 'displayName',
valueField: 'cultureName',
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'resourceName',
label: t('routes.admin.languageTexts_resourceName'),
component: 'ApiSelect',
required: true,
colProps: { span: 18 },
componentProps: () => {
return {
api: getResourceAsync,
showSearch: true,
optionFilterProp: 'label',
};
},
},
{
field: 'name',
label: t('common.name'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
{
field: 'value',
label: t('common.value'),
component: 'Input',
required: true,
colProps: { span: 18 },
},
];
/**
*
*/
export async function getLanguageAsync() {
const languagesServiceProxy = new LanguagesServiceProxy();
return languagesServiceProxy.all();
}
/**
*
*/
export async function getResourceAsync() {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
return languageTextServiceProxy.allResource();
}
/**
*
*/
export async function pageAsync(params: PageLanguageTextInput) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
return languageTextServiceProxy.page(params);
}
/**
*
*/
export async function createAsync({ params }) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
await languageTextServiceProxy.create(params);
}
/**
*
*/
export async function updateAsync({ params }) {
const languageTextServiceProxy = new LanguageTextsServiceProxy();
await languageTextServiceProxy.update(params);
}

104
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue

@ -0,0 +1,104 @@
<template>
<div>
<BasicTable @register="registerTable" size="small">
<template #toolbar>
<a-button
preIcon="ant-design:plus-circle-outlined"
type="primary"
@click="openCreateLanguageTextModal"
>
{{ t('common.createText') }}
</a-button>
</template>
<template #action="{ record }">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
label: t('common.editText'),
onClick: handleEdit.bind(null, record),
},
]"
/>
</template>
</BasicTable>
<CreateLanguageText
@register="registerCreateLanguageTextModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
<UpdateLanguageText
@register="registerUpdateLanguageTextModal"
@reload="reload"
:bodyStyle="{ 'padding-top': '0' }"
/>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicTable, TableAction, useTable } from '/@/components/Table';
import { tableColumns, searchFormSchema, pageAsync } from './Index';
import { useModal } from '/@/components/Modal';
import CreateLanguageText from './CreateLanguageText.vue';
import UpdateLanguageText from './UpdateLanguageText.vue';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'LanguageText',
components: {
BasicTable,
TableAction,
CreateLanguageText,
UpdateLanguageText,
},
setup() {
const { t } = useI18n();
// table
const [registerTable, { reload, getForm }] = useTable({
columns: tableColumns,
formConfig: {
labelWidth: 70,
schemas: searchFormSchema,
},
api: pageAsync,
showTableSetting: true,
useSearchForm: true,
bordered: true,
canResize: true,
showIndexColumn: true,
immediate: true,
scroll: { x: true },
actionColumn: {
width: 220,
title: t('common.action'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
});
const [registerCreateLanguageTextModal, { openModal: openCreateLanguageTextModal }] =
useModal();
const [registerUpdateLanguageTextModal, { openModal: openUpdateLanguageTextModal }] =
useModal();
function handleEdit(record: Recordable) {
let fieldValue = getForm().getFieldsValue();
openUpdateLanguageTextModal(true, {
record: record,
cultureName: fieldValue.cultureName,
});
}
return {
registerTable,
reload,
handleEdit,
registerCreateLanguageTextModal,
registerUpdateLanguageTextModal,
openCreateLanguageTextModal,
t,
};
},
});
</script>

63
templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue

@ -0,0 +1,63 @@
<template>
<BasicModal
:title="t('common.editText')"
:canFullscreen="false"
@ok="submit"
@register="registerLanguageTextModal"
>
<BasicForm @register="registerLanguageTextForm" />
</BasicModal>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicForm, useForm } from '/@/components/Form/index';
import { updateFormSchema, updateAsync } from './Index';
import { useI18n } from '/@/hooks/web/useI18n';
export default defineComponent({
name: 'UpdateLanguageText',
components: {
BasicModal,
BasicForm,
},
emits: ['reload', 'register'],
setup(_, { emit }) {
const { t } = useI18n();
const [registerLanguageTextForm, { getFieldsValue, setFieldsValue }] = useForm({
labelWidth: 120,
schemas: updateFormSchema,
showActionButtonGroup: false,
});
const [registerLanguageTextModal, { changeOkLoading, closeModal }] = useModalInner((data) => {
setFieldsValue({
resourceName: data.record.resourceName,
cultureName: data.cultureName,
name: data.record.name,
value: data.record.value,
});
});
const submit = async () => {
try {
const params = getFieldsValue();
changeOkLoading(true);
await updateAsync({ params });
closeModal();
emit('reload');
} finally {
changeOkLoading(false);
}
};
return {
registerLanguageTextModal,
registerLanguageTextForm,
submit,
t,
};
},
});
</script>
<style lang="less" scoped></style>
Loading…
Cancel
Save