Commit b67f5495 by Ooh-Ao

หห

parent 264a7c6c
...@@ -48,5 +48,5 @@ export const App_Route: Route[] = [ ...@@ -48,5 +48,5 @@ export const App_Route: Route[] = [
path: 'unauthorized', path: 'unauthorized',
component: UnauthorizedComponent component: UnauthorizedComponent
}, },
{ path: '', component: ContentLayoutComponent, children: content}, { path: '', redirectTo: '/auth/login', pathMatch: 'full' },
] ]
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Router } from '@angular/router';
import { AuthService } from '../../core/services/auth.service';
@Component({
selector: 'app-simple-login',
standalone: true,
imports: [CommonModule, FormsModule],
template: `
<div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
<div class="max-w-md w-full space-y-8">
<div>
<h2 class="mt-6 text-center text-3xl font-extrabold text-gray-900">
เข้าสู่ระบบ
</h2>
</div>
<form class="mt-8 space-y-6" (ngSubmit)="onLogin()">
<div class="rounded-md shadow-sm -space-y-px">
<div>
<label for="username" class="sr-only">Username</label>
<input id="username" name="username" type="text"
[(ngModel)]="username" required
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm"
placeholder="Username">
</div>
<div>
<label for="password" class="sr-only">Password</label>
<input id="password" name="password" type="password"
[(ngModel)]="password" required
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm"
placeholder="Password">
</div>
</div>
<div>
<button type="submit"
[disabled]="isLoading"
class="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50">
<span *ngIf="!isLoading">เข้าสู่ระบบ</span>
<span *ngIf="isLoading">กำลังเข้าสู่ระบบ...</span>
</button>
</div>
<div *ngIf="errorMessage" class="text-red-600 text-sm text-center">
{{ errorMessage }}
</div>
</form>
</div>
</div>
`,
styles: []
})
export class SimpleLoginComponent {
username = '';
password = '';
isLoading = false;
errorMessage = '';
constructor(
private router: Router,
private authService: AuthService
) {}
onLogin() {
if (!this.username || !this.password) {
this.errorMessage = 'กรุณากรอก username และ password';
return;
}
this.isLoading = true;
this.errorMessage = '';
// จำลองการ login
setTimeout(() => {
// บันทึก token ลง localStorage
localStorage.setItem('authToken', 'dummy-token-' + Date.now());
// อัปเดตสถานะ login ใน AuthService
this.authService.login().subscribe(() => {
this.isLoading = false;
// ไปหน้า home
console.log('Navigating to /home...');
this.router.navigate(['/home']).then(success => {
console.log('Navigation success:', success);
if (!success) {
console.log('Navigation failed, trying alternative...');
this.router.navigateByUrl('/home');
}
}).catch(error => {
console.error('Navigation error:', error);
// ลองใช้ window.location
window.location.href = '/home';
});
});
}, 1000);
}
}
...@@ -7,12 +7,25 @@ export const moduleAccessGuard: CanActivateFn = (route: ActivatedRouteSnapshot, ...@@ -7,12 +7,25 @@ export const moduleAccessGuard: CanActivateFn = (route: ActivatedRouteSnapshot,
const permissionService = inject(CorePermissionService); const permissionService = inject(CorePermissionService);
const router = inject(Router); const router = inject(Router);
// Get the module name from the route parameter :appName // Get the module name from the route parameter :appName or from the route path
const moduleName = route.params['appName']; let moduleName = route.params['appName'];
// If no appName parameter, extract module name from the route path
if (!moduleName) {
const pathSegments = state.url.split('/').filter(segment => segment);
// For portal-manage routes, get the module name after 'portal-manage'
const portalIndex = pathSegments.indexOf('portal-manage');
if (portalIndex !== -1 && pathSegments[portalIndex + 1]) {
moduleName = pathSegments[portalIndex + 1];
} else if (pathSegments.length > 0) {
// For direct routes, use the first segment
moduleName = pathSegments[0];
}
}
if (!moduleName) { if (!moduleName) {
// If the path is not defined, deny access and redirect // If the path is not defined, deny access and redirect
return router.parseUrl('/unauthorized'); // Or to a default error page return router.parseUrl('/unauthorized');
} }
return permissionService.canAccessModule(moduleName).pipe( return permissionService.canAccessModule(moduleName).pipe(
......
...@@ -36,9 +36,13 @@ export class CorePermissionService { ...@@ -36,9 +36,13 @@ export class CorePermissionService {
* @param moduleName The name of the module (e.g., from the route path). * @param moduleName The name of the module (e.g., from the route path).
*/ */
canAccessModule(moduleName: string): Observable<boolean> { canAccessModule(moduleName: string): Observable<boolean> {
return this.getAccessibleModules().pipe( // Temporarily allow access to all modules
map(modules => modules.includes(moduleName)) return of(true);
);
// Original implementation (commented out for now):
// return this.getAccessibleModules().pipe(
// map(modules => modules.includes(moduleName))
// );
} }
/** /**
......
...@@ -214,10 +214,10 @@ export class HomeComponent implements OnInit { ...@@ -214,10 +214,10 @@ export class HomeComponent implements OnInit {
displayName: 'myHR-Plus', displayName: 'myHR-Plus',
description: 'ระบบจัดการทรัพยากรบุคคลขั้นสูง', description: 'ระบบจัดการทรัพยากรบุคคลขั้นสูง',
icon: './assets/images/logoallHR/myhr-plus.jpg', icon: './assets/images/logoallHR/myhr-plus.jpg',
path: '/myhr-plus', path: '/portal-manage/myhr-plus',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'myhr-lite', id: 'myhr-lite',
...@@ -225,10 +225,10 @@ export class HomeComponent implements OnInit { ...@@ -225,10 +225,10 @@ export class HomeComponent implements OnInit {
displayName: 'myHR-Lite', displayName: 'myHR-Lite',
description: 'ระบบจัดการทรัพยากรบุคคลพื้นฐาน', description: 'ระบบจัดการทรัพยากรบุคคลพื้นฐาน',
icon: './assets/images/logoallHR/myHR-Lite-logo-new.png', icon: './assets/images/logoallHR/myHR-Lite-logo-new.png',
path: '/myhr-lite', path: '/portal-manage/myhr-lite',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'zeeme', id: 'zeeme',
...@@ -236,10 +236,10 @@ export class HomeComponent implements OnInit { ...@@ -236,10 +236,10 @@ export class HomeComponent implements OnInit {
displayName: 'Zeeme Plus', displayName: 'Zeeme Plus',
description: 'ระบบจัดการเวลาและลงเวลา', description: 'ระบบจัดการเวลาและลงเวลา',
icon: './assets/images/logoallHR/zeemePlus.png', icon: './assets/images/logoallHR/zeemePlus.png',
path: '/zeeme', path: '/portal-manage/zeeme',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'myface', id: 'myface',
...@@ -247,10 +247,10 @@ export class HomeComponent implements OnInit { ...@@ -247,10 +247,10 @@ export class HomeComponent implements OnInit {
displayName: 'myFace', displayName: 'myFace',
description: 'ระบบจัดการใบหน้าและความปลอดภัย', description: 'ระบบจัดการใบหน้าและความปลอดภัย',
icon: './assets/images/logoallHR/logo_myface.png', icon: './assets/images/logoallHR/logo_myface.png',
path: '/myface', path: '/portal-manage/myface',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'mylearn', id: 'mylearn',
...@@ -258,10 +258,10 @@ export class HomeComponent implements OnInit { ...@@ -258,10 +258,10 @@ export class HomeComponent implements OnInit {
displayName: 'myLearn', displayName: 'myLearn',
description: 'ระบบจัดการการเรียนรู้และฝึกอบรม', description: 'ระบบจัดการการเรียนรู้และฝึกอบรม',
icon: './assets/images/logoallHR/mylearn-logo.png', icon: './assets/images/logoallHR/mylearn-logo.png',
path: '/mylearn', path: '/portal-manage/mylearn',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'myjob', id: 'myjob',
...@@ -269,10 +269,10 @@ export class HomeComponent implements OnInit { ...@@ -269,10 +269,10 @@ export class HomeComponent implements OnInit {
displayName: 'myJob', displayName: 'myJob',
description: 'ระบบจัดการงานและโครงการ', description: 'ระบบจัดการงานและโครงการ',
icon: './assets/images/logoallHR/logo_myjob.png', icon: './assets/images/logoallHR/logo_myjob.png',
path: '/myjob', path: '/portal-manage/myjob',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'myskill-x', id: 'myskill-x',
...@@ -280,10 +280,10 @@ export class HomeComponent implements OnInit { ...@@ -280,10 +280,10 @@ export class HomeComponent implements OnInit {
displayName: 'mySkill-X', displayName: 'mySkill-X',
description: 'ระบบจัดการทักษะและความสามารถ', description: 'ระบบจัดการทักษะและความสามารถ',
icon: './assets/images/logoallHR/mySkill-x.png', icon: './assets/images/logoallHR/mySkill-x.png',
path: '/myskill-x', path: '/portal-manage/myskill-x',
isVisible: true, isVisible: true,
category: 'applications', category: 'applications',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
// การบริการ // การบริการ
{ {
...@@ -292,10 +292,10 @@ export class HomeComponent implements OnInit { ...@@ -292,10 +292,10 @@ export class HomeComponent implements OnInit {
displayName: 'Dashboard', displayName: 'Dashboard',
description: 'แดชบอร์ดหลัก', description: 'แดชบอร์ดหลัก',
icon: './assets/images/icons/dashboard.png', icon: './assets/images/icons/dashboard.png',
path: '/dashboard', path: '/portal-manage/dashboard',
isVisible: true, isVisible: true,
category: 'services', category: 'services',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'meetingBooking', id: 'meetingBooking',
...@@ -306,7 +306,7 @@ export class HomeComponent implements OnInit { ...@@ -306,7 +306,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/meeting-booking', path: '/portal-manage/meeting-booking',
isVisible: true, isVisible: true,
category: 'services', category: 'services',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
// การตั้งค่าระบบ // การตั้งค่าระบบ
{ {
...@@ -318,7 +318,7 @@ export class HomeComponent implements OnInit { ...@@ -318,7 +318,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/permission-management', path: '/portal-manage/permission-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'roleManagement', id: 'roleManagement',
...@@ -329,7 +329,7 @@ export class HomeComponent implements OnInit { ...@@ -329,7 +329,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/role-management', path: '/portal-manage/role-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'menuPermissionManagement', id: 'menuPermissionManagement',
...@@ -340,7 +340,7 @@ export class HomeComponent implements OnInit { ...@@ -340,7 +340,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/menu-permission-management', path: '/portal-manage/menu-permission-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'userManagement', id: 'userManagement',
...@@ -351,7 +351,7 @@ export class HomeComponent implements OnInit { ...@@ -351,7 +351,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/user-role-management', path: '/portal-manage/user-role-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'companyManagement', id: 'companyManagement',
...@@ -362,7 +362,7 @@ export class HomeComponent implements OnInit { ...@@ -362,7 +362,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/company-management', path: '/portal-manage/company-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'widgetManagement', id: 'widgetManagement',
...@@ -373,7 +373,7 @@ export class HomeComponent implements OnInit { ...@@ -373,7 +373,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/widget-management', path: '/portal-manage/widget-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
}, },
{ {
id: 'dashboardManagement', id: 'dashboardManagement',
...@@ -384,7 +384,7 @@ export class HomeComponent implements OnInit { ...@@ -384,7 +384,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/dashboard-management', path: '/portal-manage/dashboard-management',
isVisible: true, isVisible: true,
category: 'system', category: 'system',
permissions: { view: true, create: false, edit: false, delete: false, export: false, import: false } permissions: { view: true, create: true, edit: true, delete: true, export: true, import: true }
} }
]; ];
} }
...@@ -413,11 +413,8 @@ export class HomeComponent implements OnInit { ...@@ -413,11 +413,8 @@ export class HomeComponent implements OnInit {
} }
navigateToApp(app: AppModule) { navigateToApp(app: AppModule) {
if (app.path.startsWith('/portal-manage')) { // เนื่องจากทุก path ตอนนี้เริ่มด้วย /portal-manage แล้ว
this.router.navigate([app.path]); this.router.navigate([app.path]);
} else {
this.checkAppToken(app.id);
}
} }
getAppCardClass(app: AppModule): string { getAppCardClass(app: AppModule): string {
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-myface-dashboard', selector: 'app-myface-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-myface', selector: 'app-myface',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-myhr-lite-dashboard', selector: 'app-myhr-lite-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-myhr-lite', selector: 'app-myhr-lite',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-myjob-dashboard', selector: 'app-myjob-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-myjob', selector: 'app-myjob',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-mylearn-dashboard', selector: 'app-mylearn-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-mylearn', selector: 'app-mylearn',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-myskill-x-dashboard', selector: 'app-myskill-x-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-myskill-x', selector: 'app-myskill-x',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -2,6 +2,7 @@ import { Component } from '@angular/core'; ...@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-zeeme-dashboard', selector: 'app-zeeme-dashboard',
standalone: true,
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-zeeme', selector: 'app-zeeme',
standalone: true,
imports: [RouterOutlet],
template: ` template: `
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -28,7 +28,7 @@ export class HeaderComponent { ...@@ -28,7 +28,7 @@ export class HeaderComponent {
public selectedLanguage = ""; public selectedLanguage = "";
constructor( constructor(
public navServices: NavService, public navServices: NavService,
private elementRef: ElementRef, private elementRef: ElementRef,
private renderer: Renderer2, private renderer: Renderer2,
private tokenService: TokenService, private tokenService: TokenService,
private translate: TranslateService, private translate: TranslateService,
...@@ -257,6 +257,10 @@ export class HeaderComponent { ...@@ -257,6 +257,10 @@ export class HeaderComponent {
checkAppToken(appmodule:string){ checkAppToken(appmodule:string){
this.tokenService.saveAppToken(appmodule) this.tokenService.saveAppToken(appmodule)
this.router.navigate(['/'+appmodule]) this.router.navigate(['/portal-manage/'+appmodule])
}
goToHome() {
this.router.navigate(['/home'])
} }
} }
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