Browse Source

Merge pull request #6 from abpframework/dev

merge
pull/2019/head
Marcelo M. M 7 years ago
committed by GitHub
parent
commit
68c7429380
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/pt-BR.json
  2. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hans.json
  3. 38
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/pt-BR.json
  4. 55
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
  5. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  6. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json
  7. 27
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
  8. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  9. 36
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
  10. 9
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
  11. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  12. 216
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
  13. 155
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
  14. 2
      common.props
  15. 29
      docs/en/Blog-Posts/2019-10-22 v1_0_Release/Post.md
  16. BIN
      docs/en/Blog-Posts/2019-10-22 v1_0_Release/banner.jpg
  17. BIN
      docs/en/Blog-Posts/2019-10-22 v1_0_Release/contribution-graph.png
  18. 2
      docs/en/CLI.md
  19. 89
      docs/en/Caching.md
  20. 10
      docs/en/Index.md
  21. 90
      docs/pt-BR/docs-nav.json
  22. 3
      docs/zh-Hans/AspNetCore/JavaScript-API/Auth.md
  23. 24
      docs/zh-Hans/AspNetCore/JavaScript-API/Index.md
  24. 370
      docs/zh-Hans/Authorization.md
  25. 29
      docs/zh-Hans/Blog-Posts/2019-10-22 v1_0_Release/Post.md
  26. BIN
      docs/zh-Hans/Blog-Posts/2019-10-22 v1_0_Release/contribution-graph.png
  27. 86
      docs/zh-Hans/Caching.md
  28. 3
      docs/zh-Hans/JavaScript/Dynamic-JavaScript-API-Clients.md
  29. 3
      docs/zh-Hans/Modules/Permission-Management.md
  30. BIN
      docs/zh-Hans/images/authorization-new-permission-ui-hierarcy.png
  31. BIN
      docs/zh-Hans/images/authorization-new-permission-ui-localized.png
  32. BIN
      docs/zh-Hans/images/authorization-new-permission-ui.png
  33. BIN
      docs/zh-Hans/images/create-aspnet-core-application.png
  34. BIN
      docs/zh-Hans/images/create-new-aspnet-core-application-v2.png
  35. BIN
      docs/zh-Hans/images/select-empty-web-application-v2.png
  36. 1
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json
  37. 1
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json
  38. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hans.json
  39. 37
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
  40. 14
      framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
  41. 1
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs
  42. 4
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/zh-Hans.json
  43. 2
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json
  44. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hans.json
  45. 2
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hans.json
  46. 2
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hans.json
  47. 2
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hans.json
  48. 2
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json
  49. 1
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json
  50. 21
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json
  51. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml
  52. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml
  53. 2
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json
  54. 7
      modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml
  55. 4
      modules/docs/app/VoloDocs.Migrator/Dockerfile
  56. 4
      modules/docs/app/VoloDocs.Web/Dockerfile
  57. 6
      modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hans.json
  58. 4
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json
  59. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json
  60. 3
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json
  61. 5
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json
  62. 6
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs
  63. 7
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
  64. 4
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json
  65. 4
      modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebAutoMapperProfile.cs
  66. 8
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml
  67. 1
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml
  68. 4
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs
  69. 1
      modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs
  70. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json
  71. 11
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json
  72. 2
      modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs
  73. 8
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml
  74. 24
      npm/abp-package-update-script.js
  75. 2
      npm/lerna.json
  76. 16
      npm/ng-packs/.vscode/settings.json
  77. 2
      npm/ng-packs/angular.json
  78. 11
      npm/ng-packs/apps/dev-app/src/app/app.module.ts
  79. 30
      npm/ng-packs/apps/dev-app/src/app/home/home.component.html
  80. 2
      npm/ng-packs/apps/dev-app/src/app/home/home.component.ts
  81. 2
      npm/ng-packs/apps/dev-app/src/index.html
  82. 2
      npm/ng-packs/dist/account-config/README.md
  83. 133
      npm/ng-packs/dist/account-config/abp-ng.account.config.metadata.json
  84. 1
      npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.js
  85. 2
      npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.js.map
  86. 1
      npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.min.js
  87. 2
      npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.min.js.map
  88. 2
      npm/ng-packs/dist/account-config/esm2015/abp-ng.account.config.js
  89. 3
      npm/ng-packs/dist/account-config/esm2015/lib/services/account-config.service.js
  90. 2
      npm/ng-packs/dist/account-config/esm5/abp-ng.account.config.js
  91. 3
      npm/ng-packs/dist/account-config/esm5/lib/services/account-config.service.js
  92. 136
      npm/ng-packs/dist/account-config/fesm2015/abp-ng.account.config.js
  93. 2
      npm/ng-packs/dist/account-config/fesm2015/abp-ng.account.config.js.map
  94. 163
      npm/ng-packs/dist/account-config/fesm5/abp-ng.account.config.js
  95. 2
      npm/ng-packs/dist/account-config/fesm5/abp-ng.account.config.js.map
  96. 10
      npm/ng-packs/dist/account-config/lib/account-config.module.d.ts
  97. 6
      npm/ng-packs/dist/account-config/lib/services/account-config.service.d.ts
  98. 2
      npm/ng-packs/dist/account-config/package.json
  99. 18
      npm/ng-packs/dist/account/abp-ng.account.d.ts
  100. 348
      npm/ng-packs/dist/account/abp-ng.account.metadata.json

6
abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/pt-BR.json

@ -4,10 +4,10 @@
"Account": "Conta",
"Welcome": "Bem-vindo",
"UseOneOfTheFollowingLinksToContinue": "Use um dos seguintes links para continuar",
"FrameworkHomePage": "Página inicial do Framework",
"FrameworkDocumentation": " Documentação do Framework",
"FrameworkHomePage": "Página inicial do Framework",
"FrameworkDocumentation": " Documentação do Framework",
"OfficialBlog": "Blog oficial",
"CommercialHomePage": "Página inicial comercial",
"CommercialHomePage": "Página inicial comercial",
"CommercialSupportWebSite": "Site de suporte comercial"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hans.json

@ -1,5 +1,13 @@
{
"culture": "zh-Hans",
"texts": {
"Account": "账户",
"Welcome": "欢迎",
"UseOneOfTheFollowingLinksToContinue": "使用下面的链接继续",
"FrameworkHomePage": "框架首页",
"FrameworkDocumentation": "框架文档",
"OfficialBlog": "官方博客",
"CommercialHomePage": "商业版首页",
"CommercialSupportWebSite": "商业版支持网站"
}
}

38
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/pt-BR.json

@ -3,32 +3,32 @@
"texts": {
"Permission:NpmPackages": "Pacotes NPM",
"Permission:NugetPackages": "Pacotes Nuget",
"Permission:Maintenance": "Manutenção",
"Permission:Maintenance": "Manutenção",
"Permission:Maintain": "Manter",
"Permission:ClearCaches": "Limpar caches",
"Permission:Modules": "Módulos",
"Permission:Modules": "Módulos",
"Permission:Packages": "Pacotes",
"Permission:Edit": "Editar",
"Permission:Delete": "Excluir",
"Permission:Create": "Criar",
"Menu:Packages": "Pacotes",
"NpmPackageDeletionWarningMessage": "Este pacote NPM será excluído. Você confirma isso?",
"NugetPackageDeletionWarningMessage": "Este pacote Nuget será excluído. Você confirma isso?",
"ModuleDeletionWarningMessage": "Este módulo será excluído. Você confirma isso?",
"NpmPackageDeletionWarningMessage": "Este pacote NPM será excluído. Você confirma isso?",
"NugetPackageDeletionWarningMessage": "Este pacote Nuget será excluído. Você confirma isso?",
"ModuleDeletionWarningMessage": "Este módulo será excluído. Você confirma isso?",
"Name": "Nome",
"DisplayName": "Mostrar nome",
"ShortDescription": "Breve descrição",
"ShortDescription": "Breve descrição",
"NameFilter": "Nome",
"CreationTime": "Hora da criação",
"IsPro": "É profissional",
"EfCoreConfigureMethodName": "Configurar nome do método",
"IsProFilter": "É profissional",
"CreationTime": "Hora da criação",
"IsPro": "É profissional",
"EfCoreConfigureMethodName": "Configurar nome do método",
"IsProFilter": "É profissional",
"ApplicationType": "Tipo de aplicativo",
"Target": "Objetivo",
"TargetFilter": "Objetivo",
"ModuleClass": "Classe do módulo",
"NugetPackageTarget.DomainShared": "Domínio compartilhado",
"NugetPackageTarget.Domain": "Domínio",
"ModuleClass": "Classe do módulo",
"NugetPackageTarget.DomainShared": "Domínio compartilhado",
"NugetPackageTarget.Domain": "Domínio",
"NugetPackageTarget.Application": "Aplicativo",
"NugetPackageTarget.ApplicationContracts": "Contratos de aplicativos",
"NugetPackageTarget.HttpApi": "Http Api",
@ -43,18 +43,18 @@
"NugetPackages": "Pacotes Nuget",
"NpmPackageCount": "Contagem de pacotes NPM",
"NugetPackageCount": "Contagem de pacotes Nuget",
"Module": "Módulos",
"ModuleInfo": "Informações do módulo",
"Module": "Módulos",
"ModuleInfo": "Informações do módulo",
"CreateANpmPackage": "Criar um pacote NPM",
"CreateAModule": "Criar um módulo",
"CreateAModule": "Criar um módulo",
"CreateANugetPackage": "Criar um pacote Nuget",
"AddNew": "Adicionar novo",
"PackageAlreadyExist{0}": "\"{0}\" o pacote já foi adicionado.",
"PackageAlreadyExist{0}": "\"{0}\" o pacote já foi adicionado.",
"ClearCache": "Limpar cache",
"SuccessfullyCleared": "Limpo com sucesso",
"Menu:NpmPackages": "Pacotes NPM",
"Menu:Modules": "Módulos",
"Menu:Maintenance": "Manutenção",
"Menu:Modules": "Módulos",
"Menu:Maintenance": "Manutenção",
"Menu:NugetPackages": "Pacotes Nuget"
}
}

55
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json

@ -1,5 +1,60 @@
{
"culture": "zh-Hans",
"texts": {
"Permission:NpmPackages": "NPM包",
"Permission:NugetPackages": "Nuget包",
"Permission:Maintenance": "维护",
"Permission:Maintain": "维护",
"Permission:ClearCaches": "清除缓存",
"Permission:Modules": "模块",
"Permission:Packages": "包",
"Permission:Edit": "编辑",
"Permission:Delete": "删除",
"Permission:Create": "创建",
"Menu:Packages": "包",
"NpmPackageDeletionWarningMessage": "该NPM包将会被删除. 你确定吗?",
"NugetPackageDeletionWarningMessage": "该Nuget包将会被删除. 你确定吗?",
"ModuleDeletionWarningMessage": "该模块将会被删除. 你确定吗?",
"Name": "名称",
"DisplayName": "显示名称",
"ShortDescription": "简述",
"NameFilter": "名称",
"CreationTime": "创建时间",
"IsPro": "是否为专业版",
"EfCoreConfigureMethodName": "配置方法法",
"IsProFilter": "是否为专业版",
"ApplicationType": "应用程序类型",
"Target": "目标",
"TargetFilter": "目标",
"ModuleClass": "模块分类",
"NugetPackageTarget.DomainShared": "Domain Shared",
"NugetPackageTarget.Domain": "Domain",
"NugetPackageTarget.Application": "Application",
"NugetPackageTarget.ApplicationContracts": "Application Contracts",
"NugetPackageTarget.HttpApi": "Http Api",
"NugetPackageTarget.HttpApiClient": "Http Api Client",
"NugetPackageTarget.Web": "Web",
"NugetPackageTarget.EntityFrameworkCore": "EntityFramework Core",
"NugetPackageTarget.MongoDB": "MongoDB",
"Edit": "编辑",
"Delete": "删除",
"Refresh": "刷新",
"NpmPackages": "NPM包",
"NugetPackages": "Nuget包",
"NpmPackageCount": "NPM包数量",
"NugetPackageCount": "Nuget包数量",
"Module": "模块",
"ModuleInfo": "模块信息",
"CreateANpmPackage": "创建NPM包",
"CreateAModule": "创建模块",
"CreateANugetPackage": "创建Nuget包",
"AddNew": "新建",
"PackageAlreadyExist{0}": "\"{0}\"已经被添加.",
"ClearCache": "清除缓存",
"SuccessfullyCleared": "清除成功",
"Menu:NpmPackages": "NPM包",
"Menu:Modules": "模块",
"Menu:Maintenance": "维护",
"Menu:NugetPackages": "Nuget包"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

@ -8,8 +8,8 @@
"Volo.AbpIo.Domain:010008": "Allowed Developer Count can not be less then current developer count!",
"Volo.AbpIo.Domain:010009": "Allowed Developer Count can not be less then 0!",
"Volo.AbpIo.Domain:010010": "Maximum mac address count is exceeded!",
"Volo.AbpIo.Domain:010011": "Personal license can't have more than 1 developer!",
"Volo.AbpIo.Domain:010012": "License can't be extended one month after license expires!",
"Volo.AbpIo.Domain:010011": "Personal license can't have more than 1 developer!",
"Volo.AbpIo.Domain:010012": "License can't be extended one month after license expires!",
"Volo.AbpIo.Domain:020001": "Could not delete this NPM Package because \"{NugetPackages}\" Nuget Packages are dependent to this package.",
"Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.",
"Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json

@ -28,4 +28,4 @@
"Commercial": "Comercial",
"SeeDocuments": "Ver documentos"
}
}
}

27
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json

@ -1,12 +1,31 @@
{
{
"culture": "zh-Hans",
"texts": {
"Volo.AbpIo.Domain:010004": "超过最大成员数!",
"Volo.AbpIo.Domain:010005": "超过最大所有者数!",
"Volo.AbpIo.Domain:010006": "T用户已经是该组织的所有者!",
"Volo.AbpIo.Domain:010006": "用户已经是该组织的所有者!",
"Volo.AbpIo.Domain:010007": "该用户已经是该组织的开发者!",
"Volo.AbpIo.Domain:010008": "允许的开发者数量不能低于当前开发者数量!",
"Volo.AbpIo.Domain:010009": "允许的开发者数量不能小于零!",
"Volo.AbpIo.Domain:010010": "超出了最大mac地址数!"
"Volo.AbpIo.Domain:010010": "超出了最大mac地址数!",
"Volo.AbpIo.Domain:010011": "个人许可不允许超过1个开发者!",
"Volo.AbpIo.Domain:010012": "许可过期后许可不可延长1个月!",
"Volo.AbpIo.Domain:020001": "不能删除该NPM包因为\"{NugetPackages}\"Nuget包依赖此包.",
"Volo.AbpIo.Domain:020002": "不能删除该NPM包因为\"{Modules}\"模块正在使用此包.",
"Volo.AbpIo.Domain:020003": "不能删除该NPM包因为\"{Modules}\"模块正在使用此包并且\"{NugetPackages}\"Nuget包依赖此包.",
"Volo.AbpIo.Domain:020004": "不能删除该Nuget包因为\"{Modules}\"模块正在使用此包.",
"WantToLearn?": "想学习吗?",
"ReadyToGetStarted?": "准备开始了吗?",
"JoinOurCommunity": "加入我们的社区",
"GetStartedUpper": "开始",
"ForkMeOnGitHub": "Fork me on GitHub",
"Features": "功能",
"GetStarted": "开始",
"Documents": "文档",
"Community": "社区",
"ContributionGuide": "贡献指南",
"Blog": "博客",
"Commercial": "商业版",
"SeeDocuments": "查看文档"
}
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -21,10 +21,10 @@
"Modules": "Modules",
"LicenseExtendMessage": "Your license end date is extended to {0}",
"LicenseUpgradeMessage": "Your license is upgraded to {0}",
"LicenseAddDeveloperMessage": "{0} developers added to your license" ,
"LicenseAddDeveloperMessage": "{0} developers added to your license",
"Volo.AbpIo.Commercial:010004": "Can not find the specified user! The user must have already registered.",
"MyOrganizations": "My organizations",
"ApiKey": "API key",
"UserNameNotFound": "There is no user with username {0}"
"MyOrganizations": "My organizations",
"ApiKey": "API key",
"UserNameNotFound": "There is no user with username {0}"
}
}

36
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json

@ -1,30 +1,30 @@
{
"culture": "pt-BR",
"texts": {
"OrganizationManagement": "Gerenciamento da organização",
"OrganizationList": "Lista de organização",
"Volo.AbpIo.Commercial:010003": "Você não é proprietário desta organização!",
"OrganizationNotFoundMessage": "Nenhuma organização encontrada!",
"DeveloperCount": "Número de desenvolvedores",
"Owners": "Proprietários",
"OrganizationManagement": "Gerenciamento da organização",
"OrganizationList": "Lista de organização",
"Volo.AbpIo.Commercial:010003": "Você não é proprietário desta organização!",
"OrganizationNotFoundMessage": "Nenhuma organização encontrada!",
"DeveloperCount": "Número de desenvolvedores",
"Owners": "Proprietários",
"AddMember": "Adicionar membro",
"AddOwner": "Adicionar proprietário",
"AddOwner": "Adicionar proprietário",
"AddDeveloper": "Adicionar desenvolvedor",
"UserName": "Nome de usuário",
"UserName": "Nome de usuário",
"Name": "Nome",
"EmailAddress": "Endereço de email",
"EmailAddress": "Endereço de email",
"Developers": "Desenvolvedores",
"LicenseType": "Tipo de licença",
"LicenseType": "Tipo de licença",
"Manage": "Gerenciar",
"StartDate": "Data de início",
"StartDate": "Data de início",
"EndDate": "Data final",
"Modules": "Módulos",
"LicenseExtendMessage": "A data de término da sua licença foi estendida para {0}",
"LicenseUpgradeMessage": "Sua licença foi atualizada para {0}",
"LicenseAddDeveloperMessage": "{0} desenvolvedores adicionados à sua licença",
"Volo.AbpIo.Commercial:010004": "Não foi possível encontrar o usuário especificado! O usuário já deve ter se registrado.",
"MyOrganizations": "Minhas organizações",
"Modules": "Módulos",
"LicenseExtendMessage": "A data de término da sua licença foi estendida para {0}",
"LicenseUpgradeMessage": "Sua licença foi atualizada para {0}",
"LicenseAddDeveloperMessage": "{0} desenvolvedores adicionados à sua licença",
"Volo.AbpIo.Commercial:010004": "Não foi possível encontrar o usuário especificado! O usuário já deve ter se registrado.",
"MyOrganizations": "Minhas organizações",
"ApiKey": "Chave da API",
"UserNameNotFound": "Não há usuário com nome de usuário {0}"
"UserNameNotFound": "Não há usuário com nome de usuário {0}"
}
}

9
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json

@ -18,6 +18,13 @@
"Manage": "管理",
"StartDate": "开始日期",
"EndDate": "结束日期",
"Modules": "模块"
"Modules": "模块",
"LicenseExtendMessage": "你的许可已经延长至{0}",
"LicenseUpgradeMessage": "你的许可已升级为{0}",
"LicenseAddDeveloperMessage": "{0}个开发者已添加到你的许可",
"Volo.AbpIo.Commercial:010004": "不能找到指定的用户! 用户必须已经注册.",
"MyOrganizations": "我的组织",
"ApiKey": "API key",
"UserNameNotFound": "没有用户名为{0}的用户"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json

@ -155,6 +155,6 @@
"SeeTheDocumentForMoreInformation": "See the <a href=\"{1}\">{0} document</a> for more information",
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>open source</strong></span><span class=\"second-line text-uppercase\">Web Application<br />Framework </span><span class=\"third-line shine2\"><strong>for asp.net core</strong></span>",
"UiFramework": "UI Framework",
"EmailAddress": "Email address"
"EmailAddress": "Email address"
}
}

216
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json

