feat:신분증/통장사본 첨부파일 기능 추가
- SalesProspect 모델: id_card_image, bankbook_image 필드 추가 - hasIdCard(), hasBankbook() 메서드 및 URL 접근자 추가 - SalesProspectController: store/update/destroy에 처리 로직 추가 - create.blade.php: 드래그앤드롭 업로드 UI 추가 - edit.blade.php: 기존 이미지 표시 및 교체 UI 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user