diff --git a/app/Http/Controllers/Sales/SalesProspectController.php b/app/Http/Controllers/Sales/SalesProspectController.php index 396f36e2..b9f85555 100644 --- a/app/Http/Controllers/Sales/SalesProspectController.php +++ b/app/Http/Controllers/Sales/SalesProspectController.php @@ -94,13 +94,27 @@ public function store(Request $request) 'address' => 'nullable|string|max:500', 'status' => 'required|in:lead,prospect,negotiation,contracted,lost', 'business_card_image_data' => 'nullable|string', + 'id_card_image_data' => 'nullable|string', + 'bankbook_image_data' => 'nullable|string', ]); // 명함 이미지 저장 (Base64) if (!empty($validated['business_card_image_data'])) { - $validated['business_card_image'] = $this->saveBusinessCardImage($validated['business_card_image_data']); - unset($validated['business_card_image_data']); + $validated['business_card_image'] = $this->saveBase64Image($validated['business_card_image_data'], 'business-cards'); } + unset($validated['business_card_image_data']); + + // 신분증 이미지 저장 (Base64) + if (!empty($validated['id_card_image_data'])) { + $validated['id_card_image'] = $this->saveBase64Image($validated['id_card_image_data'], 'id-cards'); + } + unset($validated['id_card_image_data']); + + // 통장사본 이미지 저장 (Base64) + if (!empty($validated['bankbook_image_data'])) { + $validated['bankbook_image'] = $this->saveBase64Image($validated['bankbook_image_data'], 'bankbooks'); + } + unset($validated['bankbook_image_data']); $prospect = SalesProspect::create($validated); @@ -157,20 +171,40 @@ public function update(Request $request, int $id) 'address' => 'nullable|string|max:500', 'status' => 'required|in:lead,prospect,negotiation,contracted,lost', 'business_card' => 'nullable|image|max:5120', + 'id_card' => 'nullable|image|max:5120', + 'bankbook' => 'nullable|image|max:5120', ]); // 명함 이미지 업로드 처리 if ($request->hasFile('business_card')) { - // 기존 이미지 삭제 if ($prospect->business_card_image) { Storage::disk('public')->delete($prospect->business_card_image); } - $validated['business_card_image'] = $request->file('business_card') ->store('business-cards', 'public'); } unset($validated['business_card']); + // 신분증 이미지 업로드 처리 + if ($request->hasFile('id_card')) { + if ($prospect->id_card_image) { + Storage::disk('public')->delete($prospect->id_card_image); + } + $validated['id_card_image'] = $request->file('id_card') + ->store('id-cards', 'public'); + } + unset($validated['id_card']); + + // 통장사본 이미지 업로드 처리 + if ($request->hasFile('bankbook')) { + if ($prospect->bankbook_image) { + Storage::disk('public')->delete($prospect->bankbook_image); + } + $validated['bankbook_image'] = $request->file('bankbook') + ->store('bankbooks', 'public'); + } + unset($validated['bankbook']); + $prospect->update($validated); return redirect()->route('sales.prospects.show', $prospect->id) @@ -184,9 +218,12 @@ public function destroy(int $id) { $prospect = SalesProspect::findOrFail($id); - // 명함 이미지 삭제 - if ($prospect->business_card_image) { - Storage::disk('public')->delete($prospect->business_card_image); + // 첨부 이미지 삭제 + $imageFields = ['business_card_image', 'id_card_image', 'bankbook_image']; + foreach ($imageFields as $field) { + if ($prospect->$field) { + Storage::disk('public')->delete($prospect->$field); + } } $prospect->delete(); @@ -196,9 +233,9 @@ public function destroy(int $id) } /** - * Base64 명함 이미지 저장 + * Base64 이미지 저장 */ - private function saveBusinessCardImage(string $base64Data): ?string + private function saveBase64Image(string $base64Data, string $folder): ?string { // data:image/jpeg;base64,... 형식에서 데이터 추출 if (preg_match('/^data:image\/(\w+);base64,/', $base64Data, $matches)) { @@ -213,7 +250,7 @@ private function saveBusinessCardImage(string $base64Data): ?string return null; } - $filename = 'business-cards/' . date('Ymd') . '_' . uniqid() . '.' . $extension; + $filename = $folder . '/' . date('Ymd') . '_' . uniqid() . '.' . $extension; Storage::disk('public')->put($filename, $imageData); return $filename; diff --git a/app/Models/Sales/SalesProspect.php b/app/Models/Sales/SalesProspect.php index 793978e5..d478cd79 100644 --- a/app/Models/Sales/SalesProspect.php +++ b/app/Models/Sales/SalesProspect.php @@ -23,6 +23,8 @@ class SalesProspect extends Model 'email', 'address', 'business_card_image', + 'id_card_image', + 'bankbook_image', 'status', ]; @@ -157,4 +159,44 @@ public function getBusinessCardUrlAttribute(): ?string return asset('storage/' . $this->business_card_image); } + + /** + * 신분증 이미지 존재 여부 + */ + public function hasIdCard(): bool + { + return !empty($this->id_card_image); + } + + /** + * 신분증 이미지 URL + */ + public function getIdCardUrlAttribute(): ?string + { + if (!$this->hasIdCard()) { + return null; + } + + return asset('storage/' . $this->id_card_image); + } + + /** + * 통장사본 이미지 존재 여부 + */ + public function hasBankbook(): bool + { + return !empty($this->bankbook_image); + } + + /** + * 통장사본 이미지 URL + */ + public function getBankbookUrlAttribute(): ?string + { + if (!$this->hasBankbook()) { + return null; + } + + return asset('storage/' . $this->bankbook_image); + } } diff --git a/resources/views/sales/prospects/create.blade.php b/resources/views/sales/prospects/create.blade.php index aadc2a2b..2bc4cf55 100644 --- a/resources/views/sales/prospects/create.blade.php +++ b/resources/views/sales/prospects/create.blade.php @@ -112,6 +112,8 @@
@csrf + +
@@ -175,6 +177,37 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc

JPG, PNG 형식 (최대 5MB)

+ +
+

추가 서류

+
+
+ +
+ + + + +

클릭하여 업로드

+
+ +
+ +
+ +
+ + + + +

클릭하여 업로드

+
+ +
+
+

JPG, PNG 형식 (최대 5MB)

+
+