From 5793845def1d8fe110f27f8196db3cbcba8a30ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 26 Feb 2026 13:56:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[business-cards]=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20=EB=A7=A4?= =?UTF-8?q?=EC=88=98=20500=EB=A7=A4=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 관리자 화면 처리완료 카드에 삭제 버튼 추가 - processed 상태만 삭제 가능 (서비스 검증) - 파트너 명함신청 기본 매수 100매 → 500매 변경 --- .../Sales/BusinessCardRequestController.php | 22 ++++++++++ .../Sales/BusinessCardRequestService.php | 15 +++++++ .../business-cards/admin-index.blade.php | 42 ++++++++++++++++++- .../business-cards/partner-index.blade.php | 6 +-- routes/web.php | 1 + 5 files changed, 82 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Sales/BusinessCardRequestController.php b/app/Http/Controllers/Sales/BusinessCardRequestController.php index 637977d3..f359268d 100644 --- a/app/Http/Controllers/Sales/BusinessCardRequestController.php +++ b/app/Http/Controllers/Sales/BusinessCardRequestController.php @@ -124,4 +124,26 @@ public function process(Request $request, int $id) return redirect()->route('sales.business-cards.manage') ->with('success', '처리가 완료되었습니다.'); } + + /** + * 처리완료 건 삭제 (관리자 전용) + */ + public function destroy(Request $request, int $id) + { + if (! auth()->user()->isAdmin()) { + abort(403, '관리자만 삭제할 수 있습니다.'); + } + + $this->service->delete($id); + + if ($request->expectsJson() || $request->header('Accept') === 'application/json') { + return response()->json([ + 'success' => true, + 'message' => '삭제되었습니다.', + ]); + } + + return redirect()->route('sales.business-cards.manage') + ->with('success', '삭제되었습니다.'); + } } diff --git a/app/Services/Sales/BusinessCardRequestService.php b/app/Services/Sales/BusinessCardRequestService.php index 91765881..c2fff899 100644 --- a/app/Services/Sales/BusinessCardRequestService.php +++ b/app/Services/Sales/BusinessCardRequestService.php @@ -119,6 +119,21 @@ public function process(int $id, ?string $memo = null): BusinessCardRequest return $request; } + /** + * 처리완료 건 삭제 + */ + public function delete(int $id): void + { + $tenantId = session('selected_tenant_id', 1); + $request = BusinessCardRequest::ofTenant($tenantId)->findOrFail($id); + + if ($request->status !== BusinessCardRequest::STATUS_PROCESSED) { + abort(422, '처리완료 상태만 삭제할 수 있습니다.'); + } + + $request->delete(); + } + private function buildQuery(string $status, ?string $search) { $tenantId = session('selected_tenant_id', 1); diff --git a/resources/views/sales/business-cards/admin-index.blade.php b/resources/views/sales/business-cards/admin-index.blade.php index 9450b4f7..81a10da1 100644 --- a/resources/views/sales/business-cards/admin-index.blade.php +++ b/resources/views/sales/business-cards/admin-index.blade.php @@ -207,6 +207,7 @@ class="px-3 py-1 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-med 의뢰일 처리일 처리자 + @@ -231,10 +232,19 @@ class="px-3 py-1 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-med {{ $req->processor?->name }} + + + @empty - + 처리된 명함 신청이 없습니다. @@ -312,5 +322,35 @@ function processRequest(id, name) { { title: '처리 완료', icon: 'question', confirmText: '처리완료' } ); } + +function deleteRequest(id, name) { + showConfirm( + `${name}님의 처리완료된 명함신청을 삭제하시겠습니까?`, + () => { + fetch(`/sales/business-cards/${id}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': '{{ csrf_token() }}', + 'Accept': 'application/json', + } + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + showToast(data.message, 'success'); + window.location.reload(); + } else { + showToast(data.message || '삭제에 실패했습니다.', 'error'); + } + }) + .catch(error => { + showToast('서버 오류가 발생했습니다.', 'error'); + console.error(error); + }); + }, + { title: '삭제 확인', icon: 'warning', confirmText: '삭제' } + ); +} @endpush diff --git a/resources/views/sales/business-cards/partner-index.blade.php b/resources/views/sales/business-cards/partner-index.blade.php index 4c1779c4..a2e4509e 100644 --- a/resources/views/sales/business-cards/partner-index.blade.php +++ b/resources/views/sales/business-cards/partner-index.blade.php @@ -69,10 +69,10 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none foc
- -

기본 100매

+ placeholder="500"> +

기본 500매

diff --git a/routes/web.php b/routes/web.php index f8e538d1..20d9f105 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1298,6 +1298,7 @@ Route::get('business-cards/manage', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'manage'])->name('business-cards.manage'); Route::post('business-cards/{id}/order', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'order'])->name('business-cards.order'); Route::post('business-cards/{id}/process', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'process'])->name('business-cards.process'); + Route::delete('business-cards/{id}', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'destroy'])->name('business-cards.destroy'); // 매니저 검색 (리소스 라우트보다 먼저 정의해야 함!) Route::get('managers/list', [\App\Http\Controllers\Sales\SalesDashboardController::class, 'getManagers'])->name('managers.list');