feat: 관리 페이지(Admin Pages) UI 개선 및 표준화

## 주요 변경사항
- 프로젝트/작업자/코드 관리 페이지 2단 레이아웃(사이드바+메인) 적용
- 통일된 3열 카드 그리드 레이아웃 구현
- 코드 관리 페이지 탭 및 카드 디자인 개선
- 관리 페이지 표준 가이드 문서 작성

## 세부 내용
### HTML 구조 개선
- `.page-container` flexbox 레이아웃으로 변경
- 240px 고정폭 사이드바 네비게이션 추가
- 페이지 헤더를 카드 형태로 분리

### CSS 개선
- admin-pages.css 신규 생성 (v7)
- 3열 그리드 레이아웃 (repeat(3, 1fr))
- 카드 높이 통일 (프로젝트/작업자: 420px, 코드: 최소 200px)
- 반응형 디자인 (1200px: 2열, 768px: 1열)

### 코드 관리 페이지 특화
- 탭 네비게이션 스타일 개선
- 상태별/심각도별 컬러 보더 적용
- 해결 가이드 섹션 스타일링
- 아이콘 48x48 둥근 박스 디자인

### 문서화
- ADMIN_PAGE_STANDARD.md 생성
- HTML 템플릿, CSS 클래스, 파일 명명 규칙 정의
- 3가지 페이지 타입(카드 그리드/테이블/탭) 표준화

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-01-26 13:57:43 +09:00
parent 35aa4a840e
commit ca33736ed4
5 changed files with 2277 additions and 57 deletions

588
docs/ADMIN_PAGE_STANDARD.md Normal file
View File

