LOGICA-COMBUSTIBLE/ │ ├── README.md ├── .gitignore ├── .env.example ├── docs/ │ ├── requirements.md │ ├── api-endpoints.md │ ├── deployment.md │ ├── database-diagram.md │ └── project-notes.md │ ├── dashboard/ │ │ │ └── theme/ # Prototipo HTML estático (diseño premium) │ ├── css/theme.css │ ├── js/theme.js │ ├── js/dashboard-charts.js │ ├── js/users.js │ ├── login.html │ ├── index.html # Home + sidebar + Chart.js │ ├── orders.html │ ├── reports.html │ ├── users.html # CRUD usuarios / login │ └── settings.html │ # WAMP: http://localhost/logidash/dashboard/theme/index.html │ ├── frontend/ │ │ │ ├── mobile/ │ │ │ │ │ ├── package.json │ │ ├── vite.config.ts │ │ ├── capacitor.config.ts │ │ ├── tsconfig.json │ │ ├── index.html │ │ │ │ │ ├── public/ │ │ │ ├── favicon.ico │ │ │ ├── manifest.json │ │ │ ├── logo.png │ │ │ └── icons/ │ │ │ ├── icon-192.png │ │ │ └── icon-512.png │ │ │ │ │ ├── android/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.ts │ │ ├── App.vue │ │ │ │ │ ├── router/ │ │ │ └── index.ts │ │ │ │ │ ├── layouts/ │ │ │ └── MobileLayout.vue │ │ │ │ │ ├── theme/ │ │ │ ├── variables.css │ │ │ └── app.css │ │ │ │ │ ├── views/ │ │ │ ├── SplashPage.vue │ │ │ ├── LoginPage.vue │ │ │ ├── HomePage.vue │ │ │ ├── FuelOrderFormPage.vue │ │ │ ├── OrderDetailPage.vue │ │ │ ├── MyOrdersPage.vue │ │ │ ├── ProfilePage.vue │ │ │ └── SettingsPage.vue │ │ │ │ │ ├── components/ │ │ │ ├── AppHeader.vue │ │ │ ├── AppInput.vue │ │ │ ├── AppSelect.vue │ │ │ ├── AppButton.vue │ │ │ ├── AppCard.vue │ │ │ ├── LoadingOverlay.vue │ │ │ ├── PhotoUploader.vue │ │ │ ├── FuelTypeSelect.vue │ │ │ └── OrderCard.vue │ │ │ │ │ ├── stores/ │ │ │ ├── auth.store.ts │ │ │ ├── fuel-orders.store.ts │ │ │ ├── app.store.ts │ │ │ └── settings.store.ts │ │ │ │ │ ├── services/ │ │ │ ├── api.service.ts │ │ │ ├── auth.service.ts │ │ │ ├── fuel-order.service.ts │ │ │ ├── upload.service.ts │ │ │ └── storage.service.ts │ │ │ │ │ ├── composables/ │ │ │ ├── useAuth.ts │ │ │ ├── useCamera.ts │ │ │ ├── useToast.ts │ │ │ └── useLoading.ts │ │ │ │ │ ├── types/ │ │ │ ├── auth.ts │ │ │ ├── fuel-order.ts │ │ │ └── api.ts │ │ │ │ │ └── utils/ │ │ ├── constants.ts │ │ ├── validators.ts │ │ ├── formatters.ts │ │ └── helpers.ts │ │ │ │ │ └── dashboard/ # App Vue/Vite (futuro; estilos desde dashboard/theme) │ │ │ ├── package.json │ ├── vite.config.ts │ ├── tsconfig.json │ ├── index.html │ │ │ ├── public/ │ │ ├── favicon.ico │ │ └── logo.png │ │ │ └── src/ │ │ │ ├── main.ts │ ├── App.vue │ │ │ ├── router/ │ │ └── index.ts │ │ │ ├── layouts/ │ │ ├── AuthLayout.vue │ │ └── AdminLayout.vue │ │ │ ├── assets/ │ │ ├── css/ │ │ │ └── main.css │ │ └── images/ │ │ │ ├── views/ │ │ ├── LoginView.vue │ │ ├── DashboardView.vue │ │ ├── OrdersView.vue │ │ ├── OrderDetailView.vue │ │ ├── UsersView.vue │ │ ├── VehiclesView.vue │ │ ├── RoutesView.vue │ │ ├── ZonesView.vue │ │ ├── GasStationsView.vue │ │ ├── ReportsView.vue │ │ └── SettingsView.vue │ │ │ ├── components/ │ │ │ │ │ ├── layout/ │ │ │ ├── Sidebar.vue │ │ │ ├── Topbar.vue │ │ │ └── PageHeader.vue │ │ │ │ │ ├── dashboard/ │ │ │ ├── StatCard.vue │ │ │ ├── FuelChart.vue │ │ │ ├── RouteChart.vue │ │ │ ├── DriverChart.vue │ │ │ └── RecentOrdersTable.vue │ │ │ │ │ ├── orders/ │ │ │ ├── OrdersTable.vue │ │ │ ├── OrderFilters.vue │ │ │ └── OrderPhotoModal.vue │ │ │ │ │ ├── users/ │ │ │ ├── UserTable.vue │ │ │ └── UserModal.vue │ │ │ │ │ └── shared/ │ │ ├── AppButton.vue │ │ ├── AppInput.vue │ │ ├── AppModal.vue │ │ ├── AppSelect.vue │ │ └── LoadingOverlay.vue │ │ │ ├── stores/ │ │ ├── auth.store.ts │ │ ├── dashboard.store.ts │ │ ├── orders.store.ts │ │ ├── users.store.ts │ │ └── settings.store.ts │ │ │ ├── services/ │ │ ├── api.service.ts │ │ ├── auth.service.ts │ │ ├── dashboard.service.ts │ │ ├── orders.service.ts │ │ ├── users.service.ts │ │ └── reports.service.ts │ │ │ ├── composables/ │ │ ├── useAuth.ts │ │ ├── useFilters.ts │ │ ├── useTable.ts │ │ └── useToast.ts │ │ │ ├── types/ │ │ ├── dashboard.ts │ │ ├── fuel-order.ts │ │ ├── user.ts │ │ └── api.ts │ │ │ └── utils/ │ ├── constants.ts │ ├── validators.ts │ └── helpers.ts │ ├── backend/ │ │ │ ├── uploads/ # ÚNICA carpeta de imágenes (km, facturas, futuras) │ │ ├── .gitkeep │ │ └── .htaccess # solo servir imágenes; sin listado │ │ │ └── laravel-api/ │ │ │ ├── app/ │ │ │ │ │ ├── Http/ │ │ │ │ │ │ │ ├── Controllers/ │ │ │ │ ├── AuthController.php │ │ │ │ ├── DashboardController.php │ │ │ │ ├── FuelOrderController.php │ │ │ │ ├── UserController.php │ │ │ │ ├── VehicleController.php │ │ │ │ ├── RouteController.php │ │ │ │ ├── ZoneController.php │ │ │ │ ├── GasStationController.php │ │ │ │ └── ReportController.php │ │ │ │ │ │ │ ├── Requests/ │ │ │ │ ├── LoginRequest.php │ │ │ │ ├── StoreFuelOrderRequest.php │ │ │ │ ├── UpdateFuelOrderRequest.php │ │ │ │ └── StoreUserRequest.php │ │ │ │ │ │ │ └── Resources/ │ │ │ ├── UserResource.php │ │ │ ├── FuelOrderResource.php │ │ │ └── DashboardResource.php │ │ │ │ │ ├── Models/ │ │ │ ├── User.php │ │ │ ├── FuelOrder.php │ │ │ ├── FuelOrderPhoto.php │ │ │ ├── Vehicle.php │ │ │ ├── Route.php │ │ │ ├── Zone.php │ │ │ └── GasStation.php │ │ │ │ │ └── Services/ │ │ ├── AuthService.php │ │ ├── DashboardService.php │ │ ├── UploadService.php │ │ ├── FuelOrderService.php │ │ └── ReportService.php │ │ │ ├── database/ │ │ ├── migrations/ │ │ │ ├── create_users_table.php │ │ │ ├── create_fuel_orders_table.php │ │ │ ├── create_fuel_order_photos_table.php │ │ │ ├── create_routes_table.php │ │ │ ├── create_vehicles_table.php │ │ │ ├── create_gas_stations_table.php │ │ │ └── create_zones_table.php │ │ │ │ │ ├── seeders/ │ │ │ ├── UserSeeder.php │ │ │ ├── RouteSeeder.php │ │ │ ├── VehicleSeeder.php │ │ │ ├── ZoneSeeder.php │ │ │ └── GasStationSeeder.php │ │ │ │ │ └── factories/ │ │ │ ├── routes/ │ │ ├── api.php │ │ └── web.php │ │ │ ├── config/ │ ├── public/ # DocumentRoot API; /uploads apunta a ../uploads │ │ └── uploads/ # enlace o alias → backend/uploads/ │ ├── bootstrap/ │ ├── composer.json │ ├── artisan │ └── .env │ └── database/ ├── schema # DDL + tipos_combustible ├── dummydata.sql # datos de desarrollo └── notes.md # --- Convención de imágenes subidas --- # Disco (una sola carpeta): backend/uploads/km_0001.jpg # Ruta en BD: /uploads/km_0001.jpg # URL WAMP (ejemplo): http://localhost/logidash/backend/uploads/km_0001.jpg # UploadService guarda en: backend/uploads/ # Laravel .env: UPLOAD_PATH=../uploads (relativo a laravel-api/public)