mirror of https://github.com/abpframework/abp.git
committed by
GitHub
31 changed files with 529 additions and 347 deletions
@ -1,15 +1,19 @@ |
|||||
<div class="card"> |
<div id="AbpContentToolbar"></div> |
||||
<div class="card-header">{{ '::Welcome' | abpLocalization }}</div> |
<div class="jumbotron text-center"> |
||||
<div class="card-body"> |
<h1>{{ '::Welcome' | abpLocalization }}</h1> |
||||
<p> |
<div class="row"> |
||||
{{ '::LongWelcomeMessage' | abpLocalization }} |
<div class="col-md-6 mx-auto"> |
||||
</p> |
<p>{{ '::LongWelcomeMessage' | abpLocalization }}</p> |
||||
<p *ngIf="!hasLoggedIn"> |
<hr class="my-4" /> |
||||
<a routerLink="/account/login" [state]="{ redirectUrl: '/' }" class="btn btn-primary" role="button" |
</div> |
||||
><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> |
</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> |
</div> |
||||
|
|||||
@ -0,0 +1,14 @@ |
|||||
|
<div class="row"> |
||||
|
<div class="mx-auto col col-md-5"> |
||||
|
<abp-tenant-box></abp-tenant-box> |
||||
|
|
||||
|
<div class="abp-account-container"> |
||||
|
<div class="card mt-3 shadow-sm rounded"> |
||||
|
<div class="card-body p-5"> |
||||
|
<ng-content *ngTemplateOutlet="mainContentRef"></ng-content> |
||||
|
</div> |
||||
|
<ng-content *ngTemplateOutlet="cancelContentRef"></ng-content> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
@ -0,0 +1,13 @@ |
|||||
|
import { Component, Input, TemplateRef } from '@angular/core'; |
||||
|
|
||||
|
@Component({ |
||||
|
selector: 'abp-auth-wrapper', |
||||
|
templateUrl: './auth-wrapper.component.html', |
||||
|
}) |
||||
|
export class AuthWrapperComponent { |
||||
|
@Input() |
||||
|
mainContentRef: TemplateRef<any>; |
||||
|
|
||||
|
@Input() |
||||
|
cancelContentRef: TemplateRef<any>; |
||||
|
} |
||||
@ -1,41 +1,50 @@ |
|||||
<div class="row"> |
<abp-auth-wrapper [mainContentRef]="mainContentRef" [cancelContentRef]="cancelContentRef"> |
||||
<div class="col col-md-4 offset-md-4"> |
<ng-template #mainContentRef> |
||||
<abp-tenant-box></abp-tenant-box> |
<h4>{{ 'AbpAccount::Login' | abpLocalization }}</h4> |
||||
|
<strong> |
||||
<div class="abp-account-container"> |
{{ 'AbpAccount::AreYouANewUser' | abpLocalization }} |
||||
<h2>{{ 'AbpAccount::Login' | abpLocalization }}</h2> |
<a class="text-decoration-none" routerLink="/account/register">{{ 'AbpAccount::Register' | abpLocalization }}</a> |
||||
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate> |
</strong> |
||||
<div class="form-group"> |
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate class="mt-4"> |
||||
<label for="login-input-user-name-or-email-address">{{ |
<div class="form-group"> |
||||
'AbpAccount::UserNameOrEmailAddress' | abpLocalization |
<label for="login-input-user-name-or-email-address">{{ |
||||
}}</label> |
'AbpAccount::UserNameOrEmailAddress' | abpLocalization |
||||
<input |
}}</label> |
||||
class="form-control" |
<input |
||||
type="text" |
class="form-control" |
||||
id="login-input-user-name-or-email-address" |
type="text" |
||||
formControlName="username" |
id="login-input-user-name-or-email-address" |
||||
autofocus |
formControlName="username" |
||||
/> |
autofocus |
||||
</div> |
/> |
||||
<div class="form-group"> |
|
||||
<label for="login-input-password">{{ 'AbpAccount::Password' | abpLocalization }}</label> |
|
||||
<input class="form-control" type="password" id="login-input-password" formControlName="password" /> |
|
||||
</div> |
|
||||
<div class="form-check" validationTarget validationStyle> |
|
||||
<label class="form-check-label" for="login-input-remember-me"> |
|
||||
<input class="form-check-input" type="checkbox" id="login-input-remember-me" formControlName="remember" /> |
|
||||
{{ 'AbpAccount::RememberMe' | abpLocalization }} |
|
||||
</label> |
|
||||
</div> |
|
||||
<div class="mt-2"> |
|
||||
<abp-button [loading]="inProgress" type="submit"> |
|
||||
{{ 'AbpAccount::Login' | abpLocalization }} |
|
||||
</abp-button> |
|
||||
</div> |
|
||||
</form> |
|
||||
<div style="padding-top: 20px"> |
|
||||
<a routerLink="/account/register">{{ 'AbpAccount::Register' | abpLocalization }}</a> |
|
||||
</div> |
</div> |
||||
|
<div class="form-group"> |
||||
|
<label for="login-input-password">{{ 'AbpAccount::Password' | abpLocalization }}</label> |
||||
|
<input class="form-control" type="password" id="login-input-password" formControlName="password" /> |
||||
|
</div> |
||||
|
<div class="form-check" validationTarget validationStyle> |
||||
|
<label class="form-check-label" for="login-input-remember-me"> |
||||
|
<input class="form-check-input" type="checkbox" id="login-input-remember-me" formControlName="remember" /> |
||||
|
{{ 'AbpAccount::RememberMe' | abpLocalization }} |
||||
|
</label> |
||||
|
</div> |
||||
|
<abp-button |
||||
|
[loading]="inProgress" |
||||
|
buttonType="submit" |
||||
|
name="Action" |
||||
|
buttonClass="btn-block btn-lg mt-3 btn btn-primary" |
||||
|
> |
||||
|
{{ 'AbpAccount::Login' | abpLocalization }} |
||||
|
</abp-button> |
||||
|
</form> |
||||
|
</ng-template> |
||||
|
<ng-template #cancelContentRef> |
||||
|
<div class="card-footer text-center border-0"> |
||||
|
<a routerLink="/"> |
||||
|
<button type="button" name="Action" value="Cancel" class="px-2 py-0 btn btn-link"> |
||||
|
{{ 'AbpAccount::Cancel' | abpLocalization }} |
||||
|
</button> |
||||
|
</a> |
||||
</div> |
</div> |
||||
</div> |
</ng-template> |
||||
</div> |
</abp-auth-wrapper> |
||||
|
|||||
@ -1,30 +1,32 @@ |
|||||
<div class="row"> |
<abp-auth-wrapper [mainContentRef]="mainContentRef"> |
||||
<div class="col col-md-4 offset-md-4"> |
<ng-template #mainContentRef> |
||||
<abp-tenant-box></abp-tenant-box> |
<h4>{{ 'AbpAccount::Register' | abpLocalization }}</h4> |
||||
|
<strong> |
||||
<div class="abp-account-container"> |
{{ 'AbpAccount::AlreadyRegistered' | abpLocalization }} |
||||
<h2>{{ 'AbpAccount::Register' | abpLocalization }}</h2> |
<a class="text-decoration-none" routerLink="/account/login">{{ 'AbpAccount::Login' | abpLocalization }}</a> |
||||
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate> |
</strong> |
||||
<div class="form-group"> |
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate class="mt-4"> |
||||
<label for="input-user-name">{{ 'AbpAccount::UserName' | abpLocalization }}</label |
<div class="form-group"> |
||||
><span> * </span |
<label for="input-user-name">{{ 'AbpAccount::UserName' | abpLocalization }}</label |
||||
><input autofocus type="text" id="input-user-name" class="form-control" formControlName="username" /> |
><span> * </span |
||||
</div> |
><input autofocus type="text" id="input-user-name" class="form-control" formControlName="username" /> |
||||
<div class="form-group"> |
|
||||
<label for="input-email-address">{{ 'AbpAccount::EmailAddress' | abpLocalization }}</label |
|
||||
><span> * </span><input type="email" id="input-email-address" class="form-control" formControlName="email" /> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<label for="input-password">{{ 'AbpAccount::Password' | abpLocalization }}</label |
|
||||
><span> * </span><input type="password" id="input-password" class="form-control" formControlName="password" /> |
|
||||
</div> |
|
||||
<abp-button [loading]="inProgress" type="submit"> |
|
||||
{{ 'AbpAccount::Register' | abpLocalization }} |
|
||||
</abp-button> |
|
||||
</form> |
|
||||
<div style="padding-top: 20px"> |
|
||||
<a routerLink="/account/login">{{ 'AbpAccount::Login' | abpLocalization }}</a> |
|
||||
</div> |
</div> |
||||
</div> |
<div class="form-group"> |
||||
</div> |
<label for="input-email-address">{{ 'AbpAccount::EmailAddress' | abpLocalization }}</label |
||||
</div> |
><span> * </span><input type="email" id="input-email-address" class="form-control" formControlName="email" /> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label for="input-password">{{ 'AbpAccount::Password' | abpLocalization }}</label |
||||
|
><span> * </span><input type="password" id="input-password" class="form-control" formControlName="password" /> |
||||
|
</div> |
||||
|
<abp-button |
||||
|
[loading]="inProgress" |
||||
|
buttonType="submit" |
||||
|
name="Action" |
||||
|
buttonClass="btn-block btn-lg mt-3 btn btn-primary" |
||||
|
> |
||||
|
{{ 'AbpAccount::Register' | abpLocalization }} |
||||
|
</abp-button> |
||||
|
</form> |
||||
|
</ng-template> |
||||
|
</abp-auth-wrapper> |
||||
|
|||||
@ -1 +0,0 @@ |
|||||
<router-outlet></router-outlet> |
|
||||
@ -1,124 +1,197 @@ |
|||||
<abp-layout> |
<nav |
||||
<ul class="navbar-nav mr-auto"> |
class="navbar navbar-expand-md navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4" |
||||
<ng-container |
id="main-navbar" |
||||
*ngFor="let route of visibleRoutes$ | async; trackBy: trackByFn" |
style="min-height: 4rem;" |
||||
[ngTemplateOutlet]="route?.children?.length ? dropdownLink : defaultLink" |
> |
||||
[ngTemplateOutletContext]="{ $implicit: route }" |
<div class="container"> |
||||
|
<a class="navbar-brand" routerLink="/"> |
||||
|
<img *ngIf="appInfo.logoUrl; else appName" [src]="appInfo.logoUrl" [alt]="appInfo.name" /> |
||||
|
</a> |
||||
|
<button |
||||
|
class="navbar-toggler" |
||||
|
type="button" |
||||
|
[attr.aria-expanded]="!isCollapsed" |
||||
|
(click)="isCollapsed = !isCollapsed" |
||||
> |
> |
||||
</ng-container> |
<span class="navbar-toggler-icon"></span> |
||||
|
</button> |
||||
|
<div class="collapse navbar-collapse" id="main-navbar-collapse" [ngbCollapse]="isCollapsed"> |
||||
|
<ul class="navbar-nav mx-auto"> |
||||
|
<ng-container |
||||
|
*ngFor="let route of visibleRoutes$ | async; trackBy: trackByFn" |
||||
|
[ngTemplateOutlet]="route?.children?.length ? dropdownLink : defaultLink" |
||||
|
[ngTemplateOutletContext]="{ $implicit: route }" |
||||
|
> |
||||
|
</ng-container> |
||||
|
|
||||
<ng-template #defaultLink let-route> |
<ng-template #defaultLink let-route> |
||||
<li class="nav-item" [abpPermission]="route.requiredPolicy"> |
<li class="nav-item" [abpPermission]="route.requiredPolicy"> |
||||
<a class="nav-link" [routerLink]="[route.url]">{{ route.name | abpLocalization }}</a> |
<a class="nav-link" [routerLink]="[route.url]">{{ route.name | abpLocalization }}</a> |
||||
</li> |
</li> |
||||
</ng-template> |
</ng-template> |
||||
|
|
||||
<ng-template #dropdownLink let-route> |
<ng-template #dropdownLink let-route> |
||||
<li |
<li |
||||
#navbarRootDropdown |
#navbarRootDropdown |
||||
ngbDropdown |
ngbDropdown |
||||
[abpPermission]="route.requiredPolicy" |
[abpPermission]="route.requiredPolicy" |
||||
[abpVisibility]="routeContainer" |
[abpVisibility]="routeContainer" |
||||
class="nav-item dropdown pointer" |
class="nav-item" |
||||
display="static" |
display="static" |
||||
> |
(click)="$event.preventDefault(); $event.stopPropagation()" |
||||
<a ngbDropdownToggle class="nav-link dropdown-toggle pointer" data-toggle="dropdown"> |
> |
||||
{{ route.name | abpLocalization }} |
<a |
||||
</a> |
ngbDropdownToggle |
||||
<div #routeContainer ngbDropdownMenu class="dropdown-menu dropdown-menu-right"> |
class="nav-link" |
||||
|
data-toggle="dropdown" |
||||
|
aria-haspopup="true" |
||||
|
aria-expanded="false" |
||||
|
href="javascript:void(0)" |
||||
|
> |
||||
|
<i *ngIf="route.iconClass" [ngClass]="route.iconClass"></i> {{ route.name | abpLocalization }} |
||||
|
</a> |
||||
|
<div #routeContainer ngbDropdownMenu class="dropdown-menu border-0 shadow-sm"> |
||||
|
<ng-template |
||||
|
#forTemplate |
||||
|
ngFor |
||||
|
[ngForOf]="route.children" |
||||
|
[ngForTrackBy]="trackByFn" |
||||
|
[ngForTemplate]="childWrapper" |
||||
|
></ng-template> |
||||
|
</div> |
||||
|
</li> |
||||
|
</ng-template> |
||||
|
|
||||
|
<ng-template #childWrapper let-child> |
||||
<ng-template |
<ng-template |
||||
#forTemplate |
[ngTemplateOutlet]="child?.children?.length ? dropdownChild : defaultChild" |
||||
ngFor |
[ngTemplateOutletContext]="{ $implicit: child }" |
||||
[ngForOf]="route.children" |
|
||||
[ngForTrackBy]="trackByFn" |
|
||||
[ngForTemplate]="childWrapper" |
|
||||
></ng-template> |
></ng-template> |
||||
</div> |
</ng-template> |
||||
</li> |
|
||||
</ng-template> |
|
||||
|
|
||||
<ng-template #childWrapper let-child> |
|
||||
<ng-template |
|
||||
[ngTemplateOutlet]="child?.children?.length ? dropdownChild : defaultChild" |
|
||||
[ngTemplateOutletContext]="{ $implicit: child }" |
|
||||
></ng-template> |
|
||||
</ng-template> |
|
||||
|
|
||||
<ng-template #defaultChild let-child> |
<ng-template #defaultChild let-child> |
||||
<div class="dropdown-submenu" [abpPermission]="child.requiredPolicy"> |
<div class="dropdown-submenu" [abpPermission]="child.requiredPolicy"> |
||||
<a class="dropdown-item py-2 px-2" [routerLink]="[child.url]"> |
<a class="dropdown-item" [routerLink]="[child.url]"> |
||||
<i *ngIf="child.iconClass" [ngClass]="child.iconClass"></i> |
<i *ngIf="child.iconClass" [ngClass]="child.iconClass"></i> |
||||
{{ child.name | abpLocalization }}</a |
{{ child.name | abpLocalization }}</a |
||||
> |
> |
||||
</div> |
</div> |
||||
</ng-template> |
</ng-template> |
||||
|
|
||||
<ng-template #dropdownChild let-child> |
<ng-template #dropdownChild let-child> |
||||
<div |
<div |
||||
[abpVisibility]="childrenContainer" |
[abpVisibility]="childrenContainer" |
||||
class="dropdown-submenu pointer" |
class="dropdown-submenu" |
||||
ngbDropdown |
ngbDropdown |
||||
[display]="isDropdownChildDynamic ? 'dynamic' : 'static'" |
[display]="isDropdownChildDynamic ? 'dynamic' : 'static'" |
||||
placement="right-top" |
placement="right-top" |
||||
[abpPermission]="child.requiredPolicy" |
[autoClose]="true" |
||||
> |
[abpPermission]="child.requiredPolicy" |
||||
<div ngbDropdownToggle [class.dropdown-toggle]="false" class="pointer"> |
(openChange)="openChange($event, childrenContainer)" |
||||
<a |
|
||||
abpEllipsis="210px" |
|
||||
[abpEllipsisEnabled]="isDropdownChildDynamic" |
|
||||
role="button" |
|
||||
class="btn d-block text-left py-2 px-2 dropdown-toggle" |
|
||||
> |
> |
||||
<i *ngIf="child.iconClass" [ngClass]="child.iconClass"></i> |
<div ngbDropdownToggle [class.dropdown-toggle]="false"> |
||||
{{ child.name | abpLocalization }} |
<a |
||||
</a> |
abpEllipsis="210px" |
||||
</div> |
[abpEllipsisEnabled]="isDropdownChildDynamic" |
||||
<div #childrenContainer ngbDropdownMenu class="dropdown-menu dropdown-menu-right"> |
role="button" |
||||
<ng-template |
class="btn d-block text-left dropdown-toggle" |
||||
ngFor |
> |
||||
[ngForOf]="child.children" |
<i *ngIf="child.iconClass" [ngClass]="child.iconClass"></i> |
||||
[ngForTrackBy]="trackByFn" |
{{ child.name | abpLocalization }} |
||||
[ngForTemplate]="childWrapper" |
</a> |
||||
></ng-template> |
</div> |
||||
</div> |
<div #childrenContainer ngbDropdownMenu class="dropdown-menu border-0 shadow-sm"> |
||||
</div> |
<ng-template |
||||
</ng-template> |
ngFor |
||||
</ul> |
[ngForOf]="child.children" |
||||
|
[ngForTrackBy]="trackByFn" |
||||
|
[ngForTemplate]="childWrapper" |
||||
|
></ng-template> |
||||
|
</div> |
||||
|
</div> |
||||
|
</ng-template> |
||||
|
</ul> |
||||
|
|
||||
|
<ul class="navbar-nav"> |
||||
|
<ng-container |
||||
|
*ngFor="let element of rightPartElements; trackBy: trackElementByFn" |
||||
|
[ngTemplateOutlet]="element" |
||||
|
></ng-container> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</nav> |
||||
|
|
||||
<ul class="navbar-nav ml-auto"> |
<div [@slideFromBottom]="outlet && outlet.activatedRoute && outlet.activatedRoute.routeConfig.path" class="container"> |
||||
<ng-container |
<router-outlet #outlet="outlet"></router-outlet> |
||||
*ngFor="let element of rightPartElements; trackBy: trackElementByFn" |
</div> |
||||
[ngTemplateOutlet]="element" |
|
||||
></ng-container> |
<abp-confirmation></abp-confirmation> |
||||
</ul> |
<abp-toast></abp-toast> |
||||
</abp-layout> |
|
||||
|
<ng-template #appName> |
||||
|
{{ appInfo.name }} |
||||
|
</ng-template> |
||||
|
|
||||
<ng-template #language> |
<ng-template #language> |
||||
<li class="nav-item dropdown pointer" ngbDropdown> |
<li class="nav-item"> |
||||
<a ngbDropdownToggle class="nav-link dropdown-toggle text-white pointer" data-toggle="dropdown"> |
<div ngbDropdown display="static"> |
||||
{{ defaultLanguage$ | async }} |
|
||||
</a> |
|
||||
<div ngbDropdownMenu class="dropdown-menu dropdown-menu-right"> |
|
||||
<a |
<a |
||||
*ngFor="let lang of dropdownLanguages$ | async" |
ngbDropdownToggle |
||||
class="dropdown-item" |
class="nav-link" |
||||
(click)="onChangeLang(lang.cultureName)" |
href="javascript:void(0)" |
||||
>{{ lang?.displayName }}</a |
role="button" |
||||
|
id="dropdownMenuLink" |
||||
|
data-toggle="dropdown" |
||||
|
aria-haspopup="true" |
||||
|
aria-expanded="false" |
||||
> |
> |
||||
|
{{ defaultLanguage$ | async }} |
||||
|
</a> |
||||
|
<div |
||||
|
ngbDropdownMenu |
||||
|
class="dropdown-menu dropdown-menu-right border-0 shadow-sm" |
||||
|
aria-labelledby="dropdownMenuLink" |
||||
|
> |
||||
|
<a |
||||
|
*ngFor="let lang of dropdownLanguages$ | async" |
||||
|
href="javascript:void(0)" |
||||
|
class="dropdown-item" |
||||
|
(click)="onChangeLang(lang.cultureName)" |
||||
|
>{{ lang?.displayName }}</a |
||||
|
> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</li> |
</li> |
||||
</ng-template> |
</ng-template> |
||||
|
|
||||
<ng-template #currentUser> |
<ng-template #currentUser> |
||||
<li *ngIf="(currentUser$ | async)?.isAuthenticated" class="nav-item dropdown pointer" ngbDropdown> |
<li *ngIf="(currentUser$ | async)?.isAuthenticated" class="nav-item"> |
||||
<a ngbDropdownToggle class="nav-link dropdown-toggle text-white pointer" data-toggle="dropdown"> |
<div ngbDropdown display="static"> |
||||
{{ (currentUser$ | async)?.userName }} |
<a |
||||
</a> |
ngbDropdownToggle |
||||
<div ngbDropdownMenu class="dropdown-menu dropdown-menu-right"> |
class="nav-link" |
||||
<a class="dropdown-item pointer" routerLink="/account/manage-profile">{{ |
href="javascript:void(0)" |
||||
'AbpAccount::ManageYourProfile' | abpLocalization |
role="button" |
||||
}}</a> |
id="dropdownMenuLink" |
||||
<a class="dropdown-item pointer" (click)="logout()">{{ 'AbpUi::Logout' | abpLocalization }}</a> |
data-toggle="dropdown" |
||||
|
aria-haspopup="true" |
||||
|
aria-expanded="false" |
||||
|
> |
||||
|
{{ (currentUser$ | async)?.userName }} |
||||
|
</a> |
||||
|
<div |
||||
|
ngbDropdownMenu |
||||
|
class="dropdown-menu dropdown-menu-right border-0 shadow-sm" |
||||
|
aria-labelledby="dropdownMenuLink" |
||||
|
> |
||||
|
<a class="dropdown-item" routerLink="/account/manage-profile">{{ |
||||
|
'AbpAccount::ManageYourProfile' | abpLocalization |
||||
|
}}</a> |
||||
|
<a class="dropdown-item" href="javascript:void(0)" (click)="logout()">{{ |
||||
|
'AbpUi::Logout' | abpLocalization |
||||
|
}}</a> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</li> |
</li> |
||||
</ng-template> |
</ng-template> |
||||
|
|||||
@ -1,26 +0,0 @@ |
|||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top" id="main-navbar"> |
|
||||
<a class="navbar-brand" routerLink="/"> |
|
||||
<img *ngIf="appInfo.logoUrl; else appName" [src]="appInfo.logoUrl" [alt]="appInfo.name" /> |
|
||||
</a> |
|
||||
<button class="navbar-toggler" type="button" [attr.aria-expanded]="!isCollapsed" (click)="isCollapsed = !isCollapsed"> |
|
||||
<span class="navbar-toggler-icon"></span> |
|
||||
</button> |
|
||||
<div class="collapse navbar-collapse" id="main-navbar-collapse" [ngbCollapse]="isCollapsed"> |
|
||||
<ng-content></ng-content> |
|
||||
</div> |
|
||||
</nav> |
|
||||
|
|
||||
<div |
|
||||
[@slideFromBottom]="outlet && outlet.activatedRoute && outlet.activatedRoute.routeConfig.path" |
|
||||
style="padding-top: 5rem;" |
|
||||
class="container" |
|
||||
> |
|
||||
<router-outlet #outlet="outlet"></router-outlet> |
|
||||
</div> |
|
||||
|
|
||||
<abp-confirmation></abp-confirmation> |
|
||||
<abp-toast></abp-toast> |
|
||||
|
|
||||
<ng-template #appName> |
|
||||
{{ appInfo.name }} |
|
||||
</ng-template> |
|
||||
@ -1,19 +0,0 @@ |
|||||
import { Config, ConfigState } from '@abp/ng.core'; |
|
||||
import { slideFromBottom } from '@abp/ng.theme.shared'; |
|
||||
import { Component } from '@angular/core'; |
|
||||
import { Store } from '@ngxs/store'; |
|
||||
|
|
||||
@Component({ |
|
||||
selector: ' abp-layout', |
|
||||
templateUrl: './layout.component.html', |
|
||||
animations: [slideFromBottom] |
|
||||
}) |
|
||||
export class LayoutComponent { |
|
||||
isCollapsed = true; |
|
||||
|
|
||||
get appInfo(): Config.Application { |
|
||||
return this.store.selectSnapshot(ConfigState.getApplicationInfo); |
|
||||
} |
|
||||
|
|
||||
constructor(private store: Store) {} |
|
||||
} |
|
||||
@ -1,15 +1,19 @@ |
|||||
<div class="card"> |
<div id="AbpContentToolbar"></div> |
||||
<div class="card-header">{{ '::Welcome' | abpLocalization }}</div> |
<div class="jumbotron text-center"> |
||||
<div class="card-body"> |
<h1>{{ '::Welcome' | abpLocalization }}</h1> |
||||
<p> |
<div class="row"> |
||||
{{ '::LongWelcomeMessage' | abpLocalization }} |
<div class="col-md-6 mx-auto"> |
||||
</p> |
<p>{{ '::LongWelcomeMessage' | abpLocalization }}</p> |
||||
<p *ngIf="!hasLoggedIn"> |
<hr class="my-4" /> |
||||
<a routerLink="/account/login" [state]="{ redirectUrl: '/' }" class="btn btn-primary" role="button" |
</div> |
||||
><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> |
</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> |
</div> |
||||
|
|||||
Loading…
Reference in new issue