feat: 데이터베이스 및 웹 UI 대규모 리팩토링

- 삭제된 DB 테이블들과 관련 코드 정리:
  * 12개 사용하지 않는 테이블 삭제 (activity_logs, CuttingPlan, DailyIssueReports 등)
  * 관련 모델, 컨트롤러, 라우트 파일들 삭제
  * index.js에서 삭제된 라우트들 제거

- 웹 UI 페이지 정리:
  * 21개 사용하지 않는 페이지 삭제
  * issue-reports 폴더 전체 삭제
  * 모든 사용자 권한을 그룹장 대시보드로 통일

- 데이터베이스 스키마 정리:
  * v1 스키마로 통일 (daily_work_reports 테이블)
  * JSON 데이터 임포트 스크립트 구현
  * 외래키 관계 정리 및 데이터 일관성 확보

- 통합 Docker Compose 설정:
  * 모든 서비스를 단일 docker-compose.yml로 통합
  * 20000번대 포트 유지
  * JWT 시크릿 및 환경변수 설정

- 문서화:
  * DATABASE_SCHEMA.md: 현재 DB 스키마 문서화
  * DELETED_TABLES.md: 삭제된 테이블 목록
  * DELETED_PAGES.md: 삭제된 페이지 목록
This commit is contained in:
Hyungi Ahn
2025-11-03 09:26:50 +09:00
parent 2a3feca45b
commit 94ecc7333d
71 changed files with 15664 additions and 4385 deletions

View File

@@ -22,4 +22,29 @@ h1, h2 {
a {
color: #1976d2;
text-decoration: none;
}
/* Admin 권한 배지 스타일 */
.admin-badge {
background: linear-gradient(135deg, #ff6b35 0%, #f7931e 100%);
color: white;
font-size: 0.7rem;
font-weight: bold;
padding: 2px 6px;
border-radius: 10px;
margin-left: 8px;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 4px rgba(255,107,53,0.3);
display: inline-block;
vertical-align: middle;
}
.admin-only-link {
position: relative;
}
.admin-only-link:hover .admin-badge {
background: linear-gradient(135deg, #ff5722 0%, #ff9800 100%);
box-shadow: 0 3px 6px rgba(255,107,53,0.4);
}

View File

@@ -4,10 +4,174 @@
.main-layout .content-wrapper {
background: #ffffff;
min-height: calc(100vh - 80px);
padding: 2rem;
padding: 0;
border-left: 1px solid #e0e0e0;
}
/* 시스템 관리자 배너 */
.system-banner {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 2rem;
margin-bottom: 2rem;
position: relative;
overflow: hidden;
}
.system-banner::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
opacity: 0.3;
}
.banner-content {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 1;
}
.banner-left {
display: flex;
align-items: center;
gap: 1.5rem;
}
.system-icon {
font-size: 3rem;
background: rgba(255,255,255,0.2);
padding: 1rem;
border-radius: 50%;
backdrop-filter: blur(10px);
border: 2px solid rgba(255,255,255,0.3);
}
.banner-text h1 {
margin: 0 0 0.5rem 0;
font-size: 2.2rem;
font-weight: 700;
text-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.banner-text p {
margin: 0;
font-size: 1.1rem;
opacity: 0.9;
font-weight: 300;
}
.banner-right {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 1rem;
}
.system-status {
display: flex;
align-items: center;
gap: 0.5rem;
background: rgba(255,255,255,0.15);
padding: 0.5rem 1rem;
border-radius: 20px;
backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,0.2);
}
.quick-actions {
display: flex;
gap: 0.5rem;
}
.quick-btn {
background: rgba(255,255,255,0.2);
border: 1px solid rgba(255,255,255,0.3);
border-radius: 50%;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
font-size: 1.2rem;
}
.quick-btn:hover {
background: rgba(255,255,255,0.3);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
animation: pulse 2s infinite;
}
.status-dot.online {
background: #2ecc71;
box-shadow: 0 0 10px rgba(46,204,113,0.5);
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 1; }
}
/* 메인 컨텐츠 패딩 조정 */
.main-content {
padding: 0 2rem 2rem 2rem;
}
/* 반응형 배너 */
@media (max-width: 768px) {
.system-banner {
padding: 1.5rem;
}
.banner-content {
flex-direction: column;
gap: 1.5rem;
text-align: center;
}
.banner-left {
flex-direction: column;
gap: 1rem;
}
.system-icon {
font-size: 2.5rem;
padding: 0.8rem;
}
.banner-text h1 {
font-size: 1.8rem;
}
.banner-text p {
font-size: 1rem;
}
.banner-right {
align-items: center;
}
.main-content {
padding: 0 1rem 2rem 1rem;
}
}
.page-header {
display: flex;
align-items: center;