deploy: 2026-03-11 배포
- feat: MNG→SAM 자동 로그인 토큰 (LoginToken 모델 도메인 매핑) - feat: 사용자/역할/부서 관리 개선 (Controller, Service, View) - feat: 메뉴 관리 개선 (MenuService, menu-tree.js) - fix: 문서 뷰어, FCM 토큰, 방화셔터 도면, 테넌트 테이블 뷰 수정
This commit is contained in:
@@ -178,6 +178,54 @@ public function restore(Request $request, int $id): JsonResponse
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 삭제 (Soft Delete)
|
||||
*/
|
||||
public function bulkDelete(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$deleted = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
if ($this->departmentService->deleteDepartment($id)) {
|
||||
$deleted++;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$deleted}개 부서가 삭제되었습니다.", 'deleted' => $deleted]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 복원
|
||||
*/
|
||||
public function bulkRestore(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$restored = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
if ($this->departmentService->restoreDepartment($id)) {
|
||||
$restored++;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$restored}개 부서가 복원되었습니다.", 'restored' => $restored]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 영구삭제 (슈퍼관리자 전용)
|
||||
*/
|
||||
public function bulkForceDelete(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$deleted = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
if ($this->departmentService->forceDeleteDepartment($id)) {
|
||||
$deleted++;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$deleted}개 부서가 영구 삭제되었습니다.", 'deleted' => $deleted]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 부서 영구 삭제
|
||||
*/
|
||||
|
||||
@@ -115,6 +115,25 @@ public function update(UpdateRoleRequest $request, int $id): JsonResponse
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 삭제
|
||||
*/
|
||||
public function bulkDelete(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$deleted = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
try {
|
||||
$this->roleService->deleteRole($id);
|
||||
$deleted++;
|
||||
} catch (\Exception $e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$deleted}개 역할이 삭제되었습니다.", 'deleted' => $deleted]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 역할 삭제 (Soft Delete)
|
||||
*/
|
||||
|
||||
@@ -294,6 +294,57 @@ public function forceDestroy(Request $request, int $id): JsonResponse
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 삭제 (Soft Delete)
|
||||
*/
|
||||
public function bulkDelete(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$deleted = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
if ($this->userService->deleteUser($id)) {
|
||||
$deleted++;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$deleted}명의 사용자가 삭제되었습니다.", 'deleted' => $deleted]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 복원
|
||||
*/
|
||||
public function bulkRestore(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$restored = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
if ($this->userService->restoreUser($id)) {
|
||||
$restored++;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$restored}명의 사용자가 복원되었습니다.", 'restored' => $restored]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 일괄 영구삭제 (슈퍼관리자 전용)
|
||||
*/
|
||||
public function bulkForceDelete(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate(['ids' => 'required|array', 'ids.*' => 'integer']);
|
||||
$deleted = 0;
|
||||
foreach ($validated['ids'] as $id) {
|
||||
try {
|
||||
$this->userService->forceDeleteUser($id);
|
||||
$deleted++;
|
||||
} catch (\Exception $e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'message' => "{$deleted}명의 사용자가 영구 삭제되었습니다.", 'deleted' => $deleted]);
|
||||
}
|
||||
|
||||
/**
|
||||
* DEV 사이트 자동 로그인 토큰 생성
|
||||
* MNG → DEV 자동 로그인용 One-Time Token 발급
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
use App\Models\Admin\AdminPmTask;
|
||||
use App\Services\ProjectManagement\ImportService;
|
||||
use App\Services\ProjectManagement\ProjectService;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class ProjectManagementController extends Controller
|
||||
@@ -17,8 +19,13 @@ public function __construct(
|
||||
/**
|
||||
* 프로젝트 관리 대시보드
|
||||
*/
|
||||
public function index(): View
|
||||
public function index(Request $request): View|Response
|
||||
{
|
||||
// HTMX 부분 로드 시 @push('scripts')가 실행되지 않으므로 전체 페이지 리로드
|
||||
if ($request->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route('pm.index'));
|
||||
}
|
||||
|
||||
$summary = $this->projectService->getDashboardSummary();
|
||||
$statuses = AdminPmProject::getStatuses();
|
||||
$taskStatuses = AdminPmTask::getStatuses();
|
||||
|
||||
Reference in New Issue
Block a user