mirror of https://github.com/abpframework/abp.git
64 changed files with 2640 additions and 3096 deletions
@ -0,0 +1,65 @@ |
|||
# Distributed Event Bus Rebus Integration |
|||
|
|||
> This document explains **how to configure the [Rebus](http://mookid.dk/category/rebus/)** as the distributed event bus provider. See the [distributed event bus document](Distributed-Event-Bus.md) to learn how to use the distributed event bus system |
|||
|
|||
## Installation |
|||
|
|||
Use the ABP CLI to add [Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus) NuGet package to your project: |
|||
|
|||
* Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed before. |
|||
* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.EventBus.Rebus` package. |
|||
* Run `abp add-package Volo.Abp.EventBus.Rebus` command. |
|||
|
|||
If you want to do it manually, install the [Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus) NuGet package to your project and add `[DependsOn(typeof(AbpEventBusRebusModule))]` to the [ABP module](Module-Development-Basics.md) class inside your project. |
|||
|
|||
## Configuration |
|||
|
|||
You can configure using the standard [configuration system](Configuration.md), like using the [options](Options.md) classes. |
|||
|
|||
### The Options Classes |
|||
|
|||
`AbpRebusEventBusOptions` classe can be used to configure the event bus options for the Rebus. |
|||
|
|||
You can configure this options inside the `PreConfigureServices` of your [module](Module-Development-Basics.md). |
|||
|
|||
**Example: Minimize configuration** |
|||
|
|||
```csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
}); |
|||
``` |
|||
|
|||
Rebus has many options, you can use the `Configurer` property of `AbpRebusEventBusOptions` class to configure. |
|||
|
|||
Default events are **stored in memory**. See the [rebus document](https://github.com/rebus-org/Rebus/wiki/Transport) for more details. |
|||
|
|||
**Example: Configure the store** |
|||
|
|||
````csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
options.Configurer = rebusConfigurer => |
|||
{ |
|||
rebusConfigurer.Transport(t => t.UseMsmq("eventbus")); |
|||
rebusConfigurer.Subscriptions(s => s.UseJsonFile(@"subscriptions.json")); |
|||
}; |
|||
}); |
|||
```` |
|||
|
|||
You can use the `Publish` properpty of `AbpRebusEventBusOptions` class to change the publishing method |
|||
|
|||
**Example: Configure the event publishing** |
|||
|
|||
````csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
options.Publish = async (bus, type, data) => |
|||
{ |
|||
await bus.Publish(data); |
|||
}; |
|||
}); |
|||
```` |
|||
@ -0,0 +1,63 @@ |
|||
# 分布式事件总线Rebus集成 |
|||
|
|||
> 本文解释了**如何配置[Rebus](http://mookid.dk/category/rebus/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. |
|||
|
|||
## 安装 |
|||
|
|||
使用ABP CLI添加[Volo.Abp.EventBus.Rebus[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus)NuGet包到你的项目: |
|||
|
|||
* 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. |
|||
* 在你想要安装 `Volo.Abp.EventBus.Rebus` 包的 `.csproj` 文件目录打开命令行(终端). |
|||
* 运行 `abp add-package Volo.Abp.EventBus.Rebus` 命令. |
|||
|
|||
如果你想要手动安装,安装[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus) NuGet 包到你的项目然后添加 `[DependsOn(typeof(AbpEventBusRebusModule))]` 到你的项目[模块](Module-Development-Basics.md)类. |
|||
|
|||
## 配置 |
|||
|
|||
可以使用配置使用标准的[配置系统](Configuration.md),如[选项](Options.md)类. |
|||
|
|||
`AbpRebusEventBusOptions` 类用于配置事件总线选项. |
|||
|
|||
你可以在你的[模块](Module-Development-Basics.md)的 `PreConfigureServices` 方法配置选项. |
|||
|
|||
**示例: 最小化配置** |
|||
|
|||
```csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
}); |
|||
``` |
|||
|
|||
Rebus 有很多选项,你可以使用 `AbpRebusEventBusOptions` 的 `Configurer` 属性来配置. |
|||
|
|||
默认事件**存储在内存中**. 参阅[rebus文档](https://github.com/rebus-org/Rebus/wiki/Transport)了解更多信息. |
|||
|
|||
**示例: 配置存储** |
|||
|
|||
````csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
options.Configurer = rebusConfigurer => |
|||
{ |
|||
rebusConfigurer.Transport(t => t.UseMsmq("eventbus")); |
|||
rebusConfigurer.Subscriptions(s => s.UseJsonFile(@"subscriptions.json")); |
|||
}; |
|||
}); |
|||
```` |
|||
|
|||
你可以使用 `AbpRebusEventBusOptions` 的 `Publish` 属性来更改发布方法. |
|||
|
|||
**示例: 配置事件发布** |
|||
|
|||
````csharp |
|||
PreConfigure<AbpRebusEventBusOptions>(options => |
|||
{ |
|||
options.InputQueueName = "eventbus"; |
|||
options.Publish = async (bus, type, data) => |
|||
{ |
|||
await bus.Publish(data); |
|||
}; |
|||
}); |
|||
```` |
|||
4
modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20200810022447_Initial.Designer.cs → modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20201013055337_Initial.Designer.cs
4
modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20200810022447_Initial.Designer.cs → modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20201013055337_Initial.Designer.cs
0
modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20200810022447_Initial.cs → modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20201013055337_Initial.cs
0
modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20200810022447_Initial.cs → modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/Migrations/20201013055337_Initial.cs
@ -0,0 +1,39 @@ |
|||
using System; |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
|
|||
namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations |
|||
{ |
|||
public partial class AddLinkUser : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.CreateTable( |
|||
name: "AbpLinkUsers", |
|||
columns: table => new |
|||
{ |
|||
Id = table.Column<Guid>(nullable: false), |
|||
SourceUserId = table.Column<Guid>(nullable: false), |
|||
SourceTenantId = table.Column<Guid>(nullable: true), |
|||
TargetUserId = table.Column<Guid>(nullable: false), |
|||
TargetTenantId = table.Column<Guid>(nullable: true) |
|||
}, |
|||
constraints: table => |
|||
{ |
|||
table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); |
|||
}); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId", |
|||
table: "AbpLinkUsers", |
|||
columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, |
|||
unique: true, |
|||
filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropTable( |
|||
name: "AbpLinkUsers"); |
|||
} |
|||
} |
|||
} |
|||
@ -1,3 +1,3 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait /> |
|||
</Weavers> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
|
|||
File diff suppressed because it is too large
@ -1,103 +0,0 @@ |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
|
|||
namespace Volo.CmsKit.Migrations |
|||
{ |
|||
public partial class ReArrange_Indexes : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUserReactions_EntityType_EntityId", |
|||
table: "CmsUserReactions"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUserReactions_CreatorId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsComments_RepliedCommentId", |
|||
table: "CmsComments"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsComments_EntityType_EntityId", |
|||
table: "CmsComments"); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUsers_TenantId_Email", |
|||
table: "CmsUsers", |
|||
columns: new[] { "TenantId", "Email" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUsers_TenantId_UserName", |
|||
table: "CmsUsers", |
|||
columns: new[] { "TenantId", "UserName" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUserReactions_TenantId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions", |
|||
columns: new[] { "TenantId", "EntityType", "EntityId", "ReactionName" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions", |
|||
columns: new[] { "TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsComments_TenantId_RepliedCommentId", |
|||
table: "CmsComments", |
|||
columns: new[] { "TenantId", "RepliedCommentId" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsComments_TenantId_EntityType_EntityId", |
|||
table: "CmsComments", |
|||
columns: new[] { "TenantId", "EntityType", "EntityId" }); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUsers_TenantId_Email", |
|||
table: "CmsUsers"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUsers_TenantId_UserName", |
|||
table: "CmsUsers"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUserReactions_TenantId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsComments_TenantId_RepliedCommentId", |
|||
table: "CmsComments"); |
|||
|
|||
migrationBuilder.DropIndex( |
|||
name: "IX_CmsComments_TenantId_EntityType_EntityId", |
|||
table: "CmsComments"); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUserReactions_EntityType_EntityId", |
|||
table: "CmsUserReactions", |
|||
columns: new[] { "EntityType", "EntityId" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsUserReactions_CreatorId_EntityType_EntityId_ReactionName", |
|||
table: "CmsUserReactions", |
|||
columns: new[] { "CreatorId", "EntityType", "EntityId", "ReactionName" }); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsComments_RepliedCommentId", |
|||
table: "CmsComments", |
|||
column: "RepliedCommentId"); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsComments_EntityType_EntityId", |
|||
table: "CmsComments", |
|||
columns: new[] { "EntityType", "EntityId" }); |
|||
} |
|||
} |
|||
} |
|||
@ -1,39 +0,0 @@ |
|||
using System; |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
|
|||
namespace Volo.CmsKit.Migrations |
|||
{ |
|||
public partial class CmsRatings_Added : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.CreateTable( |
|||
name: "CmsRatings", |
|||
columns: table => new |
|||
{ |
|||
Id = table.Column<Guid>(nullable: false), |
|||
TenantId = table.Column<Guid>(nullable: true), |
|||
EntityType = table.Column<string>(maxLength: 64, nullable: false), |
|||
EntityId = table.Column<string>(maxLength: 64, nullable: false), |
|||
StarCount = table.Column<short>(nullable: false), |
|||
CreatorId = table.Column<Guid>(nullable: false), |
|||
CreationTime = table.Column<DateTime>(nullable: false) |
|||
}, |
|||
constraints: table => |
|||
{ |
|||
table.PrimaryKey("PK_CmsRatings", x => x.Id); |
|||
}); |
|||
|
|||
migrationBuilder.CreateIndex( |
|||
name: "IX_CmsRatings_TenantId_EntityType_EntityId", |
|||
table: "CmsRatings", |
|||
columns: new[] { "TenantId", "EntityType", "EntityId" }); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropTable( |
|||
name: "CmsRatings"); |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -1,14 +1,333 @@ |
|||
<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" (click)="login()" class="px-4 btn btn-primary ml-1" role="button" |
|||
><i class="fa fa-sign-in"></i> {{ 'AbpAccount::Login' | abpLocalization }}</a |
|||
> |
|||
<div class="container"> |
|||
<div class="p-5 text-center"> |
|||
<div class="badge badge-success h5 rounded mb-4" role="alert"> |
|||
<h5 class="m-1"> |
|||
<i class="fas fa-rocket"></i> Congratulations, <strong>MyProjectName</strong> is |
|||
successfully running! |
|||
</h5> |
|||
</div> |
|||
<h1>{{ '::Welcome' | abpLocalization }}</h1> |
|||
|
|||
<p class="lead px-lg-5 mx-lg-5">{{ '::LongWelcomeMessage' | abpLocalization }}</p> |
|||
|
|||
<a *ngIf="!hasLoggedIn" (click)="login()" class="px-4 btn btn-primary ml-1" role="button" |
|||
><i class="fa fa-sign-in"></i> {{ 'AbpAccount::Login' | abpLocalization }}</a |
|||
> |
|||
</div> |
|||
<div class="my-3 text-center"> |
|||
<h3>Let's improve your application!</h3> |
|||
<p>Here are some links to help you get started:</p> |
|||
</div> |
|||
<div class="card mt-4 mb-5"> |
|||
<div class="card-body"> |
|||
<div class="row text-center justify-content-md-center"> |
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Learn the ABP Framework', |
|||
description: |
|||
'Explore the compherensive documentation to learn how to build a modern web application.', |
|||
links: [ |
|||
{ |
|||
href: 'https://docs.abp.io/en/abp/latest?ref=tmpl', |
|||
label: 'See Documents' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Samples', |
|||
description: 'See the example projects built with the ABP Framework.', |
|||
links: [ |
|||
{ |
|||
href: 'https://docs.abp.io/en/abp/latest/Samples/Index?ref=tmpl', |
|||
label: 'All samples' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'ABP Community', |
|||
description: 'Get involved with a vibrant community and become a contributor.', |
|||
links: [ |
|||
{ |
|||
href: 'https://community.abp.io/', |
|||
label: 'Community' |
|||
}, |
|||
{ |
|||
href: 'https://docs.abp.io/en/abp/latest/Contribution/Index?ref=tmpl', |
|||
label: 'Contribute' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
</div> |
|||
<div class="row text-center mt-lg-3 justify-content-md-center"> |
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'ABP Blog', |
|||
description: 'Take a look at our recently published articles.', |
|||
links: [ |
|||
{ |
|||
href: 'https://blog.abp.io/abp?ref=tmpl', |
|||
label: 'See Blog' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-template #githubButtonsTemplate> |
|||
<p class="mb-1"> |
|||
<iframe |
|||
scrolling="no" |
|||
src="https://buttons.github.io/buttons.html#href=https%3A%2F%2Fgithub.com%2Fabpframework%2Fabp&title=&aria-label=Star%20tabalinas%2Fjsgrid%20on%20GitHub&data-icon=octicon-star&data-text=Star&data-size=large&data-show-count=true" |
|||
style=" |
|||
width: 122px; |
|||
height: 28px; |
|||
border: none; |
|||
display: inline-block; |
|||
margin-right: 4px; |
|||
" |
|||
></iframe> |
|||
<iframe |
|||
scrolling="no" |
|||
src="https://buttons.github.io/buttons.html#href=https%3A%2F%2Fgithub.com%2Fabpframework%2Fabp%2Fissues&title=&aria-label=Issue%20tabalinas%2Fjsgrid%20on%20GitHub&data-icon=octicon-issue-opened&data-text=Issue&data-size=large" |
|||
style=" |
|||
width: 72px; |
|||
height: 28px; |
|||
border: none; |
|||
display: inline-block; |
|||
margin-right: 4px; |
|||
" |
|||
></iframe> |
|||
|
|||
<iframe |
|||
scrolling="no" |
|||
src="https://buttons.github.io/buttons.html#href=https%3A%2F%2Fgithub.com%2Fabpframework%2Fabp%2Ffork&title=&aria-label=Fork%20tabalinas%2Fjsgrid%20on%20GitHub&data-icon=octicon-repo-forked&data-text=Fork&data-size=large&" |
|||
style="width: 72px; height: 28px; border: none; display: inline-block" |
|||
></iframe> |
|||
</p> |
|||
</ng-template> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Github', |
|||
description: |
|||
'Do you love the ABP Framework? Please <strong>give a star</strong> to support it!', |
|||
links: [ |
|||
{ |
|||
href: 'https://github.com/abpframework/abp/issues/new?template=feature.md', |
|||
label: 'Request a feature' |
|||
} |
|||
], |
|||
customTemplate: githubButtonsTemplate |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
starterLinkTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Stackoverflow', |
|||
description: 'See answers to previously asked questions or ask a new one.', |
|||
links: [ |
|||
{ |
|||
href: 'https://stackoverflow.com/questions/tagged/abp', |
|||
label: 'Questions' |
|||
}, |
|||
{ |
|||
href: 'https://stackoverflow.com/questions/ask', |
|||
label: 'Ask a Question' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="mt-5 my-3 text-center"> |
|||
<h3>Meet the ABP Commercial</h3> |
|||
<p>A Complete Web Application Platform Built on the ABP Framework</p> |
|||
</div> |
|||
|
|||
<div class="card mt-4 mb-5"> |
|||
<div class="card-body"> |
|||
<p class="px-lg-5 mx-lg-5 py-3 text-center"> |
|||
<a href="https://commercial.abp.io/" target="_blank">ABP Commercial</a> is a platform based |
|||
on the open source ABP framework. It provides pre-built application modules, rapid |
|||
application development tooling, professional UI themes, premium support and more. |
|||
</p> |
|||
|
|||
<div class="row text-center justify-content-md-center"> |
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Startup Templates', |
|||
href: 'https://commercial.abp.io/startup-templates?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Application Modules', |
|||
href: 'https://commercial.abp.io/modules?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Developer<br />Tools', |
|||
href: 'https://commercial.abp.io/tools?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'UI<br />Themes', |
|||
href: 'https://commercial.abp.io/themes?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Premium Support', |
|||
href: 'https://support.abp.io/QA/Questions?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
|
|||
<ng-container |
|||
*ngTemplateOutlet=" |
|||
featuresTemplate; |
|||
context: { |
|||
$implicit: { |
|||
title: 'Additional Services', |
|||
href: 'https://commercial.abp.io/additional-services?ref=tmpl' |
|||
} |
|||
} |
|||
" |
|||
></ng-container> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="mb-5 text-center"> |
|||
<p class="align-middle"> |
|||
<a href="https://twitter.com/abpframework" target="_blank" class="mx-2" |
|||
><i class="fa fa-twitter"></i><span class="text-secondary"> Abp Framework</span></a |
|||
> |
|||
<a href="https://twitter.com/abpcommercial" target="_blank" class="mx-2" |
|||
><i class="fa fa-twitter"></i><span class="text-secondary"> Abp Commercial</span></a |
|||
> |
|||
<a href="https://github.com/abpframework/abp" target="_blank" class="mx-2" |
|||
><i class="fa fa-github"></i><span class="text-secondary"> abpframework</span></a |
|||
> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<ng-template #starterLinkTemplate let-context> |
|||
<div class="col-lg-4 border-left"> |
|||
<div class="p-4"> |
|||
<h5 class="mb-3"> |
|||
<i class="fas fa-cubes text-secondary d-block my-3 fa-2x"></i> {{ context.title }} |
|||
</h5> |
|||
<p [innerHTML]="context.description"></p> |
|||
<ng-container |
|||
*ngIf="context.customTemplate" |
|||
[ngTemplateOutlet]="context.customTemplate" |
|||
></ng-container> |
|||
<a |
|||
*ngFor="let link of context.links" |
|||
[href]="link.href" |
|||
target="_blank" |
|||
class="btn btn-link px-1" |
|||
>{{ link.label }} <i class="fas fa-chevron-right"></i |
|||
></a> |
|||
</div> |
|||
</div> |
|||
</ng-template> |
|||
|
|||
<ng-template #featuresTemplate let-context> |
|||
<div class="col-lg-2 border-left"> |
|||
<div class="p-3"> |
|||
<h6> |
|||
<i class="fas fa-plus d-block mb-3 fa- 2x text-secondary"></i> |
|||
<span [innerHTML]="context.title"></span> |
|||
<a [href]="context.href" target="_blank" class="d-block mt-2 btn btn-sm btn-link" |
|||
>Details <i class="fas fa-chevron-right"></i |
|||
></a> |
|||
</h6> |
|||
</div> |
|||
</div> |
|||
</ng-template> |
|||
|
|||
<style scoped> |
|||
.col-lg-2.border-left:nth-of-type(6n + 1) { |
|||
border-left: 0 !important; |
|||
} |
|||
|
|||
.col-lg-4.border-left:nth-of-type(3n + 1) { |
|||
border-left: 0 !important; |
|||
} |
|||
|
|||
@media (max-width: 991px) { |
|||
.border-left { |
|||
border-left: 0 !important; |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
@ -1,62 +1,7 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Security.Claims; |
|||
using System.Threading.Tasks; |
|||
using Blazorise; |
|||
using Microsoft.AspNetCore.Components; |
|||
using Volo.Abp.AspNetCore.Components.WebAssembly; |
|||
|
|||
namespace MyCompanyName.MyProjectName.Blazor.Pages |
|||
namespace MyCompanyName.MyProjectName.Blazor.Pages |
|||
{ |
|||
public partial class Index |
|||
{ |
|||
private IEnumerable<Claim> _claims; |
|||
|
|||
protected override async Task OnInitializedAsync() |
|||
{ |
|||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); |
|||
if ( authState.User.Identity.IsAuthenticated ) |
|||
{ |
|||
_claims = authState.User.Claims; |
|||
} |
|||
} |
|||
|
|||
Task OnInfoTestClicked() |
|||
{ |
|||
return UiMessageService.InfoAsync( "This is the Info message", "Info", options => |
|||
{ |
|||
options.OkButtonIcon = IconName.InfoCircle; |
|||
options.OkButtonText = "Hello info"; |
|||
} ); |
|||
} |
|||
|
|||
Task OnSuccessTestClicked() |
|||
{ |
|||
return UiMessageService.SuccessAsync( "This is the Success message", "Success" ); |
|||
} |
|||
|
|||
Task OnWarningTestClicked() |
|||
{ |
|||
return UiMessageService.WarnAsync( "This is the Warning message", "Warning" ); |
|||
} |
|||
|
|||
Task OnErrorTestClicked() |
|||
{ |
|||
return UiMessageService.ErrorAsync( "This is the Error message", "Error" ); |
|||
} |
|||
|
|||
async Task OnConfirmTestClicked() |
|||
{ |
|||
if ( await UiMessageService.ConfirmAsync( "Are you sure you want to delete the item?", "Confirm", options => |
|||
{ |
|||
options.CancelButtonText = "Do not delete it"; |
|||
options.ConfirmButtonText = "Yes I'm sure"; |
|||
} ) ) |
|||
{ |
|||
Console.WriteLine( "Confirmed" ); |
|||
} |
|||
} |
|||
|
|||
[Inject] IUiMessageService UiMessageService { get; set; } |
|||
} |
|||
} |
|||
|
|||
Loading…
Reference in new issue