fix: 캘린더 모달 중복 카드 문제 및 삭제 권한 개선

- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산
- 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader)
- 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql)
- synology_deployment 버전에도 동일 수정 적용
This commit is contained in:
Hyungi Ahn
2025-12-02 13:08:44 +09:00
parent beaffcad49
commit a9bce9d20b
419 changed files with 275129 additions and 394 deletions

View File

@@ -14,7 +14,15 @@
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.js"></script>
</head>
<body>
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<div class="analysis-container">
<!-- 뒤로가기 버튼 -->
<a href="javascript:history.back()" class="back-button" style="margin: 1rem 0;">
← 뒤로가기
</a>
<!-- 페이지 헤더 -->
<header class="page-header fade-in">
<h1 class="page-title">
@@ -297,18 +305,6 @@
</main>
</div>
<!-- 대시보드 이동 버튼 (고정) -->
<div style="position: fixed; top: 20px; right: 20px; z-index: 1000;">
<a href="/pages/dashboard/group-leader.html"
style="display: inline-flex; align-items: center; gap: 8px; padding: 12px 20px;
background: linear-gradient(135deg, #2563eb 0%, #3b82f6 100%);
color: white; text-decoration: none; border-radius: 12px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
font-weight: 600; transition: all 0.2s ease;">
<span>📊</span>
<span>대시보드</span>
</a>
</div>
<!-- JavaScript -->
<script src="/js/work-analysis.js?v=4"></script>
@@ -2898,5 +2894,6 @@
// 초기 모드 설정
window.currentAnalysisMode = 'period';
</script>
<script src="/js/load-navbar.js?v=4"></script>
</body>
</html>

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>작업 현황 확인 - TK 건설</title>
<link rel="stylesheet" href="/css/common.css?v=13">
<link rel="stylesheet" href="/css/modern-dashboard.css?v=13">
<link rel="stylesheet" href="/css/modern-dashboard.css?v=14">
<link rel="stylesheet" href="/css/work-report-calendar.css?v=29">
</head>
<body>
@@ -31,10 +31,10 @@
<div class="header-right">
<div class="header-actions">
<a href="/pages/dashboard/group-leader.html" class="dashboard-btn" title="대시보드로 이동">
<span class="btn-icon">📊</span>
<span class="btn-text">대시보드</span>
</a>
<button class="btn btn-secondary dashboard-btn" onclick="window.location.href='/pages/dashboard/group-leader.html'">
<span class="btn-icon">🏠</span>
대시보드
</button>
</div>
<div class="user-profile" id="userProfile">
@@ -54,10 +54,6 @@
<span class="menu-icon">🔐</span>
비밀번호 변경
</a>
<a href="/pages/dashboard/group-leader.html" class="menu-item">
<span class="menu-icon">📊</span>
대시보드
</a>
<button class="menu-item logout-btn" id="logoutBtn">
<span class="menu-icon">🚪</span>
로그아웃
@@ -340,7 +336,7 @@
<!-- JavaScript -->
<script src="/js/api-config.js?v=13"></script>
<script src="/js/auth-check.js?v=13"></script>
<script src="/js/load-navbar.js?v=13"></script>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/work-report-calendar.js?v=41"></script>
</body>
</html>

View File

@@ -172,7 +172,7 @@
<!-- 스크립트 -->
<script src="/js/api-config.js?v=2"></script>
<script src="/js/load-navbar.js?v=2"></script>
<script src="/js/load-navbar.js?v=3"></script>
<script src="/js/daily-work-report.js?v=10"></script>
</body>
</html>

View File

@@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>관리자 포털 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/main-layout.css">
<link rel="stylesheet" href="/css/admin.css">
<link rel="icon" type="image/png" href="/img/favicon.png">
<!-- ✅ auth-check를 가장 먼저 로딩 -->
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<div class="main-layout">
<!-- ✅ ID 통일: navbar-container -->
<div id="navbar-container"></div>
<div class="content-wrapper">
<div id="sidebar-container"></div>
<main id="admin-sections">
<div class="loading">페이지를 불러오는 중...</div>
</main>
</div>
</div>
<!-- ✅ 스크립트 로딩 순서 최적화 -->
<script type="module" src="/js/load-navbar.js"></script>
<script type="module" src="/js/load-sidebar.js"></script>
<script type="module" src="/js/load-sections.js"></script>
<!-- ✅ admin.js는 다른 모듈들이 로딩된 후 실행되도록 순서 조정 -->
<script type="module" src="/js/admin.js"></script>
</body>
</html>

View File

@@ -13,7 +13,7 @@
<!-- 스크립트 (순서 중요: api-config.js가 먼저 로드되어야 함) -->
<script src="/js/api-config.js"></script>
<script src="/js/auth-check.js" defer></script>
<script src="/js/modern-dashboard.js?v=3" defer></script>
<script src="/js/modern-dashboard.js?v=10" defer></script>
</head>
<body>
<!-- 메인 컨테이너 -->
@@ -57,6 +57,10 @@
<span class="menu-icon">🔐</span>
비밀번호 변경
</a>
<a href="/pages/profile/admin-settings.html" class="menu-item admin-only">
<span class="menu-icon">⚙️</span>
관리자 설정
</a>
<button class="menu-item logout-btn" id="logoutBtn">
<span class="menu-icon">🚪</span>
로그아웃
@@ -96,7 +100,7 @@
<div class="action-arrow"></div>
</a>
<a href="/pages/analysis/work-analysis.html" class="quick-action-card">
<a href="/pages/analysis/work-analysis.html" class="quick-action-card admin-only">
<div class="action-icon-large">📈</div>
<div class="action-content">
<h3>작업 분석</h3>

View File

@@ -11,58 +11,24 @@
<script src="/js/api-config.js?v=1" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="dashboard-header">
<div class="header-left">
<div class="logo-section">
<img src="/img/logo.png" alt="테크니컬코리아" class="logo">
<div class="company-info">
<h1 class="company-name">테크니컬코리아</h1>
<p class="company-subtitle">코드 관리</p>
</div>
</div>
</div>
<div class="header-center">
<div class="current-time">
<span class="time-label">현재 시각</span>
<span class="time-value" id="timeValue">--:--:--</span>
</div>
</div>
<div class="header-right">
<div class="header-actions">
<a href="/pages/management/work-management.html" class="back-btn" title="작업 관리로 돌아가기">
<span class="btn-icon"></span>
<span class="btn-text">작업 관리</span>
</a>
<a href="/pages/dashboard/group-leader.html" class="dashboard-btn" title="대시보드로 이동">
<span class="btn-icon">📊</span>
<span class="btn-text">대시보드</span>
</a>
</div>
<div class="user-profile" id="userProfile">
<div class="user-avatar">
<span class="avatar-text" id="userInitial"></span>
</div>
<div class="user-info">
<span class="user-name" id="userName">사용자</span>
<span class="user-role" id="userRole">작업자</span>
</div>
<div class="profile-dropdown" id="profileMenu" style="display: none;">
<button class="dropdown-item logout-btn" id="logoutBtn">
<span class="dropdown-icon">🚪</span>
로그아웃
</button>
</div>
</div>
</div>
<header class="work-report-header">
<h1>🏷️ 코드 관리</h1>
<p class="subtitle">작업 상태, 오류 유형, 작업 유형 등 시스템에서 사용하는 코드를 관리합니다</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="dashboard-main">
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/management/work-management.html" class="back-button">
← 작업관리로 돌아가기
</a>
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
@@ -282,8 +248,11 @@
</button>
</div>
</div>
</div>
</div>
</main>
</div>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/code-management.js?v=1"></script>
</body>
</html>

View File

@@ -10,64 +10,24 @@
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="dashboard-header">
<div class="header-left">
<div class="logo-section">
<img src="/img/logo.png" alt="테크니컬코리아" class="logo">
<div class="company-info">
<h1 class="company-name">테크니컬코리아</h1>
<span class="company-subtitle">생산팀 포털</span>
</div>
</div>
</div>
<div class="header-center">
<div class="current-time" id="currentTime">
<span class="time-label">현재 시간</span>
<span class="time-value" id="timeValue">--:--:--</span>
</div>
</div>
<div class="header-right">
<div class="header-actions">
<a href="/pages/management/work-management.html" class="back-btn" title="작업관리로 돌아가기">
<span class="btn-icon"></span>
<span class="btn-text">작업관리</span>
</a>
<a href="/pages/dashboard/group-leader.html" class="dashboard-btn" title="대시보드로 이동">
<span class="btn-icon">📊</span>
<span class="btn-text">대시보드</span>
</a>
</div>
<div class="user-profile" id="userProfile">
<div class="user-avatar" id="userInitial"></div>
<div class="user-info">
<span class="user-name" id="userName">사용자</span>
<span class="user-role" id="userRole">작업자</span>
</div>
<div class="profile-dropdown" id="profileMenu" style="display: none;">
<a href="/pages/profile/my-profile.html" class="dropdown-item">
<span class="dropdown-icon">👤</span>
내 프로필
</a>
<a href="/pages/profile/settings.html" class="dropdown-item">
<span class="dropdown-icon">⚙️</span>
설정
</a>
<div class="dropdown-divider"></div>
<button class="dropdown-item logout-btn" id="logoutBtn">
<span class="dropdown-icon">🚪</span>
로그아웃
</button>
</div>
</div>
</div>
<header class="work-report-header">
<h1>📁 프로젝트 관리</h1>
<p class="subtitle">프로젝트 등록, 수정, 삭제 및 기본 정보를 관리합니다</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="dashboard-main">
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/management/work-management.html" class="back-button">
← 작업관리로 돌아가기
</a>
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
@@ -242,10 +202,13 @@
</button>
</div>
</div>
</div>
</div>
</main>
</div>
<!-- JavaScript -->
<script src="/js/api-config.js?v=13"></script>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/project-management.js?v=1"></script>
</body>
</html>

View File

@@ -5,77 +5,56 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>작업 관리 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/common.css?v=1">
<link rel="stylesheet" href="/css/work-management.css?v=1">
<link rel="stylesheet" href="/css/work-management.css?v=2">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="dashboard-header">
<div class="header-left">
<div class="logo-section">
<img src="/img/logo.png" alt="테크니컬코리아" class="logo">
<div class="company-info">
<h1 class="company-name">테크니컬코리아</h1>
<span class="company-subtitle">생산팀 포털</span>
</div>
</div>
</div>
<div class="header-center">
<div class="current-time" id="currentTime">
<span class="time-label">현재 시간</span>
<span class="time-value" id="timeValue">--:--:--</span>
</div>
</div>
<div class="header-right">
<div class="header-actions">
<a href="/pages/dashboard/group-leader.html" class="dashboard-btn" title="대시보드로 이동">
<span class="btn-icon">📊</span>
<span class="btn-text">대시보드</span>
</a>
</div>
<div class="user-profile" id="userProfile">
<div class="user-avatar" id="userInitial"></div>
<div class="user-info">
<span class="user-name" id="userName">사용자</span>
<span class="user-role" id="userRole">작업자</span>
</div>
<div class="profile-dropdown" id="profileMenu" style="display: none;">
<a href="/pages/profile/my-profile.html" class="dropdown-item">
<span class="dropdown-icon">👤</span>
내 프로필
</a>
<a href="/pages/profile/settings.html" class="dropdown-item">
<span class="dropdown-icon">⚙️</span>
설정
</a>
<div class="dropdown-divider"></div>
<button class="dropdown-item logout-btn" id="logoutBtn">
<span class="dropdown-icon">🚪</span>
로그아웃
</button>
</div>
</div>
</div>
<header class="work-report-header">
<h1>🔧 작업 관리</h1>
<p class="subtitle">프로젝트, 작업자, 작업 유형 등 기본 데이터를 관리합니다</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
<span class="title-icon">🔧</span>
작업 관리
</h1>
<p class="page-description">프로젝트, 작업자, 작업 유형 등 기본 데이터를 관리합니다</p>
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="javascript:history.back()" class="back-button">
← 뒤로가기
</a>
<div class="dashboard-main">
<!-- 빠른 액세스 섹션 -->
<div class="quick-access-section">
<h2 class="section-title">⚡ 빠른 액세스</h2>
<div class="quick-actions-grid">
<button class="quick-action-btn" onclick="navigateToPage('/pages/management/project-management.html')">
<span class="quick-icon">📁</span>
<span class="quick-text">새 프로젝트</span>
</button>
<button class="quick-action-btn" onclick="navigateToPage('/pages/management/worker-management.html')">
<span class="quick-icon">👤</span>
<span class="quick-text">작업자 등록</span>
</button>
<button class="quick-action-btn" onclick="navigateToPage('/pages/management/code-management.html')">
<span class="quick-icon">🏷️</span>
<span class="quick-text">코드 설정</span>
</button>
<button class="quick-action-btn" onclick="navigateToPage('/pages/analysis/work-analysis.html')">
<span class="quick-icon">📊</span>
<span class="quick-text">작업 분석</span>
</button>
</div>
</div>
<!-- 관리 메뉴 카드들 -->
<div class="management-grid">
<div class="management-section">
<h2 class="section-title">🔧 관리 메뉴</h2>
<div class="management-grid">
<!-- 프로젝트 관리 -->
<div class="management-card" onclick="navigateToPage('/pages/management/project-management.html')">
<div class="card-header">
@@ -136,46 +115,50 @@
<span class="card-action">관리하기 →</span>
</div>
</div>
</div>
</div>
<!-- 최근 활동 -->
<div class="recent-activity-section">
<div class="section-header">
<h2 class="section-title">최근 관리 활동</h2>
<button class="refresh-btn" onclick="loadRecentActivity()">
<span class="refresh-icon">🔄</span>
새로고침
</button>
</div>
<div class="activity-list" id="activityList">
<div class="activity-item">
<div class="activity-icon">📁</div>
<div class="activity-content">
<div class="activity-title">효성화학 에틸렌 탱크 건설공사 프로젝트가 수정되었습니다</div>
<div class="activity-meta">
<span class="activity-user">김두수</span>
<span class="activity-time">2시간 전</span>
</div>
<!-- 시스템 상태 섹션 -->
<div class="system-status-section">
<h2 class="section-title">📊 시스템 현황</h2>
<div class="status-grid">
<div class="status-card">
<div class="status-icon">📁</div>
<div class="status-info">
<span class="status-label">활성 프로젝트</span>
<span class="status-value" id="activeProjectCount">-</span>
</div>
</div>
<div class="activity-item">
<div class="activity-icon">👥</div>
<div class="activity-content">
<div class="activity-title">새로운 작업자가 등록되었습니다</div>
<div class="activity-meta">
<span class="activity-user">관리자</span>
<span class="activity-time">1일 전</span>
</div>
<div class="status-card">
<div class="status-icon">👥</div>
<div class="status-info">
<span class="status-label">등록 작업자</span>
<span class="status-value" id="totalWorkerCount">-</span>
</div>
</div>
<div class="status-card">
<div class="status-icon">📋</div>
<div class="status-info">
<span class="status-label">이번 달 작업</span>
<span class="status-value" id="monthlyWorkCount">-</span>
</div>
</div>
<div class="status-card">
<div class="status-icon">⚠️</div>
<div class="status-info">
<span class="status-label">미완료 작업</span>
<span class="status-value" id="incompleteWorkCount">-</span>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<!-- JavaScript -->
<script src="/js/api-config.js?v=13"></script>
<script src="/js/work-management.js?v=1"></script>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/work-management.js?v=2"></script>
</body>
</html>

View File

@@ -11,58 +11,24 @@
<script src="/js/api-config.js?v=1" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="dashboard-header">
<div class="header-left">
<div class="logo-section">
<img src="/img/logo.png" alt="테크니컬코리아" class="logo">
<div class="company-info">
<h1 class="company-name">테크니컬코리아</h1>
<p class="company-subtitle">작업자 관리</p>
</div>
</div>
</div>
<div class="header-center">
<div class="current-time">
<span class="time-label">현재 시각</span>
<span class="time-value" id="timeValue">--:--:--</span>
</div>
</div>
<div class="header-right">
<div class="header-actions">
<a href="/pages/management/work-management.html" class="back-btn" title="작업 관리로 돌아가기">
<span class="btn-icon"></span>
<span class="btn-text">작업 관리</span>
</a>
<a href="/pages/dashboard/group-leader.html" class="dashboard-btn" title="대시보드로 이동">
<span class="btn-icon">📊</span>
<span class="btn-text">대시보드</span>
</a>
</div>
<div class="user-profile" id="userProfile">
<div class="user-avatar">
<span class="avatar-text" id="userInitial"></span>
</div>
<div class="user-info">
<span class="user-name" id="userName">사용자</span>
<span class="user-role" id="userRole">작업자</span>
</div>
<div class="profile-dropdown" id="profileMenu" style="display: none;">
<button class="dropdown-item logout-btn" id="logoutBtn">
<span class="dropdown-icon">🚪</span>
로그아웃
</button>
</div>
</div>
</div>
<header class="work-report-header">
<h1>👥 작업자 관리</h1>
<p class="subtitle">작업자 등록, 수정, 삭제 및 기본 정보를 관리합니다</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="dashboard-main">
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/management/work-management.html" class="back-button">
← 작업관리로 돌아가기
</a>
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
@@ -225,8 +191,11 @@
</button>
</div>
</div>
</div>
</div>
</main>
</div>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/worker-management.js?v=3"></script>
</body>
</html>

View File

@@ -0,0 +1,184 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>관리자 설정 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/common.css?v=1">
<link rel="stylesheet" href="/css/admin-settings.css?v=1">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="work-report-header">
<h1>⚙️ 관리자 설정</h1>
<p class="subtitle">시스템 사용자 계정 및 권한을 관리합니다</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="javascript:history.back()" class="back-button">
← 뒤로가기
</a>
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
<span class="title-icon">⚙️</span>
관리자 설정
</h1>
<p class="page-description">시스템 사용자 계정 및 권한을 관리합니다</p>
</div>
</div>
<!-- 사용자 관리 섹션 -->
<div class="settings-section">
<div class="section-header">
<h2 class="section-title">
<span class="section-icon">👥</span>
사용자 계정 관리
</h2>
<button class="btn btn-primary" id="addUserBtn">
<span class="btn-icon"></span>
새 사용자 추가
</button>
</div>
<div class="users-container">
<div class="users-header">
<div class="search-box">
<input type="text" id="userSearch" placeholder="사용자 검색..." class="search-input">
<span class="search-icon">🔍</span>
</div>
<div class="filter-buttons">
<button class="filter-btn active" data-filter="all">전체</button>
<button class="filter-btn" data-filter="admin">관리자</button>
<button class="filter-btn" data-filter="leader">그룹장</button>
<button class="filter-btn" data-filter="user">작업자</button>
</div>
</div>
<div class="users-table-container">
<table class="users-table">
<thead>
<tr>
<th>사용자명</th>
<th>아이디</th>
<th>역할</th>
<th>상태</th>
<th>최종 로그인</th>
<th>관리</th>
</tr>
</thead>
<tbody id="usersTableBody">
<!-- 사용자 목록이 여기에 동적으로 생성됩니다 -->
</tbody>
</table>
</div>
<div class="empty-state" id="emptyState" style="display: none;">
<div class="empty-icon">👥</div>
<h3>등록된 사용자가 없습니다</h3>
<p>새 사용자를 추가해보세요.</p>
</div>
</div>
</div>
</div>
</main>
</div>
<!-- 사용자 추가/수정 모달 -->
<div id="userModal" class="modal-overlay" style="display: none;">
<div class="modal-container">
<div class="modal-header">
<h2 id="modalTitle">새 사용자 추가</h2>
<button class="modal-close-btn" onclick="closeUserModal()">×</button>
</div>
<div class="modal-body">
<form id="userForm">
<div class="form-group">
<label class="form-label">사용자명 *</label>
<input type="text" id="userName" class="form-control" required>
</div>
<div class="form-group">
<label class="form-label">아이디 *</label>
<input type="text" id="userId" class="form-control" required>
<small class="form-help">영문, 숫자만 사용 가능 (4-20자)</small>
</div>
<div class="form-group" id="passwordGroup">
<label class="form-label">비밀번호 *</label>
<input type="password" id="userPassword" class="form-control" required>
<small class="form-help">최소 6자 이상</small>
</div>
<div class="form-group">
<label class="form-label">역할 *</label>
<select id="userRole" class="form-control" required>
<option value="">역할 선택</option>
<option value="admin">관리자</option>
<option value="leader">그룹장</option>
<option value="user">작업자</option>
</select>
</div>
<div class="form-group">
<label class="form-label">이메일</label>
<input type="email" id="userEmail" class="form-control">
</div>
<div class="form-group">
<label class="form-label">전화번호</label>
<input type="tel" id="userPhone" class="form-control">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" onclick="closeUserModal()">취소</button>
<button type="button" class="btn btn-primary" id="saveUserBtn">저장</button>
</div>
</div>
</div>
<!-- 사용자 삭제 확인 모달 -->
<div id="deleteModal" class="modal-overlay" style="display: none;">
<div class="modal-container small">
<div class="modal-header">
<h2>사용자 삭제</h2>
<button class="modal-close-btn" onclick="closeDeleteModal()">×</button>
</div>
<div class="modal-body">
<div class="delete-warning">
<div class="warning-icon">⚠️</div>
<p>정말로 이 사용자를 삭제하시겠습니까?</p>
<p class="warning-text">삭제된 사용자는 복구할 수 없습니다.</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" onclick="closeDeleteModal()">취소</button>
<button type="button" class="btn btn-danger" id="confirmDeleteBtn">삭제</button>
</div>
</div>
</div>
<!-- 토스트 알림 -->
<div class="toast-container" id="toastContainer"></div>
<!-- JavaScript -->
<script src="/js/api-config.js?v=13"></script>
<script src="/js/load-navbar.js?v=4"></script>
<script src="/js/admin-settings.js?v=5"></script>
</body>
</html>