feat:차량일지(운행기록부) 기능 구현

- VehicleLog 모델 생성
- VehicleLogController (CRUD, 엑셀 다운로드)
- 차량일지 라우트 추가 (/finance/vehicle-logs/*)
- React 기반 UI (vehicle-logs.blade.php)
- VehicleLogMenuSeeder (법인차량관리 > 차량일지 메뉴)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-03 11:24:11 +09:00
parent 3443e57b67
commit 0d111bc8ba
5 changed files with 1145 additions and 0 deletions

View File

@@ -0,0 +1,110 @@
<?php
namespace Database\Seeders;
use App\Models\Commons\Menu;
use Illuminate\Database\Seeder;
/**
* 차량일지 메뉴 시더
* - 재무관리 > 법인차량관리 하위에 차량일지 메뉴 추가
*/
class VehicleLogMenuSeeder extends Seeder
{
public function run(): void
{
$tenantId = 1;
// 법인차량관리 메뉴 찾기
$vehicleMenu = Menu::where('tenant_id', $tenantId)
->where('name', '법인차량관리')
->first();
if (!$vehicleMenu) {
$this->command->error('법인차량관리 메뉴를 찾을 수 없습니다.');
return;
}
// 차량일지 메뉴가 이미 있는지 확인
$existingMenu = Menu::where('tenant_id', $tenantId)
->where('name', '차량일지')
->where('parent_id', $vehicleMenu->id)
->first();
if ($existingMenu) {
$this->command->info('차량일지 메뉴가 이미 존재합니다.');
return;
}
// 법인차량관리가 그룹 메뉴인지 확인
// 그룹 메뉴가 아니면 그룹으로 변경
if ($vehicleMenu->url) {
// 기존 URL을 차량목록으로 변경
$vehicleListMenu = Menu::create([
'tenant_id' => $tenantId,
'parent_id' => $vehicleMenu->id,
'name' => '차량목록',
'url' => $vehicleMenu->url,
'icon' => 'car',
'sort_order' => 1,
'is_active' => true,
]);
$this->command->info("차량목록 하위 메뉴 생성: {$vehicleListMenu->url}");
// 법인차량관리를 그룹 메뉴로 변경
$vehicleMenu->url = null;
$vehicleMenu->save();
$this->command->info('법인차량관리를 그룹 메뉴로 변경');
// 차량일지 메뉴 생성
$vehicleLogMenu = Menu::create([
'tenant_id' => $tenantId,
'parent_id' => $vehicleMenu->id,
'name' => '차량일지',
'url' => '/finance/vehicle-logs',
'icon' => 'file-text',
'sort_order' => 2,
'is_active' => true,
]);
$this->command->info("차량일지 메뉴 생성: {$vehicleLogMenu->url}");
// 차량정비 메뉴가 있으면 순서 조정
$maintenanceMenu = Menu::where('tenant_id', $tenantId)
->where('name', '차량정비')
->where('parent_id', $vehicleMenu->id)
->first();
if ($maintenanceMenu) {
$maintenanceMenu->sort_order = 3;
$maintenanceMenu->save();
}
} else {
// 이미 그룹 메뉴인 경우 차량일지만 추가
// 기존 하위 메뉴 순서 확인
$maxSortOrder = Menu::where('parent_id', $vehicleMenu->id)
->max('sort_order') ?? 0;
$vehicleLogMenu = Menu::create([
'tenant_id' => $tenantId,
'parent_id' => $vehicleMenu->id,
'name' => '차량일지',
'url' => '/finance/vehicle-logs',
'icon' => 'file-text',
'sort_order' => $maxSortOrder + 1,
'is_active' => true,
]);
$this->command->info("차량일지 메뉴 생성: {$vehicleLogMenu->url}");
}
// 결과 출력
$this->command->info('');
$this->command->info('=== 법인차량관리 하위 메뉴 ===');
$children = Menu::where('parent_id', $vehicleMenu->id)
->orderBy('sort_order')
->get(['name', 'url', 'sort_order']);
foreach ($children as $child) {
$this->command->info("{$child->sort_order}. {$child->name} ({$child->url})");
}
}
}