diff --git a/resources/views/finance/vehicle-maintenance.blade.php b/resources/views/finance/vehicle-maintenance.blade.php index e068757e..c6430029 100644 --- a/resources/views/finance/vehicle-maintenance.blade.php +++ b/resources/views/finance/vehicle-maintenance.blade.php @@ -44,6 +44,7 @@ const DollarSign = createIcon('dollar-sign'); const Fuel = createIcon('fuel'); const Car = createIcon('car'); +const RefreshCw = createIcon('refresh-cw'); function VehicleMaintenanceManagement() { const [loading, setLoading] = useState(true); @@ -75,6 +76,7 @@ function VehicleMaintenanceManagement() { }; const loadMaintenances = async () => { + setLoading(true); try { const params = new URLSearchParams({ start_date: dateRange.start, @@ -95,16 +97,11 @@ function VehicleMaintenanceManagement() { } }; + // 초기 로드 useEffect(() => { - loadVehicles(); + loadVehicles().then(() => loadMaintenances()); }, []); - useEffect(() => { - if (vehicles.length > 0 || !loading) { - loadMaintenances(); - } - }, [dateRange, filterCategory, filterVehicle]); - const [searchTerm, setSearchTerm] = useState(''); const [filterCategory, setFilterCategory] = useState('all'); const [filterVehicle, setFilterVehicle] = useState('all'); @@ -119,6 +116,18 @@ function VehicleMaintenanceManagement() { const categories = ['주유', '정비', '보험', '세차', '주차', '통행료', '검사', '기타']; + // 검색 실행 + const handleSearch = () => { + loadMaintenances(); + }; + + // 엔터키 핸들러 + const handleKeyDown = (e) => { + if (e.key === 'Enter') { + handleSearch(); + } + }; + // 차량 표시용 헬퍼 const getVehicleDisplay = (vehicleId) => { const v = vehicles.find(v => v.id === vehicleId); @@ -145,18 +154,9 @@ function VehicleMaintenanceManagement() { }; const parseInputCurrency = (value) => String(value).replace(/[^\d]/g, ''); - // API에서 이미 필터링된 데이터를 받으므로 클라이언트 측에서는 검색어만 필터링 - const filteredMaintenances = maintenances.filter(item => { - if (!searchTerm) return true; - const search = searchTerm.toLowerCase(); - return (item.description || '').toLowerCase().includes(search) || - (item.vendor || '').toLowerCase().includes(search) || - (item.plateNumber || '').toLowerCase().includes(search); - }); - - const totalAmount = filteredMaintenances.reduce((sum, item) => sum + item.amount, 0); - const fuelAmount = filteredMaintenances.filter(m => m.category === '주유').reduce((sum, item) => sum + item.amount, 0); - const maintenanceAmount = filteredMaintenances.filter(m => m.category === '정비').reduce((sum, item) => sum + item.amount, 0); + const totalAmount = maintenances.reduce((sum, item) => sum + item.amount, 0); + const fuelAmount = maintenances.filter(m => m.category === '주유').reduce((sum, item) => sum + item.amount, 0); + const maintenanceAmount = maintenances.filter(m => m.category === '정비').reduce((sum, item) => sum + item.amount, 0); const otherAmount = totalAmount - fuelAmount - maintenanceAmount; // 유지비 등록/수정 @@ -192,7 +192,6 @@ function VehicleMaintenanceManagement() { vendor: formData.vendor, memo: formData.memo }; - console.log('저장 요청:', payload); const url = modalMode === 'add' ? '/finance/vehicle-maintenance' : `/finance/vehicle-maintenance/${editingItem.id}`; const method = modalMode === 'add' ? 'POST' : 'PUT'; const response = await fetch(url, { @@ -200,9 +199,7 @@ function VehicleMaintenanceManagement() { headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content }, body: JSON.stringify(payload) }); - console.log('응답 상태:', response.status); const result = await response.json(); - console.log('응답 데이터:', result); if (result.success) { await loadMaintenances(); setShowModal(false); @@ -239,7 +236,7 @@ function VehicleMaintenanceManagement() { const handleDownload = () => { const rows = [['차량 유지비', `${dateRange.start} ~ ${dateRange.end}`], [], ['날짜', '차량', '구분', '내용', '금액', '주행거리', '업체'], - ...filteredMaintenances.map(item => [item.date, getVehicleDisplay(item.vehicleId), item.category, item.description, item.amount, item.mileage, item.vendor])]; + ...maintenances.map(item => [item.date, getVehicleDisplay(item.vehicleId), item.category, item.description, item.amount, item.mileage, item.vendor])]; const csvContent = rows.map(row => row.join(',')).join('\n'); const blob = new Blob(['\uFEFF' + csvContent], { type: 'text/csv;charset=utf-8;' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `차량유지비_${dateRange.start}_${dateRange.end}.csv`; link.click(); @@ -270,7 +267,7 @@ function VehicleMaintenanceManagement() {
{formatCurrency(totalAmount)}원
-{filteredMaintenances.length}건
+{maintenances.length}건