feat: TBM 모바일 시스템 + 작업 분할/이동 + 권한 통합

TBM 시스템:
- 4단계 워크플로우 (draft→세부편집→완료→작업보고)
- 모바일 전용 TBM 페이지 (tbm-mobile.html) + 3단계 생성 위자드
- 작업자 작업 분할 (work_hours + split_seq)
- 작업자 이동 보내기/빼오기 (tbm_transfers 테이블)
- 생성 시 중복 배정 방지 (당일 배정 현황 조회)
- 데스크탑 TBM 페이지 세부편집 기능 추가

작업보고서:
- 모바일 전용 작업보고서 페이지 (report-create-mobile.html)
- TBM에서 사전 등록된 work_hours 자동 반영

권한 시스템:
- tkuser user_page_permissions 테이블과 system1 페이지 접근 연동
- pageAccessRoutes를 userRoutes보다 먼저 등록 (라우트 우선순위 수정)
- TKUSER_DEFAULT_ACCESS 폴백 추가 (개인→부서→기본값 3단계)
- 권한 캐시키 갱신 (userPageAccess_v2)

기타:
- app-init.js 캐시 버스팅 (v=5)
- iOS Safari touch-action: manipulation 적용
- KST 타임존 날짜 버그 수정 (toISOString UTC 이슈)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-02-25 07:46:21 +09:00
parent d36303101e
commit 7637be33f3
65 changed files with 9470 additions and 240 deletions

View File

@@ -12,6 +12,9 @@ router.post('/sessions', requireAuth, TbmController.createSession);
// 작업보고서가 작성되지 않은 TBM 팀 배정 조회 (구체적인 경로이므로 먼저 정의)
router.get('/sessions/incomplete-reports', requireAuth, TbmController.getIncompleteWorkReports);
// 당일 전 작업자 배정 현황 (더 구체적인 경로이므로 먼저 정의)
router.get('/sessions/date/:date/assignments', requireAuth, TbmController.getWorkerAssignmentsByDate);
// 특정 날짜의 TBM 세션 목록 조회
router.get('/sessions/date/:date', requireAuth, TbmController.getSessionsByDate);
@@ -32,6 +35,9 @@ router.delete('/sessions/:sessionId', requireAuth, TbmController.deleteSession);
// 팀원 추가 (단일)
router.post('/sessions/:sessionId/team', requireAuth, TbmController.addTeamMember);
// 분할 항목 추가 (같은 작업자의 추가 배정)
router.post('/sessions/:sessionId/team/split', requireAuth, TbmController.addSplitAssignment);
// 팀 구성 일괄 추가
router.post('/sessions/:sessionId/team/batch', requireAuth, TbmController.addTeamMembers);
@@ -81,6 +87,17 @@ router.get('/sessions/:sessionId/weather', requireAuth, TbmController.getSession
// 세션 날씨 정보 저장
router.post('/sessions/:sessionId/weather', requireAuth, TbmController.saveSessionWeather);
// ==================== 작업자 이동 관련 ====================
// 이동 실행 (보내기/빼오기)
router.post('/transfers', requireAuth, TbmController.createTransfer);
// 당일 이동 내역 조회
router.get('/transfers/date/:date', requireAuth, TbmController.getTransfersByDate);
// 이동 취소 (원복)
router.delete('/transfers/:transferId', requireAuth, TbmController.cancelTransfer);
// ==================== 작업 인계 관련 ====================
// 작업 인계 생성