@ -1,7 +1,7 @@
{
"culture": "pt-BR",
"texts": {
"GetStarted": "Introdução",
"GetStarted": "Introdução",
"Create": "Criar",
"NewProject": "Novo projeto",
"DirectDownload": "Download direto",
@ -9,152 +9,152 @@
"ProjectType": "Tipo de projeto",
"DatabaseProvider": "Provedor de banco de dados",
"NTier": "N-Tier",
"IncludeUserInterface": "Incluir interface do usuário",
"IncludeUserInterface": "Incluir interface do usuário",
"CreateNow": "Criar agora",
"TheStartupProject": "O projeto de inicialização",
"TheStartupProject": "O projeto de inicialização",
"Tutorial": "Tutorial",
"UsingCLI": "Usando CLI",
"SeeDetails": "Ver detalhes",
"AbpShortDescription": "ABP é uma arquitetura completa e uma forte infraestrutura para criar aplicativos da web modernos! Segue as melhores práticas e convenções para fornecer uma sólida experiência de desenvolvimento.",
"SourceCodeUpper": "CÓDIGO FONTE",
"LatestReleaseLogs": "Últimos registros de lançamento",
"AbpShortDescription": "ABP é uma arquitetura completa e uma forte infraestrutura para criar aplicativos da web modernos! Segue as melhores práticas e convenções para fornecer uma sólida experiência de desenvolvimento.",
"SourceCodeUpper": "CÓDIGO FONTE",
"LatestReleaseLogs": "Últimos registros de lançamento",
"Infrastructure": "Infra-estrutura",
"Architecture": "Arquitetura",
"Modular": "Modular",
"DontRepeatYourself": "Não se repita",
"DontRepeatYourself": "Não se repita",
"DeveloperFocused": "Desenvolvedor focado",
"FullStackApplicationInfrastructure": "Infraestrutura de aplicativos full stack.",
"DomainDrivenDesign": "Design Orientado a Domínio",
"DomainDrivenDesignExplanation": "Projetado e desenvolvido com base nos padrões e princípios DDD. Fornece um modelo em camadas para seu aplicativo.",
"Authorization": "Autorização",
"AuthorizationExplanation": "Autorização avançada com usuário, função e sistema de permissão refinado. Criada na biblioteca Microsoft Identity.",
"MultiTenancy": "Múltiplos inquilinos",
"MultiTenancyExplanation": "Aplicativos SaaS facilitados! Multilocação integrada do banco de dados à interface do usuário.",
"CrossCuttingConcerns": "Preocupações transversais",
"CrossCuttingConcernsExplanation": "Infraestrutura completa para autorização, validação, tratamento de exceções, armazenamento em cache, log de auditoria, gerenciamento de transações e assim por diante.",
"BuiltInBundlingMinification": "Pacote & Minificação Integrados",
"BuiltInBundlingMinificationExplanation": "Pare de usar ferramentas externas para empacotamento e minificação. O ABP oferece uma maneira mais simples, dinâmica, poderosa, modular e integrada!",
"DomainDrivenDesign": "Design Orientado a Domínio",
"DomainDrivenDesignExplanation": "Projetado e desenvolvido com base nos padrões e princípios DDD. Fornece um modelo em camadas para seu aplicativo.",
"Authorization": "Autorização",
"AuthorizationExplanation": "Autorização avançada com usuário, função e sistema de permissão refinado. Criada na biblioteca Microsoft Identity.",
"MultiTenancy": "Múltiplos inquilinos",
"MultiTenancyExplanation": "Aplicativos SaaS facilitados! Multilocação integrada do banco de dados à interface do usuário.",
"CrossCuttingConcerns": "Preocupações transversais",
"CrossCuttingConcernsExplanation": "Infraestrutura completa para autorização, validação, tratamento de exceções, armazenamento em cache, log de auditoria, gerenciamento de transações e assim por diante.",
"BuiltInBundlingMinification": "Pacote & Minificação Integrados",
"BuiltInBundlingMinificationExplanation": "Pare de usar ferramentas externas para empacotamento e minificação. O ABP oferece uma maneira mais simples, dinâmica, poderosa, modular e integrada!",
"VirtualFileSystem": "Sistema de arquivos virtual",
"VirtualFileSystemExplanation": "Incorpore visualizações, scripts, estilos, imagens ... aos pacotes/bibliotecas e reutilize-os em diferentes aplicativos.",
"VirtualFileSystemExplanation": "Incorpore visualizações, scripts, estilos, imagens ... aos pacotes/bibliotecas e reutilize-os em diferentes aplicativos.",
"Theming": "Theming",
"ThemingExplanation": "Use e personalize o tema da interface do usuário padrão baseado em bootstrap-based ou crie o seu próprio.",
"ThemingExplanation": "Use e personalize o tema da interface do usuário padrão baseado em bootstrap-based ou crie o seu próprio.",
"BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms",
"BootstrapTagHelpersDynamicFormsExplanation": "Sistema de tarefas em segundo plano integrado que pode ser integrado ao Hangfire, RabbitMQ ou a qualquer ferramenta que você desejar.", //TODO explanation doesn't match.
"HTTPAPIsDynamicProxies": "APIs HTTP e proxies dinâmicos",
"HTTPAPIsDynamicProxiesExplanation": "Exponha automaticamente os serviços de aplicativo como APIs HTTP do estilo REST e consuma com proxies JavaScript & C # dinâmicos.",
"CompleteArchitectureInfo": "Arquitetura moderna para criar soluções de software sustentáveis.",
"DomainDrivenDesignBasedLayeringModelExplanation": "Ajuda você a implementar uma arquitetura em camadas baseada em DDD e a construir uma base de código sustentável.",
"DomainDrivenDesignBasedLayeringModelExplanationCont": "Fornece modelos de inicialização, abstrações, classes base, serviços, documentação e guias para ajudá-lo a desenvolver seu aplicativo com base nos padrões e princípios DDD.",
"MicroserviceCompatibleModelExplanation": "O framework principal e os módulos de pré-construção foram projetados para a arquitetura de microsserviço.",
"MicroserviceCompatibleModelExplanationCont": "Fornece infraestrutura, integrações, amostras e documentação para implementar soluções de microsserviço mais facilmente, enquanto isso não traga complexidade adicional se você quiser um aplicativo monolítico.",
"ModularInfo": "O ABP fornece um sistema completo de modularidade para permitir o desenvolvimento de módulos de aplicativos reutilizáveis.",
"PreBuiltModulesThemes": "Módulos pré-construídos & Temas",
"PreBuiltModulesThemesExplanation": "Módulos e temas de código aberto e comerciais estão prontos para uso em seu aplicativo de negócios.",
"BootstrapTagHelpersDynamicFormsExplanation": "Sistema de tarefas em segundo plano integrado que pode ser integrado ao Hangfire, RabbitMQ ou a qualquer ferramenta que você desejar.", //TODO explanation doesn't match.
"HTTPAPIsDynamicProxies": "APIs HTTP e proxies dinâmicos",
"HTTPAPIsDynamicProxiesExplanation": "Exponha automaticamente os serviços de aplicativo como APIs HTTP do estilo REST e consuma com proxies JavaScript & C # dinâmicos.",
"CompleteArchitectureInfo": "Arquitetura moderna para criar soluções de software sustentáveis.",
"DomainDrivenDesignBasedLayeringModelExplanation": "Ajuda você a implementar uma arquitetura em camadas baseada em DDD e a construir uma base de código sustentável.",
"DomainDrivenDesignBasedLayeringModelExplanationCont": "Fornece modelos de inicialização, abstrações, classes base, serviços, documentação e guias para ajudá-lo a desenvolver seu aplicativo com base nos padrões e princípios DDD.",
"MicroserviceCompatibleModelExplanation": "O framework principal e os módulos de pré-construção foram projetados para a arquitetura de microsserviço.",
"MicroserviceCompatibleModelExplanationCont": "Fornece infraestrutura, integrações, amostras e documentação para implementar soluções de microsserviço mais facilmente, enquanto isso não traga complexidade adicional se você quiser um aplicativo monolítico.",
"ModularInfo": "O ABP fornece um sistema completo de modularidade para permitir o desenvolvimento de módulos de aplicativos reutilizáveis.",
"PreBuiltModulesThemes": "Módulos pré-construídos & Temas",
"PreBuiltModulesThemesExplanation": "Módulos e temas de código aberto e comerciais estão prontos para uso em seu aplicativo de negócios.",
"NuGetNPMPackages": "Pacotes NuGet & NPM",
"NuGetNPMPackagesExplanation": "Distribuído como pacotes NuGet & NPM. Fácil de instalar e atualizar.",
"ExtensibleReplaceable": "Extensível/Substituível",
"ExtensibleReplaceableExplanation": "Todos os serviços e módulos são projetados para extensibilidade. Você pode substituir serviços, páginas, estilos, componentes...",
"CrossCuttingConcernsExplanation2": "Mantenha seu código mais limpo e concentre-se em seu próprio código comercial.",
"CrossCuttingConcernsExplanation3": "Não perca tempo para implementar requisitos de aplicativos comuns repetidamente.",
"AuthenticationAuthorization": "Autenticação & Autorização",
"ExceptionHandling": "Manipulação de exceção",
"Validation": "Validação",
"DatabaseConnection": "Conexão com o Banco de Dados",
"TransactionManagement": "Gerenciamento de transações",
"NuGetNPMPackagesExplanation": "Distribuído como pacotes NuGet & NPM. Fácil de instalar e atualizar.",
"ExtensibleReplaceable": "Extensível/Substituível",
"ExtensibleReplaceableExplanation": "Todos os serviços e módulos são projetados para extensibilidade. Você pode substituir serviços, páginas, estilos, componentes...",
"CrossCuttingConcernsExplanation2": "Mantenha seu código mais limpo e concentre-se em seu próprio código comercial.",
"CrossCuttingConcernsExplanation3": "Não perca tempo para implementar requisitos de aplicativos comuns repetidamente.",
"AuthenticationAuthorization": "Autenticação & Autorização",
"ExceptionHandling": "Manipulação de exceção",
"Validation": "Validação",
"DatabaseConnection": "Conexão com o Banco de Dados",
"TransactionManagement": "Gerenciamento de transações",
"AuditLogging": "Log de auditoria",
"Caching": "Armazenamento em cache",
"Multitenancy": "Múltiplos inquilinos",
"Multitenancy": "Múltiplos inquilinos",
"DataFiltering": "Filtragem de dados",
"ConventionOverConfiguration": "Convenção sobre configuração",
"ConventionOverConfigurationExplanation": "O ABP implementa convenções comuns de aplicativos por padrão com uma configuração mínima ou zero.",
"ConventionOverConfigurationExplanationList1": "Registra automaticamente serviços conhecidos na injeção de dependência.",
"ConventionOverConfigurationExplanationList2": "Expõe os serviços de aplicativos como APIs HTTP, nomeando convenções.",
"ConventionOverConfigurationExplanationList3": "Cria proxies de clientes HTTP dinâmicos para C # e JavaScript.",
"ConventionOverConfigurationExplanationList4": "Fornece repositórios padrão para suas entidades.",
"ConventionOverConfigurationExplanationList5": "Gerencia a unidade de trabalho por solicitação da Web ou método de serviço de aplicativo.",
"ConventionOverConfiguration": "Convenção sobre configuração",
"ConventionOverConfigurationExplanation": "O ABP implementa convenções comuns de aplicativos por padrão com uma configuração mínima ou zero.",
"ConventionOverConfigurationExplanationList1": "Registra automaticamente serviços conhecidos na injeção de dependência.",
"ConventionOverConfigurationExplanationList2": "Expõe os serviços de aplicativos como APIs HTTP, nomeando convenções.",
"ConventionOverConfigurationExplanationList3": "Cria proxies de clientes HTTP dinâmicos para C # e JavaScript.",
"ConventionOverConfigurationExplanationList4": "Fornece repositórios padrão para suas entidades.",
"ConventionOverConfigurationExplanationList5": "Gerencia a unidade de trabalho por solicitação da Web ou método de serviço de aplicativo.",
"ConventionOverConfigurationExplanationList6": "Publica, cria, atualiza e exclui eventos para suas entidades.",
"BaseClasses": "Classes base",
"BaseClassesExplanation": "Classes base pré-criadas para padrões de aplicativos comuns.",
"DeveloperFocusedExplanation": "O ABP é para desenvolvedores.",
"DeveloperFocusedExplanationCont": "Tem como objetivo simplificar o desenvolvimento diário de seu software, sem restringir o trabalho de baixo nível quando necessário.",
"BaseClassesExplanation": "Classes base pré-criadas para padrões de aplicativos comuns.",
"DeveloperFocusedExplanation": "O ABP é para desenvolvedores.",
"DeveloperFocusedExplanationCont": "Tem como objetivo simplificar o desenvolvimento diário de seu software, sem restringir o trabalho de baixo nível quando necessário.",
"SeeAllFeatures": "Veja todos os recursos",
"CLI_CommandLineInterface": "CLI (Command Line Interface)",
"CLI_CommandLineInterfaceExplanation": "A CLI é automatizada para criar novos projetos e adicionar módulos ao seu aplicativo.",
"StartupTemplates": "Modelos de inicialização",
"StartupTemplatesExplanation": "Vários modelos de inicialização fornecem uma solução totalmente configurada para iniciar rapidamente seu desenvolvimento.",
"CLI_CommandLineInterfaceExplanation": "A CLI é automatizada para criar novos projetos e adicionar módulos ao seu aplicativo.",
"StartupTemplates": "Modelos de inicialização",
"StartupTemplatesExplanation": "Vários modelos de inicialização fornecem uma solução totalmente configurada para iniciar rapidamente seu desenvolvimento.",
"BasedOnFamiliarTools": "Baseado em ferramentas familiares",
"BasedOnFamiliarToolsExplanation": "Construído e integrado a ferramentas populares que você já conhece. Baixa curva de aprendizado, fácil adaptação, desenvolvimento confortável.",
"BasedOnFamiliarToolsExplanation": "Construído e integrado a ferramentas populares que você já conhece. Baixa curva de aprendizado, fácil adaptação, desenvolvimento confortável.",
"ORMIndependent": "ORM Independente",
"ORMIndependentExplanation": "O framework principal é independente do ORM/banco de dados e pode funcionar com qualquer fonte de dados. Os provedores Entity Framework Core e MongoDB já estão disponíveis.",
"ORMIndependentExplanation": "O framework principal é independente do ORM/banco de dados e pode funcionar com qualquer fonte de dados. Os provedores Entity Framework Core e MongoDB já estão disponíveis.",
"Features": "Recursos",
"ABPCLI": "ABP CLI",
"Modularity": "Modularidade",
"BootstrapTagHelpers": "Bootstrap Tag Helpers",
"DynamicForms": "Formulários dinâmicos",
"BundlingMinification": "Empacotamento e Minificação",
"DynamicForms": "Formulários dinâmicos",
"BundlingMinification": "Empacotamento e Minificação",
"BackgroundJobs": "Trabalhos em segundo plano",
"DDDInfrastructure": "Infraestrutura DDD",
"DomainDrivenDesignInfrastructure": "Infraestrutura de Design Orientada a Domínio",
"AutoRESTAPIs": "APIs REST automáticas",
"DynamicClientProxies": "Proxies de cliente dinâmicos",
"DistributedEventBus": "Barramento de Eventos Distribuídos",
"DistributedEventBusWithRabbitMQIntegration": "Barramento de Eventos Distribuídos com Integração RabbitMQ",
"DomainDrivenDesignInfrastructure": "Infraestrutura de Design Orientada a Domínio",
"AutoRESTAPIs": "APIs REST automáticas",
"DynamicClientProxies": "Proxies de cliente dinâmicos",
"DistributedEventBus": "Barramento de Eventos Distribuídos",
"DistributedEventBusWithRabbitMQIntegration": "Barramento de Eventos Distribuídos com Integração RabbitMQ",
"TestInfrastructure": "Infraestrutura de Teste",
"AuditLogging": "Log de auditoria",
"AuditLoggingEntityHistories": "Log de auditoria e históricos de entidades",
"AuditLoggingEntityHistories": "Log de auditoria e históricos de entidades",
"ObjectToObjectMapping": "Objeto para Mapeamento de Objetos",
"EmailSMSAbstractions": "Abstrações de E-mail e SMS",
"EmailSMSAbstractionsWithTemplatingSupport": "Abstrações de e-mail e SMS com suporte a modelos",
"Localization": "Localização",
"SettingManagement": "Gerenciamento de configurações",
"ExtensionMethods": "Métodos de extensão",
"ExtensionMethodsHelpers": "Métodos de extensão & Helpers",
"AspectOrientedProgramming": "Programação Orientada a Aspectos",
"DependencyInjection": "Injeção de dependência",
"DependencyInjectionByConventions": "Injeção de dependência por convenções",
"ABPCLIExplanation": "O ABP CLI (Command Line Interface) é uma ferramenta de linha de comando para executar algumas operações comuns em soluções baseadas em ABP.",
"ModularityExplanation": "O ABP fornece uma infraestrutura completa para criar seus próprios módulos de aplicativos, que podem ter entidades, serviços, integração de banco de dados, APIs, componentes de interface do usuário e assim por diante ...", //TODO: strong "your own application modules",-
"MultiTenancyExplanation": "ABP framework não apenas suporta o desenvolvimento de aplicativos com vários inquilinos, mas também faz com que seu código desconheça a multilocação.",
"EmailSMSAbstractions": "Abstrações de E-mail e SMS",
"EmailSMSAbstractionsWithTemplatingSupport": "Abstrações de e-mail e SMS com suporte a modelos",
"Localization": "Localização",
"SettingManagement": "Gerenciamento de configurações",
"ExtensionMethods": "Métodos de extensão",
"ExtensionMethodsHelpers": "Métodos de extensão & Helpers",
"AspectOrientedProgramming": "Programação Orientada a Aspectos",
"DependencyInjection": "Injeção de dependência",
"DependencyInjectionByConventions": "Injeção de dependência por convenções",
"ABPCLIExplanation": "O ABP CLI (Command Line Interface) é uma ferramenta de linha de comando para executar algumas operações comuns em soluções baseadas em ABP.",
"ModularityExplanation": "O ABP fornece uma infraestrutura completa para criar seus próprios módulos de aplicativos, que podem ter entidades, serviços, integração de banco de dados, APIs, componentes de interface do usuário e assim por diante ...", //TODO: strong "your own application modules",-
"MultiTenancyExplanation": "ABP framework não apenas suporta o desenvolvimento de aplicativos com vários inquilinos, mas também faz com que seu código desconheça a multilocação.",
"MultiTenancyExplanation2": "Pode determinar automaticamente o inquilino atual, isolar os dados de inquilinos diferentes um do outro.",
"MultiTenancyExplanation3": "Suporta abordagens de banco de dados único, banco de dados por inquilino e híbrido.",
"MultiTenancyExplanation4": "Você se concentra no seu código comercial e deixa o framework lidar com a multilocação em seu nome.",
"BootstrapTagHelpersExplanation": "Em vez de escrever manualmente os detalhes repetidos dos componentes do bootstrap, use os tag helpers da ABP para simplificá-lo e tirar proveito do intellisense. Você pode definitivamente usar o Bootstrap sempre que precisar.",
"DynamicFormsExplanation": "Formulário dinâmico e entrada de tag helpers pode criar o formulário completo a partir de uma classe C# como modelo.",
"AuthenticationAuthorizationExplanation": "Opções avançadas de autenticação e autorização integradas ao ASP.NET Core Identity & IdentityServer4. Fornece um sistema de permissões extensível e detalhado.",
"CrossCuttingConcernsExplanation": "Não se repita para implementar todas essas coisas comuns repetidamente. Concentre-se no seu código comercial e permita que a ABP os automatize por convenções.",
"DatabaseConnectionTransactionManagement": "Gerenciamento de conexão e transação de banco de dados",
"CorrelationIdTracking": "Rastreamento de ID de correlação",
"BundlingMinificationExplanation": "A ABP oferece um sistema de empacotamento e minificação simples, dinâmico, poderoso, modular e embutido.",
"VirtualFileSystemnExplanation": "O Sistema de Arquivos Virtual possibilita gerenciar arquivos que não existem fisicamente no sistema de arquivos (disco). É usado principalmente para incorporar arquivos (js, css, image, cshtml ...) em assemblies e usar como arquivos físicos em tempo de execução.",
"ThemingExplanation": "O sistema Theming permite o desenvolvimento independente do tema do aplicativo e dos módulos, definindo um conjunto de bibliotecas e layouts básicos comuns, com base na estrutura mais recente do Bootstrap.",
"DomainDrivenDesignInfrastructureExplanation": "Uma infraestrutura completa para criar aplicativos em camadas com base nos padrões e princípios de Design Orientado a Domínio;",
"Specification": "Especificação",
"Repository": "Repositório",
"DomainService": "Serviço de Domínio",
"MultiTenancyExplanation3": "Suporta abordagens de banco de dados único, banco de dados por inquilino e híbrido.",
"MultiTenancyExplanation4": "Você se concentra no seu código comercial e deixa o framework lidar com a multilocação em seu nome.",
"BootstrapTagHelpersExplanation": "Em vez de escrever manualmente os detalhes repetidos dos componentes do bootstrap, use os tag helpers da ABP para simplificá-lo e tirar proveito do intellisense. Você pode definitivamente usar o Bootstrap sempre que precisar.",
"DynamicFormsExplanation": "Formulário dinâmico e entrada de tag helpers pode criar o formulário completo a partir de uma classe C# como modelo.",
"AuthenticationAuthorizationExplanation": "Opções avançadas de autenticação e autorização integradas ao ASP.NET Core Identity & IdentityServer4. Fornece um sistema de permissões extensível e detalhado.",
"CrossCuttingConcernsExplanation": "Não se repita para implementar todas essas coisas comuns repetidamente. Concentre-se no seu código comercial e permita que a ABP os automatize por convenções.",
"DatabaseConnectionTransactionManagement": "Gerenciamento de conexão e transação de banco de dados",
"CorrelationIdTracking": "Rastreamento de ID de correlação",
"BundlingMinificationExplanation": "A ABP oferece um sistema de empacotamento e minificação simples, dinâmico, poderoso, modular e embutido.",
"VirtualFileSystemnExplanation": "O Sistema de Arquivos Virtual possibilita gerenciar arquivos que não existem fisicamente no sistema de arquivos (disco). É usado principalmente para incorporar arquivos (js, css, image, cshtml ...) em assemblies e usar como arquivos físicos em tempo de execução.",
"ThemingExplanation": "O sistema Theming permite o desenvolvimento independente do tema do aplicativo e dos módulos, definindo um conjunto de bibliotecas e layouts básicos comuns, com base na estrutura mais recente do Bootstrap.",
"DomainDrivenDesignInfrastructureExplanation": "Uma infraestrutura completa para criar aplicativos em camadas com base nos padrões e princípios de Design Orientado a Domínio;",
"Specification": "Especificação",
"Repository": "Repositório",
"DomainService": "Serviço de Domínio",
"ValueObject": "Value Object",
"ApplicationService": "Serviço de Aplicativo",
"DataTransferObject": "Objeto de transferência de dados",
"ApplicationService": "Serviço de Aplicativo",
"DataTransferObject": "Objeto de transferência de dados",
"AggregateRootEntity": "Raiz agregada, entidade",
"AutoRESTAPIsExplanation": "O ABP pode configurar automaticamente seus serviços de aplicativo como controladores de API por convenção.",
"AutoRESTAPIsExplanation": "O ABP pode configurar automaticamente seus serviços de aplicativo como controladores de API por convenção.",
"DynamicClientProxiesExplanation": "Consumir facilmente suas APIs de JavaScript e C # clientes.",
"DistributedEventBusWithRabbitMQIntegrationExplanation": "Publique e consuma facilmente eventos distribuídos usando o Barramento de Eventos Distribuídos interno com a integração RabbitMQ disponível.",
"TestInfrastructureExplanation": "A estrutura foi desenvolvida para testes de unidade e integração. Fornece classes básicas para facilitar. Os modelos de inicialização são pré-configurados para teste.",
"AuditLoggingEntityHistoriesExplanation": "Registro de auditoria interno para aplicativos críticos para os negócios. Solicitação, serviço, log de auditoria no nível do método e histórico de entidades com detalhes no nível da propriedade.",
"EmailSMSAbstractionsWithTemplatingSupportExplanation": "As abstrações IEmailSender e ISmsSender dissociam sua lógica de aplicativo da infraestrutura. O sistema avançado de modelo de email permite criar e localizar modelos de email e usá-lo facilmente sempre que necessário.",
"LocalizationExplanation": "O sistema de localização permite criar recursos em arquivos JSON simples e usá-los para localizar sua interface do usuário. Ele suporta cenários avançados como herança, extensões e integração de JavaScript, enquanto é totalmente compatível com o sistema de localização do AspNet Core.",
"SettingManagementExplanation": "Defina as configurações do seu aplicativo e obtenha valores no tempo de execução com base na configuração atual, inquilino e usuário.",
"ExtensionMethodsHelpersExplanation": "Não se repita, mesmo em partes triviais do código. Extensões e helpers para tipos padrão tornam seu código muito mais limpo e fácil de escrever.",
"AspectOrientedProgrammingExplanation": "Fornece uma infraestrutura confortável para criar proxies dinâmicos e implementar a Programação Orientada a Aspectos. Intercepte qualquer classe e execute seu código antes e depois de cada execução de método.",
"DependencyInjectionByConventionsExplanation": "Não há necessidade de registrar suas classes na injeção de dependência manualmente. Registra automaticamente tipos de serviço comuns por convenção. Para outros tipos de serviços, você pode usar interfaces e atributos para facilitar e colocar no local.",
"DataFilteringExplanation": "Defina e use filtros de dados que serão aplicados automaticamente quando você consultar entidades do banco de dados. Os filtros Soft Delete e MultiTenant são fornecidos imediatamente quando você implementa interfaces simples.",
"DistributedEventBusWithRabbitMQIntegrationExplanation": "Publique e consuma facilmente eventos distribuídos usando o Barramento de Eventos Distribuídos interno com a integração RabbitMQ disponível.",
"TestInfrastructureExplanation": "A estrutura foi desenvolvida para testes de unidade e integração. Fornece classes básicas para facilitar. Os modelos de inicialização são pré-configurados para teste.",
"AuditLoggingEntityHistoriesExplanation": "Registro de auditoria interno para aplicativos críticos para os negócios. Solicitação, serviço, log de auditoria no nível do método e histórico de entidades com detalhes no nível da propriedade.",
"EmailSMSAbstractionsWithTemplatingSupportExplanation": "As abstrações IEmailSender e ISmsSender dissociam sua lógica de aplicativo da infraestrutura. O sistema avançado de modelo de email permite criar e localizar modelos de email e usá-lo facilmente sempre que necessário.",
"LocalizationExplanation": "O sistema de localização permite criar recursos em arquivos JSON simples e usá-los para localizar sua interface do usuário. Ele suporta cenários avançados como herança, extensões e integração de JavaScript, enquanto é totalmente compatível com o sistema de localização do AspNet Core.",
"SettingManagementExplanation": "Defina as configurações do seu aplicativo e obtenha valores no tempo de execução com base na configuração atual, inquilino e usuário.",
"ExtensionMethodsHelpersExplanation": "Não se repita, mesmo em partes triviais do código. Extensões e helpers para tipos padrão tornam seu código muito mais limpo e fácil de escrever.",
"AspectOrientedProgrammingExplanation": "Fornece uma infraestrutura confortável para criar proxies dinâmicos e implementar a Programação Orientada a Aspectos. Intercepte qualquer classe e execute seu código antes e depois de cada execução de método.",
"DependencyInjectionByConventionsExplanation": "Não há necessidade de registrar suas classes na injeção de dependência manualmente. Registra automaticamente tipos de serviço comuns por convenção. Para outros tipos de serviços, você pode usar interfaces e atributos para facilitar e colocar no local.",
"DataFilteringExplanation": "Defina e use filtros de dados que serão aplicados automaticamente quando você consultar entidades do banco de dados. Os filtros Soft Delete e MultiTenant são fornecidos imediatamente quando você implementa interfaces simples.",
"PublishEvents": "Publicar eventos",
"HandleEvents": "Manipular Eventos",
"AndMore": "e mais...",
"Code": "Código",
"Code": "Código",
"Result": "Resultado",
"SeeTheDocumentForMoreInformation": "Consulte o <a href=\"{1}\">{0} documento</a> para obter mais informações",
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>código aberto</strong></span><span class=\"second-line text-uppercase\">Aplicativo da Web<br />Framework </span><span class=\"third-line shine2\"><strong>para o ASP.NET Core</strong></span>",
"SeeTheDocumentForMoreInformation": "Consulte o <a href=\"{1}\">{0} documento</a> para obter mais informações",
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>código aberto</strong></span><span class=\"second-line text-uppercase\">Aplicativo da Web<br />Framework </span><span class=\"third-line shine2\"><strong>para o ASP.NET Core</strong></span>",
"UiFramework": "UI Framework",
"EmailAddress": "Endereço de email"
"EmailAddress": "Endereço de email"
}
}

