Compare commits
8 Commits
4ac0605887
...
6b7f9d4627
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b7f9d4627 | ||
|
|
73e5eff7bd | ||
|
|
a6ab9e395d | ||
|
|
33e9e2afec | ||
|
|
05a9de8d2f | ||
|
|
e8829a0bc7 | ||
|
|
4f0af62d8c | ||
|
|
8a5480177b |
@@ -56,6 +56,75 @@ docker-compose up -d # 수동 실행
|
||||
|
||||
---
|
||||
|
||||
## 🎨 UI/UX 디자인 가이드
|
||||
|
||||
### 디자인 원칙
|
||||
- **모던하고 깔끔한 디자인**: 이모지 사용 지양, 아이콘 또는 심플한 텍스트 사용
|
||||
- **일관성**: 모든 페이지에서 동일한 디자인 시스템 적용
|
||||
- **컴포넌트 재사용**: navbar, footer 등은 컴포넌트로 관리
|
||||
|
||||
### 이모지 사용 금지
|
||||
❌ **금지**:
|
||||
```html
|
||||
<!-- 나쁜 예 -->
|
||||
<button>📊 대시보드</button>
|
||||
<h1>🔧 작업 관리</h1>
|
||||
```
|
||||
|
||||
✅ **권장**:
|
||||
```html
|
||||
<!-- 좋은 예 - 아이콘 라이브러리 사용 또는 심플한 텍스트 -->
|
||||
<button class="btn-primary">
|
||||
<i class="icon-dashboard"></i>
|
||||
대시보드
|
||||
</button>
|
||||
<h1>작업 관리</h1>
|
||||
```
|
||||
|
||||
### 색상 가이드
|
||||
- **Primary**: 하늘색 계열 (`#0ea5e9`, `#38bdf8`, `#7dd3fc`)
|
||||
- **기본 배경**: 흰색/밝은 회색 계열
|
||||
- **텍스트**: `#1f2937` (dark gray)
|
||||
- **보조 텍스트**: `#6b7280` (medium gray)
|
||||
|
||||
### 컴포넌트 구조
|
||||
- **네비게이션**: `web-ui/components/navbar.html` 참조
|
||||
- **일관된 헤더**: 모든 페이지에서 `<div id="navbar-container"></div>` 사용
|
||||
- **CSS 로딩 순서**: `design-system.css` → 페이지별 CSS
|
||||
|
||||
### 페이지 구조 (2026-01-20 개편)
|
||||
```
|
||||
web-ui/pages/
|
||||
├── dashboard.html # 메인 대시보드
|
||||
├── work/ # 작업 관련 페이지
|
||||
│ ├── report-create.html # 작업보고서 작성
|
||||
│ ├── report-view.html # 작업보고서 조회
|
||||
│ └── analysis.html # 작업 분석
|
||||
├── admin/ # 관리자 기능
|
||||
│ ├── index.html # 관리 메뉴 허브
|
||||
│ ├── projects.html # 프로젝트 관리
|
||||
│ ├── workers.html # 작업자 관리
|
||||
│ ├── codes.html # 코드 관리
|
||||
│ └── accounts.html # 계정 관리
|
||||
├── profile/ # 사용자 프로필
|
||||
│ ├── info.html # 내 정보
|
||||
│ └── password.html # 비밀번호 변경
|
||||
└── .archived-*/ # 미사용 페이지 보관
|
||||
```
|
||||
|
||||
**네이밍 규칙**:
|
||||
- 메인 페이지: 단일 명사 (`dashboard.html`)
|
||||
- 관리 페이지: 복수형 명사 (`projects.html`, `workers.html`)
|
||||
- 기능 페이지: 동사-명사 (`report-create.html`, `report-view.html`)
|
||||
- 폴더명: 단수형, 소문자 (`work/`, `admin/`, `profile/`)
|
||||
|
||||
**네비게이션 구조**:
|
||||
- 1차: `dashboard.html` (메인 진입점)
|
||||
- 2차: `admin/index.html` (관리 허브)
|
||||
- 모든 페이지: navbar를 통해 profile, 작업 페이지로 이동 가능
|
||||
|
||||
---
|
||||
|
||||
## 📡 API 개발 가이드
|
||||
- **RESTful**: 명사형 리소스 사용 (`POST /users` O, `/createUser` X).
|
||||
- **응답 포맷**:
|
||||
|
||||
@@ -21,9 +21,9 @@ const login = asyncHandler(async (req, res) => {
|
||||
throw new ApiError(result.error, result.status || 400);
|
||||
}
|
||||
|
||||
// 로그인 성공 후, 모든 권한을 그룹장 대시보드로 통일
|
||||
// 로그인 성공 후, 메인 대시보드로 리다이렉트
|
||||
const user = result.data.user;
|
||||
const redirectUrl = '/pages/dashboard/group-leader.html'; // 모든 사용자를 그룹장 대시보드로 리다이렉트
|
||||
const redirectUrl = '/pages/dashboard.html'; // 메인 대시보드로 리다이렉트
|
||||
|
||||
// 새로운 응답 포맷터 사용
|
||||
res.auth(user, result.data.token, redirectUrl, '로그인 성공');
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
</div>
|
||||
|
||||
<div class="header-right">
|
||||
<a href="#" id="dashboardBtn" class="dashboard-btn">
|
||||
<span class="btn-icon">📊</span>
|
||||
<span class="btn-text">대시보드</span>
|
||||
</a>
|
||||
|
||||
<div class="user-profile" id="userProfile">
|
||||
<div class="user-avatar">
|
||||
<span class="avatar-text" id="userInitial">사</span>
|
||||
@@ -29,19 +34,15 @@
|
||||
<span class="user-role" id="userRole">작업자</span>
|
||||
</div>
|
||||
<div class="profile-menu" id="profileMenu">
|
||||
<a href="/pages/profile/my-dashboard.html" class="menu-item">
|
||||
<span class="menu-icon">📊</span>
|
||||
나의 대시보드
|
||||
</a>
|
||||
<a href="/pages/profile/my-profile.html" class="menu-item">
|
||||
<a href="/pages/profile/info.html" class="menu-item">
|
||||
<span class="menu-icon">👤</span>
|
||||
내 프로필
|
||||
</a>
|
||||
<a href="/pages/profile/change-password.html" class="menu-item">
|
||||
<a href="/pages/profile/password.html" class="menu-item">
|
||||
<span class="menu-icon">🔐</span>
|
||||
비밀번호 변경
|
||||
</a>
|
||||
<a href="/pages/profile/admin-settings.html" class="menu-item admin-only">
|
||||
<a href="/pages/admin/accounts.html" class="menu-item admin-only">
|
||||
<span class="menu-icon">⚙️</span>
|
||||
관리자 설정
|
||||
</a>
|
||||
@@ -58,7 +59,7 @@
|
||||
<style>
|
||||
/* 최신 대시보드 헤더 스타일 */
|
||||
.dashboard-header {
|
||||
background: linear-gradient(135deg, #1e40af 0%, #1d4ed8 50%, #2563eb 100%);
|
||||
background: linear-gradient(135deg, #0ea5e9 0%, #38bdf8 50%, #7dd3fc 100%);
|
||||
color: white;
|
||||
padding: 1rem 1.5rem;
|
||||
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
|
||||
@@ -262,6 +263,37 @@
|
||||
color: #b91c1c !important;
|
||||
}
|
||||
|
||||
/* 대시보드 버튼 */
|
||||
.dashboard-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.625rem 1.25rem;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
border-radius: 0.75rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.9rem;
|
||||
transition: all 0.3s ease;
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.dashboard-btn:hover {
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.dashboard-btn .btn-icon {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.dashboard-btn .btn-text {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
/* 반응형 디자인 */
|
||||
@media (max-width: 768px) {
|
||||
.dashboard-header {
|
||||
@@ -283,5 +315,13 @@
|
||||
.user-info {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dashboard-btn .btn-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dashboard-btn {
|
||||
padding: 0.5rem 0.75rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -9,164 +9,7 @@ body {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* 헤더 스타일 */
|
||||
.dashboard-header {
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(20px);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
|
||||
padding: 1rem 2rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.header-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.logo-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.logo {
|
||||
height: 40px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.company-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.company-name {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
color: #1f2937;
|
||||
margin: 0;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.company-subtitle {
|
||||
font-size: 0.875rem;
|
||||
color: #6b7280;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.header-center {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.current-time {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.5rem 1rem;
|
||||
background: rgba(59, 130, 246, 0.1);
|
||||
border-radius: 0.5rem;
|
||||
border: 1px solid rgba(59, 130, 246, 0.2);
|
||||
}
|
||||
|
||||
.time-label {
|
||||
font-size: 0.75rem;
|
||||
color: #6b7280;
|
||||
margin-bottom: 0.125rem;
|
||||
}
|
||||
|
||||
.time-value {
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
color: #1f2937;
|
||||
font-family: 'Courier New', monospace;
|
||||
}
|
||||
|
||||
.header-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.header-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.dashboard-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.5rem 1rem;
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
color: #374151;
|
||||
text-decoration: none;
|
||||
border-radius: 1.25rem;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.dashboard-btn:hover {
|
||||
background: rgba(255, 255, 255, 0.25);
|
||||
transform: translateY(-1px);
|
||||
text-decoration: none;
|
||||
color: #1f2937;
|
||||
}
|
||||
|
||||
.user-profile {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
padding: 0.5rem 1rem;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 2rem;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.user-profile:hover {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.user-avatar {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.user-name {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: #1f2937;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.user-role {
|
||||
font-size: 0.75rem;
|
||||
color: #6b7280;
|
||||
}
|
||||
/* 헤더 스타일은 navbar.html에서 관리됨 */
|
||||
|
||||
/* 메인 콘텐츠 */
|
||||
.dashboard-main {
|
||||
@@ -430,14 +273,10 @@ body {
|
||||
|
||||
/* 반응형 디자인 */
|
||||
@media (max-width: 1024px) {
|
||||
.dashboard-header {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.dashboard-main {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
|
||||
.management-grid {
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 1rem;
|
||||
@@ -445,30 +284,14 @@ body {
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.header-center {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.company-info {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dashboard-btn .btn-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
|
||||
.management-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
|
||||
.section-header {
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
@@ -477,22 +300,18 @@ body {
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.dashboard-header {
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.dashboard-main {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
|
||||
.page-title {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
|
||||
|
||||
.management-card {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
|
||||
.recent-activity-section {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
@@ -16,12 +16,12 @@ export const config = {
|
||||
paths: {
|
||||
// 로그인 페이지 경로
|
||||
loginPage: '/index.html',
|
||||
// 로그인 후 기본적으로 이동할 대시보드 경로
|
||||
defaultDashboard: '/pages/dashboard/user.html',
|
||||
// 시스템 대시보드 경로
|
||||
systemDashboard: '/pages/dashboard/system.html',
|
||||
// 그룹 리더 대시보드 경로
|
||||
groupLeaderDashboard: '/pages/dashboard/group-leader.html',
|
||||
// 메인 대시보드 경로 (모든 사용자 공통)
|
||||
dashboard: '/pages/dashboard.html',
|
||||
// 하위 호환성을 위한 별칭들
|
||||
defaultDashboard: '/pages/dashboard.html',
|
||||
systemDashboard: '/pages/dashboard.html',
|
||||
groupLeaderDashboard: '/pages/dashboard.html',
|
||||
},
|
||||
|
||||
// 공용 컴포넌트 경로 설정
|
||||
|
||||
@@ -66,6 +66,12 @@ function populateUserInfo(doc, user) {
|
||||
const el = doc.getElementById(id);
|
||||
if (el) el.textContent = elements[id];
|
||||
}
|
||||
|
||||
// 메인 대시보드 URL 설정
|
||||
const dashboardBtn = doc.getElementById('dashboardBtn');
|
||||
if (dashboardBtn) {
|
||||
dashboardBtn.href = '/pages/dashboard.html';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
1
web-ui/pages/admin/.gitkeep
Normal file
1
web-ui/pages/admin/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
# Placeholder file to create admin directory
|
||||
@@ -4,6 +4,7 @@
|
||||
<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/common.css?v=2">
|
||||
<link rel="stylesheet" href="/css/project-management.css?v=4">
|
||||
<link rel="icon" type="image/png" href="/img/favicon.png">
|
||||
@@ -11,14 +12,14 @@
|
||||
<script type="module" src="/js/api-config.js?v=3"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<div class="work-report-container">
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<!-- 메인 콘텐츠 -->
|
||||
<main class="work-report-main">
|
||||
<!-- 뒤로가기 버튼 -->
|
||||
<a href="/pages/management/work-management.html" class="back-button">
|
||||
<a href="/pages/admin/index.html" class="back-button">
|
||||
← 작업관리로 돌아가기
|
||||
</a>
|
||||
|
||||
@@ -4,16 +4,17 @@
|
||||
<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/common.css?v=2">
|
||||
<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 id="navbar-container"></div>
|
||||
|
||||
<div class="work-report-container">
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<!-- 메인 콘텐츠 -->
|
||||
<main class="work-report-main">
|
||||
<!-- 뒤로가기 버튼 -->
|
||||
@@ -26,19 +27,19 @@
|
||||
<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')">
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/admin/projects.html')">
|
||||
<span class="quick-icon">📁</span>
|
||||
<span class="quick-text">새 프로젝트</span>
|
||||
</button>
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/management/worker-management.html')">
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/admin/workers.html')">
|
||||
<span class="quick-icon">👤</span>
|
||||
<span class="quick-text">작업자 등록</span>
|
||||
</button>
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/management/code-management.html')">
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/admin/codes.html')">
|
||||
<span class="quick-icon">🏷️</span>
|
||||
<span class="quick-text">코드 설정</span>
|
||||
</button>
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/analysis/work-analysis.html')">
|
||||
<button class="quick-action-btn" onclick="navigateToPage('/pages/work/analysis.html')">
|
||||
<span class="quick-icon">📊</span>
|
||||
<span class="quick-text">작업 분석</span>
|
||||
</button>
|
||||
@@ -50,7 +51,7 @@
|
||||
<h2 class="section-title">🔧 관리 메뉴</h2>
|
||||
<div class="management-grid">
|
||||
<!-- 프로젝트 관리 -->
|
||||
<div class="management-card" onclick="navigateToPage('/pages/management/project-management.html')">
|
||||
<div class="management-card" onclick="navigateToPage('/pages/admin/projects.html')">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">📁</div>
|
||||
<h3 class="card-title">프로젝트 관리</h3>
|
||||
@@ -70,7 +71,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 작업자 관리 -->
|
||||
<div class="management-card" onclick="navigateToPage('/pages/management/worker-management.html')">
|
||||
<div class="management-card" onclick="navigateToPage('/pages/admin/workers.html')">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">👥</div>
|
||||
<h3 class="card-title">작업자 관리</h3>
|
||||
@@ -91,7 +92,7 @@
|
||||
|
||||
|
||||
<!-- 코드 관리 -->
|
||||
<div class="management-card" onclick="navigateToPage('/pages/management/code-management.html')">
|
||||
<div class="management-card" onclick="navigateToPage('/pages/admin/codes.html')">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">🏷️</div>
|
||||
<h3 class="card-title">코드 관리</h3>
|
||||
@@ -4,20 +4,21 @@
|
||||
<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/common.css?v=2">
|
||||
<link rel="stylesheet" href="/css/project-management.css?v=4">
|
||||
<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="work-report-container">
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<!-- 메인 콘텐츠 -->
|
||||
<main class="work-report-main">
|
||||
<!-- 뒤로가기 버튼 -->
|
||||
<a href="/pages/management/work-management.html" class="back-button">
|
||||
<a href="/pages/admin/index.html" class="back-button">
|
||||
← 작업관리로 돌아가기
|
||||
</a>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<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/common.css?v=2">
|
||||
<link rel="stylesheet" href="/css/project-management.css?v=3">
|
||||
<link rel="icon" type="image/png" href="/img/favicon.png">
|
||||
@@ -11,14 +12,14 @@
|
||||
<script type="module" src="/js/api-config.js?v=3"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<div class="work-report-container">
|
||||
<!-- 네비게이션 바 -->
|
||||
<div id="navbar-container"></div>
|
||||
|
||||
<!-- 메인 콘텐츠 -->
|
||||
<main class="work-report-main">
|
||||
<!-- 뒤로가기 버튼 -->
|
||||
<a href="/pages/management/work-management.html" class="back-button">
|
||||
<a href="/pages/admin/index.html" class="back-button">
|
||||
← 작업관리로 돌아가기
|
||||
</a>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="quick-actions-grid-full">
|
||||
<a href="/pages/common/daily-work-report.html" class="quick-action-card">
|
||||
<a href="/pages/work/report-create.html" class="quick-action-card">
|
||||
<div class="action-icon-large">📝</div>
|
||||
<div class="action-content">
|
||||
<h3>작업 보고서 작성</h3>
|
||||
@@ -94,7 +94,7 @@
|
||||
<div class="action-arrow">→</div>
|
||||
</a>
|
||||
|
||||
<a href="/pages/common/daily-work-report-viewer.html" class="quick-action-card">
|
||||
<a href="/pages/work/report-view.html" class="quick-action-card">
|
||||
<div class="action-icon-large">📋</div>
|
||||
<div class="action-content">
|
||||
<h3>작업 현황 확인</h3>
|
||||
@@ -103,7 +103,7 @@
|
||||
<div class="action-arrow">→</div>
|
||||
</a>
|
||||
|
||||
<a href="/pages/analysis/work-analysis.html" class="quick-action-card admin-only">
|
||||
<a href="/pages/work/analysis.html" class="quick-action-card admin-only">
|
||||
<div class="action-icon-large">📈</div>
|
||||
<div class="action-content">
|
||||
<h3>작업 분석</h3>
|
||||
@@ -112,7 +112,7 @@
|
||||
<div class="action-arrow">→</div>
|
||||
</a>
|
||||
|
||||
<a href="/pages/management/work-management.html" class="quick-action-card admin-only">
|
||||
<a href="/pages/admin/index.html" class="quick-action-card admin-only">
|
||||
<div class="action-icon-large">🔧</div>
|
||||
<div class="action-content">
|
||||
<h3>작업 관리</h3>
|
||||
1
web-ui/pages/work/.gitkeep
Normal file
1
web-ui/pages/work/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
# Placeholder file to create work directory
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<div class="header-right">
|
||||
<div class="header-actions">
|
||||
<button class="btn btn-secondary dashboard-btn" onclick="window.location.href='/pages/dashboard/group-leader.html'">
|
||||
<button class="btn btn-secondary dashboard-btn" onclick="window.location.href='/pages/dashboard.html'">
|
||||
<span class="btn-icon">🏠</span>
|
||||
대시보드
|
||||
</button>
|
||||
169
개발 log/2026-01-20-page-restructure.md
Normal file
169
개발 log/2026-01-20-page-restructure.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# 페이지 구조 대대적 개편 - 2026-01-20
|
||||
|
||||
## 배경
|
||||
기존 페이지 구조는 여러 폴더에 분산되어 있고, 파일명이 용도를 명확히 나타내지 못했습니다.
|
||||
- 34개의 HTML 페이지 중 11개만 실제 사용
|
||||
- 폴더 구조가 직관적이지 않음 (`common`, `analysis`, `management` 등)
|
||||
- 파일명이 길고 일관성 없음 (`daily-work-report-viewer.html` 등)
|
||||
|
||||
## 목표
|
||||
1. 미사용 페이지 정리 (보관)
|
||||
2. 명확하고 직관적인 폴더 구조
|
||||
3. 간결하고 일관성 있는 파일명
|
||||
4. 향후 확장 가능한 구조
|
||||
|
||||
---
|
||||
|
||||
## 변경 내용
|
||||
|
||||
### 1. 미사용 페이지 아카이브 (24개)
|
||||
|
||||
모든 미사용 페이지를 `.archived-*` 형태로 보관:
|
||||
- `.archived-admin/` (8개): 구버전 admin 페이지
|
||||
- `.archived-*-analysis.html` (5개): 레거시 분석 페이지
|
||||
- `.archived-*-dashboard.html` (3개): 사용하지 않는 대시보드
|
||||
- `.archived-*.html` (8개): 기타 미사용 페이지
|
||||
|
||||
### 2. 새로운 폴더 구조
|
||||
|
||||
#### Before (기존)
|
||||
```
|
||||
pages/
|
||||
├── admin/ (8개 - 전체 미사용)
|
||||
├── analysis/ (6개 - 1개만 사용)
|
||||
├── common/ (8개 - 2개만 사용)
|
||||
├── dashboard/ (3개 - 1개만 사용)
|
||||
├── management/ (4개 - 전체 사용)
|
||||
├── profile/ (4개 - 3개 사용)
|
||||
└── work-reports/ (2개 - 미사용)
|
||||
```
|
||||
|
||||
#### After (개편)
|
||||
```
|
||||
pages/
|
||||
├── dashboard.html # 메인 대시보드
|
||||
├── work/ # 작업 관련 (3개)
|
||||
├── admin/ # 관리 기능 (5개)
|
||||
├── profile/ # 프로필 (2개)
|
||||
└── .archived-*/ # 미사용 페이지 (24개)
|
||||
```
|
||||
|
||||
### 3. 파일명 개선
|
||||
|
||||
| 기존 경로 | 새 경로 | 용도 |
|
||||
|---------|---------|------|
|
||||
| `dashboard/group-leader.html` | `dashboard.html` | 메인 대시보드 |
|
||||
| `common/daily-work-report.html` | `work/report-create.html` | 작업보고서 작성 |
|
||||
| `common/daily-work-report-viewer.html` | `work/report-view.html` | 작업보고서 조회 |
|
||||
| `analysis/work-analysis.html` | `work/analysis.html` | 작업 분석 |
|
||||
| `management/work-management.html` | `admin/index.html` | 관리 메뉴 허브 |
|
||||
| `management/project-management.html` | `admin/projects.html` | 프로젝트 관리 |
|
||||
| `management/worker-management.html` | `admin/workers.html` | 작업자 관리 |
|
||||
| `management/code-management.html` | `admin/codes.html` | 코드 관리 |
|
||||
| `profile/my-profile.html` | `profile/info.html` | 내 정보 |
|
||||
| `profile/change-password.html` | `profile/password.html` | 비밀번호 변경 |
|
||||
| `profile/admin-settings.html` | `admin/accounts.html` | 계정 관리 |
|
||||
|
||||
### 4. 내부 링크 수정
|
||||
|
||||
모든 페이지의 링크를 새 경로로 업데이트:
|
||||
- `navbar.html`: 프로필 메뉴 링크 (3개)
|
||||
- `dashboard.html`: 빠른 작업 링크 (4개)
|
||||
- `admin/index.html`: 관리 메뉴 링크 (4개)
|
||||
- `admin/*.html`: 뒤로가기 링크 (3개)
|
||||
- `load-navbar.js`: 대시보드 버튼 경로
|
||||
|
||||
---
|
||||
|
||||
## 네이밍 규칙
|
||||
|
||||
### 파일명
|
||||
- **메인 페이지**: 단일 명사 (`dashboard.html`)
|
||||
- **관리 페이지**: 복수형 명사 (`projects.html`, `workers.html`)
|
||||
- **기능 페이지**: 동사-명사 (`report-create.html`, `report-view.html`)
|
||||
|
||||
### 폴더명
|
||||
- 단수형, 소문자
|
||||
- 명확한 용도 (`work/`, `admin/`, `profile/`)
|
||||
|
||||
---
|
||||
|
||||
## 네비게이션 구조
|
||||
|
||||
```
|
||||
dashboard.html (진입점)
|
||||
├─┬─ 작업 메뉴
|
||||
│ ├─→ work/report-create.html (작업 입력)
|
||||
│ ├─→ work/report-view.html (작업 조회)
|
||||
│ └─→ work/analysis.html (작업 분석) [관리자]
|
||||
│
|
||||
├─┬─ 관리 메뉴 [관리자만]
|
||||
│ ├─→ admin/index.html (관리 허브)
|
||||
│ │ ├─→ admin/projects.html
|
||||
│ │ ├─→ admin/workers.html
|
||||
│ │ ├─→ admin/codes.html
|
||||
│ │ └─→ admin/accounts.html
|
||||
│
|
||||
└─┬─ 프로필 메뉴 (navbar)
|
||||
├─→ profile/info.html
|
||||
├─→ profile/password.html
|
||||
└─→ admin/accounts.html [관리자]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 영향 범위
|
||||
|
||||
### 변경된 파일
|
||||
- **페이지**: 39개 (이동/개명 35개, 수정 4개)
|
||||
- **공통 컴포넌트**: 2개 (`navbar.html`, `load-navbar.js`)
|
||||
- **문서**: 1개 (`CODING_GUIDE.md`)
|
||||
|
||||
### CSS/JS 경로
|
||||
- 모든 페이지가 절대 경로 사용 (`/css/`, `/js/`)
|
||||
- 폴더 이동에 영향받지 않음 ✅
|
||||
|
||||
---
|
||||
|
||||
## 테스트 체크리스트
|
||||
|
||||
- [ ] 대시보드 접근 확인
|
||||
- [ ] navbar 메뉴 모든 링크 작동 확인
|
||||
- [ ] 작업 보고서 작성 페이지 접근
|
||||
- [ ] 작업 보고서 조회 페이지 접근
|
||||
- [ ] 작업 분석 페이지 접근 (관리자)
|
||||
- [ ] 관리 메뉴 접근 (관리자)
|
||||
- [ ] 프로젝트 관리
|
||||
- [ ] 작업자 관리
|
||||
- [ ] 코드 관리
|
||||
- [ ] 계정 관리
|
||||
- [ ] 프로필 페이지 접근
|
||||
- [ ] 내 정보
|
||||
- [ ] 비밀번호 변경
|
||||
- [ ] 뒤로가기 버튼 작동 확인
|
||||
|
||||
---
|
||||
|
||||
## 향후 개선 사항
|
||||
|
||||
1. **추가 페이지 검토**
|
||||
- 작업 검색 페이지 (`work/search.html`)
|
||||
- 알림/공지 페이지 (`notifications.html`)
|
||||
- 도움말 페이지 (`help.html`)
|
||||
|
||||
2. **URL 리다이렉트**
|
||||
- 구버전 URL 호환성 유지 (선택사항)
|
||||
- `.htaccess` 또는 JavaScript 리다이렉트
|
||||
|
||||
3. **폴더 정리**
|
||||
- 빈 폴더 제거 (`dashboard`, `management`, `analysis`, `common`)
|
||||
- `.archived-*` 폴더를 단일 `archived/` 폴더로 통합
|
||||
|
||||
---
|
||||
|
||||
## 커밋 정보
|
||||
|
||||
- **커밋 해시**: a6ab9e3
|
||||
- **날짜**: 2026-01-20
|
||||
- **영향받는 파일**: 39개
|
||||
- **변경 라인**: +21, -19
|
||||
@@ -178,3 +178,55 @@
|
||||
- [ ] 반응형 디자인 (모바일/태블릿) 확인
|
||||
|
||||
---
|
||||
|
||||
### 오후 - 네비게이션 구조 수정 (navbar-container 방식으로 통일)
|
||||
- **작업**: 수정 및 복원
|
||||
- **배경**:
|
||||
- 오전에 진행한 변경사항 중 일부가 잘못된 접근이었음
|
||||
- `daily-work-report.html`에 직접 header를 삽입한 것이 문제
|
||||
- 올바른 방식: navbar-container를 통한 컴포넌트 방식
|
||||
- **문제점**:
|
||||
- `daily-work-report.html`은 참조 페이지로 변경하지 말았어야 함
|
||||
- 다른 페이지들이 이 페이지의 구조를 따라야 했음
|
||||
|
||||
#### 수정 내용
|
||||
1. **daily-work-report.html 복원**:
|
||||
- 직접 삽입한 `<header class="dashboard-header">` 블록 제거
|
||||
- 원래의 `<div id="navbar-container"></div>` 방식으로 복원
|
||||
- 불필요하게 추가한 CSS/JS 임포트 제거
|
||||
|
||||
2. **관리 페이지들 구조 수정** (4개 파일):
|
||||
- `web-ui/pages/management/code-management.html`
|
||||
- `web-ui/pages/management/project-management.html`
|
||||
- `web-ui/pages/management/work-management.html`
|
||||
- `web-ui/pages/management/worker-management.html`
|
||||
|
||||
**변경사항**:
|
||||
- `design-system.css` 임포트 추가 (navbar 스타일에 필요)
|
||||
- `navbar-container`를 `work-report-container` 내부로 이동
|
||||
|
||||
```html
|
||||
<!-- 이전 -->
|
||||
<body>
|
||||
<div id="navbar-container"></div>
|
||||
<div class="work-report-container">
|
||||
<main class="work-report-main">
|
||||
|
||||
<!-- 이후 -->
|
||||
<body>
|
||||
<div class="work-report-container">
|
||||
<div id="navbar-container"></div>
|
||||
<main class="work-report-main">
|
||||
```
|
||||
|
||||
#### 최종 결과
|
||||
- ✅ 모든 페이지가 동일한 navbar-container 컴포넌트 방식 사용
|
||||
- ✅ daily-work-report.html이 원래 구조로 복원됨
|
||||
- ✅ 관리 페이지들의 구조가 표준에 맞게 수정됨
|
||||
- ✅ design-system.css가 모든 페이지에 로드되어 일관된 스타일 적용
|
||||
|
||||
#### 변경된 파일
|
||||
- **복원**: `web-ui/pages/common/daily-work-report.html` (git diff 없음 - 완전 복원)
|
||||
- **수정**: 4개 관리 페이지 (각 7줄 변경)
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user