1. /menus 페이지 hx-boost 네비게이션 시 SortableJS 미실행 수정
- htmx:afterSettle 이벤트로 페이지별 스크립트 초기화
- menu-sortable.js로 SortableJS 로직 분리
- 중복 코드 제거
2. 세션 만료 시 자동 갱신 로직 추가
- /auth/refresh-session 엔드포인트 추가
- Remember Token으로 자동 재인증 (자동 로그인 사용자)
- 재인증 실패 시 로그인 페이지 리다이렉트
- GlobalMenu 모델에 getSection(), getMeta() 메서드 추가 (import 모드 500 에러 해결)
- table.blade.php: normal 모드에서 체크박스 + 드래그 핸들 분리
- index.blade.php: 선택 삭제/복구/영구삭제 버튼 및 JS 함수 추가
- MenuController: bulkDelete, bulkRestore, bulkForceDelete API 추가
- routes/api.php: bulk 엔드포인트 3개 등록
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- filter-collapsible 컴포넌트 생성 (모바일 필터 토글)
- 10개 index 페이지 헤더/필터 반응형 적용
- 헤더: flex-col sm:flex-row 스택 배치
- 필터: w-full sm:w-40 반응형 너비
- 버튼: flex-1 sm:flex-none 그룹 배치
- HTMX 응답 에러 수정: JSON 래핑 대신 HTML 직접 반환
- MenuController, GlobalMenuController의 index 메소드 수정
- index.blade.php, global-index.blade.php의 JSON 파싱 로직 제거
- 메뉴 options 필드 검증 추가
- StoreMenuRequest, UpdateMenuRequest에 options 필드 추가
- section 변경이 정상 저장되도록 수정
- 개발도구 메뉴 하드코딩 제거, DB 기반 동적 렌더링
- sidebar.blade.php에서 하드코딩된 메뉴 제거
- tools-menu.blade.php 컴포넌트 신규 생성
- section=tools 메뉴가 하단 고정 영역에 동적 표시
- 메뉴 영구삭제 시 연관 권한도 함께 삭제
- 삭제 정보를 archived_records에 저장 (복구용)
- 메뉴 데이터, 권한 목록, 역할-권한 연결 정보 보관
- batch_id를 순수 UUID로 변경 (컬럼 크기 제한 해결)
- 영구삭제 시 에러 메시지 토스트로 표시 (하위 메뉴 존재 등)
- 글로벌 메뉴 영구삭제 시 참조 테넌트 메뉴 연결 해제
- 글로벌 메뉴 CRUD API 및 라우트 추가 (GlobalMenuController)
- 글로벌 메뉴 목록/생성/수정 뷰 추가 (보라색 테마)
- MenuService에 글로벌 메뉴 관련 메서드 11개 추가
- 메뉴 관리 페이지에 '글로벌 메뉴 관리' 버튼 추가
- 가져오기 모드에서 이미 가져온 메뉴 비활성화 표시
- super.admin 미들웨어로 접근 제어
- PULL 방식 메뉴 가져오기 (테넌트가 글로벌에서 선택적으로 가져옴)
- 모드 전환 UI (내 메뉴 / 글로벌에서 가져오기)
- 체크박스 선택으로 다중 메뉴 가져오기 지원
- 가져오기 모드에서 읽기 전용 상태 배지 표시
- hidden input으로 HTMX mode 파라미터 전달 수정
- forceFallback: true 추가 (네이티브 드래그 → 자체 구현)
→ mousemove 이벤트 정상 발생, 인디케이터/하이라이트 작동
- 드래그 중 텍스트 선택 방지 (body.is-dragging + user-select: none)
- 순서변경(reorder) 시 원래 부모 유지 (계층 변경 버그 수정)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Notion 스타일 좌우 드래그로 계층 이동 방식 변경
- → 오른쪽 드래그: 상위 메뉴의 하위로 이동 (파란색 하이라이트)
- ← 왼쪽 드래그: 상위 레벨로 이동 (주황색 하이라이트)
- 드래그 인디케이터 툴팁 추가 (인덴트/아웃덴트/순서변경)
- CSS 펄스 애니메이션으로 타겟 행 강조
- updateRowHighlight 함수 수정: 아웃덴트 시 드래그 중인 행 하이라이트
- MenuService.moveMenu() 메서드 추가 (부모 변경 + 하위 메뉴 유지)
- POST /api/admin/menus/move API 엔드포인트 추가
- 순환 참조 방지 로직 구현
- Shift+드래그로 위 메뉴의 하위로 이동 가능
- 사용법 안내 UI 추가
- MenuService.reorderMenus() 메서드 추가
- MenuController.reorder() API 엔드포인트 추가
- POST /api/admin/menus/reorder 라우트 추가
- SortableJS 기반 드래그 앤 드롭 UI 구현
- 같은 부모 메뉴 내에서만 순서 변경 가능 (계층 구조 유지)
- public/js/menu-tree.js 공통 스크립트 생성
- 테이블(tr.menu-row) / div(.menu-item) 둘 다 지원
- toggleChildren, hideChildren, showChildren 함수 통합
- 권한 관리 페이지들 메뉴 트리 디자인 통일
- role-permissions, department-permissions, user-permissions
- 폴더/파일 아이콘, 접기/펼치기 버튼, chevron 아이콘
- menu-row 클래스 및 data 속성 추가
- permission-analyze 접기/펼치기 기능 추가
- data-parent-id, data-depth 속성 추가
- 폴더 버튼 클릭으로 하위 메뉴 토글
- menus 페이지 스크립트 공통화
- 각 페이지 중복 코드 제거 및 공통 menu-tree.js 로드
- 테넌트 선택을 각 페이지에서 헤더로 통합 이동
- 페이지 제목 이모지 제거 및 상단 여백(mt-6) 축소
- 역할 권한 관리 페이지 레이아웃을 다른 페이지와 통일
- 메뉴명 스타일 개선 (depth 들여쓰기, └ 기호 적용)
- 상위 메뉴 컬럼 제거로 테이블 간소화
- RolePermissionService에 depth 계산 로직 추가
- pagination.js를 body 끝으로 이동하여 로딩 오류 해결
- 역할 선택 UI를 셀렉트박스에서 버튼 형태로 변경
- 역할 버튼 hover 효과 개선 (선택된 버튼 가독성 향상)
변경된 파일:
- resources/views/partials/header.blade.php: 테넌트 선택 UI 추가
- resources/views/dashboard|menus|users|departments|permissions|roles/index.blade.php: tenant-selector 제거, 여백 축소
- resources/views/layouts/app.blade.php: pagination.js 위치 변경
- app/Services/RolePermissionService.php: depth 계산 로직 추가
- resources/views/role-permissions/: 역할 권한 관리 페이지 개선
- routes/web.php, routes/api.php: 역할 권한 관리 라우트 추가
- 트리 구조 정렬 및 표시 (무제한 depth 지원)
- 접기/펼치기 기능 추가 (재귀적 처리)
- 활성/숨김 상태 토글 기능 (실시간 업데이트)
- 테넌트 필터링 (전체 선택 시 마스터 메뉴만 표시)
- UI 개선 (토글 버튼, 외부 메뉴 표시)
추가된 파일:
- MenuService: 비즈니스 로직 처리
- MenuController (API/Web): 라우트 처리
- MenuRequest: 유효성 검증
- views/menus/: 메뉴 관리 뷰
수정된 파일:
- routes/api.php, web.php: 메뉴 라우트 추가