|
@@ -5,6 +5,7 @@ import LayoutSistema from "../../layout/LayoutSistema.vue";
|
|
|
import BaseBadge from "../../components/base/BaseBadge.vue";
|
|
import BaseBadge from "../../components/base/BaseBadge.vue";
|
|
|
import BaseButton from "../../components/base/BaseButton.vue";
|
|
import BaseButton from "../../components/base/BaseButton.vue";
|
|
|
import BaseDropdown from "../../components/base/BaseDropdown.vue";
|
|
import BaseDropdown from "../../components/base/BaseDropdown.vue";
|
|
|
|
|
+import StatCard from "../../components/base/StatCard.vue";
|
|
|
import {
|
|
import {
|
|
|
avaliarAtendimentosPendentes,
|
|
avaliarAtendimentosPendentes,
|
|
|
estatisticasAvaliacoes,
|
|
estatisticasAvaliacoes,
|
|
@@ -295,44 +296,45 @@ onBeforeUnmount(() => {
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
<section v-if="stats" class="grid grid-cols-2 gap-3 md:grid-cols-5">
|
|
<section v-if="stats" class="grid grid-cols-2 gap-3 md:grid-cols-5">
|
|
|
- <div class="rounded-2xl border border-gray-200 bg-background/70 p-4 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">Score médio</div>
|
|
|
|
|
- <div class="mt-1 text-2xl font-semibold text-gray-900 dark:text-gray-100">
|
|
|
|
|
- {{ stats.scoreMedio ?? "—" }}<span class="text-sm font-normal text-gray-400"> / 10</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="rounded-2xl border border-gray-200 bg-background/70 p-4 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">Avaliados</div>
|
|
|
|
|
- <div class="mt-1 text-2xl font-semibold text-gray-900 dark:text-gray-100">{{ stats.avaliados }}</div>
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">{{ stats.pendentes }} pendentes</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="rounded-2xl border border-gray-200 bg-background/70 p-4 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">Problemas resolvidos</div>
|
|
|
|
|
- <div class="mt-1 text-2xl font-semibold text-gray-900 dark:text-gray-100">
|
|
|
|
|
- {{ pct(stats.resolvido?.sim ?? 0, stats.avaliados) }}
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">
|
|
|
|
|
- {{ stats.resolvido?.sim ?? 0 }} sim · {{ stats.resolvido?.parcial ?? 0 }} parcial · {{ stats.resolvido?.nao ?? 0 }} não
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="rounded-2xl border border-gray-200 bg-background/70 p-4 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">Clientes satisfeitos</div>
|
|
|
|
|
- <div class="mt-1 text-2xl font-semibold text-gray-900 dark:text-gray-100">
|
|
|
|
|
- {{ pct(stats.sentimento?.positivo ?? 0, stats.avaliados) }}
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">
|
|
|
|
|
- {{ stats.sentimento?.negativo ?? 0 }} saíram insatisfeitos
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="rounded-2xl border border-gray-200 bg-background/70 p-4 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">Cancelamentos</div>
|
|
|
|
|
- <div class="mt-1 text-2xl font-semibold text-gray-900 dark:text-gray-100">
|
|
|
|
|
- {{ pct(stats.cancelamento?.cancelou ?? 0, stats.avaliados) }}
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="text-xs text-gray-500 dark:text-gray-400">
|
|
|
|
|
- {{ stats.cancelamento?.cancelou ?? 0 }} cancelaram · {{ stats.cancelamento?.ameacou ?? 0 }} ameaçaram cancelar
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <StatCard label="Score médio" :value="stats.scoreMedio ?? '—'" suffix=" / 10" variant="info">
|
|
|
|
|
+ <template #icon>
|
|
|
|
|
+ <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
|
|
|
+ <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.5c.16-.4.88-.4 1.04 0l1.98 4.88 5.25.4c.43.03.6.57.28.85l-4 3.46 1.22 5.13c.1.42-.36.75-.73.52L12 15.98l-4.52 2.76c-.37.23-.83-.1-.73-.52l1.22-5.13-4-3.46c-.33-.28-.15-.82.28-.85l5.25-.4 1.98-4.88Z" />
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </StatCard>
|
|
|
|
|
+ <StatCard label="Avaliados" :value="stats.avaliados" variant="default">
|
|
|
|
|
+ <template #icon>
|
|
|
|
|
+ <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
|
|
|
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ stats.pendentes }} pendentes
|
|
|
|
|
+ </StatCard>
|
|
|
|
|
+ <StatCard label="Problemas resolvidos" :value="pct(stats.resolvido?.sim ?? 0, stats.avaliados)" variant="success">
|
|
|
|
|
+ <template #icon>
|
|
|
|
|
+ <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
|
|
|
+ <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5" />
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ stats.resolvido?.sim ?? 0 }} sim · {{ stats.resolvido?.parcial ?? 0 }} parcial · {{ stats.resolvido?.nao ?? 0 }} não
|
|
|
|
|
+ </StatCard>
|
|
|
|
|
+ <StatCard label="Clientes satisfeitos" :value="pct(stats.sentimento?.positivo ?? 0, stats.avaliados)" variant="violet">
|
|
|
|
|
+ <template #icon>
|
|
|
|
|
+ <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
|
|
|
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 15s1.125 1.5 3 1.5S15 15 15 15M9.75 9.75h.008v.008H9.75V9.75Zm4.5 0h.008v.008h-.008V9.75ZM21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ stats.sentimento?.negativo ?? 0 }} saíram insatisfeitos
|
|
|
|
|
+ </StatCard>
|
|
|
|
|
+ <StatCard label="Cancelamentos" :value="pct(stats.cancelamento?.cancelou ?? 0, stats.avaliados)" variant="danger">
|
|
|
|
|
+ <template #icon>
|
|
|
|
|
+ <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
|
|
|
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v4m0 4h.01M10.29 3.86 1.82 18a1.5 1.5 0 0 0 1.3 2.25h17.76a1.5 1.5 0 0 0 1.3-2.25L13.71 3.86a1.5 1.5 0 0 0-2.42 0Z" />
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ stats.cancelamento?.cancelou ?? 0 }} cancelaram · {{ stats.cancelamento?.ameacou ?? 0 }} ameaçaram cancelar
|
|
|
|
|
+ </StatCard>
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
<section class="rounded-2xl border border-gray-200 bg-background/70 shadow-sm dark:border-gray-700 dark:bg-background/20">
|
|
<section class="rounded-2xl border border-gray-200 bg-background/70 shadow-sm dark:border-gray-700 dark:bg-background/20">
|