Commit b67f5495 by Ooh-Ao

หห

parent 264a7c6c
......@@ -48,5 +48,5 @@ export const App_Route: Route[] = [
path: 'unauthorized',
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,
const permissionService = inject(CorePermissionService);
const router = inject(Router);
// Get the module name from the route parameter :appName
const moduleName = route.params['appName'];
// Get the module name from the route parameter :appName or from the route path
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 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(
......
......@@ -36,9 +36,13 @@ export class CorePermissionService {
* @param moduleName The name of the module (e.g., from the route path).
*/
canAccessModule(moduleName: string): Observable<boolean> {
return this.getAccessibleModules().pipe(
map(modules => modules.includes(moduleName))
);
// Temporarily allow access to all modules
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 {
displayName: 'myHR-Plus',
description: 'ระบบจัดการทรัพยากรบุคคลขั้นสูง',
icon: './assets/images/logoallHR/myhr-plus.jpg',
path: '/myhr-plus',
path: '/portal-manage/myhr-plus',
isVisible: true,
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',
......@@ -225,10 +225,10 @@ export class HomeComponent implements OnInit {
displayName: 'myHR-Lite',
description: 'ระบบจัดการทรัพยากรบุคคลพื้นฐาน',
icon: './assets/images/logoallHR/myHR-Lite-logo-new.png',
path: '/myhr-lite',
path: '/portal-manage/myhr-lite',
isVisible: true,
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',
......@@ -236,10 +236,10 @@ export class HomeComponent implements OnInit {
displayName: 'Zeeme Plus',
description: 'ระบบจัดการเวลาและลงเวลา',
icon: './assets/images/logoallHR/zeemePlus.png',
path: '/zeeme',
path: '/portal-manage/zeeme',
isVisible: true,
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',
......@@ -247,10 +247,10 @@ export class HomeComponent implements OnInit {
displayName: 'myFace',
description: 'ระบบจัดการใบหน้าและความปลอดภัย',
icon: './assets/images/logoallHR/logo_myface.png',
path: '/myface',
path: '/portal-manage/myface',
isVisible: true,
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',
......@@ -258,10 +258,10 @@ export class HomeComponent implements OnInit {
displayName: 'myLearn',
description: 'ระบบจัดการการเรียนรู้และฝึกอบรม',
icon: './assets/images/logoallHR/mylearn-logo.png',
path: '/mylearn',
path: '/portal-manage/mylearn',
isVisible: true,
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',
......@@ -269,10 +269,10 @@ export class HomeComponent implements OnInit {
displayName: 'myJob',
description: 'ระบบจัดการงานและโครงการ',
icon: './assets/images/logoallHR/logo_myjob.png',
path: '/myjob',
path: '/portal-manage/myjob',
isVisible: true,
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',
......@@ -280,10 +280,10 @@ export class HomeComponent implements OnInit {
displayName: 'mySkill-X',
description: 'ระบบจัดการทักษะและความสามารถ',
icon: './assets/images/logoallHR/mySkill-x.png',
path: '/myskill-x',
path: '/portal-manage/myskill-x',
isVisible: true,
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 {
displayName: 'Dashboard',
description: 'แดชบอร์ดหลัก',
icon: './assets/images/icons/dashboard.png',
path: '/dashboard',
path: '/portal-manage/dashboard',
isVisible: true,
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',
......@@ -306,7 +306,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/meeting-booking',
isVisible: true,
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 {
path: '/portal-manage/permission-management',
isVisible: true,
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',
......@@ -329,7 +329,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/role-management',
isVisible: true,
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',
......@@ -340,7 +340,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/menu-permission-management',
isVisible: true,
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',
......@@ -351,7 +351,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/user-role-management',
isVisible: true,
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',
......@@ -362,7 +362,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/company-management',
isVisible: true,
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',
......@@ -373,7 +373,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/widget-management',
isVisible: true,
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',
......@@ -384,7 +384,7 @@ export class HomeComponent implements OnInit {
path: '/portal-manage/dashboard-management',
isVisible: true,
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 {
}
navigateToApp(app: AppModule) {
if (app.path.startsWith('/portal-manage')) {
this.router.navigate([app.path]);
} else {
this.checkAppToken(app.id);
}
// เนื่องจากทุก path ตอนนี้เริ่มด้วย /portal-manage แล้ว
this.router.navigate([app.path]);
}
getAppCardClass(app: AppModule): string {
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-myface-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-myface',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-myhr-lite-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-myhr-lite',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-myjob-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-myjob',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-mylearn-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-mylearn',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-myskill-x-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-myskill-x',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-zeeme-dashboard',
standalone: true,
template: `
<div class="container-fluid">
<div class="row">
......
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-zeeme',
standalone: true,
imports: [RouterOutlet],
template: `
<div class="container-fluid">
<div class="row">
......
......@@ -28,7 +28,7 @@ export class HeaderComponent {
public selectedLanguage = "";
constructor(
public navServices: NavService,
private elementRef: ElementRef,
private elementRef: ElementRef,
private renderer: Renderer2,
private tokenService: TokenService,
private translate: TranslateService,
......@@ -257,6 +257,10 @@ export class HeaderComponent {
checkAppToken(appmodule:string){
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