From e5b054ea0abbec84821101d03106f730880f9075 Mon Sep 17 00:00:00 2001 From: pro Date: Wed, 28 Jan 2026 10:21:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EC=98=81=EC=97=85=EA=B6=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B2=A8=EB=B6=80=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sales/TenantProspectController.php | 28 ++++++++ app/Services/Sales/TenantProspectService.php | 23 +++++-- .../views/sales/prospects/edit.blade.php | 69 +++++++++++++++++-- routes/web.php | 1 + 4 files changed, 110 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Sales/TenantProspectController.php b/app/Http/Controllers/Sales/TenantProspectController.php index da404229..d44472a8 100644 --- a/app/Http/Controllers/Sales/TenantProspectController.php +++ b/app/Http/Controllers/Sales/TenantProspectController.php @@ -213,4 +213,32 @@ public function checkBusinessNumber(Request $request) return response()->json($result); } + + /** + * 첨부 이미지 삭제 (AJAX) + */ + public function deleteAttachment(Request $request, int $id) + { + $prospect = TenantProspect::findOrFail($id); + + // 이미 전환된 경우 수정 불가 + if ($prospect->isConverted()) { + return response()->json(['success' => false, 'message' => '전환된 영업권은 수정할 수 없습니다.'], 403); + } + + $type = $request->get('type'); + $allowedTypes = ['business_card', 'id_card', 'bankbook']; + + if (!in_array($type, $allowedTypes)) { + return response()->json(['success' => false, 'message' => '잘못된 요청입니다.'], 400); + } + + $result = $this->service->deleteAttachment($prospect, $type); + + if ($result) { + return response()->json(['success' => true, 'message' => '이미지가 삭제되었습니다.']); + } + + return response()->json(['success' => false, 'message' => '삭제할 이미지가 없습니다.'], 404); + } } diff --git a/app/Services/Sales/TenantProspectService.php b/app/Services/Sales/TenantProspectService.php index 504ce932..9ee9e762 100644 --- a/app/Services/Sales/TenantProspectService.php +++ b/app/Services/Sales/TenantProspectService.php @@ -270,12 +270,25 @@ private function uploadBusinessCard(UploadedFile $file, int $userId): string */ public function deleteBusinessCard(TenantProspect $prospect): bool { - if ($prospect->business_card_path && Storage::disk('tenant')->exists($prospect->business_card_path)) { - Storage::disk('tenant')->delete($prospect->business_card_path); - $prospect->update(['business_card_path' => null]); - return true; + return $this->deleteAttachment($prospect, 'business_card'); + } + + /** + * 첨부파일 삭제 + */ + public function deleteAttachment(TenantProspect $prospect, string $type): bool + { + $pathField = $type . '_path'; + + if (!$prospect->$pathField) { + return false; } - return false; + if (Storage::disk('tenant')->exists($prospect->$pathField)) { + Storage::disk('tenant')->delete($prospect->$pathField); + } + + $prospect->update([$pathField => null]); + return true; } } diff --git a/resources/views/sales/prospects/edit.blade.php b/resources/views/sales/prospects/edit.blade.php index 939bae12..42a17f80 100644 --- a/resources/views/sales/prospects/edit.blade.php +++ b/resources/views/sales/prospects/edit.blade.php @@ -76,8 +76,17 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc
@if($prospect->hasBusinessCard()) -
- 현재 명함 +
+
+ 현재 명함 + +

새 이미지를 업로드하면 기존 이미지가 교체됩니다

@endif @@ -93,8 +102,17 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc
@if($prospect->hasIdCard()) -
- 현재 신분증 +
+
+ 현재 신분증 + +

새 이미지를 업로드하면 기존 이미지가 교체됩니다

@endif @@ -105,8 +123,17 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc
@if($prospect->hasBankbook()) -
- 현재 통장사본 +
+
+ 현재 통장사본 + +

새 이미지를 업로드하면 기존 이미지가 교체됩니다

@endif @@ -154,4 +181,34 @@ class="px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition"
+ +@push('scripts') + +@endpush @endsection diff --git a/routes/web.php b/routes/web.php index 1a545934..5b566045 100644 --- a/routes/web.php +++ b/routes/web.php @@ -821,6 +821,7 @@ Route::resource('prospects', \App\Http\Controllers\Sales\TenantProspectController::class); Route::post('prospects/{id}/convert', [\App\Http\Controllers\Sales\TenantProspectController::class, 'convert'])->name('prospects.convert'); Route::post('prospects/check-business-number', [\App\Http\Controllers\Sales\TenantProspectController::class, 'checkBusinessNumber'])->name('prospects.check-business-number'); + Route::delete('prospects/{id}/attachment', [\App\Http\Controllers\Sales\TenantProspectController::class, 'deleteAttachment'])->name('prospects.delete-attachment'); // 영업 실적 관리 Route::resource('records', \App\Http\Controllers\Sales\SalesRecordController::class);