Feat: 근무처 목록 및 배지 표시, 엑셀 업로드 진행 팝업 추가

- 근무처 마커에 할당 인원 배지 표시
- 근무처 목록 패널 추가 (탭 전환 가능)
- 탭 생성 후 F5 없이 즉시 표시되도록 버그 수정
- VWorld/카카오 지오코딩 API 지원 추가 (type 파라미터 포함)
- 엑셀 업로드 중 진행 상황 팝업 모달 추가
- 근무처 목록 근무자 표시 3명 → 4명으로 변경
- 지오코딩 진행 상황 폴링 API 추가
This commit is contained in:
user01
2026-05-13 12:45:22 +09:00
parent a5db41187c
commit 43f23c52fc
3 changed files with 680 additions and 59 deletions

View File

@@ -133,6 +133,47 @@ body { font-family: 'Segoe UI', 'Malgun Gothic', sans-serif; height: 100vh; over
background: #1a73e8; color: #fff; font-size: 18px; border-radius: 8px; width: 42px; height: 42px;
display: flex; align-items: center; justify-content: center;
}
.marker-badge {
position: absolute; top: -8px; right: -8px; min-width: 20px; height: 20px;
background: #ef4444; color: #fff; border-radius: 10px; font-size: 11px; font-weight: 700;
display: flex; align-items: center; justify-content: center; padding: 0 4px;
border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0,0,0,0.25);
}
.sidebar-tabs {
display: flex; background: #f0f2f5; border-bottom: 1px solid #e0e0e0;
}
.sidebar-tab {
flex: 1; padding: 10px 8px; text-align: center; cursor: pointer; font-size: 13px;
font-weight: 500; color: #6b7280; transition: all 0.2s;
}
.sidebar-tab:hover { color: #1a73e8; }
.sidebar-tab.active {
color: #1a73e8; background: #fff; border-bottom: 2px solid #1a73e8;
}
.sidebar-tab .count { margin-left: 4px; font-size: 11px; padding: 1px 6px; border-radius: 8px; background: #e5e7eb; }
.sidebar-tab.active .count { background: #e8f0fe; }
.workplace-list {
flex: 1; overflow-y: auto; padding: 8px; display: none;
}
.workplace-list.active { display: block; }
.worker-list.hidden { display: none; }
.workplace-card {
display: flex; gap: 10px; padding: 10px 12px; margin-bottom: 6px;
background: #f8f9fa; border: 1px solid #e5e7eb; border-radius: 8px;
transition: all 0.2s; cursor: pointer;
}
.workplace-card:hover { border-color: #1a73e8; box-shadow: 0 2px 8px rgba(26,115,232,0.12); }
.workplace-card-avatar {
width: 40px; height: 40px; border-radius: 8px; background: #dbeafe;
display: flex; align-items: center; justify-content: center; color: #1a73e8;
flex-shrink: 0; font-size: 16px;
}
.workplace-card-info { flex: 1; min-width: 0; }
.workplace-card-name { font-weight: 600; font-size: 14px; color: #111; }
.workplace-card-address { font-size: 11px; color: #9ca3af; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
.workplace-card-assignment {
margin-top: 4px; font-size: 12px; color: #1a73e8; font-weight: 500;
}
.popup-content { font-size: 13px; line-height: 1.5; min-width: 150px; }
.wp-assignees { margin-top: 6px; padding-top: 6px; border-top: 1px solid #e5e7eb; font-size: 12px; color: #6b7280; }
@@ -148,3 +189,57 @@ body { font-family: 'Segoe UI', 'Malgun Gothic', sans-serif; height: 100vh; over
.toast.error { background: #ef4444; }
.toast.info { background: #1a73e8; }
.toast.warning { background: #f59e0b; color: #333; }
.modal-overlay {
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center;
z-index: 9999;
}
.modal-overlay.hidden { display: none; }
.modal-content {
background: #fff; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.2);
min-width: 400px; max-width: 500px;
}
.modal-header {
padding: 16px 20px; border-bottom: 1px solid #e5e7eb;
}
.modal-header h3 {
font-size: 16px; color: #1f2937; margin: 0;
display: flex; align-items: center; gap: 8px;
}
.modal-body {
padding: 24px 20px; text-align: center;
}
.loading-spinner {
font-size: 48px; color: #1a73e8; margin-bottom: 16px;
}
.loading-message {
font-size: 14px; color: #374151; margin-bottom: 16px; font-weight: 500;
}
.loading-progress { margin-bottom: 12px; }
.loading-progress.hidden { display: none; }
.progress-bar {
width: 100%; height: 8px; background: #e5e7eb; border-radius: 4px; overflow: hidden;
}
.progress-fill {
height: 100%; background: #1a73e8; transition: width 0.2s;
}
.progress-text {
font-size: 12px; color: #6b7280; margin-top: 4px;
}
.loading-log {
max-height: 150px; overflow-y: auto; text-align: left;
background: #f9fafb; border-radius: 6px; padding: 8px 12px;
font-size: 11px; color: #6b7280; line-height: 1.5;
}
.loading-log:empty { display: none; }