diff --git a/app/Http/Controllers/Api/Admin/ApprovalApiController.php b/app/Http/Controllers/Api/Admin/ApprovalApiController.php index cdb31ce9..5dcccd36 100644 --- a/app/Http/Controllers/Api/Admin/ApprovalApiController.php +++ b/app/Http/Controllers/Api/Admin/ApprovalApiController.php @@ -210,6 +210,50 @@ public function forceDestroy(int $id): JsonResponse } } + /** + * 선택삭제 (기안자 본인 문서만) + */ + public function bulkDestroy(Request $request): JsonResponse + { + $ids = $request->input('ids', []); + if (empty($ids) || ! is_array($ids)) { + return response()->json([ + 'success' => false, + 'message' => '삭제할 문서를 선택하세요.', + ], 400); + } + + $user = auth()->user(); + $deleted = 0; + $failed = 0; + + foreach ($ids as $id) { + try { + $approval = $this->service->getApproval($id); + if ($approval->isDeletableBy($user)) { + $this->service->deleteApproval($id, $user); + $deleted++; + } else { + $failed++; + } + } catch (\Throwable) { + $failed++; + } + } + + $message = "{$deleted}건 삭제 완료"; + if ($failed > 0) { + $message .= " ({$failed}건 삭제 불가)"; + } + + return response()->json([ + 'success' => true, + 'message' => $message, + 'deleted' => $deleted, + 'failed' => $failed, + ]); + } + // ========================================================================= // 워크플로우 // ========================================================================= diff --git a/resources/views/approvals/drafts.blade.php b/resources/views/approvals/drafts.blade.php index fd811937..97c61d72 100644 --- a/resources/views/approvals/drafts.blade.php +++ b/resources/views/approvals/drafts.blade.php @@ -41,6 +41,26 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc + +