Commit 419bf0fc by sawit

Permission Management จัดการสิทธิ์พนักงาน และแอป

parent 1d223776
<app-page-header [title]="'จัดการสิทธิ์แอปพลิเคชันบริษัท'" [activeTitle]="'ผู้ดูแลระบบ'" [title1]="'จัดการสิทธิ์แอปพลิเคชันบริษัท'"></app-page-header>
<div *ngFor="let category of appCategories$ | async" class="mb-12">
<div class="flex items-center space-x-4">
<div
class="w-12 h-12 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-xl flex items-center justify-center text-white text-xl shadow-lg">
<i [class]="category.icon"></i>
</div>
<div>
<h2
class="text-3xl font-bold bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent mb-2">
{{ category.name }}
</h2>
<p class="text-gray-600">{{ category.description }}</p>
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6 mt-6">
<div
*ngFor="let app of category.apps; let i = index"
class="relative bg-white/80 backdrop-blur-sm rounded-2xl p-6 shadow-xl border border-white/20 hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2">
<!-- App Icon -->
<div class="relative mb-6">
<div
class="w-20 h-20 mx-auto bg-gradient-to-br from-indigo-100 to-purple-100 rounded-2xl flex items-center justify-center shadow-lg group-hover:scale-110 transition-transform duration-300">
<img
[src]="app.icon"
alt="App Icon"
title="App Icon"
class="w-12 h-12 object-contain rounded-lg"
loading="lazy"/>
</div>
<!-- Online Indicator -->
<div
class="absolute -top-1 -right-1 w-6 h-6 bg-green-500 rounded-full border-2 border-white flex items-center justify-center">
<div class="w-2 h-2 bg-white rounded-full"></div>
</div>
</div>
<!-- App Info -->
<div class="text-center mb-4">
<h3
class="text-xl font-bold text-gray-800 mb-2 group-hover:text-indigo-600 transition-colors duration-300">
{{ app.displayName }}
</h3>
<p class="text-gray-600 text-sm leading-relaxed">
{{ app.description }}
</p>
</div>
<!-- Action Button -->
<div class="flex items-center justify-center mt-auto pt-4" (click)="navigateToApp(app)">
<div
class="inline-flex items-center px-4 py-2 bg-gradient-to-r from-indigo-500 to-purple-600 text-white text-sm font-semibold rounded-xl group-hover:from-indigo-600 group-hover:to-purple-700 transition-all duration-300 transform group-hover:scale-105 cursor-pointer">
<span>กำหนดสิทธิ์</span>
<i
class="ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform duration-300">
</i>
</div>
</div>
</div>
</div>
</div>
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { PermissionAppmoduleComponent } from './permission-appmodule.component';
describe('PermissionAppmoduleComponent', () => {
let component: PermissionAppmoduleComponent;
let fixture: ComponentFixture<PermissionAppmoduleComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PermissionAppmoduleComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PermissionAppmoduleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { Router, RouterModule } from '@angular/router';
import { SharedModule } from '../../../shared/shared.module';
import { Observable, of } from 'rxjs';
import { TokenService } from '../../../shared/services/token.service';
interface AppModule {
id: string;
name: string;
displayName: string;
description: string;
icon: string;
path: string;
isVisible: boolean;
category: 'applications' | 'services' | 'system';
permissions: {
view: boolean;
create: boolean;
edit: boolean;
delete: boolean;
export: boolean;
import: boolean;
};
}
interface AppCategory {
id: string;
name: string;
description: string;
icon: string;
apps: AppModule[];
}
@Component({
selector: 'app-permission-appmodule',
templateUrl: './permission-appmodule.component.html',
styleUrls: ['./permission-appmodule.component.css'],
standalone: true,
imports: [RouterModule, CommonModule, SharedModule]
})
export class PermissionAppmoduleComponent implements OnInit {
accessibleApps$: Observable<AppModule[]> | undefined;
appCategories$: Observable<AppCategory[]> | undefined;
constructor(
private tokenService: TokenService,
private router: Router
) { }
ngOnInit() {
this.loadAppCategories();
}
private loadAppCategories(): void {
this.appCategories$ = of(this.getAppCategories());
}
private loadAccessibleApps(): void {
// แสดงทุกเมนูก่อน โดยไม่ต้องตรวจสอบสิทธิ์
this.accessibleApps$ = of(this.getAppModules());
}
private getAppCategories(): AppCategory[] {
const apps = this.getAppModules();
return [
{
id: 'applications',
name: 'แอปพลิเคชันที่เข้าถึงได้',
description: 'แอปพลิเคชันหลักสำหรับการทำงานประจำวัน',
icon: 'ri-apps-line',
apps: apps.filter(app => app.category === 'applications')
},
];
}
private getAppModules(): AppModule[] {
return [
// แอปพลิเคชันที่เข้าถึงได้
{
id: 'myhr-plus',
name: 'myhr-plus',
displayName: 'myHR-Plus',
description: 'ระบบจัดการทรัพยากรบุคคลขั้นสูง',
icon: './assets/images/logoallHR/myhr-plus.jpg',
path: '/portal-manage/myhr-plus',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myhr-lite',
name: 'myhr-lite',
displayName: 'myHR-Lite',
description: 'ระบบจัดการทรัพยากรบุคคลพื้นฐาน',
icon: './assets/images/logoallHR/myHR-Lite-logo-new.png',
path: '/portal-manage/myhr-lite',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'zeeme',
name: 'zeeme',
displayName: 'Zeeme Plus',
description: 'ระบบจัดการเวลาและลงเวลา',
icon: './assets/images/logoallHR/zeemePlus.png',
path: '/portal-manage/zeeme',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myface',
name: 'myface',
displayName: 'myFace',
description: 'ระบบจัดการใบหน้าและความปลอดภัย',
icon: './assets/images/logoallHR/logo_myface.png',
path: '/portal-manage/myface',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'mylearn',
name: 'mylearn',
displayName: 'myLearn',
description: 'ระบบจัดการการเรียนรู้และฝึกอบรม',
icon: './assets/images/logoallHR/mylearn-logo.png',
path: '/portal-manage/mylearn',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myjob',
name: 'myjob',
displayName: 'myJob',
description: 'ระบบจัดการงานและโครงการ',
icon: './assets/images/logoallHR/logo_myjob.png',
path: '/portal-manage/myjob',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myskill-x',
name: 'myskill-x',
displayName: 'mySkill-X',
description: 'ระบบจัดการทักษะและความสามารถ',
icon: './assets/images/logoallHR/mySkill-x.png',
path: '/portal-manage/myskill-x',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'meetingBooking',
name: 'meeting-booking',
displayName: 'Meeting Booking',
description: 'ระบบจองห้องประชุม',
icon: './assets/images/logoallHR/booking.png',
path: '/portal-manage/meeting-booking',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
// การตั้งค่าระบบ
{
id: 'permissionManagement',
name: 'permission-management',
displayName: 'Permission Management',
description: 'ระบบจัดการสิทธิ์และบทบาท',
icon: './assets/images/logoallHR/permission.png',
path: '/portal-manage/permission-management',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'dashboardManagement',
name: 'dashboard-management',
displayName: 'Dashboard Management',
description: 'ระบบจัดการแดชบอร์ด และคลังวิดเจ็ต',
icon: './assets/images/logoallHR/widget.webp',
path: '/portal-manage/dashboard-management',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'my-portal',
name: 'my-portal',
displayName: 'my-Portal',
description: 'ระบบจัดการเอกสารและเมนูกลางสำหรับแอปพลิเคชันต่างๆ',
icon: './assets/images/logoallHR/portal.webp',
path: '/portal-manage/my-portal',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}
];
}
navigateToApp(app: AppModule) {
}
onToggleAppVisibility(app: AppModule, event: Event) {
const input = event.target as HTMLInputElement;
app.isVisible = input.checked;
console.log(`Toggled ${app.name}: ${app.isVisible}`);
// Here you would typically call a service to save this change
}
}
......@@ -93,7 +93,7 @@
</td> -->
<td>
<div class="flex flex-row items-center !gap-2 ">
<a aria-label="anchor" (click)="view(item)" data-hs-overlay="#modal-detail"
<a aria-label="anchor" [routerLink]="['../permission-menumodule']"
class="ti-btn ti-btn-wave !gap-0 !m-0 bg-info/10 text-info hover:bg-info hover:text-white hover:border-info">
<i class="ri-pencil-line"></i>
</a>
......
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { PermissionMenulistComponent } from './permission-menulist.component';
describe('PermissionMenulistComponent', () => {
let component: PermissionMenulistComponent;
let fixture: ComponentFixture<PermissionMenulistComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PermissionMenulistComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PermissionMenulistComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { RouterModule } from '@angular/router';
import { SharedModule } from '../../../../shared/shared.module';
@Component({
selector: 'app-permission-menulist',
templateUrl: './permission-menulist.component.html',
styleUrls: ['./permission-menulist.component.css'],
standalone: true,
imports: [RouterModule, CommonModule, SharedModule]
})
export class PermissionMenulistComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
<app-page-header [title]="'เลือกเมนู'" [activeTitle]="'ผู้ดูแลระบบ'" [title1]="'จัดการสิทธิ์พนักงาน'" [title1Link]="'../permission-employeelist'" [title2]="'แอพลิเคชันที่เข้าถึงได้'"></app-page-header>
<div *ngFor="let category of appCategories$ | async" class="mb-12">
<div class="flex items-center space-x-4">
<div
class="w-12 h-12 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-xl flex items-center justify-center text-white text-xl shadow-lg"
>
<i [class]="category.icon"></i>
</div>
<div>
<h2
class="text-3xl font-bold bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent mb-2"
>
{{ category.name }}
</h2>
<p class="text-gray-600">{{ category.description }}</p>
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6 mt-6">
<div
*ngFor="let app of category.apps; let i = index"
class="relative bg-white/80 backdrop-blur-sm rounded-2xl p-6 shadow-xl border border-white/20 hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2"
>
<!-- Toggle Switch -->
<div class="absolute top-4 right-4 z-10" (click)="$event.stopPropagation()">
<label class="inline-flex items-center cursor-pointer">
<input type="checkbox" [checked]="app.isVisible" (change)="onToggleAppVisibility(app, $event)" class="sr-only peer">
<div class="relative w-11 h-6 bg-gray-300 rounded-full peer peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600"
[ngStyle]="{ 'background-color': app.isVisible ? '#3b82f6' : '#d1d5db' }"></div>
</label>
</div>
<!-- App Icon -->
<div class="relative mb-6">
<div
class="w-20 h-20 mx-auto bg-gradient-to-br from-indigo-100 to-purple-100 rounded-2xl flex items-center justify-center shadow-lg group-hover:scale-110 transition-transform duration-300"
>
<img
[src]="app.icon"
alt="App Icon"
title="App Icon"
class="w-12 h-12 object-contain rounded-lg"
loading="lazy"
/>
</div>
<!-- Online Indicator -->
<div
class="absolute -top-1 -right-1 w-6 h-6 bg-green-500 rounded-full border-2 border-white flex items-center justify-center"
>
<div class="w-2 h-2 bg-white rounded-full"></div>
</div>
</div>
<!-- App Info -->
<div class="text-center mb-4">
<h3
class="text-xl font-bold text-gray-800 mb-2 group-hover:text-indigo-600 transition-colors duration-300"
>
{{ app.displayName }}
</h3>
<p class="text-gray-600 text-sm leading-relaxed">
{{ app.description }}
</p>
</div>
<!-- Action Button -->
<div class="flex items-center justify-center mt-auto pt-4" (click)="navigateToApp(app)">
<div
class="inline-flex items-center px-4 py-2 bg-gradient-to-r from-indigo-500 to-purple-600 text-white text-sm font-semibold rounded-xl group-hover:from-indigo-600 group-hover:to-purple-700 transition-all duration-300 transform group-hover:scale-105 cursor-pointer">
<span>กำหนดสิทธิ์</span>
<i
class="ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform duration-300">
</i>
</div>
</div>
</div>
</div>
</div>
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { PermissionMenumoduleComponent } from './permission-menumodule.component';
describe('PermissionMenumoduleComponent', () => {
let component: PermissionMenumoduleComponent;
let fixture: ComponentFixture<PermissionMenumoduleComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PermissionMenumoduleComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PermissionMenumoduleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { Router, RouterLink, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { Observable, of } from 'rxjs';
import { SharedModule } from '../../../../shared/shared.module';
import { TokenService } from '../../../../shared/services/token.service';
interface AppModule {
id: string;
name: string;
displayName: string;
description: string;
icon: string;
path: string;
isVisible: boolean;
category: 'applications' | 'services' | 'system';
permissions: {
view: boolean;
create: boolean;
edit: boolean;
delete: boolean;
export: boolean;
import: boolean;
};
}
interface AppCategory {
id: string;
name: string;
description: string;
icon: string;
apps: AppModule[];
}
@Component({
selector: 'app-permission-menumodule',
templateUrl: './permission-menumodule.component.html',
styleUrls: ['./permission-menumodule.component.css'],
standalone: true,
imports: [RouterModule, CommonModule, SharedModule]
})
export class PermissionMenumoduleComponent implements OnInit {
accessibleApps$: Observable<AppModule[]> | undefined;
appCategories$: Observable<AppCategory[]> | undefined;
constructor(
private tokenService: TokenService,
private router: Router
) { }
ngOnInit() {
this.loadAppCategories();
}
private loadAppCategories(): void {
this.appCategories$ = of(this.getAppCategories());
}
private loadAccessibleApps(): void {
// แสดงทุกเมนูก่อน โดยไม่ต้องตรวจสอบสิทธิ์
this.accessibleApps$ = of(this.getAppModules());
}
private getAppCategories(): AppCategory[] {
const apps = this.getAppModules();
return [
{
id: 'applications',
name: 'แอปพลิเคชันที่เข้าถึงได้',
description: 'แอปพลิเคชันหลักสำหรับการทำงานประจำวัน',
icon: 'ri-apps-line',
apps: apps.filter(app => app.category === 'applications')
},
];
}
private getAppModules(): AppModule[] {
return [
// แอปพลิเคชันที่เข้าถึงได้
{
id: 'myhr-plus',
name: 'myhr-plus',
displayName: 'myHR-Plus',
description: 'ระบบจัดการทรัพยากรบุคคลขั้นสูง',
icon: './assets/images/logoallHR/myhr-plus.jpg',
path: '/portal-manage/myhr-plus',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myhr-lite',
name: 'myhr-lite',
displayName: 'myHR-Lite',
description: 'ระบบจัดการทรัพยากรบุคคลพื้นฐาน',
icon: './assets/images/logoallHR/myHR-Lite-logo-new.png',
path: '/portal-manage/myhr-lite',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'zeeme',
name: 'zeeme',
displayName: 'Zeeme Plus',
description: 'ระบบจัดการเวลาและลงเวลา',
icon: './assets/images/logoallHR/zeemePlus.png',
path: '/portal-manage/zeeme',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myface',
name: 'myface',
displayName: 'myFace',
description: 'ระบบจัดการใบหน้าและความปลอดภัย',
icon: './assets/images/logoallHR/logo_myface.png',
path: '/portal-manage/myface',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'mylearn',
name: 'mylearn',
displayName: 'myLearn',
description: 'ระบบจัดการการเรียนรู้และฝึกอบรม',
icon: './assets/images/logoallHR/mylearn-logo.png',
path: '/portal-manage/mylearn',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myjob',
name: 'myjob',
displayName: 'myJob',
description: 'ระบบจัดการงานและโครงการ',
icon: './assets/images/logoallHR/logo_myjob.png',
path: '/portal-manage/myjob',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'myskill-x',
name: 'myskill-x',
displayName: 'mySkill-X',
description: 'ระบบจัดการทักษะและความสามารถ',
icon: './assets/images/logoallHR/mySkill-x.png',
path: '/portal-manage/myskill-x',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'meetingBooking',
name: 'meeting-booking',
displayName: 'Meeting Booking',
description: 'ระบบจองห้องประชุม',
icon: './assets/images/logoallHR/booking.png',
path: '/portal-manage/meeting-booking',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
// การตั้งค่าระบบ
{
id: 'permissionManagement',
name: 'permission-management',
displayName: 'Permission Management',
description: 'ระบบจัดการสิทธิ์และบทบาท',
icon: './assets/images/logoallHR/permission.png',
path: '/portal-manage/permission-management',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'dashboardManagement',
name: 'dashboard-management',
displayName: 'Dashboard Management',
description: 'ระบบจัดการแดชบอร์ด และคลังวิดเจ็ต',
icon: './assets/images/logoallHR/widget.webp',
path: '/portal-manage/dashboard-management',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
},
{
id: 'my-portal',
name: 'my-portal',
displayName: 'my-Portal',
description: 'ระบบจัดการเอกสารและเมนูกลางสำหรับแอปพลิเคชันต่างๆ',
icon: './assets/images/logoallHR/portal.webp',
path: '/portal-manage/my-portal',
isVisible: true,
category: 'applications',
permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}
];
}
navigateToApp(app: AppModule) {
}
onToggleAppVisibility(app: AppModule, event: Event) {
const input = event.target as HTMLInputElement;
app.isVisible = input.checked;
console.log(`Toggled ${app.name}: ${app.isVisible}`);
// Here you would typically call a service to save this change
}
}
......@@ -13,6 +13,21 @@ export const PERMISSION_ROUTES: Routes = [
loadComponent: () =>
import('./permission-employeelist/permission-employeelist.component').then((m) => m.PermissionEmployeelistComponent),
},
{
path: 'permission-menumodule',
loadComponent: () =>
import('./permission-employeelist/permission-menumodule/permission-menumodule.component').then((m) => m.PermissionMenumoduleComponent),
},
{
path: 'permission-menulist',
loadComponent: () =>
import('./permission-employeelist/permission-menulist/permission-menulist.component').then((m) => m.PermissionMenulistComponent),
},
{
path: 'permission-appmodule',
loadComponent: () =>
import('./permission-appmodule/permission-appmodule.component').then((m) => m.PermissionAppmoduleComponent),
},
]
}
];
......@@ -9,8 +9,13 @@
<i class="ti ti-chevrons-right flex-shrink-0 text-[#8c9097] dark:text-white/50 px-[0.5rem] overflow-visible rtl:rotate-180"></i>
</a>
</li>
<li class="text-[0.813rem] text-primary font-semibold hover:text-primary dark:text-[#8c9097] dark:text-white/50 " aria-current="page">
{{title1 | translate}}
<li class="text-[0.813rem] text-primary hover:text-primary dark:text-[#8c9097] dark:text-white/50">
<a *ngIf="title1Link" [routerLink]="title1Link" class="flex items-center">{{title1 | translate}}</a>
<span *ngIf="!title1Link">{{title1 | translate}}</span>
</li>
<li class="text-[0.813rem] text-primary font-semibold hover:text-primary dark:text-[#8c9097] dark:text-white/50 " aria-current="page" *ngIf="title2">
<i class="ti ti-chevrons-right flex-shrink-0 text-[#8c9097] dark:text-white/50 px-[0.5rem] overflow-visible rtl:rotate-180"></i>
{{title2 | translate}}
</li>
</ol>
</div>
......@@ -8,5 +8,7 @@ import { Component, Input } from '@angular/core';
export class PageHeaderComponent {
@Input() title!: string;
@Input() title1!:string;
@Input() title2!:string;
@Input() activeTitle!:string;
@Input() title1Link!: string;
}
......@@ -470,7 +470,7 @@ export class NavService implements OnDestroy {
active: false,
children: [
{ path: '/portal-manage/permission-management/permission-employeelist', title: 'จัดการสิทธิ์และบทบาท', type: 'link' },
// { path: '/portal-manage/menu-permission-management', title: 'จัดการสิทธิ์เมนู', type: 'link' },
{ path: '/portal-manage/permission-management/permission-appmodule', title: 'จัดการสิทธิ์แอปพลิเคชันบริษัท', type: 'link' },
// { path: '/portal-manage/user-role-management', title: 'จัดการผู้ใช้และบทบาท', type: 'link' },
],
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment