ajustes na tabela de consulta
This commit is contained in:
parent
aea3da6585
commit
1446d6225b
78 changed files with 17921 additions and 17580 deletions
|
|
@ -3,6 +3,26 @@ import type { tipoCondicaoFiltroDelta, zFiltroDelta } from "p-comuns"
|
|||
import type z from "zod"
|
||||
import { _dados_empreendedores, type tipoEmpreendedores } from "./dados"
|
||||
|
||||
/**
|
||||
* UDF registrada no Alasql para suportar o operador ∩ (interseção).
|
||||
* Verifica se dois arrays possuem ao menos um elemento em comum.
|
||||
*/
|
||||
alasql.fn.arr_intersecta = (coluna: unknown, filtro: unknown): boolean => {
|
||||
if (!Array.isArray(coluna) || !Array.isArray(filtro)) return false
|
||||
return coluna.some((item) => filtro.includes(item))
|
||||
}
|
||||
|
||||
/**
|
||||
* UDF universal para o operador "in".
|
||||
* - Coluna escalar: verifica se o valor está na lista de filtro (IN clássico).
|
||||
* - Coluna array: verifica se há interseção entre o array da coluna e a lista de filtro.
|
||||
*/
|
||||
alasql.fn.arr_in = (coluna: unknown, filtro: unknown): boolean => {
|
||||
const lista = Array.isArray(filtro) ? filtro : [filtro]
|
||||
if (Array.isArray(coluna)) return coluna.some((item) => lista.includes(item))
|
||||
return lista.includes(coluna)
|
||||
}
|
||||
|
||||
const zCondicaoFiltroDeltaParaQuery = ({
|
||||
condicao,
|
||||
}: {
|
||||
|
|
@ -39,14 +59,21 @@ const zCondicaoFiltroDeltaParaQuery = ({
|
|||
? condicao.valor
|
||||
: `%${condicao.valor}%`
|
||||
} else if (condicao.operador === "in") {
|
||||
// Alasql usa @(?) para arrays. Porém, o passo 2 substitui {id} por ?.
|
||||
// O que resultará em @(?).
|
||||
retorno.sql = `${coluna} IN @(${condicao.id})`
|
||||
// UDF universal: funciona tanto para colunas escalares (IN clássico)
|
||||
// quanto para colunas array (interseção).
|
||||
retorno.sql = `arr_in(${coluna}, ${condicao.id}) = TRUE`
|
||||
retorno.parametro[condicao.id] = Array.isArray(condicao.valor)
|
||||
? condicao.valor
|
||||
: String(condicao.valor)
|
||||
.split(",")
|
||||
.map((s) => s.trim())
|
||||
} else if (condicao.operador === "∩") {
|
||||
// Interseção: verifica se o array da coluna contém ao menos um dos valores informados.
|
||||
// Como o Alasql não suporta nativamente comparação de arrays, usamos uma UDF.
|
||||
retorno.sql = `arr_intersecta(${coluna}, ${condicao.id}) = TRUE`
|
||||
retorno.parametro[condicao.id] = Array.isArray(condicao.valor)
|
||||
? condicao.valor
|
||||
: [condicao.valor]
|
||||
} else {
|
||||
throw new Error(`Operador inválido: ${condicao.operador as string}`)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
import z from "zod"
|
||||
|
||||
let _id = 0
|
||||
/** Gera um ID incremental único para uso no seed de dados do playground. Não usar em produção. */
|
||||
export const gerarId = () => `item-${_id++}`
|
||||
export const zAreaAtuacao = z.enum([
|
||||
"mineracao",
|
||||
"agro",
|
||||
"turismo",
|
||||
"tecnologia",
|
||||
"educacao",
|
||||
"saude",
|
||||
])
|
||||
|
||||
/** Schema Zod do registro de empreendedor — usado para validação e inferência de tipo no playground. */
|
||||
export const zEmpreendedores = z.object({
|
||||
|
|
@ -14,237 +19,21 @@ export const zEmpreendedores = z.object({
|
|||
telefone: z.string(),
|
||||
faturamento: z.number(),
|
||||
peso_kg: z.number(),
|
||||
areas_atuacao: z.array(
|
||||
z.enum(["mineracao", "agro", "turismo", "tecnologia", "educacao", "saude"]),
|
||||
),
|
||||
ativo: z.boolean(),
|
||||
areas_atuacao: z.array(zAreaAtuacao),
|
||||
criado_em: z.string(),
|
||||
atualizado_em: z.string(),
|
||||
})
|
||||
|
||||
export const AreaAtuacaoDetalhes: Record<z.infer<typeof zAreaAtuacao>, string> = {
|
||||
mineracao: "Mineração",
|
||||
agro: "Agropecuária",
|
||||
turismo: "Turismo",
|
||||
tecnologia: "Tecnologia",
|
||||
educacao: "Educação",
|
||||
saude: "Saúde",
|
||||
}
|
||||
|
||||
export type tipoEmpreendedores = z.infer<typeof zEmpreendedores>
|
||||
|
||||
// == SIMULAÇÃO DE API (CRUD) ==
|
||||
// Dados isolados (simulando um banco de dados no servidor)
|
||||
export const _dados_empreendedores: tipoEmpreendedores[] = [
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Maria Silva",
|
||||
empreendimento: "Doces da Maria",
|
||||
documento: "12.345.678/0001-90",
|
||||
email: "contato.comercial.super.longo@doces-da-maria-exemplo-muito-grande.com.br",
|
||||
telefone: "(11) 91234-5678",
|
||||
faturamento: 12500.5,
|
||||
peso_kg: 12.4,
|
||||
areas_atuacao: ["agro", "turismo"],
|
||||
criado_em: "2026-01-09T16:15:00Z",
|
||||
atualizado_em: "2026-01-29T15:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "João Pereira",
|
||||
empreendimento: "Café Peregrino",
|
||||
documento: "98.765.432/0001-12",
|
||||
email: "contato@cafeperegrino.com",
|
||||
telefone: "(11) 93456-7810",
|
||||
faturamento: 8000,
|
||||
peso_kg: 6.2,
|
||||
areas_atuacao: ["tecnologia", "agro"],
|
||||
criado_em: "2026-01-02T10:00:00-03:00",
|
||||
atualizado_em: "2026-01-20T08:10:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Ana Costa",
|
||||
empreendimento: "Flor de Sal Gastronomia",
|
||||
documento: "45.678.912/0001-55",
|
||||
email: "ana@flordesal.com",
|
||||
telefone: "(21) 99876-5432",
|
||||
faturamento: 3200.75,
|
||||
peso_kg: 4.8,
|
||||
areas_atuacao: ["educacao"],
|
||||
criado_em: "2025-12-10T09:30:00-03:00",
|
||||
atualizado_em: "2026-01-15T19:20:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Rafael Lima",
|
||||
empreendimento: "Tech Agro Solutions",
|
||||
documento: "07.654.321/0001-00",
|
||||
email: "rafael@techagro.com",
|
||||
telefone: "(31) 94567-8899",
|
||||
faturamento: 15999.9,
|
||||
peso_kg: 9.1,
|
||||
areas_atuacao: ["tecnologia"],
|
||||
criado_em: "2026-01-12T12:00:00-03:00",
|
||||
atualizado_em: "2026-01-28T11:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Juliana Torres",
|
||||
empreendimento: "Torres Moda Sustentável",
|
||||
documento: "33.210.987/0001-44",
|
||||
email: "juliana@torresmoda.com",
|
||||
telefone: "(71) 97766-5544",
|
||||
faturamento: 4500,
|
||||
peso_kg: 3.3,
|
||||
areas_atuacao: ["turismo", "agro"],
|
||||
criado_em: "2026-01-01T00:00:00Z",
|
||||
atualizado_em: "2026-01-10T13:45:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Marcos Vieira",
|
||||
empreendimento: "Padaria Pão Quentinho",
|
||||
documento: "21.109.876/0001-32",
|
||||
email: "marcos@paoquentinho.com",
|
||||
telefone: "(48) 99654-3210",
|
||||
faturamento: 2200.4,
|
||||
peso_kg: 15.7,
|
||||
areas_atuacao: ["saude"],
|
||||
criado_em: "2026-01-05T07:25:00-03:00",
|
||||
atualizado_em: "2026-01-23T20:15:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Bianca Rocha",
|
||||
empreendimento: "Studio Beleza em Casa",
|
||||
documento: "54.321.098/0001-21",
|
||||
email: "contato@belezaemcasa.com",
|
||||
telefone: "(85) 98877-1122",
|
||||
faturamento: 990,
|
||||
peso_kg: 1.9,
|
||||
areas_atuacao: ["agro", "tecnologia"],
|
||||
criado_em: "2026-01-03T14:00:00-03:00",
|
||||
atualizado_em: "2026-01-29T09:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Caio Albuquerque",
|
||||
empreendimento: "Albuquerque Engenharia Verde",
|
||||
documento: "65.432.109/0001-09",
|
||||
email: "caio@engenhariaverde.com",
|
||||
telefone: "(61) 98123-4567",
|
||||
faturamento: 100000,
|
||||
peso_kg: 21.3,
|
||||
areas_atuacao: ["mineracao"],
|
||||
criado_em: "2025-11-18T16:10:00-03:00",
|
||||
atualizado_em: "2026-01-25T10:40:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Fernanda Almeida",
|
||||
empreendimento: "Faz Bem Produtos Naturais",
|
||||
documento: "87.654.210/0001-98",
|
||||
email: "fernanda@fazbem.com",
|
||||
telefone: "(41) 99777-6655",
|
||||
faturamento: 5600.2,
|
||||
peso_kg: 8.6,
|
||||
areas_atuacao: ["mineracao", "turismo"],
|
||||
criado_em: "2026-01-08T12:12:00-03:00",
|
||||
atualizado_em: "2026-01-21T17:55:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Gabriel Martins",
|
||||
empreendimento: "Martins Tech Repair",
|
||||
documento: "19.876.543/0001-76",
|
||||
email: "suporte@martinstech.com",
|
||||
telefone: "(19) 98888-9090",
|
||||
faturamento: 7550,
|
||||
peso_kg: 7.7,
|
||||
areas_atuacao: ["mineracao", "turismo"],
|
||||
criado_em: "2026-01-11T11:00:00-03:00",
|
||||
atualizado_em: "2026-01-18T11:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Helena Duarte",
|
||||
empreendimento: "Ateliê Costura Criativa",
|
||||
documento: "23.456.789/0001-65",
|
||||
email: "helena@costuracriativa.com",
|
||||
telefone: "(51) 98765-4433",
|
||||
faturamento: 2700,
|
||||
peso_kg: 2.5,
|
||||
areas_atuacao: ["turismo", "mineracao"],
|
||||
criado_em: "2026-01-07T08:00:00-03:00",
|
||||
atualizado_em: "2026-01-16T14:10:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Igor Santos",
|
||||
empreendimento: "Santos Consultoria Financeira",
|
||||
documento: "43.219.876/0001-54",
|
||||
email: "igor@santosconsultoria.com",
|
||||
telefone: "(31) 99332-1100",
|
||||
faturamento: 12000,
|
||||
peso_kg: 5.4,
|
||||
areas_atuacao: ["saude"],
|
||||
criado_em: "2026-01-06T10:30:00-03:00",
|
||||
atualizado_em: "2026-01-22T18:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Jéssica Nunes",
|
||||
empreendimento: "Nunes Eventos & Decoração",
|
||||
documento: "09.876.543/0001-33",
|
||||
email: "jessica@nunesdecora.com",
|
||||
telefone: "(62) 99922-3344",
|
||||
faturamento: 3300.1,
|
||||
peso_kg: 4.1,
|
||||
areas_atuacao: ["turismo"],
|
||||
criado_em: "2026-01-04T13:30:00-03:00",
|
||||
atualizado_em: "2026-01-26T09:20:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Leonardo Prado",
|
||||
empreendimento: "Prado Bike Courier",
|
||||
documento: "72.345.098/0001-27",
|
||||
email: "contato@pradobike.com",
|
||||
telefone: "(47) 98444-6677",
|
||||
faturamento: 4100,
|
||||
peso_kg: 6.8,
|
||||
areas_atuacao: ["mineracao"],
|
||||
criado_em: "2026-01-02T18:40:00-03:00",
|
||||
atualizado_em: "2026-01-27T12:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Marina Lopes",
|
||||
empreendimento: "Lopes Design Digital",
|
||||
documento: "56.789.012/0001-11",
|
||||
email: "marina@lopesdesign.com",
|
||||
telefone: "(27) 99911-2233",
|
||||
faturamento: 2100,
|
||||
peso_kg: 3.7,
|
||||
areas_atuacao: ["agro"],
|
||||
criado_em: "2026-01-09T09:00:00-03:00",
|
||||
atualizado_em: "2026-01-19T15:35:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Nicolas Teixeira",
|
||||
empreendimento: "QualiVida Fitness",
|
||||
documento: "34.567.890/0001-02",
|
||||
email: "nicolas@qualivida.com",
|
||||
telefone: "(92) 99456-7788",
|
||||
faturamento: 8600.9,
|
||||
peso_kg: 11.2,
|
||||
areas_atuacao: ["agro", "saude"],
|
||||
criado_em: "2026-01-12T19:15:00-03:00",
|
||||
atualizado_em: "2026-01-29T10:50:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Olívia Azevedo",
|
||||
empreendimento: "Azevedo Pet Care",
|
||||
documento: "88.901.234/0001-45",
|
||||
email: "olivia@petcare.com",
|
||||
telefone: "(16) 99788-6655",
|
||||
faturamento: 1900.3,
|
||||
peso_kg: 2.2,
|
||||
areas_atuacao: ["agro"],
|
||||
criado_em: "2026-01-10T15:00:00-03:00",
|
||||
atualizado_em: "2026-01-14T16:00:00-03:00",
|
||||
},
|
||||
]
|
||||
export { _dados_empreendedores } from "./dadosSeed"
|
||||
|
|
|
|||
249
src/playground/api_simulador/dadosSeed.ts
Normal file
249
src/playground/api_simulador/dadosSeed.ts
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
/** dadosSeed — dados de seed (mock) para o playground da EliTabela. */
|
||||
import type { tipoEmpreendedores } from "./dados"
|
||||
|
||||
let _id = 0
|
||||
/** Gera um ID incremental único para uso no seed de dados do playground. Não usar em produção. */
|
||||
export const gerarId = () => `item-${_id++}`
|
||||
|
||||
// == SIMULAÇÃO DE API (CRUD) ==
|
||||
// Dados isolados (simulando um banco de dados no servidor)
|
||||
export const _dados_empreendedores: tipoEmpreendedores[] = [
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Maria Silva",
|
||||
empreendimento: "Doces da Maria",
|
||||
documento: "12.345.678/0001-90",
|
||||
email: "contato.comercial.super.longo@doces-da-maria-exemplo-muito-grande.com.br",
|
||||
telefone: "(11) 91234-5678",
|
||||
faturamento: 12500.5,
|
||||
peso_kg: 12.4,
|
||||
ativo: true,
|
||||
areas_atuacao: ["agro", "turismo"],
|
||||
criado_em: "2026-01-09T16:15:00Z",
|
||||
atualizado_em: "2026-01-29T15:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "João Pereira",
|
||||
empreendimento: "Café Peregrino",
|
||||
documento: "98.765.432/0001-12",
|
||||
email: "contato@cafeperegrino.com",
|
||||
telefone: "(11) 93456-7810",
|
||||
faturamento: 8000,
|
||||
peso_kg: 6.2,
|
||||
ativo: true,
|
||||
areas_atuacao: ["tecnologia", "agro"],
|
||||
criado_em: "2026-01-02T10:00:00-03:00",
|
||||
atualizado_em: "2026-01-20T08:10:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Ana Costa",
|
||||
empreendimento: "Flor de Sal Gastronomia",
|
||||
documento: "45.678.912/0001-55",
|
||||
email: "ana@flordesal.com",
|
||||
telefone: "(21) 99876-5432",
|
||||
faturamento: 3200.75,
|
||||
peso_kg: 4.8,
|
||||
ativo: false,
|
||||
areas_atuacao: ["educacao"],
|
||||
criado_em: "2025-12-10T09:30:00-03:00",
|
||||
atualizado_em: "2026-01-15T19:20:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Rafael Lima",
|
||||
empreendimento: "Tech Agro Solutions",
|
||||
documento: "07.654.321/0001-00",
|
||||
email: "rafael@techagro.com",
|
||||
telefone: "(31) 94567-8899",
|
||||
faturamento: 15999.9,
|
||||
peso_kg: 9.1,
|
||||
ativo: true,
|
||||
areas_atuacao: ["tecnologia"],
|
||||
criado_em: "2026-01-12T12:00:00-03:00",
|
||||
atualizado_em: "2026-01-28T11:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Juliana Torres",
|
||||
empreendimento: "Torres Moda Sustentável",
|
||||
documento: "33.210.987/0001-44",
|
||||
email: "juliana@torresmoda.com",
|
||||
telefone: "(71) 97766-5544",
|
||||
faturamento: 4500,
|
||||
peso_kg: 3.3,
|
||||
ativo: true,
|
||||
areas_atuacao: ["turismo", "agro"],
|
||||
criado_em: "2026-01-01T00:00:00Z",
|
||||
atualizado_em: "2026-01-10T13:45:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Marcos Vieira",
|
||||
empreendimento: "Padaria Pão Quentinho",
|
||||
documento: "21.109.876/0001-32",
|
||||
email: "marcos@paoquentinho.com",
|
||||
telefone: "(48) 99654-3210",
|
||||
faturamento: 2200.4,
|
||||
peso_kg: 15.7,
|
||||
ativo: false,
|
||||
areas_atuacao: ["saude"],
|
||||
criado_em: "2026-01-05T07:25:00-03:00",
|
||||
atualizado_em: "2026-01-23T20:15:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Bianca Rocha",
|
||||
empreendimento: "Studio Beleza em Casa",
|
||||
documento: "54.321.098/0001-21",
|
||||
email: "contato@belezaemcasa.com",
|
||||
telefone: "(85) 98877-1122",
|
||||
faturamento: 990,
|
||||
peso_kg: 1.9,
|
||||
ativo: true,
|
||||
areas_atuacao: ["agro", "tecnologia"],
|
||||
criado_em: "2026-01-03T14:00:00-03:00",
|
||||
atualizado_em: "2026-01-29T09:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Caio Albuquerque",
|
||||
empreendimento: "Albuquerque Engenharia Verde",
|
||||
documento: "65.432.109/0001-09",
|
||||
email: "caio@engenhariaverde.com",
|
||||
telefone: "(61) 98123-4567",
|
||||
faturamento: 100000,
|
||||
peso_kg: 21.3,
|
||||
ativo: true,
|
||||
areas_atuacao: ["mineracao"],
|
||||
criado_em: "2025-11-18T16:10:00-03:00",
|
||||
atualizado_em: "2026-01-25T10:40:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Fernanda Almeida",
|
||||
empreendimento: "Faz Bem Produtos Naturais",
|
||||
documento: "87.654.210/0001-98",
|
||||
email: "fernanda@fazbem.com",
|
||||
telefone: "(41) 99777-6655",
|
||||
faturamento: 5600.2,
|
||||
peso_kg: 8.6,
|
||||
ativo: false,
|
||||
areas_atuacao: ["mineracao", "turismo"],
|
||||
criado_em: "2026-01-08T12:12:00-03:00",
|
||||
atualizado_em: "2026-01-21T17:55:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Gabriel Martins",
|
||||
empreendimento: "Martins Tech Repair",
|
||||
documento: "19.876.543/0001-76",
|
||||
email: "suporte@martinstech.com",
|
||||
telefone: "(19) 98888-9090",
|
||||
faturamento: 7550,
|
||||
peso_kg: 7.7,
|
||||
ativo: true,
|
||||
areas_atuacao: ["mineracao", "turismo"],
|
||||
criado_em: "2026-01-11T11:00:00-03:00",
|
||||
atualizado_em: "2026-01-18T11:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Helena Duarte",
|
||||
empreendimento: "Ateliê Costura Criativa",
|
||||
documento: "23.456.789/0001-65",
|
||||
email: "helena@costuracriativa.com",
|
||||
telefone: "(51) 98765-4433",
|
||||
faturamento: 2700,
|
||||
peso_kg: 2.5,
|
||||
ativo: true,
|
||||
areas_atuacao: ["turismo", "mineracao"],
|
||||
criado_em: "2026-01-07T08:00:00-03:00",
|
||||
atualizado_em: "2026-01-16T14:10:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Igor Santos",
|
||||
empreendimento: "Santos Consultoria Financeira",
|
||||
documento: "43.219.876/0001-54",
|
||||
email: "igor@santosconsultoria.com",
|
||||
telefone: "(31) 99332-1100",
|
||||
faturamento: 12000,
|
||||
peso_kg: 5.4,
|
||||
ativo: false,
|
||||
areas_atuacao: ["saude"],
|
||||
criado_em: "2026-01-06T10:30:00-03:00",
|
||||
atualizado_em: "2026-01-22T18:30:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Jéssica Nunes",
|
||||
empreendimento: "Nunes Eventos & Decoração",
|
||||
documento: "09.876.543/0001-33",
|
||||
email: "jessica@nunesdecora.com",
|
||||
telefone: "(62) 99922-3344",
|
||||
faturamento: 3300.1,
|
||||
peso_kg: 4.1,
|
||||
ativo: true,
|
||||
areas_atuacao: ["turismo"],
|
||||
criado_em: "2026-01-04T13:30:00-03:00",
|
||||
atualizado_em: "2026-01-26T09:20:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Leonardo Prado",
|
||||
empreendimento: "Prado Bike Courier",
|
||||
documento: "72.345.098/0001-27",
|
||||
email: "contato@pradobike.com",
|
||||
telefone: "(47) 98444-6677",
|
||||
faturamento: 4100,
|
||||
peso_kg: 6.8,
|
||||
ativo: true,
|
||||
areas_atuacao: ["mineracao"],
|
||||
criado_em: "2026-01-02T18:40:00-03:00",
|
||||
atualizado_em: "2026-01-27T12:00:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Marina Lopes",
|
||||
empreendimento: "Lopes Design Digital",
|
||||
documento: "56.789.012/0001-11",
|
||||
email: "marina@lopesdesign.com",
|
||||
telefone: "(27) 99911-2233",
|
||||
faturamento: 2100,
|
||||
peso_kg: 3.7,
|
||||
ativo: false,
|
||||
areas_atuacao: ["agro"],
|
||||
criado_em: "2026-01-09T09:00:00-03:00",
|
||||
atualizado_em: "2026-01-19T15:35:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Nicolas Teixeira",
|
||||
empreendimento: "QualiVida Fitness",
|
||||
documento: "34.567.890/0001-02",
|
||||
email: "nicolas@qualivida.com",
|
||||
telefone: "(92) 99456-7788",
|
||||
faturamento: 8600.9,
|
||||
peso_kg: 11.2,
|
||||
ativo: true,
|
||||
areas_atuacao: ["agro", "saude"],
|
||||
criado_em: "2026-01-12T19:15:00-03:00",
|
||||
atualizado_em: "2026-01-29T10:50:00-03:00",
|
||||
},
|
||||
{
|
||||
codigo: gerarId(),
|
||||
empreendedor: "Olívia Azevedo",
|
||||
empreendimento: "Azevedo Pet Care",
|
||||
documento: "88.901.234/0001-45",
|
||||
email: "olivia@petcare.com",
|
||||
telefone: "(16) 99788-6655",
|
||||
faturamento: 1900.3,
|
||||
peso_kg: 2.2,
|
||||
ativo: true,
|
||||
areas_atuacao: ["agro"],
|
||||
criado_em: "2026-01-10T15:00:00-03:00",
|
||||
atualizado_em: "2026-01-14T16:00:00-03:00",
|
||||
},
|
||||
]
|
||||
|
|
@ -39,6 +39,7 @@ const api_criar: tipoFuncaoApiSimulacao<"criar"> = async (dados) => {
|
|||
telefone: dados.telefone || "(00) 0000-0000",
|
||||
faturamento: dados.faturamento || 0,
|
||||
peso_kg: dados.peso_kg || 0,
|
||||
ativo: dados.ativo ?? true,
|
||||
areas_atuacao: dados.areas_atuacao || [],
|
||||
criado_em: new Date().toISOString(),
|
||||
atualizado_em: new Date().toISOString(),
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ export function useTabelaPlayground() {
|
|||
telefone: "",
|
||||
faturamento: 0,
|
||||
peso_kg: 0,
|
||||
ativo: true,
|
||||
areas_atuacao: [],
|
||||
})
|
||||
const erroCadastro = ref<string | undefined>(undefined)
|
||||
|
|
@ -54,6 +55,7 @@ export function useTabelaPlayground() {
|
|||
telefone: "",
|
||||
faturamento: 0,
|
||||
peso_kg: 0,
|
||||
ativo: true,
|
||||
areas_atuacao: [],
|
||||
}
|
||||
erroCadastro.value = undefined
|
||||
|
|
|
|||
|
|
@ -6,15 +6,22 @@
|
|||
* @see useTabelaPlayground.ts — composable que consome estas configurações
|
||||
*/
|
||||
import { BadgeCheck, Eye, Pencil, Trash2 } from "@lucide/vue"
|
||||
import { iniciarFiltroDelta } from "p-comuns"
|
||||
|
||||
import type { ComponenteEntrada } from "@/componentes/EliEntrada/tiposEntradas"
|
||||
import type { tipoEliTabelaConsulta } from "@/componentes/EliTabela"
|
||||
import { celulaTabela } from "@/componentes/EliTabela"
|
||||
|
||||
import type { tipoEmpreendedores } from "./api_simulador/dados"
|
||||
import { AreaAtuacaoDetalhes, type tipoEmpreendedores } from "./api_simulador/dados"
|
||||
|
||||
const { criarFiltroDelta } = iniciarFiltroDelta<Extract<keyof tipoEmpreendedores, string>>()
|
||||
/** Mapeamento de cor por área de atuação para uso nos chips da tabela */
|
||||
const corAreaAtuacao: Record<tipoEmpreendedores["areas_atuacao"][number], string> = {
|
||||
mineracao: "#78909C",
|
||||
agro: "#4CAF50",
|
||||
turismo: "#FF9800",
|
||||
tecnologia: "#2196F3",
|
||||
educacao: "#9C27B0",
|
||||
saude: "#E91E63",
|
||||
}
|
||||
|
||||
/** Ações por linha usadas nas 3 instâncias de tabela do playground */
|
||||
export function criarAcoesLinha(
|
||||
|
|
@ -79,6 +86,17 @@ export const colunasTabela: tipoEliTabelaConsulta<tipoEmpreendedores>["colunas"]
|
|||
coluna_ordem: "telefone",
|
||||
visivel: true,
|
||||
},
|
||||
{
|
||||
rotulo: "Áreas de Atuação",
|
||||
celula: (l) =>
|
||||
celulaTabela("tags", {
|
||||
opcoes: l.areas_atuacao.map((area) => ({
|
||||
rotulo: AreaAtuacaoDetalhes[area],
|
||||
cor: corAreaAtuacao[area],
|
||||
})),
|
||||
}),
|
||||
visivel: true,
|
||||
},
|
||||
{
|
||||
rotulo: "Faturamento",
|
||||
celula: (l) =>
|
||||
|
|
@ -134,12 +152,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
|
|||
rotulo: "Empreendedor",
|
||||
filtro: (valor: unknown) => {
|
||||
if (!valor) return undefined
|
||||
return criarFiltroDelta({
|
||||
condicoes: [
|
||||
{ id: "{c1}", coluna: "empreendedor", operador: "like", valor: valor as string },
|
||||
],
|
||||
formula: "{c1}",
|
||||
})
|
||||
return { coluna: "empreendedor", operador: "like" as const, valor: valor as string }
|
||||
},
|
||||
entrada: ["texto", { rotulo: "Empreendedor" }] as ComponenteEntrada,
|
||||
},
|
||||
|
|
@ -148,12 +161,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
|
|||
rotulo: "Empreendimento",
|
||||
filtro: (valor: unknown) => {
|
||||
if (!valor) return undefined
|
||||
return criarFiltroDelta({
|
||||
condicoes: [
|
||||
{ id: "{c1}", coluna: "empreendimento", operador: "like", valor: valor as string },
|
||||
],
|
||||
formula: "{c1}",
|
||||
})
|
||||
return { coluna: "empreendimento", operador: "like" as const, valor: valor as string }
|
||||
},
|
||||
entrada: ["texto", { rotulo: "Empreendimento" }] as ComponenteEntrada,
|
||||
},
|
||||
|
|
@ -162,10 +170,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
|
|||
rotulo: "Documento",
|
||||
filtro: (valor: unknown) => {
|
||||
if (!valor) return undefined
|
||||
return criarFiltroDelta({
|
||||
condicoes: [{ id: "{c1}", coluna: "documento", operador: "like", valor: valor as string }],
|
||||
formula: "{c1}",
|
||||
})
|
||||
return { coluna: "documento", operador: "like" as const, valor: valor as string }
|
||||
},
|
||||
entrada: ["texto", { rotulo: "Documento", formato: "cpfCnpj" }] as ComponenteEntrada,
|
||||
},
|
||||
|
|
@ -174,13 +179,65 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
|
|||
rotulo: "E-mail",
|
||||
filtro: (valor: unknown) => {
|
||||
if (!valor) return undefined
|
||||
return criarFiltroDelta({
|
||||
condicoes: [{ id: "{c1}", coluna: "email", operador: "like", valor: valor as string }],
|
||||
formula: "{c1}",
|
||||
})
|
||||
return { coluna: "email", operador: "like" as const, valor: valor as string }
|
||||
},
|
||||
entrada: ["texto", { rotulo: "E-mail", formato: "email" }] as ComponenteEntrada,
|
||||
},
|
||||
{
|
||||
chave: "ativo",
|
||||
rotulo: "Ativo",
|
||||
filtro: (valor: unknown) => {
|
||||
return { coluna: "ativo", operador: "=" as const, valor: valor as boolean }
|
||||
},
|
||||
entrada: [
|
||||
"confirmacao",
|
||||
{ rotulo: "Ativo", rotuloAtivo: "Apenas ativos", rotuloInativo: "Apenas inativos" },
|
||||
] as ComponenteEntrada,
|
||||
},
|
||||
{
|
||||
chave: "faturamento_min",
|
||||
rotulo: "Faturamento mínimo",
|
||||
filtro: (valor: unknown) => {
|
||||
if (valor === null || valor === undefined) return undefined
|
||||
return { coluna: "faturamento", operador: ">=" as const, valor: valor as number }
|
||||
},
|
||||
entrada: ["numero", { rotulo: "Faturamento mínimo (R$)" }] as ComponenteEntrada,
|
||||
},
|
||||
{
|
||||
chave: "areas_atuacao",
|
||||
rotulo: "Área de Atuação",
|
||||
filtro: (valor: unknown) => {
|
||||
const arr = valor as string[]
|
||||
if (!arr.length) return undefined
|
||||
return { coluna: "areas_atuacao", operador: "∩" as const, valor: arr }
|
||||
},
|
||||
entrada: [
|
||||
"selecaoMultipla",
|
||||
{
|
||||
rotulo: "Área de Atuação",
|
||||
limpavel: true,
|
||||
itens: () =>
|
||||
Object.entries(AreaAtuacaoDetalhes).map(([chave, rotulo]) => ({ chave, rotulo })),
|
||||
},
|
||||
] as ComponenteEntrada,
|
||||
},
|
||||
{
|
||||
chave: "areas_atuacao2",
|
||||
rotulo: "Área de Atuação (2)",
|
||||
filtro: (valor: unknown) => {
|
||||
if (!valor) return undefined
|
||||
return { coluna: "areas_atuacao", operador: "in" as const, valor }
|
||||
},
|
||||
entrada: [
|
||||
"selecao",
|
||||
{
|
||||
rotulo: "Área de Atuação",
|
||||
limpavel: true,
|
||||
itens: () =>
|
||||
Object.entries(AreaAtuacaoDetalhes).map(([chave, rotulo]) => ({ chave, rotulo })),
|
||||
},
|
||||
] as ComponenteEntrada,
|
||||
},
|
||||
]
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue