- Base de datos SQLite con información de vehículos - Dashboard web con Flask y Bootstrap - Scripts de web scraping para RockAuto - Interfaz CLI para consultas - Documentación completa del proyecto Incluye: - 12 marcas de vehículos - 10,923 modelos - 10,919 especificaciones de motores - 12,075 combinaciones modelo-año-motor
368 lines
10 KiB
HTML
368 lines
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="es">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Base de Datos de Vehículos</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
|
|
<style>
|
|
:root {
|
|
--primary-color: #2c3e50;
|
|
--secondary-color: #3498db;
|
|
--accent-color: #e74c3c;
|
|
--bg-color: #ecf0f1;
|
|
}
|
|
|
|
body {
|
|
background-color: var(--bg-color);
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.dashboard-header {
|
|
background: linear-gradient(135deg, var(--primary-color), #1a252f);
|
|
color: white;
|
|
padding: 2rem 0;
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
.breadcrumb-nav {
|
|
background: white;
|
|
padding: 1rem 1.5rem;
|
|
border-radius: 10px;
|
|
margin-bottom: 1.5rem;
|
|
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
}
|
|
|
|
.breadcrumb-nav .breadcrumb {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.breadcrumb-nav .breadcrumb-item a {
|
|
color: var(--secondary-color);
|
|
text-decoration: none;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.breadcrumb-nav .breadcrumb-item a:hover {
|
|
color: var(--primary-color);
|
|
}
|
|
|
|
.breadcrumb-nav .breadcrumb-item.active {
|
|
color: var(--primary-color);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Tarjetas de marcas */
|
|
.brand-card {
|
|
background: white;
|
|
border-radius: 15px;
|
|
padding: 2rem;
|
|
text-align: center;
|
|
transition: all 0.3s ease;
|
|
cursor: pointer;
|
|
border: 2px solid transparent;
|
|
height: 100%;
|
|
}
|
|
|
|
.brand-card:hover {
|
|
transform: translateY(-10px);
|
|
box-shadow: 0 15px 30px rgba(0,0,0,0.15);
|
|
border-color: var(--secondary-color);
|
|
}
|
|
|
|
.brand-card .brand-icon {
|
|
width: 80px;
|
|
height: 80px;
|
|
background: linear-gradient(135deg, var(--secondary-color), #2980b9);
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin: 0 auto 1rem;
|
|
font-size: 2rem;
|
|
color: white;
|
|
}
|
|
|
|
.brand-card .brand-name {
|
|
font-size: 1.3rem;
|
|
font-weight: 700;
|
|
color: var(--primary-color);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.brand-card .brand-count {
|
|
color: #7f8c8d;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.brand-card .brand-country {
|
|
font-size: 0.85rem;
|
|
color: #95a5a6;
|
|
margin-top: 0.5rem;
|
|
}
|
|
|
|
/* Tarjetas de modelos */
|
|
.model-card {
|
|
background: white;
|
|
border-radius: 12px;
|
|
padding: 1.5rem;
|
|
transition: all 0.3s ease;
|
|
cursor: pointer;
|
|
border: 2px solid transparent;
|
|
height: 100%;
|
|
}
|
|
|
|
.model-card:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 10px 25px rgba(0,0,0,0.12);
|
|
border-color: var(--secondary-color);
|
|
}
|
|
|
|
.model-card .model-name {
|
|
font-size: 1.2rem;
|
|
font-weight: 600;
|
|
color: var(--primary-color);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.model-card .model-info {
|
|
color: #7f8c8d;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
/* Tarjetas de vehículos */
|
|
.vehicle-card {
|
|
background: white;
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
transition: all 0.3s ease;
|
|
height: 100%;
|
|
}
|
|
|
|
.vehicle-card:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 10px 25px rgba(0,0,0,0.12);
|
|
}
|
|
|
|
.vehicle-header {
|
|
background: linear-gradient(135deg, var(--primary-color), #1a252f);
|
|
color: white;
|
|
padding: 1.2rem;
|
|
}
|
|
|
|
.vehicle-header .vehicle-title {
|
|
font-size: 1.1rem;
|
|
font-weight: 600;
|
|
margin-bottom: 0.3rem;
|
|
}
|
|
|
|
.vehicle-header .vehicle-engine {
|
|
font-size: 0.9rem;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.vehicle-body {
|
|
padding: 1rem;
|
|
}
|
|
|
|
.vehicle-specs {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
gap: 0.8rem;
|
|
}
|
|
|
|
.spec-item {
|
|
background: var(--bg-color);
|
|
padding: 0.6rem;
|
|
border-radius: 8px;
|
|
text-align: center;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.spec-item i {
|
|
color: var(--secondary-color);
|
|
margin-bottom: 0.3rem;
|
|
display: block;
|
|
}
|
|
|
|
.spec-item .spec-value {
|
|
font-weight: 600;
|
|
color: var(--primary-color);
|
|
}
|
|
|
|
/* Filtros en vista de vehículos */
|
|
.filters-bar {
|
|
background: white;
|
|
padding: 1rem 1.5rem;
|
|
border-radius: 10px;
|
|
margin-bottom: 1.5rem;
|
|
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
}
|
|
|
|
.filters-bar .form-select {
|
|
border-radius: 8px;
|
|
}
|
|
|
|
/* Grid de contenido */
|
|
.content-grid {
|
|
display: grid;
|
|
gap: 1.5rem;
|
|
}
|
|
|
|
.content-grid.brands-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
|
}
|
|
|
|
.content-grid.models-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
|
}
|
|
|
|
.content-grid.vehicles-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
|
}
|
|
|
|
/* Estados */
|
|
.loading-state, .empty-state {
|
|
text-align: center;
|
|
padding: 4rem 2rem;
|
|
color: #7f8c8d;
|
|
}
|
|
|
|
.loading-state i, .empty-state i {
|
|
font-size: 4rem;
|
|
margin-bottom: 1rem;
|
|
color: #bdc3c7;
|
|
}
|
|
|
|
/* Botón volver */
|
|
.btn-back {
|
|
background: var(--secondary-color);
|
|
color: white;
|
|
border: none;
|
|
padding: 0.5rem 1.5rem;
|
|
border-radius: 8px;
|
|
font-weight: 500;
|
|
transition: all 0.3s;
|
|
}
|
|
|
|
.btn-back:hover {
|
|
background: #2980b9;
|
|
color: white;
|
|
}
|
|
|
|
/* Estadísticas */
|
|
.stats-bar {
|
|
display: flex;
|
|
gap: 2rem;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.stat-item {
|
|
text-align: center;
|
|
}
|
|
|
|
.stat-item .stat-number {
|
|
font-size: 2rem;
|
|
font-weight: 700;
|
|
color: white;
|
|
}
|
|
|
|
.stat-item .stat-label {
|
|
font-size: 0.9rem;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.content-grid.brands-grid {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
|
|
.stats-bar {
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
.content-grid.brands-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="dashboard-header">
|
|
<div class="container">
|
|
<div class="row align-items-center">
|
|
<div class="col-md-6">
|
|
<h1><i class="fas fa-car-side"></i> Base de Datos de Vehículos</h1>
|
|
<p class="lead mb-0">Explora vehículos por marca, modelo y especificaciones</p>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="stats-bar justify-content-md-end">
|
|
<div class="stat-item">
|
|
<div class="stat-number" id="totalBrands">0</div>
|
|
<div class="stat-label">Marcas</div>
|
|
</div>
|
|
<div class="stat-item">
|
|
<div class="stat-number" id="totalModels">0</div>
|
|
<div class="stat-label">Modelos</div>
|
|
</div>
|
|
<div class="stat-item">
|
|
<div class="stat-number" id="totalVehicles">0</div>
|
|
<div class="stat-label">Vehículos</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<!-- Breadcrumb navegación -->
|
|
<div class="breadcrumb-nav" id="breadcrumbNav">
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb" id="breadcrumb">
|
|
<li class="breadcrumb-item active">
|
|
<i class="fas fa-home"></i> Marcas
|
|
</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
|
|
<!-- Barra de filtros (solo visible en vista de vehículos) -->
|
|
<div class="filters-bar" id="filtersBar" style="display: none;">
|
|
<div class="row g-3 align-items-center">
|
|
<div class="col-auto">
|
|
<label class="col-form-label fw-bold">Filtrar por:</label>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<select id="yearFilter" class="form-select">
|
|
<option value="">Todos los años</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<select id="engineFilter" class="form-select">
|
|
<option value="">Todos los motores</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-auto">
|
|
<span id="resultCount" class="badge bg-secondary fs-6">0 resultados</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Contenedor principal -->
|
|
<div id="mainContent">
|
|
<div class="loading-state">
|
|
<i class="fas fa-spinner fa-spin"></i>
|
|
<h4>Cargando...</h4>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
<script src="dashboard.js"></script>
|
|
</body>
|
|
</html>
|