feat: beauty ui of last closed reports in home page
This commit is contained in:
+64
-21
@@ -12,6 +12,17 @@ const stats = {
|
|||||||
const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
||||||
getOpenDataReports({ page: 1, per_page: 3 })
|
getOpenDataReports({ page: 1, per_page: 3 })
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const getStatusBadge = (status: string) => {
|
||||||
|
switch (status) {
|
||||||
|
case 'RESOLVED':
|
||||||
|
return { class: 'bg-success', text: 'Risolto', icon: 'it-check-circle' }
|
||||||
|
case 'CLOSED':
|
||||||
|
return { class: 'bg-secondary', text: 'Chiuso', icon: 'it-lock' }
|
||||||
|
default:
|
||||||
|
return { class: 'bg-info', text: status, icon: 'it-info-circle' }
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -45,7 +56,7 @@ const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
|||||||
<div class="row text-center">
|
<div class="row text-center">
|
||||||
<div class="col-12 col-md-4 mb-4">
|
<div class="col-12 col-md-4 mb-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<BIIcon name="it-camera" size="xl" color="primary" />
|
<BIIcon color="primary" name="it-camera" size="xl"/>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="h5 font-weight-semibold">1. Segnala</h3>
|
<h3 class="h5 font-weight-semibold">1. Segnala</h3>
|
||||||
<p class="text-muted">Usa lo smartphone per fotografare il problema stradale e inviare la posizione
|
<p class="text-muted">Usa lo smartphone per fotografare il problema stradale e inviare la posizione
|
||||||
@@ -53,14 +64,14 @@ const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-4 mb-4">
|
<div class="col-12 col-md-4 mb-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<BIIcon name="it-tool" size="xl" color="primary" />
|
<BIIcon color="primary" name="it-tool" size="xl"/>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="h5 font-weight-semibold">2. Intervento</h3>
|
<h3 class="h5 font-weight-semibold">2. Intervento</h3>
|
||||||
<p class="text-muted">Le squadre comunali prendono in carico la tua segnalazione e avviano i lavori.</p>
|
<p class="text-muted">Le squadre comunali prendono in carico la tua segnalazione e avviano i lavori.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-4 mb-4">
|
<div class="col-12 col-md-4 mb-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<BIIcon name="it-star-outline" size="xl" color="primary" />
|
<BIIcon color="primary" name="it-star-outline" size="xl"/>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="h5 font-weight-semibold">3. Punti e Feedback</h3>
|
<h3 class="h5 font-weight-semibold">3. Punti e Feedback</h3>
|
||||||
<p class="text-muted">Problema risolto! Ottieni Punti Cittadino e lascia un feedback sull'intervento.</p>
|
<p class="text-muted">Problema risolto! Ottieni Punti Cittadino e lascia un feedback sull'intervento.</p>
|
||||||
@@ -96,31 +107,47 @@ const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
|||||||
<h2 class="font-weight-bold">Ultimi interventi risolti</h2>
|
<h2 class="font-weight-bold">Ultimi interventi risolti</h2>
|
||||||
<NuxtLink to="/open-data" class="read-more">
|
<NuxtLink to="/open-data" class="read-more">
|
||||||
<span class="text">Vedi tutti</span>
|
<span class="text">Vedi tutti</span>
|
||||||
<BIIcon name="it-arrow-right" />
|
<BIIcon name="it-arrow-right"/>
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" v-if="openDataResponse?.reports && openDataResponse.reports.length > 0">
|
<div class="row" v-if="openDataResponse?.reports && openDataResponse.reports.length > 0">
|
||||||
<div class="col-12 col-md-4 mb-4" v-for="report in openDataResponse.reports" :key="report.id">
|
<div class="col-12 col-md-4 mb-4" v-for="report in openDataResponse.reports" :key="report.id">
|
||||||
<div class="card-wrapper card-space">
|
<div class="card-wrapper card-space h-100">
|
||||||
<div class="card card-bg card-big">
|
<div class="card card-bg h-100 shadow-sm">
|
||||||
<div class="card-body">
|
<div class="card-body d-flex flex-column">
|
||||||
<div class="category-top">
|
|
||||||
<BIIcon name="it-check-circle" size="sm" color="success" />
|
|
||||||
<span class="category text-success font-weight-semibold">Risolto</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="card-title h5 mt-2">{{ report.category_name }}</h3>
|
|
||||||
|
|
||||||
<p class="card-text text-muted">
|
<div class="d-flex justify-content-between align-items-start mb-3">
|
||||||
<span class="me-1"><BIIcon name="it-map-marker-circle" size="xs" /></span>
|
<div class="category-top m-0">
|
||||||
{{ report.area_name || 'Area comunale' }}
|
<span :class="getStatusBadge(report.status).class"
|
||||||
</p>
|
class="badge rounded-pill text-white px-3 py-1">
|
||||||
|
<BIIcon :name="getStatusBadge(report.status).icon" class="me-1" color="white" size="xs"/>
|
||||||
<div class="it-card-footer mt-4">
|
{{ getStatusBadge(report.status).text }}
|
||||||
<span class="card-signature">
|
|
||||||
Aggiornato il {{ new Date(report.updated_at).toLocaleDateString('it-IT') }}
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="text-muted small">ID: #{{ report.id }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="card-title h5 font-weight-bold">{{ report.category_name }}</h3>
|
||||||
|
|
||||||
|
<p class="card-text text-muted mb-4">
|
||||||
|
<BIIcon class="me-1" name="it-map-marker-circle" size="sm"/>
|
||||||
|
{{ report.area_name || 'Area comunale non specificata' }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="mt-auto pt-3 border-top">
|
||||||
|
<div class="row text-muted small">
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="fw-bold text-uppercase">Segnalato</div>
|
||||||
|
<div>{{ new Date(report.created_at).toLocaleDateString('it-IT') }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 text-end">
|
||||||
|
<div class="fw-bold text-uppercase">Risolto</div>
|
||||||
|
<div>{{ new Date(report.updated_at).toLocaleDateString('it-IT') }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -135,7 +162,7 @@ const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
|||||||
<div class="container my-5 pb-5">
|
<div class="container my-5 pb-5">
|
||||||
<div class="callout callout-highlight callout-primary">
|
<div class="callout callout-highlight callout-primary">
|
||||||
<div class="callout-title">
|
<div class="callout-title">
|
||||||
<BIIcon name="it-info-circle" />
|
<BIIcon name="it-info-circle"/>
|
||||||
Partecipa alla cura della tua città
|
Partecipa alla cura della tua città
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
@@ -150,3 +177,19 @@ const { data: openDataResponse } = await useAsyncData('recent-fixes', () =>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.card-wrapper {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-bg {
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||||
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-bg:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1) !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user