155
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json

@ -1,5 +1,160 @@
{
"culture": "zh-Hans",
"texts": {
"GetStarted": "开始",
"Create": "创建",
"NewProject": "新工程",
"DirectDownload": "直接下载",
"ProjectName": "项目名称",
"ProjectType": "项目类型",
"DatabaseProvider": "数据库提供者",
"NTier": "N层",
"IncludeUserInterface": "包含用户界面",
"CreateNow": "现在创建",
"TheStartupProject": "启动项目",
"Tutorial": "教程",
"UsingCLI": "使用CLI",
"SeeDetails": "见详细",
"AbpShortDescription": "ABP是用于创建现代Web应用程序的完整架构和强大的基础设施! 遵循最佳实践和约定,为你提供SOLID开发经验.",
"SourceCodeUpper": "源代码",
"LatestReleaseLogs": "最新发布日志",
"Infrastructure": "基础设施",
"Architecture": "架构",
"Modular": "模块化",
"DontRepeatYourself": "不要重复工作",
"DeveloperFocused": "专注于开发者",
"FullStackApplicationInfrastructure": "全栈应用程序基础设施",
"DomainDrivenDesign": "领域驱动设计",
"DomainDrivenDesignExplanation": "根据DDD模式和准则进行设计和开发. 为你的应用程序提供分层模型.",
"Authorization": "授权",
"AuthorizationExplanation": "具有用户,角色和细粒度权限系统的高级授权. 建立在Microsoft Identity库上.",
"MultiTenancy": "多租户",
"MultiTenancyExplanation": "SaaS应用程序变得简单! 从数据库到UI的多租户集成.",
"CrossCuttingConcerns": "横切关注点",
"CrossCuttingConcernsExplanation": "完整的基础架构,用于授权,验证,异常处理,缓存,审计日志记录,事务管理等.",
"BuiltInBundlingMinification": "内置Bundling & Minification",
"BuiltInBundlingMinificationExplanation": "无需使用外部工具进行Bundling & Minification. ABP提供了一种更简单,动态,功能强大,模块化和内置的方式!",
"VirtualFileSystem": "虚拟文件系统",
"VirtualFileSystemExplanation": "将视图,脚本,样式,图像...嵌入到包/库中,并在不同的应用程序中重复使用.",
"Theming": "主题",
"ThemingExplanation": "使用和定制基于bootstrap的标准UI主题,或创建自己的主题.",
"BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers和动态表单",
"BootstrapTagHelpersDynamicFormsExplanation": "内置的后台作业系统可以集成到Hangfire,RabbitMQ或您喜欢的任何工具中.", //TODO explanation doesn't match.
"HTTPAPIsDynamicProxies": "HTTP APIs和动态代理",
"HTTPAPIsDynamicProxiesExplanation": "自动将应用程序服务公开为REST样式的HTTP API,并与动态JavaScript和C#代理一起使用.",
"CompleteArchitectureInfo": "现代架构用来创建可维护的软件解决方案.",
"DomainDrivenDesignBasedLayeringModelExplanation": "帮助你实现基于DDD的分层架构并构建可维护的代码库.",
"DomainDrivenDesignBasedLayeringModelExplanationCont": "提供启动模板,抽象,基类,服务,文档和指南以帮助你开发基于DDD模式和准则的应用程序.",
"MicroserviceCompatibleModelExplanation": "核心框架和预构建模块在设计时就考虑了微服务架构.",
"MicroserviceCompatibleModelExplanationCont": "提供基础结构,集成,示例和文档,以更轻松地实现微服务解决方案,而如果你要使用整体应用程序,也不会带来额外的复杂性.",
"ModularInfo": "ABP提供了完整的模块化系统,使你能够开发可重复使用的应用程序模块.",
"PreBuiltModulesThemes": "预构建模块和主题",
"PreBuiltModulesThemesExplanation": "开源和商业模块和主题已准备好在你的业务应用程序中使用.",
"NuGetNPMPackages": "NuGet和NPM包",
"NuGetNPMPackagesExplanation": "作为NuGet和NPM包分发.易于安装和升级.",
"ExtensibleReplaceable": "可扩展/可替换",
"ExtensibleReplaceableExplanation": "所有服务和模块在设计时都考虑了可扩展性.您可以替换服务,页面,样式,组件...",
"CrossCuttingConcernsExplanation2": "保持代码整洁,专注于你自己的业务代码.",
"CrossCuttingConcernsExplanation3": "不要浪费时间一次又一次地实现通用的应用程序要求.",
"AuthenticationAuthorization": "认证与授权",
"ExceptionHandling": "异常处理",
"Validation": "验证",
"DatabaseConnection": "数据库连接",
"TransactionManagement": "事务管理",
"AuditLogging": "审计日志",
"Caching": "缓存",
"Multitenancy": "多租户",
"DataFiltering": "数据过滤",
"ConventionOverConfiguration": "约定优于配置",
"ConventionOverConfigurationExplanation": "默认情况下,ABP使用最小或零配置实现通用的应用程序约定.",
"ConventionOverConfigurationExplanationList1": "自动注册已知服务以进行依赖项注入.",
"ConventionOverConfigurationExplanationList2": "通过命名约定将应用程序服务公开为HTTP API.",
"ConventionOverConfigurationExplanationList3": "为C#和JavaScript创建动态HTTP客户端代理.",
"ConventionOverConfigurationExplanationList4": "为您的实体提供默认仓储库.",
"ConventionOverConfigurationExplanationList5": "根据Web请求或应用程序服务方法管理工作单元.",
"ConventionOverConfigurationExplanationList6": "为实体发布创建,更新和删除事件.",
"BaseClasses": "基类",
"BaseClassesExplanation": "通用应用程序模式的预构建基类.",
"DeveloperFocusedExplanation": "ABP是为了开发者",
"DeveloperFocusedExplanationCont": "它旨在简化你的日常软件开发,同时又不限制你在需要时进行底层工作。",
"SeeAllFeatures": "查看所有功能",
"CLI_CommandLineInterface": "CLI (命令行界面)",
"CLI_CommandLineInterfaceExplanation": "CLI会自动创建新项目并将模块添加到你的应用程序.",
"StartupTemplates": "启动模板",
"StartupTemplatesExplanation": "各种启动模板为你提供了完整配置的解决方案,以快速启动你的开发.",
"BasedOnFamiliarTools": "基于熟悉的工具",
"BasedOnFamiliarToolsExplanation": "建立在你已经知道的流行工具之上并与之集成.学习曲线低,适应性强,舒适的开发.",
"ORMIndependent": "ORM独立",
"ORMIndependentExplanation": "核心框架独立于ORM/数据库,并且可以与任何数据源一起使用.Entity Framework Core和MongoDB提供程序已经可用.",
"Features": "功能",
"ABPCLI": "ABP CLI",
"Modularity": "模块化",
"BootstrapTagHelpers": "Bootstrap Tag Helpers",
"DynamicForms": "动态表单",
"BundlingMinification": "Bundling & Minification",
"BackgroundJobs": "后台作业",
"DDDInfrastructure": "DDD基础设施",
"DomainDrivenDesignInfrastructure": "Domain Driven Design基础设施",
"AutoRESTAPIs": "自动REST APIs",
"DynamicClientProxies": "动态客户端代理",
"DistributedEventBus": "分布式事件总线",
"DistributedEventBusWithRabbitMQIntegration": "具有RabbitMQ集成的分布式事件总线",
"TestInfrastructure": "测试基础设施",
"AuditLogging": "审计日志",
"AuditLoggingEntityHistories": "审计日志和实体历史",
"ObjectToObjectMapping": "对象映射",
"EmailSMSAbstractions": "电子邮件和短信抽象",
"EmailSMSAbstractionsWithTemplatingSupport": "具有模板支持的电子邮件和短信抽象",
"Localization": "本土化",
"SettingManagement": "设置管理",
"ExtensionMethods": "扩展方法",
"ExtensionMethodsHelpers": "扩展方法和助手",
"AspectOrientedProgramming": "面向切面的编程",
"DependencyInjection": "依赖注入",
"DependencyInjectionByConventions": "依据约定的依赖注入",
"ABPCLIExplanation": "ABP CLI(命令行界面)是用于对ABP解决方案执行常见操作的命令行工具.",
"ModularityExplanation": "ABP提供了一个完整的基础设施来构建你自己的应用程序模块,这些模块可能具有实体,服务,数据库集成,API,UI组件等.", //TODO: strong "your own application modules",-
"MultiTenancyExplanation": "ABP框架不仅支持开发多租户应用程序,而且使你的代码几乎无需知道多租户.",
"MultiTenancyExplanation2": "可以自动确定当前租户,将不同租户的数据相互隔离.",
"MultiTenancyExplanation3": "支持单一数据库,或每个租户单独数据库或者混合方式.",
"MultiTenancyExplanation4": "你专注于业务代码,并让该框架为你处理多租户.",
"BootstrapTagHelpersExplanation": "与其手动编写重复细节的bootstrap组件,不如使用ABP的tag helper来简化它并利用智能感知.你当然也可以在需要时直接使用Bootstrap.",
"DynamicFormsExplanation": "动态表单和tag helpers可从作为模型的C#类创建完整的表单.",
"AuthenticationAuthorizationExplanation": "集成到ASP.NET Core Identity和IdentityServer4的丰富身份验证和授权选项.提供可扩展且详细的权限系统.",
"CrossCuttingConcernsExplanation": "不要重复自己一次又一次地实现所有这些常见的东西.专注于你的业务代码,并让ABP按照约定自动执行.",
"DatabaseConnectionTransactionManagement": "数据库连接和事务管理",
"CorrelationIdTracking": "关联ID跟踪",
"BundlingMinificationExplanation": "ABP提供了一个简单,动态,功能强大,模块化的内置Bundling & Minification系统.",
"VirtualFileSystemnExplanation": "虚拟文件系统使管理文件系统(磁盘)上不存在的文件成为可能.它主要用于将(js,css,image,cshtml...)文件嵌入到程序集中,并在运行时像物理文件一样使用它们.",
"ThemingExplanation": "主题系统允许通过基于最新的Bootstrap框架定义一组通用基础库和布局来独立开发应用程序和模块主题.",
"DomainDrivenDesignInfrastructureExplanation": "基于域驱动设计模式和准则构建分层应用程序的完整基础设施;",
"Specification": "规范",
"Repository": "仓储",
"DomainService": "领域服务",
"ValueObject": "值对象",
"ApplicationService": "应用程序服务",
"DataTransferObject": "数据传输对象",
"AggregateRootEntity": "聚合根, 实体",
"AutoRESTAPIsExplanation": "ABP可以按照约定自动将你的应用程序服务配置为API控制器.",
"DynamicClientProxiesExplanation": "从JavaScript和C#客户端轻松使用你的API.",
"DistributedEventBusWithRabbitMQIntegrationExplanation": "使用带有RabbitMQ集成的内置分布式事件总线,可以轻松发布和使用分布式事件.",
"TestInfrastructureExplanation": "框架已经考虑了单元和集成测试.为你提供基类,使其更容易.启动模板已预先配置用于测试.",
"AuditLoggingEntityHistoriesExplanation": "针对关键业务应用程序的内置审计日志记录.请求,服务,方法级别的审计日志记录以及具有属性级别详细信息的实体历史记录.",
"EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender和ISmsSender抽象使你的应用程序逻辑与基础设施解耦.先进的电子邮件模板系统允许创建和本地化电子邮件模板,并在需要时轻松使用.",
"LocalizationExplanation": "本地化系统允许在纯JSON文件中创建资源,并使用它们来本地化UI.它支持继承,扩展和JavaScript集成等高级方案,同时与AspNet Core的本地化系统完全兼容.",
"SettingManagementExplanation": "定义应用程序的设置,并根据当前配置,租户和用户在运行时获取值.",
"ExtensionMethodsHelpersExplanation": "即使是琐碎的代码部分,也不要重复.标准类型的扩展方法和助手使你的代码更加清晰和易于编写.",
"AspectOrientedProgrammingExplanation": "提供合适的基础设施来创建动态代理并实现面向切面的编程.拦截任何类,并在每次方法执行之前和之后执行代码.",
"DependencyInjectionByConventionsExplanation": "无需手动注册类以进行依赖项注入.按照约定自动注册常用服务类型.对于其他类型的服务,你可以使用接口和属性来使其变得更轻松和就位.",
"DataFilteringExplanation": "定义和使用数据过滤器,这些过滤器在你从数据库中查询实体时会自动应用.当你实现简单的接口时,可立即使用软删除功能和多租户过滤器.",
"PublishEvents": "发布事件",
"HandleEvents": "处理事件",
"AndMore": "更多...",
"Code": "编码",
"Result": "结果",
"SeeTheDocumentForMoreInformation": "查看<a href=\"{1}\">{0} 文档</a>获得更多信息",
"IndexPageHeroSection": "<span class=\"third-line shine2\"><strong>asp.net core的</strong></span><span class=\"first-line shine\"><strong>开源</strong></span><span class=\"second-line text-uppercase\">Web应用程序<br />框架 </span>",
"UiFramework": "UI框架",
"EmailAddress": "电子邮件地址"
}
}

2
common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.22.0</Version>
<Version>1.0.2</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io</PackageProjectUrl>

29
docs/en/Blog-Posts/2019-10-22 v1_0_Release/Post.md

