From 641bd37f645ac80999825abb77a0b3a3560c4864 Mon Sep 17 00:00:00 2001 From: AutonetSellCar Deploy Date: Wed, 18 Feb 2026 09:20:42 +0900 Subject: [PATCH] feat: Add "Send Recommendation" button to Vehicle Requests admin Adds a green button below the vehicle list that approves all vehicles and sends notification to the user. Status changes to Completed. Previously there was no way to trigger the approve + notify flow from UI. Co-Authored-By: Claude Opus 4.6 --- .../src/app/admin/vehicle-requests/page.tsx | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/frontend/src/app/admin/vehicle-requests/page.tsx b/frontend/src/app/admin/vehicle-requests/page.tsx index cc3ce50..a0eebc6 100644 --- a/frontend/src/app/admin/vehicle-requests/page.tsx +++ b/frontend/src/app/admin/vehicle-requests/page.tsx @@ -11,6 +11,7 @@ export default function AdminVehicleRequestsPage() { const [statusFilter, setStatusFilter] = useState(''); const [deletingVehicleId, setDeletingVehicleId] = useState(null); const [regeneratingPdfId, setRegeneratingPdfId] = useState(null); + const [sendingRecommendation, setSendingRecommendation] = useState(false); // Load requests useEffect(() => { @@ -107,6 +108,35 @@ export default function AdminVehicleRequestsPage() { } }; + // Send recommendation (approve vehicles + notify user) + const sendRecommendation = async () => { + if (!selectedRequest) return; + const vehicles = selectedRequest.approved_vehicles; + if (vehicles.length === 0) { + alert('No vehicles to send. Add vehicles first.'); + return; + } + + if (!confirm(`${vehicles.length}개의 차량을 고객에게 추천 발송하시겠습니까?\n(고객에게 알림이 전송됩니다)`)) { + return; + } + + try { + setSendingRecommendation(true); + const vehicleIds = vehicles.map(v => v.id); + await vehicleRequestsApi.adminApproveVehicles(selectedRequest.request.id, vehicleIds); + + alert('추천이 발송되었습니다.'); + loadRequests(); + loadRequestDetail(selectedRequest.request.id); + } catch (error) { + console.error('Failed to send recommendation:', error); + alert('추천 발송에 실패했습니다.'); + } finally { + setSendingRecommendation(false); + } + }; + // Format date const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString('ko-KR', { @@ -406,6 +436,42 @@ export default function AdminVehicleRequestsPage() { ); })} + + {/* Send Recommendation Button */} + {selectedRequest.request.status !== 'completed' && ( +
+ +

+ Status will change to Completed and user will be notified +

+
+ )} + + {selectedRequest.request.status === 'completed' && ( +
+
+ Recommendation sent +
+
+ )} )}