feat(user-modal): 사용자 정보 모달 및 컨텍스트 메뉴 확장
사용자 모달 기능: - 사용자 정보 모달 팝업 (조회/삭제/수정) - 권한 요약 정보 (Web/API 권한 카운트) - 2x2 그리드 레이아웃 (테넌트, 역할, 부서, 권한) - 테이블 행 클릭으로 모달 열기 - 권한 관리 링크 클릭 시 해당 사용자 자동 선택 컨텍스트 메뉴 확장: - permission-analyze 페이지 사용자 이름에 컨텍스트 메뉴 - user-permissions 페이지 사용자 버튼에 컨텍스트 메뉴 - 사용자 모달 내 테넌트 칩에 컨텍스트 메뉴 - 헤더 테넌트 배지에 컨텍스트 메뉴 - 테넌트 메뉴에 "이 테넌트로 전환" 기능 추가
This commit is contained in:
@@ -1360,3 +1360,83 @@ ### 코드 품질:
|
||||
- ✅ Pint 포맷팅 통과
|
||||
|
||||
---
|
||||
|
||||
## 2025-11-27 (수) - 테넌트 정보 모달 팝업 기능 구현
|
||||
|
||||
### 주요 작업
|
||||
- 테넌트 행 클릭 시 모달 팝업 오픈 기능 구현
|
||||
- 모달 내 JS 함수 window 객체 등록 (동적 HTML 접근 문제 해결)
|
||||
- 삭제된 테넌트 경고 배너 추가 (삭제일, 삭제자 표시)
|
||||
- 복원 후 모달 내용 자동 새로고침
|
||||
|
||||
### 수정된 파일:
|
||||
|
||||
#### JavaScript
|
||||
- `public/js/tenant-modal.js`
|
||||
- `toggleModalMenuChildren`, `hideModalMenuDescendants` → `window` 객체에 등록
|
||||
- 모달 오픈 시 구독정보 탭 자동 로드 (`switchTab('subscription')`)
|
||||
- `isOpen()` 메서드 추가 (모달 상태 확인용)
|
||||
|
||||
#### Blade Views
|
||||
- `resources/views/tenants/partials/table.blade.php`
|
||||
- 행 클릭 시 모달 오픈: `onclick="TenantModal.open({{ $tenant->id }})"`
|
||||
- 액션 버튼 우선권: `onclick="event.stopPropagation()"`
|
||||
|
||||
- `resources/views/tenants/partials/modal-info.blade.php`
|
||||
- 삭제된 테넌트 경고 배너 추가 (빨간색 bg-red-50)
|
||||
- 삭제일/삭제자 정보 표시
|
||||
- 배너 내 복원 버튼 추가
|
||||
|
||||
- `resources/views/tenants/index.blade.php`
|
||||
- `confirmRestore()`: 복원 후 모달 내용 새로고침 로직 추가
|
||||
|
||||
#### Models & Services
|
||||
- `app/Models/Tenants/Tenant.php`
|
||||
- `deleted_by` 컬럼 fillable 추가
|
||||
- `deletedByUser()` 관계 추가 (삭제자 정보 조회)
|
||||
|
||||
- `app/Services/TenantService.php`
|
||||
- `deleteTenant()`: deleted_by 기록
|
||||
- `restoreTenant()`: deleted_by null 초기화
|
||||
- `getTenantForModal()`: deletedByUser 관계 eager loading 추가
|
||||
|
||||
### 기술 상세:
|
||||
|
||||
**JS 함수 window 등록 (동적 HTML 문제 해결):**
|
||||
```javascript
|
||||
// Before: function toggleModalMenuChildren() {}
|
||||
// After: window.toggleModalMenuChildren = function() {}
|
||||
```
|
||||
- 동적으로 로드된 HTML에서 함수 접근 가능
|
||||
|
||||
**행 클릭 + 액션 버튼 우선권:**
|
||||
```html
|
||||
<tr onclick="TenantModal.open({{ $tenant->id }})">
|
||||
<td onclick="event.stopPropagation()">
|
||||
<!-- 액션 버튼들 -->
|
||||
</td>
|
||||
</tr>
|
||||
```
|
||||
- `event.stopPropagation()`으로 버블링 방지
|
||||
|
||||
**삭제된 테넌트 경고 배너:**
|
||||
- 빨간색 배경 (bg-red-50)
|
||||
- 삭제일 + 삭제자 정보 표시
|
||||
- 복원 버튼 포함
|
||||
|
||||
**복원 후 모달 새로고침:**
|
||||
```javascript
|
||||
if (TenantModal.isOpen() && TenantModal.currentTenantId === id) {
|
||||
TenantModal.loadTenantInfo();
|
||||
}
|
||||
```
|
||||
|
||||
### 이슈 해결:
|
||||
- **toggleModalMenuChildren not defined**: window 객체에 함수 등록으로 해결
|
||||
- **복원 후 배너 미갱신**: `loadTenantInfo()` 호출 추가
|
||||
|
||||
### Git 커밋:
|
||||
- ✅ `b32f6cf` "feat: 테넌트 정보 모달 팝업 기능 추가"
|
||||
- 17 files changed, 1476 insertions(+), 4 deletions(-)
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user