build
This commit is contained in:
parent
63d943d0df
commit
f396203085
22 changed files with 1476 additions and 1357 deletions
|
|
@ -18,6 +18,7 @@ import { BadgeCheck, Eye, Pencil, Plus, Trash2 } from "lucide-vue-next";
|
|||
import { celulaTabela, EliTabela } from "@/componentes/EliTabela";
|
||||
import type { ComponenteEntrada } from "@/componentes/EliEntrada/tiposEntradas";
|
||||
import type { EliTabelaConsulta } from "@/componentes/EliTabela";
|
||||
import type { tipoFiltro } from "@/componentes/EliTabela/types-eli-tabela";
|
||||
|
||||
type Linha = {
|
||||
empreendedor: string;
|
||||
|
|
@ -324,21 +325,61 @@ export default defineComponent({
|
|||
});
|
||||
};
|
||||
|
||||
const ordenarLinhas = (
|
||||
linhas: Linha[],
|
||||
parametros?: { coluna_ordem?: keyof Linha; direcao_ordem?: "asc" | "desc"; texto_busca?: string }
|
||||
) => {
|
||||
const listaFiltrada = filtrarPorBusca(linhas, parametros?.texto_busca);
|
||||
|
||||
if (!parametros?.coluna_ordem) {
|
||||
return listaFiltrada;
|
||||
const compararOperador = (operador: string, valorLinha: any, valorFiltro: any): boolean => {
|
||||
switch (operador) {
|
||||
case "=":
|
||||
return valorLinha == valorFiltro;
|
||||
case "!=":
|
||||
return valorLinha != valorFiltro;
|
||||
case ">":
|
||||
return Number(valorLinha) > Number(valorFiltro);
|
||||
case ">=":
|
||||
return Number(valorLinha) >= Number(valorFiltro);
|
||||
case "<":
|
||||
return Number(valorLinha) < Number(valorFiltro);
|
||||
case "<=":
|
||||
return Number(valorLinha) <= Number(valorFiltro);
|
||||
case "like": {
|
||||
const a = String(valorLinha ?? "").toLowerCase();
|
||||
const b = String(valorFiltro ?? "").toLowerCase();
|
||||
return a.includes(b);
|
||||
}
|
||||
case "in": {
|
||||
const arr = Array.isArray(valorFiltro)
|
||||
? valorFiltro
|
||||
: String(valorFiltro ?? "")
|
||||
.split(",")
|
||||
.map((s) => s.trim())
|
||||
.filter(Boolean);
|
||||
return arr.includes(String(valorLinha));
|
||||
}
|
||||
case "isNull":
|
||||
return valorLinha === null || valorLinha === undefined || valorLinha === "";
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
const filtrarPorFiltrosAvancados = (linhas: Linha[], filtros?: tipoFiltro[]) => {
|
||||
const lista = [...linhas];
|
||||
if (!filtros?.length) return lista;
|
||||
|
||||
return lista.filter((linha: any) => {
|
||||
return filtros.every((f) => {
|
||||
const vLinha = linha?.[String((f as any).coluna)];
|
||||
return compararOperador(String((f as any).operador), vLinha, (f as any).valor);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const ordenarLinhas = (linhas: Linha[], parametros?: { coluna_ordem?: keyof Linha; direcao_ordem?: "asc" | "desc" }) => {
|
||||
if (!parametros?.coluna_ordem) return [...linhas];
|
||||
|
||||
const direcao = parametros.direcao_ordem ?? "asc";
|
||||
const chave = parametros.coluna_ordem;
|
||||
const multiplicador = direcao === "asc" ? 1 : -1;
|
||||
|
||||
return [...listaFiltrada].sort((a, b) => {
|
||||
return [...linhas].sort((a, b) => {
|
||||
const valorA = a[chave];
|
||||
const valorB = b[chave];
|
||||
|
||||
|
|
@ -483,10 +524,23 @@ export default defineComponent({
|
|||
},
|
||||
],
|
||||
consulta: async (parametrosConsulta) => {
|
||||
// No filtro avançado (modo simulação), a EliTabela busca a lista completa
|
||||
// e pagina/filtra localmente.
|
||||
const ordenadas = ordenarLinhas(linhasPadrao.value, parametrosConsulta);
|
||||
const valores = ordenadas;
|
||||
// Agora a EliTabela envia paginação/ordenação/busca OU filtros avançados para a consulta.
|
||||
// (busca tem prioridade; quando existe texto_busca, filtros não vêm no payload)
|
||||
|
||||
const limite = Math.max(1, Number(parametrosConsulta?.limit ?? 10));
|
||||
const offset = Math.max(0, Number(parametrosConsulta?.offSet ?? 0));
|
||||
|
||||
// 1) filtra (busca OU filtro avançado)
|
||||
const base = [...linhasPadrao.value];
|
||||
const filtradas = parametrosConsulta?.texto_busca
|
||||
? filtrarPorBusca(base, parametrosConsulta.texto_busca)
|
||||
: filtrarPorFiltrosAvancados(base, (parametrosConsulta as any)?.filtros);
|
||||
|
||||
// 2) ordena
|
||||
const ordenadas = ordenarLinhas(filtradas, parametrosConsulta);
|
||||
|
||||
// 3) pagina
|
||||
const valores = ordenadas.slice(offset, offset + limite);
|
||||
|
||||
return {
|
||||
cod: codigosResposta.sucesso,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue