mirror of https://github.com/abpframework/eventhub
4 changed files with 209 additions and 0 deletions
@ -0,0 +1,130 @@ |
|||||
|
@page |
||||
|
@using EventHub.Localization |
||||
|
@using EventHub.Organizations |
||||
|
@using Microsoft.AspNetCore.Mvc.Localization |
||||
|
@using Microsoft.Extensions.Options |
||||
|
@model EventHub.Web.Pages.Pricing |
||||
|
@inject IOptionsSnapshot<List<OrganizationPlanInfoOptions>> OrganizationPlanInfoOptionsSnapshot |
||||
|
@inject IHtmlLocalizer<EventHubResource> L |
||||
|
|
||||
|
@section styles { |
||||
|
<abp-style src="/Pages/Pricing.css" /> |
||||
|
} |
||||
|
|
||||
|
<div class="container-fluid flex-grow-1 container-p-y pricing-table"> |
||||
|
<div class="container px-0"> |
||||
|
|
||||
|
<h1 class="text-center font-weight-bolder pt-5 mb-3"> |
||||
|
Pricing plans |
||||
|
</h1> |
||||
|
<div class="text-center text-muted text-large font-weight-light"> |
||||
|
Choose the best plan that fits your needs |
||||
|
</div> |
||||
|
|
||||
|
<div class="row no-gutters row-bordered ui-bordered text-center mt-3"> |
||||
|
|
||||
|
<div class="d-flex col-md flex-column py-4"> |
||||
|
<div class="display-1 text-primary my-4"><i class="lnr lnr-briefcase text-big"></i></div> |
||||
|
<h5 class="m-0">Normal</h5> |
||||
|
<div class="flex-grow-1"> |
||||
|
<div class="py-4 my-2"> |
||||
|
<span class="d-inline-block text-muted text-big align-middle mr-2">$</span> |
||||
|
<span class="display-3 d-inline-block font-weight-bold align-middle">0</span> |
||||
|
<span class="d-inline-block text-muted text-big align-middle ml-2">/ year</span> |
||||
|
</div> |
||||
|
<div class="pb-5"> |
||||
|
<p class="ui-company-text mb-2">1 Organization</p> |
||||
|
<p class="ui-company-text mb-2">2 Events</p> |
||||
|
<p class="ui-company-text mb-0">No ads</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="px-md-3 px-lg-5"> |
||||
|
<a class="btn btn-outline-primary btn-lg rounded-pill">Default</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@*TODO: Multiple plans are not supported at this time.*@ |
||||
|
@foreach (var plan in OrganizationPlanInfoOptionsSnapshot.Value.Where(x => x.IsActive)) |
||||
|
{ |
||||
|
<div class="d-flex col-md flex-column py-4"> |
||||
|
<div class="display-1 text-primary my-4"><i class="lnr lnr-store text-big"></i></div> |
||||
|
<h5 class="m-0">@plan.PlanType</h5> |
||||
|
<div class="flex-grow-1"> |
||||
|
<div class="py-4 my-2"> |
||||
|
<span class="d-inline-block text-muted text-big align-middle mr-2">$</span> |
||||
|
<span class="display-3 d-inline-block font-weight-bold align-middle">@plan.Price</span> |
||||
|
<span class="d-inline-block text-muted text-big align-middle ml-2">/ year</span> |
||||
|
</div> |
||||
|
<div class="pb-5"> |
||||
|
<p class="ui-company-text mb-2">1 Organization</p> |
||||
|
<p class="ui-company-text mb-2">2 Events</p> |
||||
|
<p class="ui-company-text mb-0">No ads</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="px-md-3 px-lg-5"> |
||||
|
|
||||
|
@if (Model.Organization.IsPremium) |
||||
|
{ |
||||
|
<a class="btn btn-success btn-lg rounded-pill">Current Plan</a> |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
<a href="javascript:void(0)" class="btn btn-primary btn-lg rounded-pill">Buy Now</a> |
||||
|
} |
||||
|
</div> |
||||
|
</div> |
||||
|
} |
||||
|
</div> |
||||
|
|
||||
|
<h3 class="text-center font-weight-light my-5">Frequently Asked Questions</h3> |
||||
|
|
||||
|
<div class="row"> |
||||
|
<div class="col-md-6"> |
||||
|
|
||||
|
<h5 class="mb-2">Dapibus ac facilisis in?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Lorem ipsum dolor sit amet, ius virtute suscipit te. Ius prima euismod consequat eu. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Cras justo odio?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Etiam vivendo eu sea, purto ponderum mediocritatem at pro. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Porta ac consectetur ac?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Iuvaret deleniti vulputate nec ne, id vix lucilius legendos deseruisse. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Ne ornatus albucius ius?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Lorem ipsum dolor sit amet, mea in pertinax hendrerit gloriatur. |
||||
|
</p> |
||||
|
|
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
|
||||
|
<h5 class="mb-2">Ne ornatus albucius ius?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Lorem ipsum dolor sit amet, mea in pertinax hendrerit gloriatur. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Quo insolens intellegam dissentiet at?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Ex fugit legimus fuisset per. Ex quidam option diceret ius. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Ad his assum delenit blandit?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Ne ornatus albucius ius, nostrum dignissim repudiandae an usu. |
||||
|
</p> |
||||
|
|
||||
|
<h5 class="mb-2">Dapibus ac facilisis in?</h5> |
||||
|
<p class="ui-company-text text-muted mb-4"> |
||||
|
Lorem ipsum dolor sit amet, ius virtute suscipit te. Ius prima euismod consequat eu. |
||||
|
</p> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
@ -0,0 +1,37 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using EventHub.Organizations; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp.Authorization; |
||||
|
|
||||
|
namespace EventHub.Web.Pages |
||||
|
{ |
||||
|
public class Pricing : EventHubPageModel |
||||
|
{ |
||||
|
[BindProperty(SupportsGet = true)] |
||||
|
public string OrganizationName { get; set; } |
||||
|
|
||||
|
public OrganizationProfileDto Organization { get; private set; } |
||||
|
|
||||
|
private readonly IOrganizationAppService _organizationAppService; |
||||
|
|
||||
|
public Pricing(IOrganizationAppService organizationAppService) |
||||
|
{ |
||||
|
_organizationAppService = organizationAppService; |
||||
|
} |
||||
|
|
||||
|
public async Task OnGetAsync() |
||||
|
{ |
||||
|
Organization = await _organizationAppService.GetProfileAsync(OrganizationName); |
||||
|
|
||||
|
if (CurrentUser.UserName != Organization.OwnerUserName) |
||||
|
{ |
||||
|
throw new AbpAuthorizationException(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public async Task OnPostAsync() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,41 @@ |
|||||
|
.pricing-table{ |
||||
|
margin: 0; |
||||
|
font-size: .894rem; |
||||
|
font-weight: 400; |
||||
|
line-height: 1.47; |
||||
|
color: #4E5155; |
||||
|
text-align: left; |
||||
|
} |
||||
|
|
||||
|
.display-3 { |
||||
|
font-size: 3rem; |
||||
|
font-weight: 300; |
||||
|
line-height: 1.1; |
||||
|
} |
||||
|
|
||||
|
.font-weight-bold { |
||||
|
font-weight: 700 !important; |
||||
|
} |
||||
|
|
||||
|
.row-bordered>.col::after, .row-bordered>[class^="col-"]::after, .row-bordered>[class*=" col-"]::after, .row-bordered>[class^="col "]::after, .row-bordered>[class*=" col "]::after, .row-bordered>[class$=" col"]::after, .row-bordered>[class="col"]::after { |
||||
|
content: ""; |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
bottom: 0; |
||||
|
left: -1px; |
||||
|
display: block; |
||||
|
width: 0; |
||||
|
border-left: 1px solid rgba(24,28,33,0.06); |
||||
|
} |
||||
|
|
||||
|
.ui-bordered { |
||||
|
border: 1px solid rgba(24,28,33,0.06); |
||||
|
} |
||||
|
|
||||
|
.row-bordered { |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
html:not([dir=rtl]) .mb-4, html:not([dir=rtl]) .my-4 { |
||||
|
margin-bottom: 1.5rem !important; |
||||
|
} |
||||
Loading…
Reference in new issue