@@ -0,0 +1,588 @@
# 관리 페이지 표준 가이드 (Admin Page Standard)
> **작성일**: 2026-01-26
> **버전**: 1.0.0
> **용도**: 관리자 페이지(Admin Pages) 통합 개발 표준
---
## 📋 목차
1. [용어 정의](#1-용어-정의)
2. [페이지 유형 분류](#2-페이지-유형-분류)
3. [표준 레이아웃 구조](#3-표준-레이아웃-구조)
4. [HTML 구조 템플릿](#4-html-구조-템플릿)
5. [CSS 클래스 규칙](#5-css-클래스-규칙)
6. [JavaScript 규칙](#6-javascript-규칙)
7. [파일 네이밍 규칙](#7-파일-네이밍-규칙)
8. [체크리스트](#8-체크리스트)
---
## 1. 용어 정의
### 1.1 관리 페이지 (Admin Page)
**정의**: 데이터의 CRUD(Create, Read, Update, Delete) 작업을 수행하는 관리자 전용 페이지
**특징**:
- 2단 레이아웃 (사이드바 + 메인 콘텐츠)
- 카드/그리드 방식의 데이터 표시
- 검색, 필터, 통계 기능 포함
- 모달을 통한 추가/수정 기능
**명명 규칙**: `{엔티티}-management` 또는 `{엔티티}s.html`
**예시**:
- ✅ 프로젝트 관리 (`projects.html`)
- ✅ 작업자 관리 (`workers.html`)
- ✅ 코드 관리 (`codes.html`)
### 1.2 관리 페이지의 구성 요소
| 용어 | 영문 | 설명 | 클래스명 |
|------|------|------|----------|
| 사이드바 | Sidebar | 좌측 네비게이션 메뉴 | `.sidebar` |
| 메인 콘텐츠 | Main Content | 우측 콘텐츠 영역 | `.main-content` |
| 페이지 헤더 | Page Header | 타이틀 + 액션 버튼 | `.page-header` |
| 검색 섹션 | Search Section | 검색바 + 필터 | `.search-section` |
| 통계 카드 | Statistics | 데이터 통계 표시 | `.project-stats`, `.stat-item` |
| 데이터 그리드 | Data Grid | 카드/테이블 그리드 | `.projects-grid` |
| 데이터 카드 | Data Card | 개별 데이터 표시 카드 | `.project-card` |
---
## 2. 페이지 유형 분류
### 2.1 Type A: 카드 그리드 관리 페이지
**용도**: 시각적으로 정보를 표시하고 관리하는 페이지
**레이아웃**:
```
┌─────────┬────────────────────────────────┐
│ │ 페이지 헤더 (타이틀 + 버튼) │
│ ├────────────────────────────────┤
│ 사이드바 │ 검색 섹션 (검색바 + 필터) │
│ ├────────────────────────────────┤
│ │ 통계 (활성/비활성/총) │
│ ├────────────────────────────────┤
│ │ [카드1] [카드2] [카드3] │
│ │ [카드4] [카드5] [카드6] │
│ │ 데이터 카드 그리드 │
└─────────┴────────────────────────────────┘
```
**적용 페이지**:
- 프로젝트 관리 (`projects.html`)
- 작업자 관리 (`workers.html`)
**그리드 설정**:
- 기본: 3열 (`grid-template-columns: repeat(3, 1fr)`)
- 카드 높이: 고정 420px
### 2.2 Type B: 테이블 관리 페이지
**용도**: 텍스트 중심의 데이터를 테이블 형태로 관리
**레이아웃**:
```
┌─────────┬────────────────────────────────┐
│ │ 페이지 헤더 (타이틀 + 버튼) │
│ ├────────────────────────────────┤
│ 사이드바 │ 검색 섹션 (검색바 + 필터) │
│ ├────────────────────────────────┤
│ │ ┌──────────────────────────┐ │
│ │ │ 테이블 헤더 │ │
│ │ ├──────────────────────────┤ │
│ │ │ 데이터 행 1 │ │
│ │ │ 데이터 행 2 │ │
│ │ │ 데이터 행 3 │ │
│ │ └──────────────────────────┘ │
└─────────┴────────────────────────────────┘
```
**적용 가능 페이지**:
- 로그 관리
- 권한 관리
### 2.3 Type C: 탭 기반 관리 페이지
**용도**: 여러 카테고리의 데이터를 탭으로 구분하여 관리
**레이아웃**:
```
┌─────────┬────────────────────────────────┐
│ │ 페이지 헤더 (타이틀 + 버튼) │
│ ├────────────────────────────────┤
│ 사이드바 │ [탭1] [탭2] [탭3] [탭4] │
│ ├────────────────────────────────┤
│ │ 검색 섹션 │
│ ├────────────────────────────────┤
│ │ 현재 탭의 콘텐츠 표시 │
│ │ (테이블 또는 카드) │
└─────────┴────────────────────────────────┘
```
**적용 페이지**:
- 코드 관리 (`codes.html`)
---
## 3. 표준 레이아웃 구조
### 3.1 2단 레이아웃 (Sidebar + Main)
**CSS Flexbox 구조**:
```css
.page-container {
display: flex; /* 가로 배치 */
min-height: calc(100vh - 80px);
}
.sidebar {
width: 240px; /* 고정 너비 */
min-width: 240px;
flex-shrink: 0; /* 줄어들지 않음 */
}
.main-content {
flex: 1; /* 나머지 공간 차지 */
padding: 2rem;
}
```
### 3.2 반응형 Breakpoints
| 화면 크기 | 사이드바 | 그리드 열 | 비고 |
|----------|---------|----------|------|
| 1400px+ | 240px | 3열 | 대형 데스크탑 |
| 1200px ~ 1399px | 240px | 3열 | 일반 데스크탑 |
| 1024px ~ 1199px | 240px | 2열 | 중형 화면 |
| 768px ~ 1023px | 200px | 2열 | 태블릿 |
| 767px 이하 | 숨김 | 1열 | 모바일 |
---
## 4. HTML 구조 템플릿
### 4.1 기본 HTML 템플릿
```html
<!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/design-system.css">
<link rel="stylesheet" href="/css/admin-pages.css?v=6">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 메인 레이아웃: 사이드바 + 콘텐츠 -->
<div class="page-container">
<!-- 사이드바 -->
<aside class="sidebar">
<nav class="sidebar-nav">
<div class="sidebar-header">
<h3 class="sidebar-title">관리 메뉴</h3>
</div>
<ul class="sidebar-menu">
<li class="menu-item {active-if-current}">
<a href="/pages/admin/{page}.html">
<span class="menu-icon">{icon}</span>
<span class="menu-text">{메뉴명}</span>
</a>
</li>
<!-- 반복... -->
<li class="menu-divider"></li>
<li class="menu-item">
<a href="/pages/admin/index.html">
<span class="menu-icon"></span>
<span class="menu-text">작업관리로</span>
</a>
</li>
</ul>
</nav>
</aside>
<!-- 메인 콘텐츠 -->
<main class="main-content">
<div class="dashboard-main">
<!-- 페이지 헤더 -->
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
<span class="title-icon">{icon}</span>
{엔티티명} 관리
</h1>
<p class="page-description">{설명}</p>
</div>
<div class="page-actions">
<button class="btn btn-primary" onclick="open{Entity}Modal()">
<span class="btn-icon"></span>
새 {엔티티} 등록
</button>
<button class="btn btn-secondary" onclick="refresh{Entity}List()">
<span class="btn-icon">🔄</span>
새로고침
</button>
</div>
</div>
<!-- 검색 섹션 -->
<div class="search-section">
<div class="search-bar">
<input type="text" id="searchInput" placeholder="검색..." class="search-input">
<button class="search-btn" onclick="search{Entities}()">
<span class="search-icon">🔍</span>
</button>
</div>
<!-- 필터 옵션 -->
</div>
<!-- 데이터 섹션 -->
<div class="projects-section">
<div class="section-header">
<h2 class="section-title">등록된 {엔티티}</h2>
<div class="project-stats">
<!-- 통계 카드 -->
</div>
</div>
<!-- 데이터 그리드 -->
<div class="projects-grid" id="{entities}Grid">
<!-- 카드들이 동적 생성 -->
</div>
</div>
</div>
</main>
</div>
<!-- 모달 -->
<div id="{entity}Modal" class="modal-overlay" style="display: none;">
<!-- 모달 콘텐츠 -->
</div>
<!-- JavaScript -->
<script type="module" src="/js/api-config.js"></script>
<script type="module" src="/js/load-navbar.js"></script>
<script type="module" src="/js/{entity}-management.js"></script>
</body>
</html>
```
### 4.2 사이드바 메뉴 구조
```html
<ul class="sidebar-menu">
<li class="menu-item active"> <!-- active는 현재 페이지에만 -->
<a href="/pages/admin/projects.html">
<span class="menu-icon">📁</span>
<span class="menu-text">프로젝트 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/workers.html">
<span class="menu-icon">👥</span>
<span class="menu-text">작업자 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/codes.html">
<span class="menu-icon">🏷️</span>
<span class="menu-text">코드 관리</span>
</a>
</li>
<li class="menu-divider"></li>
<li class="menu-item">
<a href="/pages/admin/index.html">
<span class="menu-icon"></span>
<span class="menu-text">작업관리로</span>
</a>
</li>
</ul>
```
---
## 5. CSS 클래스 규칙
### 5.1 필수 클래스 목록
| 클래스명 | 용도 | 부모 | 필수 여부 |
|---------|------|------|----------|
| `.page-container` | 전체 레이아웃 컨테이너 | `<body>` | ✅ 필수 |
| `.sidebar` | 사이드바 | `.page-container` | ✅ 필수 |
| `.main-content` | 메인 콘텐츠 영역 | `.page-container` | ✅ 필수 |
| `.dashboard-main` | 대시보드 메인 | `.main-content` | ✅ 필수 |
| `.page-header` | 페이지 헤더 | `.dashboard-main` | ✅ 필수 |
| `.search-section` | 검색 영역 | `.dashboard-main` | ✅ 필수 |
| `.projects-section` | 데이터 섹션 | `.dashboard-main` | ✅ 필수 |
| `.projects-grid` | 데이터 그리드 | `.projects-section` | ✅ 필수 |
| `.project-card` | 개별 카드 | `.projects-grid` | ✅ 필수 |
### 5.2 클래스 네이밍 규칙
**패턴**: `{영역}-{요소}-{수식어}`
**예시**:
-`.page-header` (페이지 헤더)
-`.search-section` (검색 섹션)
-`.stat-item` (통계 항목)
-`.menu-item` (메뉴 항목)
-`.btn-primary` (주요 버튼)
**금지**:
-`.header1`, `.section2` (숫자 사용)
-`.pageHeader` (camelCase)
-`.Page_Header` (underscore + PascalCase)
### 5.3 카드 표준 스타일
```css
.project-card {
background: #ffffff;
border: 1px solid #e2e8f0;
border-radius: 0.75rem;
padding: 1.5rem;
height: 420px; /* 고정 높이 */
min-height: 420px;
max-height: 420px;
display: flex;
flex-direction: column;
cursor: pointer;
transition: all 0.2s ease;
}
.project-card:hover {
border-color: #2563eb;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
transform: translateY(-4px);
}
```
---
## 6. JavaScript 규칙
### 6.1 파일 구조
각 관리 페이지는 독립적인 JavaScript 파일을 가져야 합니다.
**파일명 패턴**: `{entity}-management.js`
**예시**:
- `/js/project-management.js`
- `/js/worker-management.js`
- `/js/code-management.js`
### 6.2 필수 함수 목록
모든 관리 페이지는 다음 함수를 구현해야 합니다:
```javascript
// 1. 페이지 초기화
function initializePage() { }
// 2. 데이터 로드
async function load{Entities}() { }
// 3. 데이터 렌더링
function render{Entities}() { }
// 4. 검색
function search{Entities}() { }
// 5. 필터
function filter{Entities}() { }
// 6. 모달 열기
function open{Entity}Modal() { }
// 7. 모달 닫기
function close{Entity}Modal() { }
// 8. 데이터 저장
async function save{Entity}() { }
// 9. 데이터 삭제
async function delete{Entity}(id) { }
// 10. 목록 새로고침
function refresh{Entity}List() { }
```
### 6.3 네이밍 규칙
**함수명**: camelCase
-`loadProjects()`, `openWorkerModal()`
-`load_projects()`, `OpenWorkerModal()`
**변수명**: camelCase
-`allProjects`, `currentEditingProject`
-`all_projects`, `CurrentEditingProject`
**상수**: UPPER_SNAKE_CASE
-`API_BASE_URL`, `DEFAULT_PAGE_SIZE`
-`apiBaseUrl`, `defaultPageSize`
---
## 7. 파일 네이밍 규칙
### 7.1 디렉터리 구조
```
/pages/admin/
├── index.html # 관리 대시보드
├── projects.html # 프로젝트 관리
├── workers.html # 작업자 관리
├── codes.html # 코드 관리
└── {entity}s.html # 새 관리 페이지
/css/
├── design-system.css # 디자인 시스템
└── admin-pages.css # 관리 페이지 공통 CSS
/js/
├── project-management.js
├── worker-management.js
├── code-management.js
└── {entity}-management.js
```
### 7.2 파일명 규칙
**HTML 파일**:
- 복수형 사용: `{entities}.html`
-`projects.html`, `workers.html`
-`project.html`, `worker.html`
**JavaScript 파일**:
- 하이픈 구분: `{entity}-management.js`
-`project-management.js`
-`projectManagement.js`, `project_management.js`
**CSS 파일**:
- 공통: `admin-pages.css` (모든 관리 페이지가 공유)
- 개별: 필요시 `{entity}-page.css`
---
## 8. 체크리스트
새로운 관리 페이지를 생성할 때 다음 체크리스트를 확인하세요:
### 8.1 HTML 체크리스트
- [ ] 2단 레이아웃 구조 (사이드바 + 메인)
- [ ] 사이드바 메뉴에 현재 페이지 active 표시
- [ ] 페이지 헤더 (타이틀 + 설명 + 액션 버튼)
- [ ] 검색 섹션 (검색바 + 필터)
- [ ] 통계 섹션 (활성/비활성/총)
- [ ] 데이터 그리드 (3열 기본)
- [ ] 모달 (추가/수정/삭제)
- [ ] CSS 버전 쿼리스트링 (`?v=6`)
- [ ] JavaScript 모듈 로드
### 8.2 CSS 체크리스트
- [ ] `.page-container { display: flex }` 적용
- [ ] `.sidebar` 고정 너비 (240px)
- [ ] `.main-content { flex: 1 }` 적용
- [ ] `.projects-grid` 3열 그리드
- [ ] 카드 고정 높이 (420px)
- [ ] 반응형 breakpoints 구현
- [ ] 호버 효과 구현
### 8.3 JavaScript 체크리스트
- [ ] 10개 필수 함수 구현
- [ ] API 연동 (GET, POST, PUT, DELETE)
- [ ] 에러 핸들링
- [ ] 로딩 상태 표시
- [ ] 검색/필터 기능
- [ ] 모달 열기/닫기
- [ ] 데이터 유효성 검사
### 8.4 접근성 체크리스트
- [ ] 키보드 네비게이션 지원
- [ ] 버튼에 적절한 `title` 속성
- [ ] 로딩 중 상태 표시
- [ ] 에러 메시지 명확히 표시
- [ ] 모바일 반응형 지원
---
## 9. 예시 코드
### 9.1 카드 렌더링 (JavaScript)
```javascript
function renderProjects() {
const projectsHtml = filteredProjects.map(project => {
const isInactive = project.is_active === 0 || project.is_active === false;
return `
<div class="project-card ${isInactive ? 'inactive' : ''}" onclick="editProject(${project.project_id})">
<div class="project-header">
<div class="project-info">
<div class="project-job-no">${project.job_no || 'Job No. 없음'}</div>
<h3 class="project-name">${project.project_name}</h3>
<div class="project-meta">
<div class="meta-row">
<span class="meta-label">상태</span>
<span class="meta-value">${project.status}</span>
</div>
<div class="meta-row">
<span class="meta-label">PM</span>
<span class="meta-value">${project.pm || '-'}</span>
</div>
<!-- 더 많은 필드 -->
</div>
</div>
<div class="project-actions">
<button class="btn-edit" onclick="event.stopPropagation(); editProject(${project.project_id})">
✏️ 수정
</button>
<button class="btn-delete" onclick="event.stopPropagation(); deleteProject(${project.project_id})">
🗑️ 삭제
</button>
</div>
</div>
</div>
`;
}).join('');
document.getElementById('projectsGrid').innerHTML = projectsHtml;
}
```
---
## 10. 버전 히스토리
| 버전 | 날짜 | 변경 내용 |
|------|------|----------|
| 1.0.0 | 2026-01-26 | 초기 버전 작성 |
---
## 11. 참고 자료
- [DOCUMENTATION_STANDARD.md](./DOCUMENTATION_STANDARD.md) - 문서 작성 표준
- [TBM_DEPLOYMENT_GUIDE.md](./TBM_DEPLOYMENT_GUIDE.md) - TBM 배포 가이드
- `/css/admin-pages.css` - 관리 페이지 공통 CSS
- `/pages/admin/projects.html` - 프로젝트 관리 참고 구현
---
**문서 작성자**: Claude Code
**최종 수정일**: 2026-01-26

1536
web-ui/css/admin-pages.css Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -5,24 +5,55 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>코드 관리 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/design-system.css">
<link rel="stylesheet" href="/css/common.css?v=2">
<link rel="stylesheet" href="/css/project-management.css?v=4">
<link rel="stylesheet" href="/css/admin-pages.css?v=7">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js?v=1" defer></script>
<script type="module" src="/js/api-config.js?v=3"></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 메인 레이아웃: 사이드바 + 콘텐츠 -->
<div class="page-container">
<!-- 사이드바 -->
<aside class="sidebar">
<nav class="sidebar-nav">
<div class="sidebar-header">
<h3 class="sidebar-title">관리 메뉴</h3>
</div>
<ul class="sidebar-menu">
<li class="menu-item">
<a href="/pages/admin/projects.html">
<span class="menu-icon">📁</span>
<span class="menu-text">프로젝트 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/workers.html">
<span class="menu-icon">👥</span>
<span class="menu-text">작업자 관리</span>
</a>
</li>
<li class="menu-item active">
<a href="/pages/admin/codes.html">
<span class="menu-icon">🏷️</span>
<span class="menu-text">코드 관리</span>
</a>
</li>
<li class="menu-divider"></li>
<li class="menu-item">
<a href="/pages/admin/index.html">
<span class="menu-icon"></span>
<span class="menu-text">작업관리로</span>
</a>
</li>
</ul>
</nav>
</aside>
<!-- 메인 콘텐츠 -->
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/admin/index.html" class="back-button">
← 작업관리로 돌아가기
</a>
<main class="main-content">
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
@@ -34,10 +65,11 @@
</div>
<div class="page-actions">
<button class="btn btn-secondary" onclick="refreshAllCodes()">
<span class="btn-icon">🔄</span>
전체 새로고침
</button>
<button class="btn btn-secondary" onclick="refreshAllCodes()">
<span class="btn-icon">🔄</span>
전체 새로고침
</button>
</div>
</div>
<!-- 코드 유형 탭 -->
@@ -170,6 +202,7 @@
</div>
</div>
</div>
</div>
</main>
<!-- 코드 추가/수정 모달 -->
@@ -242,8 +275,7 @@
</button>
</div>
</div>
</div>
</main>
</div>
</div>
<script type="module" src="/js/load-navbar.js?v=5"></script>

View File

@@ -5,24 +5,56 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>프로젝트 관리 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/design-system.css">
<link rel="stylesheet" href="/css/common.css?v=2">
<link rel="stylesheet" href="/css/project-management.css?v=4">
<link rel="stylesheet" href="/css/admin-pages.css?v=6">
<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>
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 메인 레이아웃: 사이드바 + 콘텐츠 -->
<div class="page-container">
<!-- 사이드바 -->
<aside class="sidebar">
<nav class="sidebar-nav">
<div class="sidebar-header">
<h3 class="sidebar-title">관리 메뉴</h3>
</div>
<ul class="sidebar-menu">
<li class="menu-item active">
<a href="/pages/admin/projects.html">
<span class="menu-icon">📁</span>
<span class="menu-text">프로젝트 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/workers.html">
<span class="menu-icon">👥</span>
<span class="menu-text">작업자 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/codes.html">
<span class="menu-icon">🏷️</span>
<span class="menu-text">코드 관리</span>
</a>
</li>
<li class="menu-divider"></li>
<li class="menu-item">
<a href="/pages/admin/index.html">
<span class="menu-icon"></span>
<span class="menu-text">작업관리로</span>
</a>
</li>
</ul>
</nav>
</aside>
<!-- 메인 콘텐츠 -->
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/admin/index.html" class="back-button">
← 작업관리로 돌아가기
</a>
<main class="main-content">
<div class="dashboard-main">
<!-- 페이지 헤더: 타이틀 + 액션 버튼 -->
<div class="page-header">
<div class="page-title-section">
<h1 class="page-title">
@@ -31,16 +63,16 @@
</h1>
<p class="page-description">프로젝트 등록, 수정, 삭제 및 기본 정보를 관리합니다</p>
</div>
<div class="page-actions">
<button class="btn btn-primary" onclick="openProjectModal()">
<span class="btn-icon"></span>
새 프로젝트 등록
</button>
<button class="btn btn-secondary" onclick="refreshProjectList()">
<span class="btn-icon">🔄</span>
새로고침
</button>
<button class="btn btn-primary" onclick="openProjectModal()">
<span class="btn-icon"></span>
새 프로젝트 등록
</button>
<button class="btn btn-secondary" onclick="refreshProjectList()">
<span class="btn-icon">🔄</span>
새로고침
</button>
</div>
</div>
<!-- 검색 및 필터 -->
@@ -203,6 +235,6 @@
<!-- JavaScript -->
<script type="module" src="/js/api-config.js?v=3"></script>
<script type="module" src="/js/load-navbar.js?v=5"></script>
<script type="module" src="/js/project-management.js?v=2"></script>
<script type="module" src="/js/project-management.js?v=3"></script>
</body>
</html>

View File

@@ -5,24 +5,55 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>작업자 관리 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/design-system.css">
<link rel="stylesheet" href="/css/common.css?v=2">
<link rel="stylesheet" href="/css/project-management.css?v=3">
<link rel="stylesheet" href="/css/admin-pages.css?v=6">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js?v=1" defer></script>
<script type="module" src="/js/api-config.js?v=3"></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 메인 레이아웃: 사이드바 + 콘텐츠 -->
<div class="page-container">
<!-- 사이드바 -->
<aside class="sidebar">
<nav class="sidebar-nav">
<div class="sidebar-header">
<h3 class="sidebar-title">관리 메뉴</h3>
</div>
<ul class="sidebar-menu">
<li class="menu-item">
<a href="/pages/admin/projects.html">
<span class="menu-icon">📁</span>
<span class="menu-text">프로젝트 관리</span>
</a>
</li>
<li class="menu-item active">
<a href="/pages/admin/workers.html">
<span class="menu-icon">👥</span>
<span class="menu-text">작업자 관리</span>
</a>
</li>
<li class="menu-item">
<a href="/pages/admin/codes.html">
<span class="menu-icon">🏷️</span>
<span class="menu-text">코드 관리</span>
</a>
</li>
<li class="menu-divider"></li>
<li class="menu-item">
<a href="/pages/admin/index.html">
<span class="menu-icon"></span>
<span class="menu-text">작업관리로</span>
</a>
</li>
</ul>
</nav>
</aside>
<!-- 메인 콘텐츠 -->
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="/pages/admin/index.html" class="back-button">
← 작업관리로 돌아가기
</a>
<main class="main-content">
<div class="dashboard-main">
<div class="page-header">
<div class="page-title-section">
@@ -34,14 +65,15 @@
</div>
<div class="page-actions">
<button class="btn btn-primary" onclick="openWorkerModal()">
<span class="btn-icon"></span>
새 작업자 등록
</button>
<button class="btn btn-secondary" onclick="refreshWorkerList()">
<span class="btn-icon">🔄</span>
새로고침
</button>
<button class="btn btn-primary" onclick="openWorkerModal()">
<span class="btn-icon"></span>
새 작업자 등록
</button>
<button class="btn btn-secondary" onclick="refreshWorkerList()">
<span class="btn-icon">🔄</span>
새로고침
</button>
</div>
</div>
<!-- 검색 및 필터 -->