Skip to content

Commit 55d302c

Browse files
authored
Merge pull request #77 from aspnetboilerplate/pr/75
Pr/75
2 parents e157927 + afd4f1f commit 55d302c

File tree

65 files changed

+5492
-629
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+5492
-629
lines changed

angular/.angular-cli.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@
7272
"../node_modules/abp-web-resources/Abp/Framework/scripts/libs/abp.sweet-alert.js",
7373
"../node_modules/abp-web-resources/Abp/Framework/scripts/libs/abp.moment.js",
7474
"../src/bsb-theme/js/admin.js",
75-
"../src/bsb-theme/js/demo.js"
75+
"../src/bsb-theme/js/demo.js",
76+
"../src/bsb-theme/js/jquery.validate.js"
7677
],
7778
"environmentSource": "environments/environment.ts",
7879
"environments": {

angular/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"@types/bootstrap": "^3.3.33",
2626
"@types/jquery": "^2.0.41",
2727
"@types/jquery.blockui": "0.0.27",
28+
"@types/jquery.validation": "^1.16.3",
2829
"@types/lodash": "^4.14.62",
2930
"@types/moment": "^2.13.0",
3031
"@types/moment-timezone": "^0.2.34",
@@ -53,6 +54,7 @@
5354
"moment-timezone": "^0.5.13",
5455
"morris.js": "^0.5.0",
5556
"ngx-bootstrap": "^1.6.6",
57+
"ngx-pagination": "^3.0.0",
5658
"node-waves": "^0.7.5",
5759
"push.js": "0.0.12",
5860
"raphael": "^2.2.7",

angular/src/app/app-routing.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { HomeComponent } from './home/home.component';
66
import { AboutComponent } from './about/about.component';
77
import { UsersComponent } from './users/users.component';
88
import { TenantsComponent } from './tenants/tenants.component';
9+
import { RolesComponent } from "app/roles/roles.component";
910

1011
@NgModule({
1112
imports: [
@@ -16,6 +17,7 @@ import { TenantsComponent } from './tenants/tenants.component';
1617
children: [
1718
{ path: 'home', component: HomeComponent, canActivate: [AppRouteGuard] },
1819
{ path: 'users', component: UsersComponent, data: { permission: 'Pages.Users' }, canActivate: [AppRouteGuard] },
20+
{ path: 'roles', component: RolesComponent, data: { permission: 'Pages.Roles' }, canActivate: [AppRouteGuard] },
1921
{ path: 'tenants', component: TenantsComponent, data: { permission: 'Pages.Tenants' }, canActivate: [AppRouteGuard] },
2022
{ path: 'about', component: AboutComponent }
2123
]

angular/src/app/app.module.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { FormsModule } from '@angular/forms';
44
import { HttpModule, JsonpModule } from '@angular/http';
55

66
import { ModalModule } from 'ngx-bootstrap';
7+
import { NgxPaginationModule } from 'ngx-pagination';
78

89
import { AppRoutingModule } from './app-routing.module';
910
import { AppComponent } from './app.component';
@@ -16,9 +17,14 @@ import { SharedModule } from '@shared/shared.module';
1617
import { HomeComponent } from '@app/home/home.component';
1718
import { AboutComponent } from '@app/about/about.component';
1819
import { UsersComponent } from '@app/users/users.component';
19-
import { CreateUserModalComponent } from '@app/users/create-user-modal.component';
20+
import { CreateUserComponent } from '@app/users/create-user/create-user.component';
21+
import { EditUserComponent } from './users/edit-user/edit-user.component';
22+
import { RolesComponent } from '@app/roles/roles.component';
23+
import { CreateRoleComponent } from '@app/roles/create-role/create-role.component';
24+
import { EditRoleComponent } from './roles/edit-role/edit-role.component';
2025
import { TenantsComponent } from '@app/tenants/tenants.component';
21-
import { CreateTenantModalComponent } from '@app/tenants/create-tenant-modal.component';
26+
import { CreateTenantComponent } from './tenants/create-tenant/create-tenant.component';
27+
import { EditTenantComponent } from './tenants/edit-tenant/edit-tenant.component';
2228
import { TopBarComponent } from '@app/layout/topbar.component';
2329
import { TopBarLanguageSwitchComponent } from '@app/layout/topbar-languageswitch.component';
2430
import { SideBarUserAreaComponent } from '@app/layout/sidebar-user-area.component';
@@ -31,16 +37,22 @@ import { RightSideBarComponent } from '@app/layout/right-sidebar.component';
3137
AppComponent,
3238
HomeComponent,
3339
AboutComponent,
34-
UsersComponent,
35-
CreateUserModalComponent,
3640
TenantsComponent,
37-
CreateTenantModalComponent,
41+
CreateTenantComponent,
42+
EditTenantComponent,
43+
UsersComponent,
44+
CreateUserComponent,
45+
EditUserComponent,
46+
RolesComponent,
47+
CreateRoleComponent,
48+
EditRoleComponent,
3849
TopBarComponent,
3950
TopBarLanguageSwitchComponent,
4051
SideBarUserAreaComponent,
4152
SideBarNavComponent,
4253
SideBarFooterComponent,
4354
RightSideBarComponent
55+
4456
],
4557
imports: [
4658
CommonModule,
@@ -51,7 +63,8 @@ import { RightSideBarComponent } from '@app/layout/right-sidebar.component';
5163
AbpModule,
5264
AppRoutingModule,
5365
ServiceProxyModule,
54-
SharedModule
66+
SharedModule,
67+
NgxPaginationModule
5568
],
5669
providers: [
5770

angular/src/app/layout/sidebar-nav.component.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ export class SideBarNavComponent extends AppComponentBase {
1111

1212
menuItems: MenuItem[] = [
1313
new MenuItem(this.l("HomePage"), "", "home", "/app/home"),
14+
1415
new MenuItem(this.l("Tenants"), "Pages.Tenants", "business", "/app/tenants"),
1516
new MenuItem(this.l("Users"), "Pages.Users", "people", "/app/users"),
17+
new MenuItem(this.l("Roles"), "Pages.Roles", "local_offer", "/app/roles"),
1618
new MenuItem(this.l("About"), "", "info", "/app/about"),
19+
1720
new MenuItem(this.l("MultiLevelMenu"), "", "menu", "", [
1821
new MenuItem("ASP.NET Boilerplate", "", "", "", [
1922
new MenuItem("Home", "", "", "https://aspnetboilerplate.com"),
2023
new MenuItem("Templates", "", "", "https://aspnetboilerplate.com/Templates"),
2124
new MenuItem("Samples", "", "", "https://aspnetboilerplate.com/Samples"),
22-
new MenuItem("Documents", "", "", "https://aspnetboilerplate.com/Pages/Documents"),
23-
new MenuItem("Forum", "", "", "https://forum.aspnetboilerplate.com/"),
24-
new MenuItem("About", "", "", "https://aspnetboilerplate.com/About")
25+
new MenuItem("Documents", "", "", "https://aspnetboilerplate.com/Pages/Documents")
2526
]),
2627
new MenuItem("ASP.NET Zero", "", "", "", [
2728
new MenuItem("Home", "", "", "https://aspnetzero.com?ref=abptmpl"),
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<div bsModal #createRoleModal="bs-modal" class="modal fade" (onShown)="onShown()" tabindex="-1" role="dialog" aria-labelledby="createRoleModal" aria-hidden="true" [config]="{backdrop: 'static'}">
2+
<div class="modal-dialog">
3+
4+
<div #modalContent class="modal-content">
5+
6+
<form *ngIf="active" #createRoleForm="ngForm" id="frm_create_role" novalidate (ngSubmit)="save()">
7+
8+
<div class="modal-header">
9+
<button type="button" class="close" (click)="close()" aria-label="Close">
10+
<span aria-hidden="true">&times;</span>
11+
</button>
12+
<h4 class="modal-title">
13+
<span>{{l("CreateNewRole")}}</span>
14+
</h4>
15+
</div>
16+
<div class="modal-body">
17+
<div class="row clearfix">
18+
<div class="col-sm-12">
19+
<div class="form-group form-float">
20+
<div class="form-line">
21+
<input id="rolename" type="text" name="RoleName" [(ngModel)]="role.name" required maxlength="32" minlength="2" class="validate form-control">
22+
<label for="username" class="form-label">{{l("RoleName")}}</label>
23+
</div>
24+
</div>
25+
</div>
26+
</div>
27+
28+
<div class="row clearfix">
29+
<div class="col-sm-12">
30+
<div class="form-group form-float">
31+
<div class="form-line">
32+
<input id="displayname" type="text" name="DisplayName" [(ngModel)]="role.displayName" required maxlength="32" minlength="2" class="validate form-control">
33+
<label for="displayname" class="form-label">{{l("DisplayName")}}</label>
34+
</div>
35+
</div>
36+
</div>
37+
</div>
38+
39+
<div class="row">
40+
<div class="col-sm-12">
41+
<div class="form-group form-float">
42+
<div class="form-line">
43+
<textarea id="role-description" name="Description" [(ngModel)]="role.description" class="validate form-control"></textarea>
44+
<label for="role-description" class="form-label">Role Description</label>
45+
</div>
46+
</div>
47+
</div>
48+
</div>
49+
50+
<div class="row clearfix">
51+
<div class="col-sm-12">
52+
<h4>Permissions</h4>
53+
<ng-template ngFor let-permission [ngForOf]="permissions.items" let-permissionIndex="index">
54+
<div class="col-sm-6">
55+
<input type="checkbox" name="permission" value="{{permission.name}}" class="filled-in" id="permission-{{permissionIndex}}" checked="checked" />
56+
<label for="permission-{{permissionIndex}}">{{permission.displayName}}</label>
57+
</div>
58+
</ng-template>
59+
</div>
60+
</div>
61+
</div>
62+
63+
<div class="modal-footer">
64+
<button [disabled]="saving" type="button" class="btn btn-default waves-effect" (click)="close()">
65+
{{l("Cancel")}}
66+
</button>
67+
<button [disabled]="!createRoleForm.form.valid || saving" type="submit" class="btn btn-primary waves-effect">
68+
{{l("Save")}}
69+
</button>
70+
</div>
71+
72+
</form>
73+
</div>
74+
</div>
75+
</div>
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { Component, ViewChild, Injector, Output, EventEmitter, ElementRef, OnInit } from '@angular/core';
2+
import { ModalDirective } from 'ngx-bootstrap';
3+
import { RoleServiceProxy, CreateRoleDto, ListResultDtoOfPermissionDto } from '@shared/service-proxies/service-proxies';
4+
import { AppComponentBase } from '@shared/app-component-base';
5+
6+
@Component({
7+
selector: 'create-role-modal',
8+
templateUrl: './create-role.component.html'
9+
})
10+
export class CreateRoleComponent extends AppComponentBase implements OnInit {
11+
@ViewChild('createRoleModal') modal: ModalDirective;
12+
@ViewChild('modalContent') modalContent: ElementRef;
13+
14+
active: boolean = false;
15+
saving: boolean = false;
16+
17+
permissions: ListResultDtoOfPermissionDto = null;
18+
role: CreateRoleDto = null;
19+
20+
@Output() modalSave: EventEmitter<any> = new EventEmitter<any>();
21+
constructor(
22+
injector: Injector,
23+
private _roleService: RoleServiceProxy
24+
) {
25+
super(injector);
26+
}
27+
28+
ngOnInit(): void {
29+
this._roleService.getAllPermissions()
30+
.subscribe((permissions:ListResultDtoOfPermissionDto) =>
31+
{
32+
this.permissions = permissions;
33+
});
34+
}
35+
36+
show(): void {
37+
this.active = true;
38+
this.role = new CreateRoleDto({ isStatic: false });
39+
40+
this.modal.show();
41+
}
42+
43+
onShown(): void {
44+
($ as any).AdminBSB.input.activate($(this.modalContent.nativeElement));
45+
46+
$('#frm_create_role').validate({
47+
highlight: input => {
48+
$(input).parents('.form-line').addClass('error');
49+
},
50+
unhighlight: input => {
51+
$(input).parents('.form-line').removeClass('error');
52+
},
53+
errorPlacement: (error, element) => {
54+
$(element).parents('.form-group').append(error);
55+
}
56+
});
57+
}
58+
59+
save(): void {
60+
var permissions = [];
61+
$(this.modalContent.nativeElement).find("[name=permission]").each(
62+
(index: number, elem: Element) => {
63+
if ($(elem).is(":checked") == true) {
64+
permissions.push(elem.getAttribute("value").valueOf());
65+
}
66+
}
67+
);
68+
69+
this.role.permissions = permissions;
70+
this.saving = true;
71+
this._roleService.create(this.role)
72+
.finally(() => { this.saving = false; })
73+
.subscribe(() => {
74+
this.notify.info(this.l('SavedSuccessfully'));
75+
this.close();
76+
this.modalSave.emit(null);
77+
});
78+
}
79+
80+
close(): void {
81+
this.active = false;
82+
this.modal.hide();
83+
}
84+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<div bsModal #editRoleModal="bs-modal" class="modal fade" (onShown)="onShown()" tabindex="-1" role="dialog" aria-labelledby="edidtRoleModal" aria-hidden="true" [config]="{backdrop: 'static'}">
2+
<div class="modal-dialog">
3+
4+
<div #modalContent class="modal-content">
5+
6+
<form *ngIf="active" #editRoleForm="ngForm" id="frm_edit_role" novalidate (ngSubmit)="save()">
7+
8+
<div class="modal-header">
9+
<button type="button" class="close" (click)="close()" aria-label="Close">
10+
<span aria-hidden="true">&times;</span>
11+
</button>
12+
<h4 class="modal-title">
13+
<span>{{l("EditRole")}}</span>
14+
</h4>
15+
</div>
16+
<div class="modal-body">
17+
18+
<div class="row clearfix">
19+
<div class="col-sm-12">
20+
<div class="form-group form-float">
21+
<div class="form-line">
22+
<input id="rolename" [disabled]="role.isStatic" type="text" name="RoleName" [(ngModel)]="role.name" required maxlength="32" minlength="2" class="validate form-control">
23+
<label for="username" class="form-label">{{l("RoleName")}}</label>
24+
</div>
25+
</div>
26+
</div>
27+
</div>
28+
29+
<div class="row clearfix">
30+
<div class="col-sm-12">
31+
<div class="form-group form-float">
32+
<div class="form-line">
33+
<input id="displayname" type="text" name="DisplayName" [(ngModel)]="role.displayName" required maxlength="32" minlength="2" class="validate form-control">
34+
<label for="displayname" class="form-label">{{l("DisplayName")}}</label>
35+
</div>
36+
</div>
37+
</div>
38+
</div>
39+
40+
<div class="row">
41+
<div class="col-sm-12">
42+
<div class="form-group form-float">
43+
<div class="form-line">
44+
<textarea id="role-description" name="Description" [(ngModel)]="role.description" class="validate form-control"></textarea>
45+
<label for="role-description" class="form-label">Role Description</label>
46+
</div>
47+
</div>
48+
</div>
49+
</div>
50+
51+
<div class="row" *ngIf="role.isStatic">
52+
<div class="col-sm-12">
53+
<p style="color:red">Static Role</p>
54+
</div>
55+
</div>
56+
57+
<div class="row clearfix">
58+
<div class="col-sm-12">
59+
<h4>Permissions</h4>
60+
61+
<ng-template ngFor let-permission [ngForOf]="permissions.items" let-permissionIndex="index">
62+
<div class="col-sm-6">
63+
<input [disabled]="role.isStatic" type="checkbox" name="permission" value="{{permission.name}}" class="filled-in" id="permission-{{permissionIndex}}" checked="{{checkPermission(permission.name)}}" />
64+
<label for="permission-{{permissionIndex}}">{{permission.displayName}}</label>
65+
</div>
66+
</ng-template>
67+
</div>
68+
</div>
69+
70+
</div>
71+
<div class="modal-footer">
72+
<button [disabled]="saving" type="button" class="btn btn-default waves-effect" (click)="close()">
73+
{{l("Cancel")}}
74+
</button>
75+
<button [disabled]="!editRoleForm.form.valid || saving" type="submit" class="btn btn-primary waves-effect">
76+
{{l("Save")}}
77+
</button>
78+
</div>
79+
80+
</form>
81+
</div>
82+
</div>
83+
</div>

0 commit comments

Comments
 (0)