diff --git a/gateway/html/dashboard.html b/gateway/html/dashboard.html
index 1d2e0c4..f92a3a0 100644
--- a/gateway/html/dashboard.html
+++ b/gateway/html/dashboard.html
@@ -430,7 +430,7 @@
subdomain: 'tkfb',
path: '/pages/work/tbm.html',
color: '#d97706',
- requirePageKey: 's1.work.tbm'
+ requirePageKey: 'work.tbm'
},
{
id: 'vacation',
@@ -444,7 +444,7 @@
subdomain: 'tkfb',
path: '/pages/attendance/vacation-management.html',
color: '#7c3aed',
- requirePageKey: 's1.attendance.vacation_management'
+ requirePageKey: 'attendance.vacation_management'
}
];
@@ -489,13 +489,13 @@
// ===== Card Definitions =====
var SYSTEM_CARDS = [
- { id: 'factory', name: '공장관리', desc: '작업장 현황, TBM, 설비관리', icon: '\uD83C\uDFED', subdomain: 'tkfb', path: '/pages/dashboard.html', pageKey: 's1.dashboard', color: '#1a56db' },
+ { id: 'factory', name: '공장관리', desc: '작업장 현황, TBM, 설비관리', icon: '\uD83C\uDFED', subdomain: 'tkfb', path: '/pages/dashboard.html', pageKey: 'dashboard', color: '#1a56db' },
{ id: 'report_sys', name: '신고', desc: '사건·사고 신고 접수', icon: '\uD83D\uDEA8', subdomain: 'tkreport', accessKey: 'system2', color: '#dc2626' },
- { id: 'quality', name: '부적합관리', desc: '부적합 이슈 추적·처리', icon: '\uD83D\uDCCA', subdomain: 'tkqc', pageKey: 'issues_dashboard', color: '#059669' },
- { id: 'purchase', name: '구매관리', desc: '자재 구매, 일용직 관리', icon: '\uD83D\uDED2', subdomain: 'tkpurchase', pageKey: 'purchasing_schedule', color: '#d97706' },
- { id: 'safety', name: '안전관리', desc: '안전 점검, 방문 관리', icon: '\uD83E\uDDBA', subdomain: 'tksafety', pageKey: 'safety_visit_management', color: '#7c3aed' },
+ { id: 'quality', name: '부적합관리', desc: '부적합 이슈 추적·처리', icon: '\uD83D\uDCCA', subdomain: 'tkqc', accessKey: 'system3', color: '#059669' },
+ { id: 'purchase', name: '구매관리', desc: '자재 구매, 일용직 관리', icon: '\uD83D\uDED2', subdomain: 'tkpurchase', color: '#d97706' },
+ { id: 'safety', name: '안전관리', desc: '안전 점검, 방문 관리', icon: '\uD83E\uDDBA', subdomain: 'tksafety', color: '#7c3aed' },
{ id: 'support', name: '행정지원', desc: '전사 행정 업무 지원', icon: '\uD83C\uDFE2', subdomain: 'tksupport', comingSoon: true, color: '#6b7280' },
- { id: 'admin', name: '통합관리', desc: '사용자·권한 관리', icon: '\u2699\uFE0F', subdomain: 'tkuser', pageKey: 'tkuser.users', color: '#0891b2' }
+ { id: 'admin', name: '통합관리', desc: '사용자·권한 관리', icon: '\u2699\uFE0F', subdomain: 'tkuser', minRole: 'admin', color: '#0891b2' }
];
// ===== Rendering =====
@@ -556,15 +556,21 @@
return a;
}
- function isCardVisible(card, allowed, systemAccess) {
+ function isCardVisible(card, allowed, systemAccess, userRole) {
if (card.comingSoon) return true;
+ if (card.minRole) {
+ var roleOrder = ['user','leader','support_team','admin','system'];
+ var userIdx = roleOrder.indexOf(userRole);
+ var minIdx = roleOrder.indexOf(card.minRole);
+ if (userIdx < minIdx) return false;
+ }
if (card.pageKey && !allowed.has(card.pageKey)) return false;
if (card.accessKey && systemAccess[card.accessKey] === false) return false;
return true;
}
- function renderSection(sectionId, gridId, cards, allowed, systemAccess, isSystem) {
- var visible = cards.filter(function(c) { return isCardVisible(c, allowed, systemAccess); });
+ function renderSection(sectionId, gridId, cards, allowed, systemAccess, isSystem, userRole) {
+ var visible = cards.filter(function(c) { return isCardVisible(c, allowed, systemAccess, userRole); });
if (visible.length === 0) return;
var grid = document.getElementById(gridId);
@@ -601,11 +607,10 @@
// Fallback: show cards based on system_access
console.warn('page-access API error:', e);
if (systemAccess.system1 !== false) {
- ['s1.work.tbm', 's1.work.report_create', 's1.inspection.checkin',
- 's1.attendance.my_vacation_info', 's1.attendance.vacation_request',
- 's1.dashboard'].forEach(function(k) { allowed.add(k); });
+ ['work.tbm', 'work.report_create', 'inspection.checkin',
+ 'attendance.my_vacation_info', 'attendance.vacation_request',
+ 'dashboard'].forEach(function(k) { allowed.add(k); });
}
- if (systemAccess.system3 !== false) allowed.add('issues_dashboard');
}
// A: Welcome section
@@ -615,8 +620,9 @@
loadTodayStats(token, allowed);
// Render banners + system cards
+ var userRole = user.role || 'user';
loadBanners(token, allowed);
- renderSection('systemSection', 'systemGrid', SYSTEM_CARDS, allowed, systemAccess, true);
+ renderSection('systemSection', 'systemGrid', SYSTEM_CARDS, allowed, systemAccess, true, userRole);
}
// ===== A: Welcome =====
@@ -678,7 +684,7 @@
var fetches = [];
// Attendance
- if (allowed.has('s1.attendance.daily_status') || allowed.has('s1.attendance.vacation_management') || allowed.has('s1.dashboard')) {
+ if (allowed.has('attendance.daily') || allowed.has('attendance.vacation_management') || allowed.has('dashboard')) {
var idx = cards.length;
cards.push({ icon: '\uD83D\uDC77', label: '출근', value: '\u2013', color: '#1a56db', visible: true });
fetches.push(
@@ -695,7 +701,7 @@
}
// Work reports
- if (allowed.has('s1.dashboard')) {
+ if (allowed.has('dashboard')) {
var idx2 = cards.length;
cards.push({ icon: '\uD83D\uDD27', label: '작업', value: '\u2013', color: '#059669', visible: true });
fetches.push(