@ -0,0 +1,29 @@
# ABP v1.0 Has Been Finally Released!
![banner](banner.jpg)
Today is the big day! After ~3 years of continuous development, first stable ABP release, 1.0, has been released. Thanks to everyone contributed to the project or tried it so far.
Start playing with the new ABP framework now: [abp.io/get-started](https://abp.io/get-started)
![contribution-graph](D:\Github\abp\docs\en\Blog-Posts\2019-10-22 v1_0_Release\contribution-graph.png)
Here, a few GitHub & NuGet statistics about the project:
* 2,360 stars.
* 5,917 commits.
* 72 contributors.
* 1,136 issues were closed, 276 open.
* 566 PRs were closed, 5 open.
* 39 releases.
* 122,795 downloads on NuGet.
There was an excellent demand even before the first release.
## Road Map
The first priority is to complete the documentation, since there are still a lot of missing documents for the framework features & the modules. Then we will continue to work on the issues on GitHub, based on the labeled priorities.
See the [GitHub milestone items](https://github.com/abpframework/abp/milestones).
ABP is a community-driven project. So, we are prioritizing the issues mostly based on the community feedback and demand.

BIN
docs/en/Blog-Posts/2019-10-22 v1_0_Release/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
docs/en/Blog-Posts/2019-10-22 v1_0_Release/contribution-graph.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

2
docs/en/CLI.md

@ -50,7 +50,7 @@ abp new Acme.BookStore
* `ef`: Entity Framework Core.
* `mongodb`: MongoDB.
* `module`: [Module template](Startup-Templates/Module.md). Additional options:
* `--no-ui`: Specifies to not include the UI. This makes possible to create service-only modules (a.k.a. microservices - without UI).
* `--no-ui`: Specifies to not include the UI. This makes possible to create service-only modules (a.k.a. microservices - without UI).
* `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory.
* `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version.

89
docs/en/Caching.md

@ -19,7 +19,7 @@ See [ASP.NET Core's distributed caching document](https://docs.microsoft.com/en-
## `IDistributedCache<TCacheItem>` Interface
ABP framework defines the generic `IDistributedCache<TCacheItem>` interface in the [Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching/) package. `TCacheItem` is the type of the object stored in the cache.
ABP framework defines the generic `IDistributedCache<TCacheItem>` interface in the [Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching/) package. `TCacheItem` is the type of the object stored in the cache.
`IDistributedCache<TCacheItem>` solves the difficulties explained above;
@ -80,6 +80,93 @@ public class BookService : ITransientDependency
Other methods of the `IDistributedCache<BookCacheItem>` are same as ASP.NET Core's `IDistributedCache` interface, so you can refer [it's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed).
## `IDistributedCache<TCacheItem, TCacheKey>` Interface
`IDistributedCache<TCacheItem>` interface assumes that the type of your cache key is `string` (so, you need to manually convert your key to string if you need to use a different kind of cache key). `IDistributedCache<TCacheItem, TCacheKey>` can be used when your cache key type is not `string`.
### Usage
An example class to store an item in the cache:
````csharp
public class BookCacheItem
{
public string Name { get; set; }
public float Price { get; set; }
}
````
Example usage (assumes that your cache key type is `Guid`):
````csharp
public class BookService : ITransientDependency
{
private readonly IDistributedCache<BookCacheItem, Guid> _cache;
public BookService(IDistributedCache<BookCacheItem, Guid> cache)
{
_cache = cache;
}
public async Task<BookCacheItem> GetAsync(Guid bookId)
{
return await _cache.GetOrAddAsync(
bookId, //Guid type used as the cache key
async () => await GetBookFromDatabaseAsync(bookId),
() => new DistributedCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
}
);
}
private Task<BookCacheItem> GetBookFromDatabaseAsync(Guid bookId)
{
//TODO: get from database
}
}
````
* This sample service uses the `GetOrAddAsync()` method to get a book item from the cache.
* Since cache explicitly implemented as using `Guid` as cache key, `Guid` value passed to `_cache_GetOrAddAsync()` method.
`IDistributedCache<TCacheItem, TCacheKey>` internally uses `ToString()` method of the key object to convert it to a string. If you need to use a complex object as the cache key, you need to override `ToString` method of your class.
An example class that is used as a cache key:
````csharp
public class UserInOrganizationCacheKey
{
public Guid UserId { get; set; }
public Guid OrganizationId { get; set; }
//Builds the cache key
public override string ToString()
{
return $"{UserId}_{OrganizationId}";
}
}
````
Example usage:
````csharp
public class BookService : ITransientDependency
{
private readonly IDistributedCache<UserCacheItem, UserInOrganizationCacheKey> _cache;
public BookService(
IDistributedCache<UserCacheItem, UserInOrganizationCacheKey> cache)
{
_cache = cache;
}
...
}
````
### DistributedCacheOptions
TODO

10
docs/en/Index.md

@ -4,18 +4,12 @@ ABP is an **open source application framework** focused on ASP.NET Core based we
Explore the left navigation menu to deep dive in the documentation.
## Project Status
ABP is the **next generation** of the open source [ASP.NET Boilerplate](https://aspnetboilerplate.com/) framework. It's currently in preview stage and not ready to use in production. The documentation is still in progress and it is far from complete.
For short-term and production level applications, it's suggested to use [ASP.NET Boilerplate](https://aspnetboilerplate.com/) framework which has rich feature set, mature, actively maintained and up-to-date.
## Getting Started
Easiest way to start a new project with ABP is to use the startup templates:
* [ASP.NET Core MVC (Razor Pages) UI Template](Getting-Started-AspNetCore-MVC-Template.md)
* [Angular UI Template](Getting-Started-Angular-Template.md)
* [ASP.NET Core MVC (Razor Pages) UI Startup Template](Getting-Started-AspNetCore-MVC-Template.md)
* [Angular UI Startup Template](Getting-Started-Angular-Template.md)
If you want to start from scratch (with an empty project) then manually install the ABP Framework and use the following tutorials:

90
docs/pt-BR/docs-nav.json

@ -1,10 +1,10 @@
{
"items": [
{
"text": "Começando",
"text": "Começando",
"items": [
{
"text": "De Modelo de Inicialização",
"text": "De Modelo de Inicialização",
"items": [
{
"text": "Aplicativo com MVC (Razor Pages) UI",
@ -35,7 +35,7 @@
"text": "Tutoriais",
"items": [
{
"text": "Desenvolvimento de Aplicações",
"text": "Desenvolvimento de Aplicações",
"items": [
{
"text": "Com ASP.NET Core MVC UI",
@ -57,11 +57,11 @@
"text": "Fundamentos",
"items": [
{
"text": "Injeção de Dependência",
"text": "Injeção de Dependência",
"path": "Dependency-Injection.md",
"items": [
{
"text": "Integração com Autofac",
"text": "Integração com Autofac",
"path": "Autofac-Integration.md"
}
]
@ -71,18 +71,18 @@
"path": "Virtual-File-System.md"
},
{
"text": "Localização",
"text": "Localização",
"path": "Localization.md"
},
{
"text": "Manipulação de Exceção",
"text": "Manipulação de Exceção",
"path": "Exception-Handling.md"
},
{
"text": "Validação"
"text": "Validação"
},
{
"text": "Autorização"
"text": "Autorização"
},
{
"text": "Armazenamento em Cache"
@ -91,7 +91,7 @@
"text": "Auditoria"
},
{
"text": "Gerenciamento de Configurações"
"text": "Gerenciamento de Configurações"
}
]
},
@ -102,23 +102,23 @@
"text": "Barramento de Eventos (local)"
},
{
"text": "Barramento de Eventos Distribuídos",
"text": "Barramento de Eventos Distribuídos",
"items": [
{
"text": "Integração RabbitMQ"
"text": "Integração RabbitMQ"
}
]
}
]
},
{
"text": "Serviços",
"text": "Serviços",
"items": [
{
"text": "Serialização de Objetos"
"text": "Serialização de Objetos"
},
{
"text": "Serialização JSON"
"text": "Serialização JSON"
},
{
"text": "Emailing"
@ -135,60 +135,60 @@
]
},
{
"text": "Múltiplos Inquilinos",
"text": "Múltiplos Inquilinos",
"path": "Multi-Tenancy.md"
},
{
"text": "Desenvolvimento de Módulos",
"text": "Desenvolvimento de Módulos",
"items": [
{
"text": "Fundamentos",
"path": "Module-Development-Basics.md"
},
{
"text": "Módulos de plug-in"
"text": "Módulos de plug-in"
},
{
"text": "Melhores práticas",
"text": "Melhores práticas",
"path": "Best-Practices/Index.md"
}
]
},
{
"text": "Design Orientado a Domínio",
"text": "Design Orientado a Domínio",
"path": "Domain-Driven-Design.md",
"items": [
{
"text": "Camada de Domínio",
"text": "Camada de Domínio",
"items": [
{
"text": "Entidades & Raízes Agregadas",
"text": "Entidades & Raízes Agregadas",
"path": "Entities.md"
},
{
"text": "Value Objects"
},
{
"text": "Repositórios",
"text": "Repositórios",
"path": "Repositories.md"
},
{
"text": "Serviços de Domínio"
"text": "Serviços de Domínio"
},
{
"text": "Especificações"
"text": "Especificações"
}
]
},
{
"text": "Camada de Aplicação",
"text": "Camada de Aplicação",
"items": [
{
"text": "Serviços de Aplicação",
"text": "Serviços de Aplicação",
"path": "Application-Services.md"
},
{
"text": "Objetos de Transferência de Dados"
"text": "Objetos de Transferência de Dados"
},
{
"text": "Unidade de Trabalho"
@ -204,24 +204,24 @@
"text": "API",
"items": [
{
"text": "Controladores de API Automática",
"text": "Controladores de API Automática",
"path": "AspNetCore/Auto-API-Controllers.md"
},
{
"text": "Clientes da API C # Dinâmica",
"text": "Clientes da API C # Dinâmica",
"path": "AspNetCore/Dynamic-CSharp-API-Clients.md"
}
]
},
{
"text": "Interface de Usuário",
"text": "Interface de Usuário",
"items": [
{
"text": "Gerenciamento de Pacotes do Lado do Cliente",
"path": "AspNetCore/Client-Side-Package-Management.md"
},
{
"text": "Compactação & Minificação",
"text": "Compactação & Minificação",
"path": "AspNetCore/Bundling-Minification.md"
},
{
@ -244,21 +244,21 @@
"text": "Acesso de Dados",
"items": [
{
"text": "Integração do Entity Framework Core",
"text": "Integração do Entity Framework Core",
"path": "Entity-Framework-Core.md",
"items": [
{
"text": "Integração do PostgreSQL",
"text": "Integração do PostgreSQL",
"path": "Best-Practices/PostgreSQL-Integration.md"
}
]
},
{
"text": "Integração do MongoDB",
"text": "Integração do MongoDB",
"path": "MongoDB.md"
},
{
"text": "Integração do Dapper",
"text": "Integração do Dapper",
"path": "Dapper.md"
}
]
@ -271,11 +271,11 @@
"path": "Background-Jobs.md",
"items": [
{
"text": "Integração do Hangfire",
"text": "Integração do Hangfire",
"path": "Background-Jobs-Hangfire.md"
},
{
"text": "Integração do RabbitMQ",
"text": "Integração do RabbitMQ",
"path": "Background-Jobs-RabbitMq.md"
}
]
@ -283,7 +283,7 @@
]
},
{
"text": "Modelos de Inicialização",
"text": "Modelos de Inicialização",
"path": "Startup-Templates/Index.md",
"items": [
{
@ -291,7 +291,7 @@
"path": "Startup-Templates/Application.md"
},
{
"text": "Módulo",
"text": "Módulo",
"path": "Startup-Templates/Module.md"
}
]
@ -300,28 +300,28 @@
"text": "Exemplos",
"items": [
{
"text": "Demonstração de Microsserviços",
"text": "Demonstração de Microsserviços",
"path": "Samples/Microservice-Demo.md"
}
]
},
{
"text": "Módulos de Aplicação",
"text": "Módulos de Aplicação",
"path": "Modules/Index.md"
},
{
"text": "Arquitetura de Microsserviços",
"text": "Arquitetura de Microsserviços",
"path": "Microservice-Architecture.md"
},
{
"text": "Testando"
},
{
"text": "Compilações Noturnas",
"text": "Compilações Noturnas",
"path": "Nightly-Builds.md"
},
{
"text": "Guia de Contribuição",
"text": "Guia de Contribuição",
"path": "Contribution/Index.md"
}
]

3
docs/zh-Hans/AspNetCore/JavaScript-API/Auth.md

@ -0,0 +1,3 @@
# abp.auth JavaScript API
TODO

24
docs/zh-Hans/AspNetCore/JavaScript-API/Index.md

@ -0,0 +1,24 @@
# JavaScript API
ABP为ASP.NET Core MVC / Razor页面应用程序提供了一些执行客户端常见需求的JavaScrpt Api.
## APIs
* abp.ajax
* [abp.auth](Auth.md)
* abp.currentUser
* abp.dom
* abp.event
* abp.features
* abp.localization
* abp.log
* abp.ModalManager
* abp.notify
* abp.security
* abp.setting
* abp.ui
* abp.utils
* abp.ResourceLoader
* abp.WidgetManager
* Other APIs

370
docs/zh-Hans/Authorization.md

@ -0,0 +1,370 @@
# 授权
授权用于在应用程序中判断是否允许用户执行某些特定的操作.
ABP扩展了[ASP.NET Core 授权](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/introduction), 将 **权限** 添加为自动[策略](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/policies)并且使授权系统在 **[应用服务](Application-Services.md)** 同样可用.
所以ASP.NET Core授权的功能特性和它的文档在基于ABP的应用程序是可用的.
本文中着重介绍在ASP.NET Core授权功能基础上添加的功能.
## Authorize Attribute
ASP.NET Core 定义了 [**Authorize**](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/simple) attribute 用于在控制器,控制器方法以及页面上授权. 现在ABP将它带到了[应用服务](Application-Services.md).
示例:
````csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Services;
namespace Acme.BookStore
{
[Authorize]
public class AuthorAppService : ApplicationService, IAuthorAppService
{
public Task<List<AuthorDto>> GetListAsync()
{
...
}
[AllowAnonymous]
public Task<AuthorDto> GetAsync(Guid id)
{
...
}
[Authorize("BookStore_Author_Create")]
public Task CreateAsync(CreateAuthorDto input)
{
...
}
}
}
````
* `Authorize` attribute 使用户必须登陆到应用程序才可以访问 `AuthorAppService` 中的方法. 所以`GetListAsync` 方法仅可用于通过身份验证的用户.
* `AllowAnonymous` 禁用身份验证. 所以 `GetAsync` 方法任何人都可以访问,包括未授权的用户.
* `[Authorize("BookStore_Author_Create")]` 定义了一个策略 (参阅 [基于策略的授权](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/policies)),它用于检查当前用户的权限.
"BookStore_Author_Create" 是一个策略名称. 如果你想要使用策略的授权方式,需要在ASP.NET Core授权系统中预先定义它.
你可以按照ASP.NET Core文档进行实施策略授权,但对于简单的 `true/false` 条件(比如是否授予了用户策略) ABP定义了权限系统,在下一部分中会进行讲解.
## 权限系统
权限系统是为特定用户,角色或客户端授权或禁止的简单策略.
### 定义权限
创建一个继承自 `PermissionDefinitionProvider` 的类,如下所示:
````csharp
using Volo.Abp.Authorization.Permissions;
namespace Acme.BookStore.Permissions
{
public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var myGroup = context.AddGroup("BookStore");
myGroup.AddPermission("BookStore_Author_Create");
}
}
}
````
> ABP会自动发现这个类,不需要进行配置!
你需要在 `Define` 方法中添加**权限组**或者获取已存在的权限组,并向权限组中添加**权限**.
在定义权限后就可以在ASP.NET Core权限系统中当做**策略**名称使用. 在角色的权限管理模态框中同样可以看到:
![authorization-new-permission-ui](images/authorization-new-permission-ui.png)
* 左边的选项卡显示了 "BookStore" 权限组.
* 右侧的 "BookStore_Author_Create" 是权限名称,在这里可以为角色授权或禁止.
保存后更改会持久化到数据库并在授权系统使用.
> 只有在你安装了identity模块时,才会出现上图中的管理对话框. 该模块用于用户和角色的. 启动模板中已经预装identity模块.
#### 本地化权限名称
"BookStore_Author_Create" 名称对于权限系统来说很适合,但对于UI展示会让操作人员费解. 幸运的是 `AddPermission` 和 `AddGroup` 方法提供了 `LocalizableString` 参数:
````csharp
var myGroup = context.AddGroup(
"BookStore",
LocalizableString.Create<BookStoreResource>("BookStore")
);
myGroup.AddPermission(
"BookStore_Author_Create",
LocalizableString.Create<BookStoreResource>("Permission:BookStore_Author_Create")
);
````
然后在本地化文档中对 "BookStore" 和 "Permission:BookStore_Author_Create" 键添加本地化语言:
````json
"BookStore": "Book Store",
"Permission:BookStore_Author_Create": "Creating a new author"
````
> 有关更多信息请参阅[本地化系统文档](Localization.md).
下图展示了本地化后的效果:
![authorization-new-permission-ui-localized](images/authorization-new-permission-ui-localized.png)
#### 多租户
权限系统同样支持在ABP中做为一等公民的 [多租户](Multi-Tenancy.md). 在定义新权限时可以设置多租户选项. 有下面三个值:
* **Host**: 权限仅适用于宿主.
* **Tenant**: 权限仅适用于租户.
* **Both** (默认): 权限适用与宿主和租户.
> 如果你的应用程序不是多租户的,可以忽略这个选项.
`AddPermission` 方法的第三个参数用于设置多租户选项:
````csharp
myGroup.AddPermission(
"BookStore_Author_Create",
LocalizableString.Create<BookStoreResource>("Permission:BookStore_Author_Create"),
multiTenancySide: MultiTenancySides.Tenant //set multi-tenancy side!
);
````
#### 子权限
权限可以具有子权限,当你想要创建一个层次结构的权限树时它特别有用. 在这个树中一个权限可能含有子权限,并且子权限只有在授权父权限时才可用.
定义示例:
````csharp
var authorManagement = myGroup.AddPermission("Author_Management");
authorManagement.AddChild("Author_Management_Create_Books");
authorManagement.AddChild("Author_Management_Edit_Books");
authorManagement.AddChild("Author_Management_Delete_Books");
````
在页面上如下所示 (你可能想要本地化权限名称):
![authorization-new-permission-ui-hierarcy](images/authorization-new-permission-ui-hierarcy.png)
下面的示例代码是一个典型的应用服务:
````csharp
[Authorize("Author_Management")]
public class AuthorAppService : ApplicationService, IAuthorAppService
{
public Task<List<AuthorDto>> GetListAsync()
{
...
}
public Task<AuthorDto> GetAsync(Guid id)
{
...
}
[Authorize("Author_Management_Create_Books")]
public Task CreateAsync(CreateAuthorDto input)
{
...
}
[Authorize("Author_Management_Edit_Books")]
public Task UpdateAsync(CreateAuthorDto input)
{
...
}
[Authorize("Author_Management_Delete_Books")]
public Task DeleteAsync(CreateAuthorDto input)
{
...
}
}
````
* 拥有`Author_Management`权限的用户可以访问`GetListAsync`和 `GetAsync`方法.
* 示例中的其他方法需要额外的权限.
### 自定义策略覆盖已有权限
有时我们需要扩展扩展应用程序中预构建模块的权限,可以定义并注册一个与权限名称相同的策略到ASP.Net Core授权系统,策略会覆盖已有权限.
参阅 [基于策略的授权](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/policies) 文档了解如何自定义策略.
## IAuthorizationService
ASP.NET Core 提供了 `IAuthorizationService` 用于检查权限. 注入后使用它进行条件控制权限.
示例:
````csharp
public async Task CreateAsync(CreateAuthorDto input)
{
var result = await AuthorizationService
.AuthorizeAsync("Author_Management_Create_Books");
if (result.Succeeded == false)
{
//throw exception
throw new AbpAuthorizationException("...");
}
//continue to the normal flow...
}
````
> 因为应用服务会经常检查权限,`ApplicationService` 已经属性注入了`AuthorizationService`, 所有继承自 `ApplicationService` 的类都可以直接使用. 你也可以直接 [注入](Dependency-Injection.md)到类中.
上面的示例代码是检查权限的标准代码,ABP提供了一种简化的方式来编写它.
示例:
````csharp
public async Task CreateAsync(CreateAuthorDto input)
{
await AuthorizationService.CheckAsync("Author_Management_Create_Books");
//continue to the normal flow...
}
````
如果未授权 `CheckAsync` 扩展方法会抛出 `AbpAuthorizationException` 异常. 还有一个 `IsGrantedAsync` 扩展方法会返回 `true` 或 `false`.
`IAuthorizationService` 中有多个 `AuthorizeAsync` 方法重载. [ASP.NET Core 授权文档](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/introduction)中有详细的解释.
> 提示: 尽可能使用声明式的 `Authorize` attribute,因为它比较简单不会侵入方法内部. 如果你需要在业务代码中有条件的检查权限,那么请使用 `IAuthorizationService`.
### 在JavaScript中检查权限
有时你会需要在客户端检查策略/权限. 在ASP.NET Core MVC/Razor页面应用程序可以使用 `abp.auth` API. 示例:
````js
abp.auth.isGranted('MyPermissionName');
````
参阅 [abp.auth](AspNetCore/JavaScript-API/Auth.md) API 文档了解详情.
## 权限管理
通常权限管理是管理员用户使用权限管理模态框进行授权:
![authorization-new-permission-ui-localized](images/authorization-new-permission-ui-localized.png)
如果你想要通过代码管理权限, 可以注入使用 `IPermissionManager`. 如下所示:
````csharp
public class MyService : ITransientDependency
{
private readonly IPermissionManager _permissionManager;
public MyService(IPermissionManager permissionManager)
{
_permissionManager = permissionManager;
}
public async Task GrantPermissionForUserAsync(Guid userId, string permissionName)
{
await _permissionManager.SetForUserAsync(userId, permissionName, true);
}
public async Task ProhibitPermissionForUserAsync(Guid userId, string permissionName)
{
await _permissionManager.SetForUserAsync(userId, permissionName, false);
}
}
````
`SetForUserAsync` 方法用于设置用户的权限 (true/false). 类似的还有 `SetForRoleAsync` 和 `SetForClientAsync` 扩展方法.
`IPermissionManager` 由权限管理模块定义, 更多信息请参阅 [权限管理模块文档](Modules/Permission-Management.md).
## 高级主题
### Permission Value Providers
权限检查是可扩展的. 继承自 `PermissionValueProvider` (或实现 `IPermissionValueProvider`) 的任何类都可以参与权限检查. 有三个预定义的Provider:
* `UserPermissionValueProvider` 从当前的声明中拿到当前用户ID并检查用户授权. 用户声明由 `AbpClaimTypes.UserId` 静态属性定义.
* `RolePermissionValueProvider` 从当前的声明中拿到授予当前用户的角色集合并且判断角色是否具有指定的权限. 角色声明由 `AbpClaimTypes.Role` 静态属性定义.
* `ClientPermissionValueProvider` 从当前声明中拿到当前客户端并检查客户端是否具有指定的权限. 这在没有当前登录用户的客户端交互特别有用. 客户端声明由 `AbpClaimTypes.ClientId` 静态属性定义.
你可以定义自己的`PermissionValueProvider`扩展权限检查系统.
示例:
````csharp
public class SystemAdminPermissionValueProvider : PermissionValueProvider
{
public SystemAdminPermissionValueProvider(IPermissionStore permissionStore)
: base(permissionStore)
{
}
public override string Name => "SystemAdmin";
public override async Task<PermissionGrantResult>
CheckAsync(PermissionValueCheckContext context)
{
if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin")
{
return PermissionGrantResult.Granted;
}
return PermissionGrantResult.Undefined;
}
}
````
示例`SystemAdminPermissionValueProvider`允许声明`User_Type`值为`SystemAdmin`的用户授予所有权限. 通常在`Provider`中使用当前声明和 `IPermissionStore`.
`PermissionValueProvider` 的 `CheckAsync` 应该返回下面三个值之一:
* `PermissionGrantResult.Granted` 授予用户权限,如果没有其他的授权值提供程序返回 `Prohibited`, 那么最后会返回 `Granted`.
* `PermissionGrantResult.Prohibited` 禁止授权用户,任何一个授权值提供程序返回了 `Prohibited`, 那么其他的提供程序返回的值都不再重要.
* `PermissionGrantResult.Undefined` 代表当前无法确定是否授予或禁止权限, 返回`UnDefined`由其他权限值提供程序检查权限.
定义`Provider`后将其添加到 `PermissionOptions`,如下所示:
````csharp
Configure<PermissionOptions>(options =>
{
options.ValueProviders.Add<SystemAdminPermissionValueProvider>();
});
````
### Permission Store
`IPermissionStore` 是唯一需要从持久化源(通常是数据库)中读取权限值的接口. 它的实现在权限管理模块. 参见 [权限管理模块](Modules/Permission-Management.md) 了解更多信息
### AlwaysAllowAuthorizationService
`AlwaysAllowAuthorizationService` 类可以绕过授权服务. 通常用于在需要禁用授权系统的集成测试中.
使用 `IServiceCollection.AddAlwaysAllowAuthorization()` 扩展方法将 `AlwaysAllowAuthorizationService` 注册到 [依赖注入](Dependency-Injection.md) 系统中:
````csharp
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAlwaysAllowAuthorization();
}
````
启动模板的集成测试已经禁用了授权服务.
## 接下来
* [权限管理模块](Modules/Permission-Management.md)
* [ASP.NET Core MVC / Razor 页面 JavaScript Auth API](AspNetCore/JavaScript-API/Auth.md)

29
docs/zh-Hans/Blog-Posts/2019-10-22 v1_0_Release/Post.md

@ -0,0 +1,29 @@
# ABP v1.0终于发布了!
今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人.
![contribution-graph](contribution-graph.png)
立即开始使用新的ABP框架:[abp.io/get-started](https://abp.io/get-started)
## 统计
在这里,有关该项目的一些GitHub和NuGet统计信息:
* 2,360星.
* 5,917次提交.
* 72位贡献者.
* 关闭了1,136个问题,276个打开问题.
* 关闭了566个PR,5个打开的PR.
* 39次发布.
* 在NuGet上有122,795次下载.
甚至在第一个版本发布之前就有了非常好的需求.
## 路线图
首要任务是完成文档,因为框架功能和模块仍然缺少很多文档.然后,我们将根据标记的优先级继续在GitHub上解决问题.
请参阅[GitHub里程碑项目](https://github.com/abpframework/abp/milestones).
ABP是一个社区驱动的项目.因此,我们主要根据社区的反馈和需求确定问题的优先级.

BIN
docs/zh-Hans/Blog-Posts/2019-10-22 v1_0_Release/contribution-graph.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

86
docs/zh-Hans/Caching.md

@ -80,6 +80,92 @@ public class BookService : ITransientDependency
`IDistributedCache<BookCacheItem>` 的其他方法与ASP.NET Core的`IDistributedCache` 接口相同, 你可以参考 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed).
## `IDistributedCache<TCacheItem, TCacheKey>` 接口
`IDistributedCache<TCacheItem>` 接口默认了键是 `string` 类型 (如果你的键不是string类型需要进行手动类型转换). `IDistributedCache<TCacheItem, TCacheKey>` 将键的类型泛型化试图简化手动转换的操作.
### 使用示例
示例缓存项
````csharp
public class BookCacheItem
{
public string Name { get; set; }
public float Price { get; set; }
}
````
用法示例 (这里假设你的键类型是 `Guid`):
````csharp
public class BookService : ITransientDependency
{
private readonly IDistributedCache<BookCacheItem, Guid> _cache;
public BookService(IDistributedCache<BookCacheItem, Guid> cache)
{
_cache = cache;
}
public async Task<BookCacheItem> GetAsync(Guid bookId)
{
return await _cache.GetOrAddAsync(
bookId, //Guid type used as the cache key
async () => await GetBookFromDatabaseAsync(bookId),
() => new DistributedCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
}
);
}
private Task<BookCacheItem> GetBookFromDatabaseAsync(Guid bookId)
{
//TODO: get from database
}
}
````
* 示例服务中 `GetOrAddAsync()` 方法获取缓存的图书项.
* 我们采用了 `Guid` 做为键,在 `_cache_GetOrAddAsync()` 方法中传入 `Guid` 类型的bookid.
`IDistributedCache<TCacheItem, TCacheKey>` 在内部使用键对象的 `ToString()` 方法转换类型为string. 如果你的将复杂对象做为键,那么需要重写类的 `ToString` 方法.
示例:
````csharp
public class UserInOrganizationCacheKey
{
public Guid UserId { get; set; }
public Guid OrganizationId { get; set; }
//构建缓存key
public override string ToString()
{
return $"{UserId}_{OrganizationId}";
}
}
````
用法示例:
````csharp
public class BookService : ITransientDependency
{
private readonly IDistributedCache<UserCacheItem, UserInOrganizationCacheKey> _cache;
public BookService(
IDistributedCache<UserCacheItem, UserInOrganizationCacheKey> cache)
{
_cache = cache;
}
...
}
````
### DistributedCacheOptions
TODO

3
docs/zh-Hans/JavaScript/Dynamic-JavaScript-API-Clients.md

@ -0,0 +1,3 @@
## Dynamic JavaScript API Clients
TODO

3
docs/zh-Hans/Modules/Permission-Management.md

@ -0,0 +1,3 @@
# 权限管理模块
TODO

BIN
docs/zh-Hans/images/authorization-new-permission-ui-hierarcy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
docs/zh-Hans/images/authorization-new-permission-ui-localized.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/zh-Hans/images/authorization-new-permission-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/zh-Hans/images/create-aspnet-core-application.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
docs/zh-Hans/images/create-new-aspnet-core-application-v2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
docs/zh-Hans/images/select-empty-web-application-v2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

1
framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json

@ -6,6 +6,7 @@
"Switch": "switch",
"Name": "Name",
"SwitchTenantHint": "Leave the name field blank to switch to the host side.",
"SwitchTenant": "Switch tenant",
"NotSelected": "Not selected"
}
}

1
framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json

@ -6,6 +6,7 @@
"Switch": "değiştir",
"Name": "İsim",
"SwitchTenantHint": "Host tarafına geçmek için isim alanını boş bırakın.",
"SwitchTenant": "Müşteri değiştir",
"NotSelected": "Seçili değil"
}
}

5
framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hans.json

@ -2,11 +2,10 @@
"culture": "zh-Hans",
"texts": {
"GivenTenantIsNotAvailable": "给定的租户不可用: {0}",
"SwitchTenant": "切换租户",
"Name": "名称",
"SwitchTenantHint": "将name字段留空以切换到宿主端.",
"Tenant": "租户",
"Switch": "切换",
"Name": "名称",
"SwitchTenantHint": "将name字段留空以切换到宿主端.",
"NotSelected": "未选中"
}
}

37
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js

@ -16,11 +16,11 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
var _callbacks = [];
return {
add: function(callback) {
add: function (callback) {
_callbacks.push(callback);
},
triggerAll: function(thisObj, argumentList) {
triggerAll: function (thisObj, argumentList) {
for (var i = 0; i < _callbacks.length; i++) {
_callbacks[i].apply(thisObj, argumentList);
}
@ -69,7 +69,7 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
//TODO: data-ajaxForm comparison seems wrong!
if (_$form.attr('data-ajaxForm') === undefined || _$form.attr('data-ajaxForm') === false) {
_$form.abpAjaxForm();
}
}
if (_$form.attr('data-check-form-on-close') === undefined || _$form.attr('data-check-form-on-close') != 'false') {
_$form.needConfirmationOnUnsavedClose(_$modal);
@ -94,7 +94,18 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
});
_$modal.on('shown.bs.modal', function () {
_$modal.find('input:not([type=hidden]):first').focus();
//focuses first element if it's a typeable input.
var $firstVisibleInput = _$modal.find('input:not([type=hidden]):first');
if ($firstVisibleInput.hasClass("datepicker")) {
return; //don't pop-up date pickers...
}
var focusableInputs = ["text", "password", "email", "number", "search", "tel", "url"];
if (!focusableInputs.includes($firstVisibleInput.prop("type"))) {
return;
}
$firstVisibleInput.focus();
});
var modalClass = abp.modals[options.modalClass];
@ -136,44 +147,44 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
_$modal.modal('hide');
};
var _onClose = function(onCloseCallback) {
var _onClose = function (onCloseCallback) {
_onCloseCallbacks.add(onCloseCallback);
};
var _onResult = function(callback) {
var _onResult = function (callback) {
_onResultCallbacks.add(callback);
};
_publicApi = {
open: _open,
reopen: function() {
reopen: function () {
_open(_args);
},
close: _close,
getModalId: function() {
getModalId: function () {
return _modalId;
},
getModal: function() {
getModal: function () {
return _$modal;
},
getForm: function() {
getForm: function () {
return _$form;
},
getArgs: function() {
getArgs: function () {
return _args;
},
getOptions: function() {
getOptions: function () {
return _options;
},
setResult: function() {
setResult: function () {
_onResultCallbacks.triggerAll(_publicApi, arguments);
},

14
framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs

@ -19,13 +19,11 @@ namespace Volo.Abp.Caching
where TCacheItem : class
{
public DistributedCache(
IOptions<CacheOptions> cacheOption,
IOptions<DistributedCacheOptions> distributedCacheOption,
IOptions<AbpDistributedCacheOptions> distributedCacheOption,
IDistributedCache cache,
ICancellationTokenProvider cancellationTokenProvider,
IDistributedCacheSerializer serializer,
ICurrentTenant currentTenant) : base(
cacheOption: cacheOption,
distributedCacheOption: distributedCacheOption,
cache: cache,
cancellationTokenProvider: cancellationTokenProvider,
@ -62,12 +60,9 @@ namespace Volo.Abp.Caching
protected DistributedCacheEntryOptions DefaultCacheOptions;
private readonly AbpDistributedCacheOptions _cacheOption;
private readonly AbpDistributedCacheOptions _distributedCacheOption;
public DistributedCache(
IOptions<AbpDistributedCacheOptions> cacheOption,
IOptions<AbpDistributedCacheOptions> distributedCacheOption,
IDistributedCache cache,
ICancellationTokenProvider cancellationTokenProvider,
@ -75,7 +70,6 @@ namespace Volo.Abp.Caching
ICurrentTenant currentTenant)
{
_distributedCacheOption = distributedCacheOption.Value;
_cacheOption = cacheOption.Value;
Cache = cache;
CancellationTokenProvider = cancellationTokenProvider;
Logger = NullLogger<DistributedCache<TCacheItem, TCacheKey>>.Instance;
@ -88,7 +82,7 @@ namespace Volo.Abp.Caching
}
protected virtual string NormalizeKey(TCacheKey key)
{
var normalizedKey = "c:" + CacheName + ",k:" + _cacheOption.KeyPrefix + key.ToString();
var normalizedKey = "c:" + CacheName + ",k:" + _distributedCacheOption.KeyPrefix + key.ToString();
if (!IgnoreMultiTenancy && CurrentTenant.Id.HasValue)
{
@ -100,7 +94,7 @@ namespace Volo.Abp.Caching
protected virtual DistributedCacheEntryOptions GetDefaultCacheEntryOptions()
{
foreach (var configure in _cacheOption.CacheConfigurators)
foreach (var configure in _distributedCacheOption.CacheConfigurators)
{
var options = configure.Invoke(CacheName);
if (options != null)
@ -108,7 +102,7 @@ namespace Volo.Abp.Caching
return options;
}
}
return _cacheOption.GlobalCacheEntryOptions;
return _distributedCacheOption.GlobalCacheEntryOptions;
}
protected virtual void SetDefaultOptions()

1
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs

@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Domain;
using Volo.Abp.Modularity;

4
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/zh-Hans.json

@ -1,5 +1,5 @@
{
"culture": "zh-Hans",
"culture": "zh-Hans",
"texts": {
"'{0}' and '{1}' do not match.": "'{0}'与'{1}'不匹配.",
"The {0} field is not a valid credit card number.": "字段{0}不是有效的信用卡号码.",
@ -31,4 +31,4 @@
"ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "字段{0}不是有效的完全限定的http,https或ftp URL.",
"ThisFieldIsInvalid.": "字段是无效值."
}
}
}

2
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json

@ -23,7 +23,7 @@
"SavingWithThreeDot": "保存中...",
"Actions": "操作",
"Delete": "删除",
"Edit": "修改",
"Edit": "编辑",
"Refresh": "刷新",
"ProcessingWithThreeDot": "处理中...",
"LoadingWithThreeDot": "加载中...",

2
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hans.json

@ -2,6 +2,6 @@
"culture": "zh-Hans",
"texts": {
"BirthDate": "生日",
"Value1": "Value One"
"Value1": "值1"
}
}

2
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hans.json

@ -1,4 +1,4 @@
{
{
"culture": "zh-Hans",
"texts": {
"USA": "美国",

2
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hans.json

@ -1,4 +1,4 @@
{
{
"culture": "zh-Hans",
"texts": {
"ThisFieldIsRequired": "此字段是必填字段",

2
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hans.json

@ -1,4 +1,4 @@
{
{
"culture": "zh-Hans",
"texts": {
"Hello <b>{0}</b>.": "你好 <b>{0}</b>.",

2
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json

@ -14,6 +14,8 @@
"Login": "Login",
"Cancel": "Cancel",
"Register": "Register",
"AreYouANewUser": "Are you a new user?",
"AlreadyRegistered": "Already registered?",
"InvalidLoginRequest": "Invalid login request",
"ThereAreNoLoginSchemesConfiguredForThisClient": "There are no login schemes configured for this client.",
"LogInUsingYourProviderAccount": "Log in using your {0} account",

1
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json

@ -14,6 +14,7 @@
"Login": "Giriş yap",
"Cancel": "İptal",
"Register": "Kayıt ol",
"AreYouANewUser": "Yeni bir kullanıcı mısınız?",
"InvalidLoginRequest": "Başarısız giriş isteği",
"ThereAreNoLoginSchemesConfiguredForThisClient": "Bu client için konfigüre edilmiş giriş şeması bulunamadı.",
"LogInUsingYourProviderAccount": "{0} hesabınızla giriş yapın.",

21
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json

@ -14,8 +14,27 @@
"Login": "登录",
"Cancel": "取消",
"Register": "注册",
"AreYouANewUser": "你是新用户吗?",
"AlreadyRegistered": "已经注册过了?",
"InvalidLoginRequest": "登录请求无效",
"ThereAreNoLoginSchemesConfiguredForThisClient": "没有为此客户端配置登录方案.",
"LogInUsingYourProviderAccount": "使用你的{0}帐户登录"
"LogInUsingYourProviderAccount": "使用你的{0}帐户登录",
"DisplayName:CurrentPassword": "当前密码",
"DisplayName:NewPassword": "新密码",
"DisplayName:NewPasswordConfirm": "确认新密码",
"PasswordChangedMessage": "你的密码已修改成功.",
"DisplayName:UserName": "用户名",
"DisplayName:Email": "电子邮件",
"DisplayName:Name": "名字",
"DisplayName:Surname": "姓",
"DisplayName:Password": "密码",
"DisplayName:EmailAddress": "电子邮件地址",
"DisplayName:PhoneNumber": "电话号码",
"PersonalSettings": "个人设置",
"PersonalSettingsSaved": "个人设置已保存",
"PasswordChanged": "修改密码",
"NewPasswordConfirmFailed": "请确认新密码",
"Manage": "管理",
"ManageYourProfile": "管理你的个人资料"
}
}

2
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml

@ -11,7 +11,7 @@
@if (string.Equals(await SettingProvider.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled), "true", StringComparison.OrdinalIgnoreCase))
{
<strong>
Are you new user?
@L["AreYouANewUser"]
<a href="@Url.Page("./Register", new {returnUrl = Model.ReturnUrl, returnUrlHash = Model.ReturnUrlHash})" class="text-decoration-none">@L["Register"]</a>
</strong>
}

2
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml

@ -6,7 +6,7 @@
<div class="card-body p-5">
<h4>@L["Register"]</h4>
<strong>
Already registered?
@L["AlreadyRegistered"]
<a href="@Url.Page("./Login", new {returnUrl = Model.ReturnUrl, returnUrlHash = Model.ReturnUrlHash})" class="text-decoration-none">@L["Login"]</a>
</strong>
<form method="post" class="mt-4">

2
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json

@ -7,7 +7,7 @@
"Permission:Tags": "标签",
"Permission:Comments": "评论",
"Permission:Management": "管理",
"Permission:Edit": "修改",
"Permission:Edit": "编辑",
"Permission:Create": "创建",
"Permission:Delete": "删除"
}

7
modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml

@ -1,18 +1,19 @@
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor
@model Volo.Blogging.Pages.Blog.Posts.NewModel
@using Volo.Blogging.Pages.Blog.Posts
@model NewModel
@inherits Volo.Blogging.Pages.Blog.BloggingPage
@{
ViewBag.PageTitle = "Blog";
}
@section styles {
<abp-style-bundle @*name="@typeof(NewModel).FullName" *@>
<abp-style-bundle name="@typeof(NewModel).FullName" >
<abp-style type="@typeof(TuiEditorStyleContributor)" />
<abp-style src="/Pages/Blog/Posts/new.css" />
</abp-style-bundle>
}
@section scripts {
<abp-script-bundle @*name="@typeof(NewModel).FullName" *@>
<abp-script-bundle name="@typeof(NewModel).FullName" >
<abp-script type="@typeof(TuiEditorScriptContributor)" />
<abp-script src="/Pages/Blog/Posts/new.js" />
</abp-script-bundle>

4
modules/docs/app/VoloDocs.Migrator/Dockerfile

@ -1,8 +1,8 @@
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY . .
WORKDIR "/src/modules/docs/app/VoloDocs.Migrator"

4
modules/docs/app/VoloDocs.Web/Dockerfile

@ -1,8 +1,8 @@
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY . .
WORKDIR "/src/modules/docs/app/VoloDocs.Web"

6
modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hans.json

@ -1,10 +1,10 @@
{
"culture": "zh-Hans",
"texts": {
"DocsTitle": "Volo文档",
"DocsTitle": "VoloDocs",
"WelcomeVoloDocs": "欢迎使用VoloDocs!",
"NoProjectWarning": "当前没有定义的项目!",
"NoProjectWarning": "当前没有定义的项目!",
"CreateYourFirstProject": "点击这里开始你的第一个项目",
"NoProject": "没有项目!"
"NoProject": "没有项目!"
}
}

4
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json

@ -1,5 +1,5 @@
{
"culture": "zh-Hans",
"culture": "zh-Hans",
"texts": {
"Permission:DocumentManagement": "文档管理",
"Permission:Projects": "项目",
@ -29,4 +29,4 @@
"DisplayName:GitHubAccessToken": "GitHub访问令牌",
"DisplayName:GitHubUserAgent": "GitHub用户代理"
}
}
}

3
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json

@ -14,6 +14,7 @@
"NoProjectWarning": "还没有项目!",
"DocumentNotFound": "找不到请求的文档!",
"NavigationDocumentNotFound": "这个版本没有导航文件!",
"DocumentNotFoundInSelectedLanguage": "本文档不适用于所选语言, 将以默认语言显示文档."
"DocumentNotFoundInSelectedLanguage": "本文档不适用于所选语言, 将以默认语言显示文档.",
"FilterTopics": "过滤主题"
}
}

3
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json

@ -1,6 +1,7 @@
{
"culture": "tr",
"texts": {
"Features": "Özellikler"
"Features": "Özellikler",
"NoFeatureFoundMessage": "Hiç özellik yok."
}
}

5
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json

@ -1,6 +1,7 @@
{
"culture": "zh-Hans",
"texts": {
"Features": "特性"
"Features": "功能",
"NoFeatureFoundMessage": "没有可用的功能."
}
}
}

6
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs

@ -1,9 +1,13 @@
using Volo.Abp.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
{
public class IdentityUserUpdateDto : IdentityUserCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
[StringLength(IdentityUserConsts.MaxPasswordLength)]
public string Password { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

7
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs

@ -72,6 +72,13 @@ namespace Volo.Abp.Identity
(await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
(await _userManager.UpdateAsync(user)).CheckErrors();
if (!input.Password.IsNullOrEmpty())
{
(await _userManager.RemovePasswordAsync(user)).CheckErrors();
(await _userManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);

4
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json

@ -1,5 +1,5 @@
{
"culture": "zh-Hans",
"culture": "zh-Hans",
"texts": {
"Menu:IdentityManagement": "身份认证管理",
"Users": "用户",
@ -73,4 +73,4 @@
"Permission:UserManagement": "用户管理",
"Permission:UserLookup": "用户查询"
}
}
}

4
modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebAutoMapperProfile.cs

@ -1,4 +1,5 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Volo.Abp.Identity.Web.Pages.Identity.Roles;
using CreateUserModalModel = Volo.Abp.Identity.Web.Pages.Identity.Users.CreateModalModel;
using EditUserModalModel = Volo.Abp.Identity.Web.Pages.Identity.Users.EditModalModel;
@ -16,7 +17,8 @@ namespace Volo.Abp.Identity.Web
private void CreateUserMappings()
{
//List
CreateMap<IdentityUserDto, EditUserModalModel.UserInfoViewModel>();
CreateMap<IdentityUserDto, EditUserModalModel.UserInfoViewModel>()
.Ignore(x => x.Password);
//CreateModal
CreateMap<CreateUserModalModel.UserInfoViewModel, IdentityUserCreateDto>()

8
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml

@ -1,11 +1,14 @@
@page
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@using Volo.Abp.Identity
@using Volo.Abp.Identity.Localization
@using Volo.Abp.Identity.Web.Navigation
@using Volo.Abp.Identity.Web.Pages.Identity.Roles
@model IndexModel
@inject IHtmlLocalizer<IdentityResource> L
@inject IAuthorizationService Authorization
@inject IPageLayout PageLayout
@{
PageLayout.Content.Title = L["Roles"].Value;
@ -30,7 +33,10 @@
<abp-card-title>@L["Roles"]</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-right">
<abp-button button-type="Primary" name="CreateRole" text="@L["NewRole"].Value" icon="plus" />
@if (await Authorization.IsGrantedAsync(IdentityPermissions.Roles.Create))
{
<abp-button button-type="Primary" name="CreateRole" text="@L["NewRole"].Value" icon="plus" />
}
</abp-column>
</abp-row>
</abp-card-header>

1
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml

@ -19,6 +19,7 @@
<abp-input asp-for="UserInfo.UserName" />
<abp-input asp-for="UserInfo.Name" />
<abp-input asp-for="UserInfo.Surname" />
<abp-input asp-for="UserInfo.Password" />
<abp-input asp-for="UserInfo.Email" />
<abp-input asp-for="UserInfo.PhoneNumber" />
<abp-input asp-for="UserInfo.LockoutEnabled" />

4
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs

@ -72,6 +72,10 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
[StringLength(IdentityUserConsts.MaxSurnameLength)]
public string Surname { get; set; }
[StringLength(IdentityUserConsts.MaxPasswordLength)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[EmailAddress]
[StringLength(IdentityUserConsts.MaxEmailLength)]

1
modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs

@ -100,6 +100,7 @@ namespace Volo.Abp.Identity
LockoutEnabled = true,
TwoFactorEnabled = true,
PhoneNumber = CreateRandomPhoneNumber(),
Password = "123qwe4R*",
Email = CreateRandomEmail(),
RoleNames = new[] { "admin", "moderator" },
ConcurrencyStamp = johnNash.ConcurrencyStamp,

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json

@ -7,4 +7,4 @@
"SelectAllInAllTabs": "授予所有权限",
"SelectAllInThisTab": "全选"
}
}
}

11
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json

@ -1,6 +1,7 @@
{
"culture": "zh-Hans",
"texts": {
"Settings": "设置"
}
}
"culture": "zh-Hans",
"texts": {
"Settings": "设置",
"SuccessfullySaved": "保存成功"
}
}

2
modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs

@ -30,7 +30,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore
b.HasMany(u => u.ConnectionStrings).WithOne().HasForeignKey(uc => uc.TenantId).IsRequired();
b.HasIndex(u => u.Name).IsUnique();
b.HasIndex(u => u.Name);
});
builder.Entity<TenantConnectionString>(b =>

8
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml

@ -1,11 +1,14 @@
@page
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@using Volo.Abp.TenantManagement
@using Volo.Abp.TenantManagement.Localization
@using Volo.Abp.TenantManagement.Web.Navigation
@using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
@model IndexModel
@inject IHtmlLocalizer<AbpTenantManagementResource> L
@inject IAuthorizationService Authorization
@inject IPageLayout PageLayout
@{
PageLayout.Content.Title = L["Tenants"].Value;
@ -26,7 +29,10 @@
<abp-card-title>@L["Tenants"]</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-right">
<abp-button button-type="Primary" name="CreateTenant" icon="plus" text="@L["NewTenant"].Value" />
@if (await Authorization.IsGrantedAsync(TenantManagementPermissions.Tenants.Create))
{
<abp-button button-type="Primary" name="CreateTenant" icon="plus" text="@L["NewTenant"].Value" />
}
</abp-column>
</abp-row>
</abp-card-header>

24
npm/abp-package-update-script.js

@ -0,0 +1,24 @@
const glob = require('glob');
var path = require('path');
const childProcess = require('child_process');
const check = pkgJsonPath => {
try {
return childProcess.execSync(`ncu "/^@abp.*$/" --packageFile ${pkgJsonPath} -u`).toString();
} catch (error) {
console.log('exec error: ' + error.message);
process.exit(error.status);
}
};
const folder = process.argv[2] || '.';
glob(folder + '/**/package.json', {}, (er, files) => {
files.forEach(file => {
if (file.includes('node_modules')) {
return;
}
console.log(check(file));
});
});

2
npm/lerna.json

@ -1,5 +1,5 @@
{
"version": "0.9.2",
"version": "1.0.2",
"packages": [
"ng-packs/dist/*",
"packs/*"

16
npm/ng-packs/.vscode/settings.json

@ -5,18 +5,18 @@
"tslint.rulesDirectory": "../node_modules/codelyzer",
"typescript.tsdk": "../node_modules/typescript/lib",
"workbench.colorCustomizations": {
"activityBar.background": "#90164b",
"activityBar.background": "#258ecd",
"activityBar.foreground": "#e7e7e7",
"activityBar.inactiveForeground": "#e7e7e799",
"activityBarBadge.background": "#0e1c04",
"activityBarBadge.foreground": "#e7e7e7",
"titleBar.activeBackground": "#640f34",
"titleBar.inactiveBackground": "#640f3499",
"activityBarBadge.background": "#f0aed7",
"activityBarBadge.foreground": "#15202b",
"titleBar.activeBackground": "#1d70a2",
"titleBar.inactiveBackground": "#1d70a299",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveForeground": "#e7e7e799",
"statusBar.background": "#640f34",
"statusBarItem.hoverBackground": "#90164b",
"statusBar.background": "#1d70a2",
"statusBarItem.hoverBackground": "#258ecd",
"statusBar.foreground": "#e7e7e7"
},
"peacock.color": "#640f34"
"peacock.color": "#1D70A2"
}

2
npm/ng-packs/angular.json

@ -418,7 +418,7 @@
},
"root": "apps/dev-app",
"sourceRoot": "apps/dev-app/src",
"prefix": "app",
"prefix": "abp",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",

11
npm/ng-packs/apps/dev-app/src/app/app.module.ts

@ -3,7 +3,7 @@ import { LAYOUTS } from '@abp/ng.theme.basic';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgxsReduxDevtoolsPluginModule } from '@ngxs/devtools-plugin';
import { NgxsLoggerPluginModule } from '@ngxs/logger-plugin';
import { NgxsModule } from '@ngxs/store';
import { OAuthModule } from 'angular-oauth2-oidc';
import { environment } from '../environments/environment';
@ -16,6 +16,8 @@ import { IdentityConfigModule } from '@abp/ng.identity.config';
import { TenantManagementConfigModule } from '@abp/ng.tenant-management.config';
import { SettingManagementConfigModule } from '@abp/ng.setting-management.config';
const LOGGERS = [NgxsLoggerPluginModule.forRoot({ disabled: false })];
@NgModule({
declarations: [AppComponent],
imports: [
@ -26,6 +28,8 @@ import { SettingManagementConfigModule } from '@abp/ng.setting-management.config
},
}),
ThemeSharedModule.forRoot(),
OAuthModule.forRoot(),
NgxsModule.forRoot([]),
AccountConfigModule.forRoot({ redirectUrl: '/' }),
IdentityConfigModule,
TenantManagementConfigModule,
@ -35,10 +39,7 @@ import { SettingManagementConfigModule } from '@abp/ng.setting-management.config
AppRoutingModule,
SharedModule,
OAuthModule.forRoot(),
NgxsModule.forRoot([]),
NgxsReduxDevtoolsPluginModule.forRoot(),
...(environment.production ? [] : LOGGERS),
],
bootstrap: [AppComponent],
})

30
npm/ng-packs/apps/dev-app/src/app/home/home.component.html

@ -1,15 +1,19 @@
<div class="card">
<div class="card-header">{{ '::Welcome' | abpLocalization }}</div>
<div class="card-body">
<p>
{{ '::LongWelcomeMessage' | abpLocalization }}
</p>
<p *ngIf="!hasLoggedIn">
<a routerLink="/account/login" [state]="{ redirectUrl: '/' }" class="btn btn-primary" role="button"
><i class="fa fa-sign-in mr-1"></i>{{ 'AbpIdentity::Login' | abpLocalization }}</a
>
</p>
<hr />
<p class="text-right"><a href="https://abp.io?ref=tmpl" target="_blank">abp.io</a></p>
<div id="AbpContentToolbar"></div>
<div class="jumbotron text-center">
<h1>{{ '::Welcome' | abpLocalization }}</h1>
<div class="row">
<div class="col-md-6 mx-auto">
<p>{{ '::LongWelcomeMessage' | abpLocalization }}</p>
<hr class="my-4" />
</div>
</div>
<a href="https://abp.io?ref=tmpl" target="_blank" class="btn btn-primary px-4">abp.io</a>
<a
*ngIf="!hasLoggedIn"
routerLink="/account/login"
[state]="{ redirectUrl: '/' }"
class="px-4 btn btn-primary ml-1"
role="button"
><i class="fa fa-sign-in"></i> {{ 'AbpIdentity::Login' | abpLocalization }}</a
>
</div>

2
npm/ng-packs/apps/dev-app/src/app/home/home.component.ts

@ -2,7 +2,7 @@ import { Component } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc';
@Component({
selector: 'app-home',
selector: 'abp-home',
templateUrl: './home.component.html',
})
export class HomeComponent {

2
npm/ng-packs/apps/dev-app/src/index.html

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
</head>
<body>
<body class="abp-application-layout bg-light">
<app-root></app-root>
</body>
</html>

2
npm/ng-packs/dist/account-config/README.md

@ -1 +1 @@
# @abp/ng.account.config
# @abp/ng.account.config

133
npm/ng-packs/dist/account-config/abp-ng.account.config.metadata.json

@ -1,132 +1 @@
{
"__symbolic": "module",
"version": 4,
"metadata": {
"AccountConfigService": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Injectable",
"line": 4,
"character": 1
},
"arguments": [{ "providedIn": "root" }]
}
],
"members": {
"__ctor__": [
{
"__symbolic": "constructor",
"parameters": [
{ "__symbolic": "reference", "module": "@angular/router", "name": "Router", "line": 8, "character": 30 },
{ "__symbolic": "reference", "module": "@abp/ng.core", "name": "RestService", "line": 8, "character": 59 }
]
}
]
},
"statics": { "ngInjectableDef": {} }
},
"AccountConfigOptions": { "__symbolic": "interface" },
"accountOptionsFactory": { "__symbolic": "function", "parameters": ["options"], "value": { "redirectUrl": "/" } },
"ACCOUNT_OPTIONS": {
"__symbolic": "new",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "InjectionToken",
"line": 16,
"character": 35
},
"arguments": ["ACCOUNT_OPTIONS"]
},
"AccountConfigModule": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "NgModule",
"line": 18,
"character": 1
},
"arguments": [
{
"imports": [
{
"__symbolic": "reference",
"module": "@abp/ng.core",
"name": "CoreModule",
"line": 19,
"character": 12
},
{
"__symbolic": "reference",
"module": "@abp/ng.theme.shared",
"name": "ThemeSharedModule",
"line": 19,
"character": 24
}
],
"providers": [
{
"provide": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "APP_INITIALIZER",
"line": 20,
"character": 25
},
"multi": true,
"deps": [{ "__symbolic": "reference", "name": "AccountConfigService" }],
"useFactory": {
"__symbolic": "reference",
"module": "@abp/ng.core",
"name": "noop",
"line": 20,
"character": 97
}
}
]
}
]
}
],
"members": {},
"statics": {
"forRoot": {
"__symbolic": "function",
"parameters": ["options"],
"defaults": [{}],
"value": {
"ngModule": { "__symbolic": "reference", "name": "AccountConfigModule" },
"providers": [
{
"provide": { "__symbolic": "reference", "name": "ACCOUNT_OPTIONS" },
"useValue": { "__symbolic": "reference", "name": "options" }
},
{
"provide": "ACCOUNT_OPTIONS",
"useFactory": { "__symbolic": "reference", "name": "accountOptionsFactory" },
"deps": [{ "__symbolic": "reference", "name": "ACCOUNT_OPTIONS" }]
}
]
}
}
}
}
},
"origins": {
"AccountConfigService": "./lib/services/account-config.service",
"AccountConfigOptions": "./lib/account-config.module",
"accountOptionsFactory": "./lib/account-config.module",
"ACCOUNT_OPTIONS": "./lib/account-config.module",
"AccountConfigModule": "./lib/account-config.module"
},
"importAs": "@abp/ng.account.config"
}
{"__symbolic":"module","version":4,"metadata":{"AccountConfigService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"Router","line":8,"character":30},{"__symbolic":"reference","module":"@abp/ng.core","name":"RestService","line":8,"character":59}]}]},"statics":{"ngInjectableDef":{}}},"AccountConfigOptions":{"__symbolic":"interface"},"accountOptionsFactory":{"__symbolic":"function","parameters":["options"],"value":{"redirectUrl":"/"}},"ACCOUNT_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":16,"character":35},"arguments":["ACCOUNT_OPTIONS"]},"AccountConfigModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":18,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@abp/ng.core","name":"CoreModule","line":19,"character":12},{"__symbolic":"reference","module":"@abp/ng.theme.shared","name":"ThemeSharedModule","line":19,"character":24}],"providers":[{"provide":{"__symbolic":"reference","module":"@angular/core","name":"APP_INITIALIZER","line":20,"character":25},"multi":true,"deps":[{"__symbolic":"reference","name":"AccountConfigService"}],"useFactory":{"__symbolic":"reference","module":"@abp/ng.core","name":"noop","line":20,"character":97}}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"defaults":[{}],"value":{"ngModule":{"__symbolic":"reference","name":"AccountConfigModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ACCOUNT_OPTIONS"},"useValue":{"__symbolic":"reference","name":"options"}},{"provide":"ACCOUNT_OPTIONS","useFactory":{"__symbolic":"reference","name":"accountOptionsFactory"},"deps":[{"__symbolic":"reference","name":"ACCOUNT_OPTIONS"}]}]}}}}},"origins":{"AccountConfigService":"./lib/services/account-config.service","AccountConfigOptions":"./lib/account-config.module","accountOptionsFactory":"./lib/account-config.module","ACCOUNT_OPTIONS":"./lib/account-config.module","AccountConfigModule":"./lib/account-config.module"},"importAs":"@abp/ng.account.config"}

1
npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.js

@ -418,6 +418,7 @@
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}

2
npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.js.map

File diff suppressed because one or more lines are too long

1
npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.min.js

@ -61,6 +61,7 @@
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}

2
npm/ng-packs/dist/account-config/bundles/abp-ng.account.config.umd.min.js.map

File diff suppressed because one or more lines are too long

2
npm/ng-packs/dist/account-config/esm2015/abp-ng.account.config.js

@ -6,4 +6,4 @@
* Generated bundle index. Do not edit.
*/
export { AccountConfigService, accountOptionsFactory, ACCOUNT_OPTIONS, AccountConfigModule } from './public-api';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmFjY291bnQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5hY2NvdW50LmNvbmZpZy8iLCJzb3VyY2VzIjpbImFicC1uZy5hY2NvdW50LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsa0dBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmFjY291bnQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5hY2NvdW50LmNvbmZpZy8iLCJzb3VyY2VzIjpbImFicC1uZy5hY2NvdW50LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsa0dBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19

3
npm/ng-packs/dist/account-config/esm2015/lib/services/account-config.service.js

@ -24,6 +24,7 @@ export class AccountConfigService {
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}
@ -59,4 +60,4 @@ if (false) {
*/
AccountConfigService.prototype.restService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuYWNjb3VudC5jb25maWcvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYWNjb3VudC1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLekMsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFDL0IsWUFBb0IsTUFBYyxFQUFVLFdBQXdCO1FBQWhELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsRSxZQUFZLENBQUM7WUFDWCxJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLElBQUksRUFBRSxTQUFTO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLGlDQUF5QjtZQUMvQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDN0Q7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUFmRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFKUSxNQUFNO1lBRk8sV0FBVzs7Ozs7Ozs7SUFRbkIsc0NBQXNCOzs7OztJQUFFLDJDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVMYXlvdXRUeXBlLCBSZXN0U2VydmljZSwgYWRkQWJwUm91dGVzIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50Q29uZmlnU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7XG4gICAgYWRkQWJwUm91dGVzKHtcbiAgICAgIG5hbWU6ICdBYnBBY2NvdW50OjpNZW51OkFjY291bnQnLFxuICAgICAgcGF0aDogJ2FjY291bnQnLFxuICAgICAgaW52aXNpYmxlOiB0cnVlLFxuICAgICAgbGF5b3V0OiBlTGF5b3V0VHlwZS5hcHBsaWNhdGlvbixcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHsgcGF0aDogJ2xvZ2luJywgbmFtZTogJ0FicEFjY291bnQ6OkxvZ2luJywgb3JkZXI6IDEgfSxcbiAgICAgICAgeyBwYXRoOiAncmVnaXN0ZXInLCBuYW1lOiAnQWJwQWNjb3VudDo6UmVnaXN0ZXInLCBvcmRlcjogMiB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuYWNjb3VudC5jb25maWcvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYWNjb3VudC1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLekMsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFDL0IsWUFBb0IsTUFBYyxFQUFVLFdBQXdCO1FBQWhELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsRSxZQUFZLENBQUM7WUFDWCxJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLElBQUksRUFBRSxTQUFTO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLGlDQUF5QjtZQUMvQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzVELEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2FBQzVFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBaEJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQUpRLE1BQU07WUFGTyxXQUFXOzs7Ozs7OztJQVFuQixzQ0FBc0I7Ozs7O0lBQUUsMkNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZUxheW91dFR5cGUsIFJlc3RTZXJ2aWNlLCBhZGRBYnBSb3V0ZXMgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRDb25maWdTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UpIHtcbiAgICBhZGRBYnBSb3V0ZXMoe1xuICAgICAgbmFtZTogJ0FicEFjY291bnQ6Ok1lbnU6QWNjb3VudCcsXG4gICAgICBwYXRoOiAnYWNjb3VudCcsXG4gICAgICBpbnZpc2libGU6IHRydWUsXG4gICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgeyBwYXRoOiAnbG9naW4nLCBuYW1lOiAnQWJwQWNjb3VudDo6TG9naW4nLCBvcmRlcjogMSB9LFxuICAgICAgICB7IHBhdGg6ICdyZWdpc3RlcicsIG5hbWU6ICdBYnBBY2NvdW50OjpSZWdpc3RlcicsIG9yZGVyOiAyIH0sXG4gICAgICAgIHsgcGF0aDogJ21hbmFnZS1wcm9maWxlJywgbmFtZTogJ0FicEFjY291bnQ6Ok1hbmFnZVlvdXJQcm9maWxlJywgb3JkZXI6IDMgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==

2
npm/ng-packs/dist/account-config/esm5/abp-ng.account.config.js

@ -6,4 +6,4 @@
* Generated bundle index. Do not edit.
*/
export { AccountConfigService, accountOptionsFactory, ACCOUNT_OPTIONS, AccountConfigModule } from './public-api';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmFjY291bnQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5hY2NvdW50LmNvbmZpZy8iLCJzb3VyY2VzIjpbImFicC1uZy5hY2NvdW50LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsa0dBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmFjY291bnQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5hY2NvdW50LmNvbmZpZy8iLCJzb3VyY2VzIjpbImFicC1uZy5hY2NvdW50LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsa0dBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19

3
npm/ng-packs/dist/account-config/esm5/lib/services/account-config.service.js

@ -20,6 +20,7 @@ var AccountConfigService = /** @class */ (function() {
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}
@ -59,4 +60,4 @@ if (false) {
*/
AccountConfigService.prototype.restService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuYWNjb3VudC5jb25maWcvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYWNjb3VudC1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekM7SUFJRSw4QkFBb0IsTUFBYyxFQUFVLFdBQXdCO1FBQWhELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsRSxZQUFZLENBQUM7WUFDWCxJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLElBQUksRUFBRSxTQUFTO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLGlDQUF5QjtZQUMvQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDN0Q7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztnQkFmRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQUpRLE1BQU07Z0JBRk8sV0FBVzs7OytCQUFqQztDQW9CQyxBQWhCRCxJQWdCQztTQWJZLG9CQUFvQjs7Ozs7O0lBQ25CLHNDQUFzQjs7Ozs7SUFBRSwyQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlTGF5b3V0VHlwZSwgUmVzdFNlcnZpY2UsIGFkZEFicFJvdXRlcyB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudENvbmZpZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSkge1xuICAgIGFkZEFicFJvdXRlcyh7XG4gICAgICBuYW1lOiAnQWJwQWNjb3VudDo6TWVudTpBY2NvdW50JyxcbiAgICAgIHBhdGg6ICdhY2NvdW50JyxcbiAgICAgIGludmlzaWJsZTogdHJ1ZSxcbiAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7IHBhdGg6ICdsb2dpbicsIG5hbWU6ICdBYnBBY2NvdW50OjpMb2dpbicsIG9yZGVyOiAxIH0sXG4gICAgICAgIHsgcGF0aDogJ3JlZ2lzdGVyJywgbmFtZTogJ0FicEFjY291bnQ6OlJlZ2lzdGVyJywgb3JkZXI6IDIgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuYWNjb3VudC5jb25maWcvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYWNjb3VudC1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekM7SUFJRSw4QkFBb0IsTUFBYyxFQUFVLFdBQXdCO1FBQWhELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsRSxZQUFZLENBQUM7WUFDWCxJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLElBQUksRUFBRSxTQUFTO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLGlDQUF5QjtZQUMvQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzVELEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2FBQzVFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0JBaEJGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBSlEsTUFBTTtnQkFGTyxXQUFXOzs7K0JBQWpDO0NBcUJDLEFBakJELElBaUJDO1NBZFksb0JBQW9COzs7Ozs7SUFDbkIsc0NBQXNCOzs7OztJQUFFLDJDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVMYXlvdXRUeXBlLCBSZXN0U2VydmljZSwgYWRkQWJwUm91dGVzIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50Q29uZmlnU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7XG4gICAgYWRkQWJwUm91dGVzKHtcbiAgICAgIG5hbWU6ICdBYnBBY2NvdW50OjpNZW51OkFjY291bnQnLFxuICAgICAgcGF0aDogJ2FjY291bnQnLFxuICAgICAgaW52aXNpYmxlOiB0cnVlLFxuICAgICAgbGF5b3V0OiBlTGF5b3V0VHlwZS5hcHBsaWNhdGlvbixcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHsgcGF0aDogJ2xvZ2luJywgbmFtZTogJ0FicEFjY291bnQ6OkxvZ2luJywgb3JkZXI6IDEgfSxcbiAgICAgICAgeyBwYXRoOiAncmVnaXN0ZXInLCBuYW1lOiAnQWJwQWNjb3VudDo6UmVnaXN0ZXInLCBvcmRlcjogMiB9LFxuICAgICAgICB7IHBhdGg6ICdtYW5hZ2UtcHJvZmlsZScsIG5hbWU6ICdBYnBBY2NvdW50OjpNYW5hZ2VZb3VyUHJvZmlsZScsIG9yZGVyOiAzIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=

136
npm/ng-packs/dist/account-config/fesm2015/abp-ng.account.config.js

@ -8,55 +8,48 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared';
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class AccountConfigService {
/**
* @param {?} router
* @param {?} restService
*/
constructor(router, restService) {
this.router = router;
this.restService = restService;
addAbpRoutes({
name: 'AbpAccount::Menu:Account',
path: 'account',
invisible: true,
layout: 'application' /* application */,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
],
});
}
/**
* @param {?} router
* @param {?} restService
*/
constructor(router, restService) {
this.router = router;
this.restService = restService;
addAbpRoutes({
name: 'AbpAccount::Menu:Account',
path: 'account',
invisible: true,
layout: "application" /* application */,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}
}
AccountConfigService.decorators = [
{
type: Injectable,
args: [
{
providedIn: 'root',
},
],
},
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];
/** @nocollapse */
AccountConfigService.ctorParameters = () => [{ type: Router }, { type: RestService }];
/** @nocollapse */ AccountConfigService.ngInjectableDef = ɵɵdefineInjectable({
factory: function AccountConfigService_Factory() {
return new AccountConfigService(ɵɵinject(Router), ɵɵinject(RestService));
},
token: AccountConfigService,
providedIn: 'root',
});
AccountConfigService.ctorParameters = () => [
{ type: Router },
{ type: RestService }
];
/** @nocollapse */ AccountConfigService.ngInjectableDef = ɵɵdefineInjectable({ factory: function AccountConfigService_Factory() { return new AccountConfigService(ɵɵinject(Router), ɵɵinject(RestService)); }, token: AccountConfigService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.router;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.restService;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.router;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.restService;
}
/**
@ -66,50 +59,45 @@ if (false) {
/**
* @record
*/
function AccountConfigOptions() {}
function AccountConfigOptions() { }
if (false) {
/** @type {?|undefined} */
AccountConfigOptions.prototype.redirectUrl;
/** @type {?|undefined} */
AccountConfigOptions.prototype.redirectUrl;
}
/**
* @param {?} options
* @return {?}
*/
function accountOptionsFactory(options) {
return Object.assign({ redirectUrl: '/' }, options);
return Object.assign({ redirectUrl: '/' }, options);
}
/** @type {?} */
const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');
const ɵ0 = noop;
class AccountConfigModule {
/**
* @param {?=} options
* @return {?}
*/
static forRoot(options = /** @type {?} */ ({})) {
return {
ngModule: AccountConfigModule,
providers: [
{ provide: ACCOUNT_OPTIONS, useValue: options },
{
provide: 'ACCOUNT_OPTIONS',
useFactory: accountOptionsFactory,
deps: [ACCOUNT_OPTIONS],
},
],
};
}
/**
* @param {?=} options
* @return {?}
*/
static forRoot(options = (/** @type {?} */ ({}))) {
return {
ngModule: AccountConfigModule,
providers: [
{ provide: ACCOUNT_OPTIONS, useValue: options },
{
provide: 'ACCOUNT_OPTIONS',
useFactory: accountOptionsFactory,
deps: [ACCOUNT_OPTIONS],
},
],
};
}
}
AccountConfigModule.decorators = [
{
type: NgModule,
args: [
{
imports: [CoreModule, ThemeSharedModule],
providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: ɵ0 }],
},
],
},
{ type: NgModule, args: [{
imports: [CoreModule, ThemeSharedModule],
providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: ɵ0 }],
},] }
];
/**

2
npm/ng-packs/dist/account-config/fesm2015/abp-ng.account.config.js.map

@ -1 +1 @@
{"version":3,"file":"abp-ng.account.config.js","sources":["ng://@abp/ng.account.config/lib/services/account-config.service.ts","ng://@abp/ng.account.config/lib/account-config.module.ts"],"sourcesContent":["import { eLayoutType, RestService, addAbpRoutes } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountConfigService {\n constructor(private router: Router, private restService: RestService) {\n addAbpRoutes({\n name: 'AbpAccount::Menu:Account',\n path: 'account',\n invisible: true,\n layout: eLayoutType.application,\n children: [\n { path: 'login', name: 'AbpAccount::Login', order: 1 },\n { path: 'register', name: 'AbpAccount::Register', order: 2 },\n ],\n });\n }\n}\n","import { CoreModule, noop } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AccountConfigService } from './services/account-config.service';\n\nexport interface AccountConfigOptions {\n redirectUrl?: string;\n}\n\nexport function accountOptionsFactory(options: AccountConfigOptions) {\n return {\n redirectUrl: '/',\n ...options,\n };\n}\n\nexport const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');\n\n@NgModule({\n imports: [CoreModule, ThemeSharedModule],\n providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: noop }],\n})\nexport class AccountConfigModule {\n static forRoot(options = {} as AccountConfigOptions): ModuleWithProviders {\n return {\n ngModule: AccountConfigModule,\n providers: [\n { provide: ACCOUNT_OPTIONS, useValue: options },\n {\n provide: 'ACCOUNT_OPTIONS',\n useFactory: accountOptionsFactory,\n deps: [ACCOUNT_OPTIONS],\n },\n ],\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,MAOa,oBAAoB;;;;;IAC/B,YAAoB,MAAc,EAAU,WAAwB;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;QAClE,YAAY,CAAC;YACX,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,MAAM;YACN,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;gBACtD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;aAC7D;SACF,CAAC,CAAC;KACJ;;;YAfF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;YAJQ,MAAM;YAFO,WAAW;;;;;;;;IAQnB,sCAAsB;;;;;IAAE,2CAAgC;;;;;;;ACRtE;;;AAKA,mCAEC;;;IADC,2CAAqB;;;;;;AAGvB,SAAgB,qBAAqB,CAAC,OAA6B;IACjE,uBACE,WAAW,EAAE,GAAG,IACb,OAAO,EACV;CACH;;AAED,MAAa,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;WAI6B,IAAI;AAErG,MAAa,mBAAmB;;;;;IAC9B,OAAO,OAAO,CAAC,OAAO,sBAAG,EAAE,EAAwB;QACjD,OAAO;YACL,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC/C;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,qBAAqB;oBACjC,IAAI,EAAE,CAAC,eAAe,CAAC;iBACxB;aACF;SACF,CAAC;KACH;;;YAjBF,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;gBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,IAAM,EAAE,CAAC;aACvG;;;;;;;;;;;;;;;"}
{"version":3,"file":"abp-ng.account.config.js","sources":["ng://@abp/ng.account.config/lib/services/account-config.service.ts","ng://@abp/ng.account.config/lib/account-config.module.ts"],"sourcesContent":["import { eLayoutType, RestService, addAbpRoutes } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountConfigService {\n constructor(private router: Router, private restService: RestService) {\n addAbpRoutes({\n name: 'AbpAccount::Menu:Account',\n path: 'account',\n invisible: true,\n layout: eLayoutType.application,\n children: [\n { path: 'login', name: 'AbpAccount::Login', order: 1 },\n { path: 'register', name: 'AbpAccount::Register', order: 2 },\n { path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },\n ],\n });\n }\n}\n","import { CoreModule, noop } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AccountConfigService } from './services/account-config.service';\n\nexport interface AccountConfigOptions {\n redirectUrl?: string;\n}\n\nexport function accountOptionsFactory(options: AccountConfigOptions) {\n return {\n redirectUrl: '/',\n ...options,\n };\n}\n\nexport const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');\n\n@NgModule({\n imports: [CoreModule, ThemeSharedModule],\n providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: noop }],\n})\nexport class AccountConfigModule {\n static forRoot(options = {} as AccountConfigOptions): ModuleWithProviders {\n return {\n ngModule: AccountConfigModule,\n providers: [\n { provide: ACCOUNT_OPTIONS, useValue: options },\n {\n provide: 'ACCOUNT_OPTIONS',\n useFactory: accountOptionsFactory,\n deps: [ACCOUNT_OPTIONS],\n },\n ],\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,MAOa,oBAAoB;;;;;IAC/B,YAAoB,MAAc,EAAU,WAAwB;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;QAClE,YAAY,CAAC;YACX,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,MAAM;YACN,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;gBACtD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;gBAC5D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;aAC5E;SACF,CAAC,CAAC;KACJ;;;YAhBF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;YAJQ,MAAM;YAFO,WAAW;;;;;;;;IAQnB,sCAAsB;;;;;IAAE,2CAAgC;;;;;;;ACRtE;;;AAKA,mCAEC;;;IADC,2CAAqB;;;;;;AAGvB,SAAgB,qBAAqB,CAAC,OAA6B;IACjE,uBACE,WAAW,EAAE,GAAG,IACb,OAAO,EACV;CACH;;AAED,MAAa,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;WAI6B,IAAI;AAErG,MAAa,mBAAmB;;;;;IAC9B,OAAO,OAAO,CAAC,OAAO,sBAAG,EAAE,EAAwB;QACjD,OAAO;YACL,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC/C;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,qBAAqB;oBACjC,IAAI,EAAE,CAAC,eAAe,CAAC;iBACxB;aACF;SACF,CAAC;KACH;;;YAjBF,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;gBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,IAAM,EAAE,CAAC;aACvG;;;;;;;;;;;;;;;"}

163
npm/ng-packs/dist/account-config/fesm5/abp-ng.account.config.js

@ -8,55 +8,46 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared';
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var AccountConfigService = /** @class */ (function() {
function AccountConfigService(router, restService) {
this.router = router;
this.restService = restService;
addAbpRoutes({
name: 'AbpAccount::Menu:Account',
path: 'account',
invisible: true,
layout: 'application' /* application */,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
],
});
}
AccountConfigService.decorators = [
{
type: Injectable,
args: [
{
providedIn: 'root',
},
],
},
];
/** @nocollapse */
AccountConfigService.ctorParameters = function() {
return [{ type: Router }, { type: RestService }];
};
/** @nocollapse */ AccountConfigService.ngInjectableDef = ɵɵdefineInjectable({
factory: function AccountConfigService_Factory() {
return new AccountConfigService(ɵɵinject(Router), ɵɵinject(RestService));
},
token: AccountConfigService,
providedIn: 'root',
});
return AccountConfigService;
})();
var AccountConfigService = /** @class */ (function () {
function AccountConfigService(router, restService) {
this.router = router;
this.restService = restService;
addAbpRoutes({
name: 'AbpAccount::Menu:Account',
path: 'account',
invisible: true,
layout: "application" /* application */,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
],
});
}
AccountConfigService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];
/** @nocollapse */
AccountConfigService.ctorParameters = function () { return [
{ type: Router },
{ type: RestService }
]; };
/** @nocollapse */ AccountConfigService.ngInjectableDef = ɵɵdefineInjectable({ factory: function AccountConfigService_Factory() { return new AccountConfigService(ɵɵinject(Router), ɵɵinject(RestService)); }, token: AccountConfigService, providedIn: "root" });
return AccountConfigService;
}());
if (false) {
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.router;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.restService;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.router;
/**
* @type {?}
* @private
*/
AccountConfigService.prototype.restService;
}
/**
@ -66,60 +57,54 @@ if (false) {
/**
* @record
*/
function AccountConfigOptions() {}
function AccountConfigOptions() { }
if (false) {
/** @type {?|undefined} */
AccountConfigOptions.prototype.redirectUrl;
/** @type {?|undefined} */
AccountConfigOptions.prototype.redirectUrl;
}
/**
* @param {?} options
* @return {?}
*/
function accountOptionsFactory(options) {
return __assign({ redirectUrl: '/' }, options);
return __assign({ redirectUrl: '/' }, options);
}
/** @type {?} */
var ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');
var ɵ0 = noop;
var AccountConfigModule = /** @class */ (function() {
function AccountConfigModule() {}
/**
* @param {?=} options
* @return {?}
*/
AccountConfigModule.forRoot
/**
* @param {?=} options
* @return {?}
*/ = function(options) {
if (options === void 0) {
options = /** @type {?} */ ({});
var AccountConfigModule = /** @class */ (function () {
function AccountConfigModule() {
}
return {
ngModule: AccountConfigModule,
providers: [
{ provide: ACCOUNT_OPTIONS, useValue: options },
{
provide: 'ACCOUNT_OPTIONS',
useFactory: accountOptionsFactory,
deps: [ACCOUNT_OPTIONS],
},
],
/**
* @param {?=} options
* @return {?}
*/
AccountConfigModule.forRoot = /**
* @param {?=} options
* @return {?}
*/
function (options) {
if (options === void 0) { options = (/** @type {?} */ ({})); }
return {
ngModule: AccountConfigModule,
providers: [
{ provide: ACCOUNT_OPTIONS, useValue: options },
{
provide: 'ACCOUNT_OPTIONS',
useFactory: accountOptionsFactory,
deps: [ACCOUNT_OPTIONS],
},
],
};
};
};
AccountConfigModule.decorators = [
{
type: NgModule,
args: [
{
imports: [CoreModule, ThemeSharedModule],
providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: ɵ0 }],
},
],
},
];
return AccountConfigModule;
})();
AccountConfigModule.decorators = [
{ type: NgModule, args: [{
imports: [CoreModule, ThemeSharedModule],
providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: ɵ0 }],
},] }
];
return AccountConfigModule;
}());
/**
* @fileoverview added by tsickle

2
npm/ng-packs/dist/account-config/fesm5/abp-ng.account.config.js.map

@ -1 +1 @@
{"version":3,"file":"abp-ng.account.config.js","sources":["ng://@abp/ng.account.config/lib/services/account-config.service.ts","ng://@abp/ng.account.config/lib/account-config.module.ts"],"sourcesContent":["import { eLayoutType, RestService, addAbpRoutes } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountConfigService {\n constructor(private router: Router, private restService: RestService) {\n addAbpRoutes({\n name: 'AbpAccount::Menu:Account',\n path: 'account',\n invisible: true,\n layout: eLayoutType.application,\n children: [\n { path: 'login', name: 'AbpAccount::Login', order: 1 },\n { path: 'register', name: 'AbpAccount::Register', order: 2 },\n ],\n });\n }\n}\n","import { CoreModule, noop } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AccountConfigService } from './services/account-config.service';\n\nexport interface AccountConfigOptions {\n redirectUrl?: string;\n}\n\nexport function accountOptionsFactory(options: AccountConfigOptions) {\n return {\n redirectUrl: '/',\n ...options,\n };\n}\n\nexport const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');\n\n@NgModule({\n imports: [CoreModule, ThemeSharedModule],\n providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: noop }],\n})\nexport class AccountConfigModule {\n static forRoot(options = {} as AccountConfigOptions): ModuleWithProviders {\n return {\n ngModule: AccountConfigModule,\n providers: [\n { provide: ACCOUNT_OPTIONS, useValue: options },\n {\n provide: 'ACCOUNT_OPTIONS',\n useFactory: accountOptionsFactory,\n deps: [ACCOUNT_OPTIONS],\n },\n ],\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAAA;IAQE,8BAAoB,MAAc,EAAU,WAAwB;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;QAClE,YAAY,CAAC;YACX,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,MAAM;YACN,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;gBACtD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;aAC7D;SACF,CAAC,CAAC;KACJ;;gBAfF,UAAU,SAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;;gBAJQ,MAAM;gBAFO,WAAW;;;+BAAjC;CAIA,IAgBC;;;;;;IAZa,sCAAsB;;;;;IAAE,2CAAgC;;;;;;;;;;ACHtE,mCAEC;;;IADC,2CAAqB;;;;;;AAGvB,SAAgB,qBAAqB,CAAC,OAA6B;IACjE,kBACE,WAAW,EAAE,GAAG,IACb,OAAO,EACV;CACH;;AAED,IAAa,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;SAI6B,IAAI;AAFrG;IAAA;KAkBC;;;;;IAbQ,2BAAO;;;;IAAd,UAAe,OAAoC;QAApC,wBAAA,EAAA,6BAAU,EAAE,EAAwB;QACjD,OAAO;YACL,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC/C;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,qBAAqB;oBACjC,IAAI,EAAE,CAAC,eAAe,CAAC;iBACxB;aACF;SACF,CAAC;KACH;;gBAjBF,QAAQ,SAAC;oBACR,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;oBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,IAAM,EAAE,CAAC;iBACvG;;IAeD,0BAAC;CAlBD;;;;;;;;;;;;;;"}
{"version":3,"file":"abp-ng.account.config.js","sources":["ng://@abp/ng.account.config/lib/services/account-config.service.ts","ng://@abp/ng.account.config/lib/account-config.module.ts"],"sourcesContent":["import { eLayoutType, RestService, addAbpRoutes } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountConfigService {\n constructor(private router: Router, private restService: RestService) {\n addAbpRoutes({\n name: 'AbpAccount::Menu:Account',\n path: 'account',\n invisible: true,\n layout: eLayoutType.application,\n children: [\n { path: 'login', name: 'AbpAccount::Login', order: 1 },\n { path: 'register', name: 'AbpAccount::Register', order: 2 },\n { path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },\n ],\n });\n }\n}\n","import { CoreModule, noop } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AccountConfigService } from './services/account-config.service';\n\nexport interface AccountConfigOptions {\n redirectUrl?: string;\n}\n\nexport function accountOptionsFactory(options: AccountConfigOptions) {\n return {\n redirectUrl: '/',\n ...options,\n };\n}\n\nexport const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');\n\n@NgModule({\n imports: [CoreModule, ThemeSharedModule],\n providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: noop }],\n})\nexport class AccountConfigModule {\n static forRoot(options = {} as AccountConfigOptions): ModuleWithProviders {\n return {\n ngModule: AccountConfigModule,\n providers: [\n { provide: ACCOUNT_OPTIONS, useValue: options },\n {\n provide: 'ACCOUNT_OPTIONS',\n useFactory: accountOptionsFactory,\n deps: [ACCOUNT_OPTIONS],\n },\n ],\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAAA;IAQE,8BAAoB,MAAc,EAAU,WAAwB;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;QAClE,YAAY,CAAC;YACX,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,MAAM;YACN,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;gBACtD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;gBAC5D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;aAC5E;SACF,CAAC,CAAC;KACJ;;gBAhBF,UAAU,SAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;;gBAJQ,MAAM;gBAFO,WAAW;;;+BAAjC;CAIA,IAiBC;;;;;;IAba,sCAAsB;;;;;IAAE,2CAAgC;;;;;;;;;;ACHtE,mCAEC;;;IADC,2CAAqB;;;;;;AAGvB,SAAgB,qBAAqB,CAAC,OAA6B;IACjE,kBACE,WAAW,EAAE,GAAG,IACb,OAAO,EACV;CACH;;AAED,IAAa,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;SAI6B,IAAI;AAFrG;IAAA;KAkBC;;;;;IAbQ,2BAAO;;;;IAAd,UAAe,OAAoC;QAApC,wBAAA,EAAA,6BAAU,EAAE,EAAwB;QACjD,OAAO;YACL,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC/C;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,qBAAqB;oBACjC,IAAI,EAAE,CAAC,eAAe,CAAC;iBACxB;aACF;SACF,CAAC;KACH;;gBAjBF,QAAQ,SAAC;oBACR,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;oBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,IAAM,EAAE,CAAC;iBACvG;;IAeD,0BAAC;CAlBD;;;;;;;;;;;;;;"}

10
npm/ng-packs/dist/account-config/lib/account-config.module.d.ts

@ -1,13 +1,11 @@
import { InjectionToken, ModuleWithProviders } from '@angular/core';
export interface AccountConfigOptions {
redirectUrl?: string;
redirectUrl?: string;
}
export declare function accountOptionsFactory(
options: AccountConfigOptions,
): {
redirectUrl: string;
export declare function accountOptionsFactory(options: AccountConfigOptions): {
redirectUrl: string;
};
export declare const ACCOUNT_OPTIONS: InjectionToken<unknown>;
export declare class AccountConfigModule {
static forRoot(options?: AccountConfigOptions): ModuleWithProviders;
static forRoot(options?: AccountConfigOptions): ModuleWithProviders;
}

6
npm/ng-packs/dist/account-config/lib/services/account-config.service.d.ts

@ -1,7 +1,7 @@
import { RestService } from '@abp/ng.core';
import { Router } from '@angular/router';
export declare class AccountConfigService {
private router;
private restService;
constructor(router: Router, restService: RestService);
private router;
private restService;
constructor(router: Router, restService: RestService);
}

2
npm/ng-packs/dist/account-config/package.json

@ -1,6 +1,6 @@
{
"name": "@abp/ng.account.config",
"version": "0.9.2",
"version": "1.0.2",
"publishConfig": {
"access": "public"
},

18
npm/ng-packs/dist/account/abp-ng.account.d.ts

@ -2,10 +2,14 @@
* Generated bundle index. Do not edit.
*/
export * from './public-api';
export { AccountRoutingModule as ɵf } from './lib/account-routing.module';
export { LoginComponent as ɵa } from './lib/components/login/login.component';
export { RegisterComponent as ɵc } from './lib/components/register/register.component';
export { TenantBoxComponent as ɵe } from './lib/components/tenant-box/tenant-box.component';
export { Options as ɵb } from './lib/models/options';
export { AccountService as ɵd } from './lib/services/account.service';
export { ACCOUNT_OPTIONS as ɵh, optionsFactory as ɵg } from './lib/tokens/options.token';
export { AccountRoutingModule as ɵj } from './lib/account-routing.module';
export { AuthWrapperComponent as ɵa } from './lib/components/auth-wrapper/auth-wrapper.component';
export { ChangePasswordComponent as ɵg } from './lib/components/change-password/change-password.component';
export { LoginComponent as ɵb } from './lib/components/login/login.component';
export { ManageProfileComponent as ɵh } from './lib/components/manage-profile/manage-profile.component';
export { PersonalSettingsComponent as ɵi } from './lib/components/personal-settings/personal-settings.component';
export { RegisterComponent as ɵd } from './lib/components/register/register.component';
export { TenantBoxComponent as ɵf } from './lib/components/tenant-box/tenant-box.component';
export { Options as ɵc } from './lib/models/options';
export { AccountService as ɵe } from './lib/services/account.service';
export { ACCOUNT_OPTIONS as ɵl, optionsFactory as ɵk } from './lib/tokens/options.token';

