66 lines
2.3 KiB
Vue
66 lines
2.3 KiB
Vue
<script setup lang="ts">
|
|
const { getOpenReports, getAssignedReports, takeReport } = useOperator()
|
|
|
|
const { data: openReportsRes, refresh: refreshOpen } = useAsyncData('open-reports', () => getOpenReports({ per_page: 5 }))
|
|
const { data: assignedReportsRes, refresh: refreshAssigned } = useAsyncData('assigned-reports', () => getAssignedReports({ per_page: 5 }))
|
|
|
|
const processingIds = ref<number[]>([])
|
|
|
|
const handleTakeReport = async (id: number) => {
|
|
processingIds.value.push(id)
|
|
try {
|
|
const res = await takeReport(id)
|
|
if (res.ok) {
|
|
await Promise.all([refreshOpen(), refreshAssigned()])
|
|
}
|
|
} finally {
|
|
processingIds.value = processingIds.value.filter(pid => pid !== id)
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-12 col-lg-6 mb-4">
|
|
<div class="card card-bg h-100">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
<h3 class="h5 mb-0">Da prendere in carico</h3>
|
|
<NuxtLink to="/operator" class="btn btn-link btn-sm pe-0">Apri coda</NuxtLink>
|
|
</div>
|
|
<div v-if="openReportsRes?.ok && openReportsRes.reports.length === 0" class="alert alert-info mb-0">
|
|
Nessuna nuova segnalazione in ingresso.
|
|
</div>
|
|
<ReportTable
|
|
v-else
|
|
:reports="openReportsRes?.reports || []"
|
|
action-variant="manage"
|
|
detail-base-path="/operator/reports"
|
|
@take="handleTakeReport"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 col-lg-6 mb-4">
|
|
<div class="card card-bg h-100">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
<h3 class="h5 mb-0">Le mie assegnazioni</h3>
|
|
<NuxtLink to="/operator/assigned" class="btn btn-link btn-sm pe-0">Vedi tutte</NuxtLink>
|
|
</div>
|
|
<div v-if="assignedReportsRes?.ok && assignedReportsRes.reports.length === 0" class="alert alert-info mb-0">
|
|
Non hai segnalazioni in carico.
|
|
</div>
|
|
<ReportTable
|
|
v-else
|
|
:reports="assignedReportsRes?.reports || []"
|
|
detail-base-path="/operator/reports"
|
|
action-label="Apri segnalazione"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|