tkds 도메인 폐기. 로그인 리다이렉트, CORS, 알림벨 등 16개 파일에서
tkds → tkfb로 변경. tkds로 접속 시 gateway에 /pages/ 경로가 없어
404 발생하던 문제 해결.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
clearSSOAuth가 api-base.js에 정의되어 있지만 password.html에서
로드하지 않아 호출 안 됨. doLogout의 쿠키+localStorage 삭제 로직을
직접 사용하여 확실히 세션 제거 후 로그인 페이지로 이동.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 로그인: errEl.style.display='' → 'block' (CSS display:none과 충돌 해소)
- 비밀번호 변경: ES모듈→일반 스크립트 전환 (모바일 import 체인 실패 대응)
- api-config.js/config.js/navigation.js 의존 제거
- tkfb-core.js 전역 함수(getSSOToken) + fetch 직접 사용
- TODO: ES모듈 import 체인 실패 원인 별도 조사 필요
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- POST /api/auth/change-password: 현재 비밀번호 검증 후 변경
- POST /api/auth/check-password-strength: 비밀번호 강도 체크
- 대시보드 프로필 카드에 '비밀번호 변경' 바로가기 링크 추가
- 프론트엔드(password.html + change-password.js)는 이미 구현됨
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
관리자가 개인 작업자 detail 페이지에서 수정요청(change_request) 내역을 확인하고
승인/거부할 수 있도록 UI 추가. admin 리스트에도 수정 내역 요약 표시.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- review_sent 상태: 셀 클릭 → 수정 드롭다운 (정시/연차/반차/반반차/조퇴/휴무)
- 변경 시 셀에 "수정" 뱃지 + pendingChanges 임시 저장
- "수정요청" 버튼: 수정 내역 있을 때만 활성화 → POST change_details
- pending 상태: "관리자 검토 대기" 메시지 (수정 불가)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- API 응답에 attendance_type_id, vacation_type_id, vacation_days 포함
- 드롭다운에 조퇴(id=10) 옵션 추가
- onVacTypeChange에 조퇴→2시간 매핑
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 테이블 → 7열 캘린더 그리드 (모바일 최적화)
- 8h=정시, >8h=+연장h, 연차/반차/휴무 텍스트 표시
- 요약 카드: 근무일/연장근로/연차일수
- vacation-balance API → vacation-balances/worker API (sp_vacation_balances 기반)
- "신규" → "부여" 라벨 변경
- 셀 탭 시 하단 상세 표시
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 부적합 시간 > 0 → 대분류/소분류 드롭다운 표시
- issue_report_categories (nonconformity) + issue_report_items 연동
- 저장 시 work_report_defects에 category_id, item_id 포함
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
백엔드:
- proxyInputModel 전체 worker_id→user_id 전환
(작업보고서/휴가 매핑 실패 → 전부 미입력으로 표시되던 문제)
프론트:
- 개별 입력 → 공통 입력 1개로 전환
프로젝트/공종/시간/부적합 한번 입력 → 선택된 전원에 적용
- 부서별 그룹핑 표시
- 적용 대상 칩 표시
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- showToast: proxy-input.js 중복 정의 삭제 (tkfb-core.js 것 사용)
window.showToast가 자기 자신 → 무한 호출 → stack overflow
- DB: tbm_sessions에 safety_notes, work_location 컬럼 추가
대리입력 INSERT 시 500 에러 해결
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 모델: getDailyStatus에 vacation_type 쿼리 추가
- 프론트: 연차(ANNUAL_FULL) 카드 비활성화 + 선택/일괄설정/저장에서 제외
- 반차/반반차/조퇴: 뱃지 표시 + 근무시간 자동 조정 (4h/6h/2h)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 각 일별 카드에 편집 버튼 (detail 모드 전용)
- 인라인 폼: 근무시간 + 휴가유형 선택
- 저장 → POST /attendance/records (upsert + vacation balance 자동 연동)
- 휴가유형 선택 시 시간 자동 조정 (연차→0, 반차→4, 반반차→6)
- attendance_type_id 자동 결정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- tkfb-core.js: getCurrentUser() 글로벌 함수 추가
- monthly-comparison.js: window.currentUser → getCurrentUser() 전환
- 데이터 미로드 문제 해결
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- my-monthly-confirm.html/js/css: 출근부 형식 1인용 확인 페이지
- monthly-comparison.js: 비관리자 → my-monthly-confirm으로 리다이렉트
- 마이그레이션: pages 테이블에 attendance.my_monthly_confirm 등록
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- monthly-comparison.html: initAuth() 호출 추가 (인증/사용자 정보 로드)
- monthly-comparison.js: 엑셀 다운로드 토큰을 getSSOToken으로 전환
- 캐시 버스팅: ?v=2026033102
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- monthlyComparisonModel: vacation_types.deduct_days AS vacation_days 추가
- monthlyComparisonController: vacationDays++ → parseFloat(attend.vacation_days) 소수 지원
- monthly-comparison.js: confirmMonth/submitReject 이중 제출 방지 (isProcessing 플래그)
- vacationBalanceModel: create/update/delete/bulkCreate → sp_vacation_balances + balance_type 매핑
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- monthly-comparison.html: 작업자 뷰 + 관리자 뷰 통합 페이지
- monthly-comparison.js: 일별 비교 카드(7상태), 확인/반려 워크플로우,
관리자 진행바+필터+엑셀, Mock 데이터 포함
- monthly-comparison.css: 모바일 우선 스타일
- tkfb-core.js: NAV_MENU에 월간 비교·확인 추가
- 권한: role 기반 mode 자동 결정, 일반 작업자 admin 접근 차단
- 상태 전이: pending→confirmed/rejected, rejected→confirmed 재확인 가능
- 엑셀: pending 0명일 때 활성화
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Section A (Backend):
- POST /api/proxy-input: TBM 세션+팀배정+작업보고서 일괄 생성 (트랜잭션)
- GET /api/proxy-input/daily-status: 일별 TBM/보고서 입력 현황
- GET /api/proxy-input/daily-status/detail: 작업자별 상세
- tbm_sessions에 is_proxy_input, proxy_input_by 컬럼 추가
- system1/system2/tkuser requireMinLevel → shared requirePage 전환
- permissionModel에 factory_proxy_input, factory_daily_status 키 등록
Section B (Frontend):
- daily-status.html: 날짜 네비 + 요약 카드 + 필터 탭 + 작업자 리스트 + 바텀시트
- proxy-input.html: 미입력자 카드 + 확장 폼 + 일괄 설정 + 저장
- tkfb-core.js NAV_MENU에 입력 현황/대리입력 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Backend:
- product_types 참조 테이블 + projects.product_type_id FK (tkuser 마이그레이션)
- schedule_entries에 work_type_id, risk_assessment_id, source 컬럼 추가
- schedule_phases에 product_type_id 추가 (phase 오염 방지)
- generateFromTemplate: tksafety 템플릿 기반 공정 자동 생성 (트랜잭션)
- phase 매칭 3단계 우선순위 (전용→범용→신규)
- 간트 데이터 NULL 날짜 guard 추가
- system1 startup 마이그레이션 러너 추가
Frontend:
- tkuser 프로젝트 추가/수정 폼에 제품유형 드롭다운 추가
- 프로젝트 목록에 제품유형 뱃지 표시
- 공정표 툴바에 "표준공정 생성" 버튼 + 모달 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
projects 테이블에 project_code 컬럼이 없고 job_no가 올바른 컬럼명.
백엔드 SQL에서는 pr.job_no AS project_code alias 사용,
프론트 드롭다운에서는 p.job_no로 직접 참조.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
날짜/입력자/프로젝트/공정 필드가 모두 빈 값으로 표시되던 4건 수정:
- sessionDateDisplay.textContent로 날짜 표시
- leaderName .value → .textContent (div 요소)
- 프로젝트/공정 드롭다운 옵션 채우기 + 기존 값 선택
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tbmModal에 편집 모드용 workerTaskListSection/workerTaskList/workerListEmpty 요소 추가.
openTeamCompositionModal에서 생성↔편집 모드 전환 로직 추가, closeTbmModal에서 원복.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>