47 lines
1.5 KiB
Vue
47 lines
1.5 KiB
Vue
<template>
|
|
<!-- Estado de carregamento: consulta em andamento -->
|
|
<div v-if="carregando" class="eli-tabela eli-tabela--carregando" aria-busy="true">
|
|
<LoaderCircle class="eli-tabela__estado-icone eli-tabela__estado-icone--spin" :size="22" :stroke-width="2" />
|
|
<span>Carregando…</span>
|
|
</div>
|
|
|
|
<!-- Estado de erro: mostra mensagem retornada pela consulta -->
|
|
<div v-else-if="erro" class="eli-tabela eli-tabela--erro" role="alert">
|
|
<AlertCircle class="eli-tabela__estado-icone eli-tabela__estado-icone--erro" :size="18" :stroke-width="2" />
|
|
<div>
|
|
<div class="eli-tabela__erro-titulo">Erro</div>
|
|
<div class="eli-tabela__erro-mensagem">{{ erro }}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Estado vazio: consulta sem registros -->
|
|
<div v-else class="eli-tabela eli-tabela--vazio">
|
|
<Inbox class="eli-tabela__estado-icone" :size="22" :stroke-width="1.5" />
|
|
<span>{{ mensagemVazio ?? "Nenhum registro encontrado." }}</span>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { AlertCircle, Inbox, LoaderCircle } from "@lucide/vue"
|
|
import { defineComponent, type PropType } from "vue"
|
|
|
|
export default defineComponent({
|
|
name: "EliTabelaEstados",
|
|
components: { AlertCircle, Inbox, LoaderCircle },
|
|
props: {
|
|
carregando: {
|
|
type: Boolean,
|
|
required: true,
|
|
},
|
|
erro: {
|
|
type: [String, Object] as PropType<string | null>,
|
|
default: null,
|
|
},
|
|
mensagemVazio: {
|
|
type: String as PropType<string | undefined>,
|
|
required: false,
|
|
default: undefined,
|
|
},
|
|
},
|
|
})
|
|
</script>
|