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

@@ -214,10 +214,11 @@ class TbmAPI {
if (!this.state.isAdminUser()) {
const userId = this.state.currentUser?.user_id;
const workerId = this.state.currentUser?.worker_id;
const userName = this.state.currentUser?.name;
sessions = sessions.filter(s => {
return s.created_by === userId ||
s.leader_id === workerId ||
s.created_by_name === this.state.currentUser?.name;
return (userId && String(s.created_by) === String(userId)) ||
(workerId && String(s.leader_id) === String(workerId)) ||
(userName && s.created_by_name === userName);
});
}

View File

@@ -104,7 +104,8 @@ class TbmState {
isAdminUser() {
const user = this.getUser();
if (!user) return false;
return user.role === 'Admin' || user.role === 'System Admin';
const role = (user.role || '').toLowerCase();
return role === 'admin' || role === 'system admin' || role === 'system';
}
/**