348
npm/ng-packs/dist/account/abp-ng.account.metadata.json

@ -1,7 +1,13 @@
{
"__symbolic": "module",
"version": 4,
"exports": [{ "from": "./lib/options" }, { "from": "./lib/user" }, { "from": "./lib/tenant" }],
"exports": [
{ "from": "./lib/options" },
{ "from": "./lib/user" },
{ "from": "./lib/tenant" },
{ "from": "./lib/register/register.component" },
{ "from": "./lib/personal-settings/personal-settings.component" }
],
"metadata": {
"AccountModule": {
"__symbolic": "class",
@ -12,51 +18,55 @@
"__symbolic": "reference",
"module": "@angular/core",
"name": "NgModule",
"line": 13,
"line": 17,
"character": 1
},
"arguments": [
{
"declarations": [
{ "__symbolic": "reference", "name": "ɵa" },
{ "__symbolic": "reference", "name": "ɵc" },
{ "__symbolic": "reference", "name": "ɵe" }
{ "__symbolic": "reference", "name": "ɵb" },
{ "__symbolic": "reference", "name": "ɵd" },
{ "__symbolic": "reference", "name": "ɵf" },
{ "__symbolic": "reference", "name": "ɵg" },
{ "__symbolic": "reference", "name": "ɵh" },
{ "__symbolic": "reference", "name": "ɵi" }
],
"imports": [
{
"__symbolic": "reference",
"module": "@abp/ng.core",
"name": "CoreModule",
"line": 15,
"line": 27,
"character": 12
},
{ "__symbolic": "reference", "name": "ɵf" },
{ "__symbolic": "reference", "name": "ɵj" },
{
"__symbolic": "reference",
"module": "@abp/ng.theme.shared",
"name": "ThemeSharedModule",
"line": 15,
"line": 27,
"character": 46
},
{
"__symbolic": "reference",
"module": "primeng/table",
"name": "TableModule",
"line": 15,
"line": 27,
"character": 65
},
{
"__symbolic": "reference",
"module": "@ng-bootstrap/ng-bootstrap",
"name": "NgbDropdownModule",
"line": 15,
"line": 27,
"character": 78
},
{
"__symbolic": "reference",
"module": "@ngx-validate/core",
"name": "NgxValidateCoreModule",
"line": 15,
"line": 27,
"character": 97
}
],
@ -73,13 +83,13 @@
"defaults": [{}],
"value": [
{
"provide": { "__symbolic": "reference", "name": "ɵh" },
"provide": { "__symbolic": "reference", "name": "ɵl" },
"useValue": { "__symbolic": "reference", "name": "options" }
},
{
"provide": "ACCOUNT_OPTIONS",
"useFactory": { "__symbolic": "reference", "name": "ɵg" },
"deps": [{ "__symbolic": "reference", "name": "ɵh" }]
"useFactory": { "__symbolic": "reference", "name": "ɵk" },
"deps": [{ "__symbolic": "reference", "name": "ɵl" }]
}
]
},
@ -108,6 +118,63 @@
]
},
"ɵa": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Component",
"line": 2,
"character": 1
},
"arguments": [
{
"selector": "abp-auth-wrapper",
"template": "<div class=\"row\">\n <div class=\"mx-auto col col-md-5\">\n <abp-tenant-box></abp-tenant-box>\n\n <div class=\"abp-account-container\">\n <div class=\"card mt-3 shadow-sm rounded\">\n <div class=\"card-body p-5\">\n <ng-content *ngTemplateOutlet=\"mainContentRef\"></ng-content>\n </div>\n <ng-content *ngTemplateOutlet=\"cancelContentRef\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n"
}
]
}
],
"members": {
"mainContentRef": [
{
"__symbolic": "property",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Input",
"line": 7,
"character": 3
}
}
]
}
],
"cancelContentRef": [
{
"__symbolic": "property",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Input",
"line": 10,
"character": 3
}
}
]
}
]
}
},
"ɵb": {
"__symbolic": "class",
"decorators": [
{
@ -122,7 +189,7 @@
"arguments": [
{
"selector": "abp-login",
"template": "<div class=\"row\">\n <div class=\"col col-md-4 offset-md-4\">\n <abp-tenant-box></abp-tenant-box>\n\n <div class=\"abp-account-container\">\n <h2>{{ 'AbpAccount::Login' | abpLocalization }}</h2>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" novalidate>\n <div class=\"form-group\">\n <label for=\"login-input-user-name-or-email-address\">{{\n 'AbpAccount::UserNameOrEmailAddress' | abpLocalization\n }}</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"login-input-user-name-or-email-address\"\n formControlName=\"username\"\n autofocus\n />\n </div>\n <div class=\"form-group\">\n <label for=\"login-input-password\">{{ 'AbpAccount::Password' | abpLocalization }}</label>\n <input class=\"form-control\" type=\"password\" id=\"login-input-password\" formControlName=\"password\" />\n </div>\n <div class=\"form-check\" validationTarget validationStyle>\n <label class=\"form-check-label\" for=\"login-input-remember-me\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"login-input-remember-me\" formControlName=\"remember\" />\n {{ 'AbpAccount::RememberMe' | abpLocalization }}\n </label>\n </div>\n <div class=\"mt-2\">\n <abp-button [loading]=\"inProgress\" type=\"submit\">\n {{ 'AbpAccount::Login' | abpLocalization }}\n </abp-button>\n </div>\n </form>\n <div style=\"padding-top: 20px\">\n <a routerLink=\"/account/register\">{{ 'AbpAccount::Register' | abpLocalization }}</a>\n </div>\n </div>\n </div>\n</div>\n"
"template": "<abp-auth-wrapper [mainContentRef]=\"mainContentRef\" [cancelContentRef]=\"cancelContentRef\">\n <ng-template #mainContentRef>\n <h4>{{ 'AbpAccount::Login' | abpLocalization }}</h4>\n <strong>\n {{ 'AbpAccount::AreYouANewUser' | abpLocalization }}\n <a class=\"text-decoration-none\" routerLink=\"/account/register\">{{ 'AbpAccount::Register' | abpLocalization }}</a>\n </strong>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" novalidate class=\"mt-4\">\n <div class=\"form-group\">\n <label for=\"login-input-user-name-or-email-address\">{{\n 'AbpAccount::UserNameOrEmailAddress' | abpLocalization\n }}</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"login-input-user-name-or-email-address\"\n formControlName=\"username\"\n autofocus\n />\n </div>\n <div class=\"form-group\">\n <label for=\"login-input-password\">{{ 'AbpAccount::Password' | abpLocalization }}</label>\n <input class=\"form-control\" type=\"password\" id=\"login-input-password\" formControlName=\"password\" />\n </div>\n <div class=\"form-check\" validationTarget validationStyle>\n <label class=\"form-check-label\" for=\"login-input-remember-me\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"login-input-remember-me\" formControlName=\"remember\" />\n {{ 'AbpAccount::RememberMe' | abpLocalization }}\n </label>\n </div>\n <abp-button\n [loading]=\"inProgress\"\n buttonType=\"submit\"\n name=\"Action\"\n buttonClass=\"btn-block btn-lg mt-3 btn btn-primary\"\n >\n {{ 'AbpAccount::Login' | abpLocalization }}\n </abp-button>\n </form>\n </ng-template>\n <ng-template #cancelContentRef>\n <div class=\"card-footer text-center border-0\">\n <a routerLink=\"/\">\n <button type=\"button\" name=\"Action\" value=\"Cancel\" class=\"px-2 py-0 btn btn-link\">\n {{ 'AbpAccount::Cancel' | abpLocalization }}\n </button>\n </a>\n </div>\n </ng-template>\n</abp-auth-wrapper>\n"
}
]
}
@ -183,15 +250,15 @@
"line": 27,
"character": 28
},
{ "__symbolic": "reference", "name": "ɵb" }
{ "__symbolic": "reference", "name": "ɵc" }
]
}
],
"onSubmit": [{ "__symbolic": "method" }]
}
},
"ɵb": { "__symbolic": "interface" },
"ɵc": {
"ɵc": { "__symbolic": "interface" },
"ɵd": {
"__symbolic": "class",
"decorators": [
{
@ -206,7 +273,7 @@
"arguments": [
{
"selector": "abp-register",
"template": "<div class=\"row\">\n <div class=\"col col-md-4 offset-md-4\">\n <abp-tenant-box></abp-tenant-box>\n\n <div class=\"abp-account-container\">\n <h2>{{ 'AbpAccount::Register' | abpLocalization }}</h2>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" novalidate>\n <div class=\"form-group\">\n <label for=\"input-user-name\">{{ 'AbpAccount::UserName' | abpLocalization }}</label\n ><span> * </span\n ><input autofocus type=\"text\" id=\"input-user-name\" class=\"form-control\" formControlName=\"username\" />\n </div>\n <div class=\"form-group\">\n <label for=\"input-email-address\">{{ 'AbpAccount::EmailAddress' | abpLocalization }}</label\n ><span> * </span><input type=\"email\" id=\"input-email-address\" class=\"form-control\" formControlName=\"email\" />\n </div>\n <div class=\"form-group\">\n <label for=\"input-password\">{{ 'AbpAccount::Password' | abpLocalization }}</label\n ><span> * </span><input type=\"password\" id=\"input-password\" class=\"form-control\" formControlName=\"password\" />\n </div>\n <abp-button [loading]=\"inProgress\" type=\"submit\">\n {{ 'AbpAccount::Register' | abpLocalization }}\n </abp-button>\n </form>\n <div style=\"padding-top: 20px\">\n <a routerLink=\"/account/login\">{{ 'AbpAccount::Login' | abpLocalization }}</a>\n </div>\n </div>\n </div>\n</div>\n"
"template": "<abp-auth-wrapper [mainContentRef]=\"mainContentRef\">\n <ng-template #mainContentRef>\n <h4>{{ 'AbpAccount::Register' | abpLocalization }}</h4>\n <strong>\n {{ 'AbpAccount::AlreadyRegistered' | abpLocalization }}\n <a class=\"text-decoration-none\" routerLink=\"/account/login\">{{ 'AbpAccount::Login' | abpLocalization }}</a>\n </strong>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" novalidate class=\"mt-4\">\n <div class=\"form-group\">\n <label for=\"input-user-name\">{{ 'AbpAccount::UserName' | abpLocalization }}</label\n ><span> * </span\n ><input autofocus type=\"text\" id=\"input-user-name\" class=\"form-control\" formControlName=\"username\" />\n </div>\n <div class=\"form-group\">\n <label for=\"input-email-address\">{{ 'AbpAccount::EmailAddress' | abpLocalization }}</label\n ><span> * </span><input type=\"email\" id=\"input-email-address\" class=\"form-control\" formControlName=\"email\" />\n </div>\n <div class=\"form-group\">\n <label for=\"input-password\">{{ 'AbpAccount::Password' | abpLocalization }}</label\n ><span> * </span><input type=\"password\" id=\"input-password\" class=\"form-control\" formControlName=\"password\" />\n </div>\n <abp-button\n [loading]=\"inProgress\"\n buttonType=\"submit\"\n name=\"Action\"\n buttonClass=\"btn-block btn-lg mt-3 btn btn-primary\"\n >\n {{ 'AbpAccount::Register' | abpLocalization }}\n </abp-button>\n </form>\n </ng-template>\n</abp-auth-wrapper>\n"
}
]
}
@ -223,7 +290,7 @@
"line": 24,
"character": 16
},
{ "__symbolic": "reference", "name": "ɵd" },
{ "__symbolic": "reference", "name": "ɵe" },
{
"__symbolic": "reference",
"module": "angular-oauth2-oidc",
@ -245,7 +312,7 @@
"onSubmit": [{ "__symbolic": "method" }]
}
},
"ɵd": {
"ɵe": {
"__symbolic": "class",
"decorators": [
{
@ -274,7 +341,7 @@
},
"statics": { "ngInjectableDef": {} }
},
"ɵe": {
"ɵf": {
"__symbolic": "class",
"decorators": [
{
@ -289,7 +356,7 @@
"arguments": [
{
"selector": "abp-tenant-box",
"template": "<div\n class=\"tenant-switch-box\"\n style=\"background-color: #eee; margin-bottom: 20px; color: #000; padding: 10px; text-align: center;\"\n>\n <span style=\"color: #666;\">{{ 'AbpUiMultiTenancy::Tenant' | abpLocalization }}: </span>\n <strong>\n <i>{{ tenantName || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }}</i>\n </strong>\n (<a id=\"abp-tenant-switch-link\" style=\"color: #333; cursor: pointer\" (click)=\"onSwitch()\">{{\n 'AbpUiMultiTenancy::Switch' | abpLocalization\n }}</a\n >)\n</div>\n\n<abp-modal [(visible)]=\"isModalVisible\" size=\"md\">\n <ng-template #abpHeader>\n <h5>Switch Tenant</h5>\n </ng-template>\n <ng-template #abpBody>\n <form (ngSubmit)=\"save()\">\n <div class=\"mt-2\">\n <div class=\"form-group\">\n <label for=\"name\">{{ 'AbpUiMultiTenancy::Name' | abpLocalization }}</label>\n <input [(ngModel)]=\"tenant.name\" type=\"text\" id=\"name\" name=\"tenant\" class=\"form-control\" autofocus />\n </div>\n <p>{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}</p>\n </div>\n </form>\n </ng-template>\n <ng-template #abpFooter>\n <button #abpClose type=\"button\" class=\"btn btn-secondary\">\n {{ 'AbpTenantManagement::Cancel' | abpLocalization }}\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\">\n <i class=\"fa fa-check mr-1\"></i> <span>{{ 'AbpTenantManagement::Save' | abpLocalization }}</span>\n </button>\n </ng-template>\n</abp-modal>\n"
"template": "<div class=\"card shadow-sm rounded mb-3\">\n <div class=\"card-body px-5\">\n <div class=\"row\">\n <div class=\"col\">\n <span style=\"font-size: 0.8em;\" class=\"text-uppercase text-muted\">{{\n 'AbpUiMultiTenancy::Tenant' | abpLocalization\n }}</span\n ><br />\n <h6 class=\"m-0 d-inline-block\">\n <span>\n {{ tenantName || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }}\n </span>\n </h6>\n </div>\n <div class=\"col-auto\">\n <a\n id=\"AbpTenantSwitchLink\"\n href=\"javascript:void(0);\"\n class=\"btn btn-sm mt-3 btn-outline-primary\"\n (click)=\"onSwitch()\"\n >{{ 'AbpUiMultiTenancy::Switch' | abpLocalization }}</a\n >\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalVisible\" size=\"md\">\n <ng-template #abpHeader>\n <h5>Switch Tenant</h5>\n </ng-template>\n <ng-template #abpBody>\n <form (ngSubmit)=\"save()\">\n <div class=\"mt-2\">\n <div class=\"form-group\">\n <label for=\"name\">{{ 'AbpUiMultiTenancy::Name' | abpLocalization }}</label>\n <input [(ngModel)]=\"tenant.name\" type=\"text\" id=\"name\" name=\"tenant\" class=\"form-control\" autofocus />\n </div>\n <p>{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}</p>\n </div>\n </form>\n </ng-template>\n <ng-template #abpFooter>\n <button #abpClose type=\"button\" class=\"btn btn-secondary\">\n {{ 'AbpTenantManagement::Cancel' | abpLocalization }}\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\">\n <i class=\"fa fa-check mr-1\"></i> <span>{{ 'AbpTenantManagement::Save' | abpLocalization }}</span>\n </button>\n </ng-template>\n</abp-modal>\n"
}
]
}
@ -307,7 +374,7 @@
"line": 16,
"character": 28
},
{ "__symbolic": "reference", "name": "ɵd" }
{ "__symbolic": "reference", "name": "ɵe" }
]
}
],
@ -316,7 +383,203 @@
"save": [{ "__symbolic": "method" }]
}
},
"ɵf": {
"ɵg": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Component",
"line": 13,
"character": 1
},
"arguments": [
{
"selector": "abp-change-password-form",
"template": "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" [mapErrorsFn]=\"mapErrorsFn\">\n <div class=\"form-group\">\n <label for=\"current-password\">{{ 'AbpIdentity::DisplayName:CurrentPassword' | abpLocalization }}</label\n ><span> * </span\n ><input type=\"password\" id=\"current-password\" class=\"form-control\" formControlName=\"password\" autofocus />\n </div>\n <div class=\"form-group\">\n <label for=\"new-password\">{{ 'AbpIdentity::DisplayName:NewPassword' | abpLocalization }}</label\n ><span> * </span><input type=\"password\" id=\"new-password\" class=\"form-control\" formControlName=\"newPassword\" />\n </div>\n <div class=\"form-group\">\n <label for=\"confirm-new-password\">{{ 'AbpIdentity::DisplayName:NewPasswordConfirm' | abpLocalization }}</label\n ><span> * </span\n ><input type=\"password\" id=\"confirm-new-password\" class=\"form-control\" formControlName=\"repeatNewPassword\" />\n </div>\n <abp-button\n iconClass=\"fa fa-check\"\n buttonClass=\"btn btn-primary color-white\"\n buttonType=\"submit\"\n [loading]=\"inProgress\"\n >{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button\n >\n</form>\n"
}
]
}
],
"members": {
"__ctor__": [
{
"__symbolic": "constructor",
"parameters": [
{
"__symbolic": "reference",
"module": "@angular/forms",
"name": "FormBuilder",
"line": 28,
"character": 26
},
{ "__symbolic": "reference", "module": "@ngxs/store", "name": "Store", "line": 28, "character": 54 },
{
"__symbolic": "reference",
"module": "@abp/ng.theme.shared",
"name": "ToasterService",
"line": 28,
"character": 85
}
]
}
],
"ngOnInit": [{ "__symbolic": "method" }],
"onSubmit": [{ "__symbolic": "method" }]
}
},
"ɵh": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Component",
"line": 4,
"character": 1
},
"arguments": [
{
"selector": "abp-manage-profile",
"animations": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/animations",
"name": "trigger",
"line": 7,
"character": 15
},
"arguments": [
"fadeIn",
[
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/animations",
"name": "transition",
"line": 7,
"character": 34
},
"arguments": [
":enter",
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/animations",
"name": "useAnimation",
"line": 7,
"character": 55
},
"arguments": [
{
"__symbolic": "reference",
"module": "@abp/ng.theme.shared",
"name": "fadeIn",
"line": 7,
"character": 68
}
]
}
]
}
]
]
}
],
"template": "<div id=\"AbpContentToolbar\"></div>\n\n<div class=\"card border-0 shadow-sm\">\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-3\">\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\n <li class=\"nav-item\" (click)=\"selectedTab = 0\">\n <a class=\"nav-link\" [ngClass]=\"{ active: selectedTab === 0 }\" role=\"tab\" href=\"javascript:void(0)\">{{\n 'AbpUi::ChangePassword' | abpLocalization\n }}</a>\n </li>\n <li class=\"nav-item\" (click)=\"selectedTab = 1\">\n <a class=\"nav-link\" [ngClass]=\"{ active: selectedTab === 1 }\" role=\"tab\" href=\"javascript:void(0)\">{{\n 'AbpAccount::PersonalSettings' | abpLocalization\n }}</a>\n </li>\n </ul>\n </div>\n <div class=\"col-9\">\n <div class=\"tab-content\" *ngIf=\"selectedTab === 0\" [@fadeIn]>\n <div class=\"tab-pane active\" role=\"tabpanel\">\n <h4>\n {{ 'AbpIdentity::ChangePassword' | abpLocalization }}\n <hr />\n </h4>\n <abp-change-password-form></abp-change-password-form>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"selectedTab === 1\" [@fadeIn]>\n <div class=\"tab-pane active\" role=\"tabpanel\">\n <h4>\n {{ 'AbpIdentity::PersonalSettings' | abpLocalization }}\n <hr />\n </h4>\n <abp-personal-settings-form></abp-personal-settings-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n"
}
]
}
],
"members": {}
},
"ɵi": {
"__symbolic": "class",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@angular/core",
"name": "Component",
"line": 10,
"character": 1
},
"arguments": [
{
"selector": "abp-personal-settings-form",
"template": "<form novalidate *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"form-group\">\n <label for=\"username\">{{ 'AbpIdentity::DisplayName:UserName' | abpLocalization }}</label\n ><span> * </span\n ><input\n type=\"text\"\n id=\"username\"\n class=\"form-control\"\n formControlName=\"userName\"\n autofocus\n (keydown.space)=\"$event.preventDefault()\"\n />\n </div>\n <div class=\"row\">\n <div class=\"col col-md-6\">\n <div class=\"form-group\">\n <label for=\"name\">{{ 'AbpIdentity::DisplayName:Name' | abpLocalization }}</label\n ><input type=\"text\" id=\"name\" class=\"form-control\" formControlName=\"name\" />\n </div>\n </div>\n <div class=\"col col-md-6\">\n <div class=\"form-group\">\n <label for=\"surname\">{{ 'AbpIdentity::DisplayName:Surname' | abpLocalization }}</label\n ><input type=\"text\" id=\"surname\" class=\"form-control\" formControlName=\"surname\" />\n </div>\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"email-address\">{{ 'AbpIdentity::DisplayName:Email' | abpLocalization }}</label\n ><span> * </span><input type=\"text\" id=\"email-address\" class=\"form-control\" formControlName=\"email\" />\n </div>\n <div class=\"form-group\">\n <label for=\"phone-number\">{{ 'AbpIdentity::DisplayName:PhoneNumber' | abpLocalization }}</label\n ><input type=\"text\" id=\"phone-number\" class=\"form-control\" formControlName=\"phoneNumber\" />\n </div>\n <abp-button\n buttonType=\"submit\"\n iconClass=\"fa fa-check\"\n buttonClass=\"btn btn-primary color-white\"\n [loading]=\"inProgress\"\n >\n {{ 'AbpIdentity::Save' | abpLocalization }}</abp-button\n >\n</form>\n"
}
]
}
],
"members": {
"profile$": [
{
"__symbolic": "property",
"decorators": [
{
"__symbolic": "call",
"expression": {
"__symbolic": "reference",
"module": "@ngxs/store",
"name": "Select",
"line": 15,
"character": 3
},
"arguments": [
{
"__symbolic": "select",
"expression": {
"__symbolic": "reference",
"module": "@abp/ng.core",
"name": "ProfileState",
"line": 15,
"character": 10
},
"member": "getProfile"
}
]
}
]
}
],
"__ctor__": [
{
"__symbolic": "constructor",
"parameters": [
{
"__symbolic": "reference",
"module": "@angular/forms",
"name": "FormBuilder",
"line": 22,
"character": 26
},
{ "__symbolic": "reference", "module": "@ngxs/store", "name": "Store", "line": 22, "character": 54 },
{
"__symbolic": "reference",
"module": "@abp/ng.theme.shared",
"name": "ToasterService",
"line": 22,
"character": 85
}
]
}
],
"ngOnInit": [{ "__symbolic": "method" }],
"buildForm": [{ "__symbolic": "method" }],
"submit": [{ "__symbolic": "method" }]
}
},
"ɵj": {
"__symbolic": "class",
"decorators": [
{
@ -325,7 +588,7 @@
"__symbolic": "reference",
"module": "@angular/core",
"name": "NgModule",
"line": 15,
"line": 23,
"character": 1
},
"arguments": [
@ -339,7 +602,7 @@
"__symbolic": "reference",
"module": "@angular/router",
"name": "RouterModule",
"line": 16,
"line": 24,
"character": 12
},
"member": "forChild"
@ -353,12 +616,13 @@
"__symbolic": "reference",
"module": "@abp/ng.core",
"name": "DynamicLayoutComponent",
"line": 10,
"line": 11,
"character": 15
},
"children": [
{ "path": "login", "component": { "__symbolic": "reference", "name": "ɵa" } },
{ "path": "register", "component": { "__symbolic": "reference", "name": "ɵc" } }
{ "path": "login", "component": { "__symbolic": "reference", "name": "ɵb" } },
{ "path": "register", "component": { "__symbolic": "reference", "name": "ɵd" } },
{ "path": "manage-profile", "component": { "__symbolic": "reference", "name": "ɵh" } }
]
}
]
@ -370,7 +634,7 @@
"__symbolic": "reference",
"module": "@angular/router",
"name": "RouterModule",
"line": 17,
"line": 25,
"character": 12
}
]
@ -380,8 +644,8 @@
],
"members": {}
},
"ɵg": { "__symbolic": "function", "parameters": ["options"], "value": { "redirectUrl": "/" } },
"ɵh": {
"ɵk": { "__symbolic": "function", "parameters": ["options"], "value": { "redirectUrl": "/" } },
"ɵl": {
"__symbolic": "new",
"expression": {
"__symbolic": "reference",
@ -397,14 +661,18 @@
"AccountModule": "./lib/account.module",
"AccountProviders": "./lib/account.module",
"ACCOUNT_ROUTES": "./lib/constants/routes",
"ɵa": "./lib/components/login/login.component",
"ɵb": "./lib/models/options",
"ɵc": "./lib/components/register/register.component",
"ɵd": "./lib/services/account.service",
"ɵe": "./lib/components/tenant-box/tenant-box.component",
"ɵf": "./lib/account-routing.module",
"ɵg": "./lib/tokens/options.token",
"ɵh": "./lib/tokens/options.token"
"ɵa": "./lib/components/auth-wrapper/auth-wrapper.component",
"ɵb": "./lib/components/login/login.component",
"ɵc": "./lib/models/options",
"ɵd": "./lib/components/register/register.component",
"ɵe": "./lib/services/account.service",
"ɵf": "./lib/components/tenant-box/tenant-box.component",
"ɵg": "./lib/components/change-password/change-password.component",
"ɵh": "./lib/components/manage-profile/manage-profile.component",
"ɵi": "./lib/components/personal-settings/personal-settings.component",
"ɵj": "./lib/account-routing.module",
"ɵk": "./lib/tokens/options.token",
"ɵl": "./lib/tokens/options.token"
},
"importAs": "@abp/ng.account"
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save