.implementado itens desativados nos selects
This commit is contained in:
parent
900a5f3c5c
commit
84383c3bbf
18 changed files with 1645 additions and 1567 deletions
|
|
@ -6,6 +6,7 @@
|
|||
:items="itens"
|
||||
item-title="rotulo"
|
||||
item-value="chave"
|
||||
:item-props="itemProps"
|
||||
:loading="carregando"
|
||||
:disabled="carregando"
|
||||
:menu-props="{ maxHeight: 320, zIndex: 99999 }"
|
||||
|
|
@ -101,7 +102,14 @@ export default defineComponent({
|
|||
{ deep: true },
|
||||
)
|
||||
|
||||
return { attrs, emit, localValue, itens, carregando }
|
||||
// Deriva item-props para desativar itens cujas chaves estejam em opcoes.desativado
|
||||
const itemProps = computed(() => {
|
||||
const desativados = props.opcoes?.desativado
|
||||
if (!desativados || desativados.length === 0) return undefined
|
||||
return (item: ItemSelecao) => ({ disabled: desativados.includes(item.chave) })
|
||||
})
|
||||
|
||||
return { attrs, emit, localValue, itens, carregando, itemProps }
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
:items="itens"
|
||||
item-title="rotulo"
|
||||
item-value="chave"
|
||||
:item-props="itemProps"
|
||||
:loading="carregando"
|
||||
:disabled="carregando"
|
||||
:menu-props="{ maxHeight: 320, zIndex: 99999 }"
|
||||
|
|
@ -90,7 +91,14 @@ export default defineComponent({
|
|||
void carregarItens()
|
||||
})
|
||||
|
||||
return { attrs, emit, localValue, itens, carregando }
|
||||
// Deriva item-props para desativar itens cujas chaves estejam em opcoes.desativado
|
||||
const itemProps = computed(() => {
|
||||
const desativados = props.opcoes?.desativado
|
||||
if (!desativados || desativados.length === 0) return undefined
|
||||
return (item: ItemSelecao) => ({ disabled: desativados.includes(item.chave) })
|
||||
})
|
||||
|
||||
return { attrs, emit, localValue, itens, carregando, itemProps }
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
import type { zCoordenadas } from "p-comuns"
|
||||
import type z from "zod"
|
||||
import type { OpcoesSelecaoBase } from "./tiposSelecao"
|
||||
|
||||
/**
|
||||
* Contrato padrão de uma entrada.
|
||||
|
|
@ -124,73 +125,11 @@ export type PadroesEntradas = {
|
|||
}
|
||||
>
|
||||
|
||||
selecao: tipoPadraoEntrada<
|
||||
string | null | undefined,
|
||||
{
|
||||
/**
|
||||
* Carrega os itens da seleção (sincrono ou async).
|
||||
* - Cada item precisa ter uma chave estável (value) e um rótulo (title).
|
||||
*/
|
||||
itens: () =>
|
||||
| { chave: string; rotulo: string }[]
|
||||
| Promise<{ chave: string; rotulo: string }[]>
|
||||
/** Seleção simples — ver {@link OpcoesSelecaoBase} para opções disponíveis. */
|
||||
selecao: tipoPadraoEntrada<string | null | undefined, OpcoesSelecaoBase>
|
||||
|
||||
/** Se true, mostra ícone para limpar o valor (Vuetify clearable). */
|
||||
limpavel?: boolean
|
||||
|
||||
/** Estado de erro (visual). */
|
||||
erro?: boolean
|
||||
|
||||
/** Mensagens de erro. */
|
||||
mensagensErro?: string | string[]
|
||||
|
||||
/** Texto de apoio. */
|
||||
dica?: string
|
||||
|
||||
/** Mantém a dica sempre visível. */
|
||||
dicaPersistente?: boolean
|
||||
|
||||
/** Densidade do campo (Vuetify). */
|
||||
densidade?: import("../../tipos").CampoDensidade
|
||||
|
||||
/** Variante do v-text-field (Vuetify). */
|
||||
variante?: import("../../tipos").CampoVariante
|
||||
}
|
||||
>
|
||||
|
||||
selecaoMultipla: tipoPadraoEntrada<
|
||||
string[] | null | undefined,
|
||||
{
|
||||
/**
|
||||
* Carrega os itens da seleção (sincrono ou async).
|
||||
* - Cada item precisa ter uma chave estável (value) e um rótulo (title).
|
||||
*/
|
||||
itens: () =>
|
||||
| { chave: string; rotulo: string }[]
|
||||
| Promise<{ chave: string; rotulo: string }[]>
|
||||
|
||||
/** Se true, mostra ícone para limpar o valor (Vuetify clearable). */
|
||||
limpavel?: boolean
|
||||
|
||||
/** Estado de erro (visual). */
|
||||
erro?: boolean
|
||||
|
||||
/** Mensagens de erro. */
|
||||
mensagensErro?: string | string[]
|
||||
|
||||
/** Texto de apoio. */
|
||||
dica?: string
|
||||
|
||||
/** Mantém a dica sempre visível. */
|
||||
dicaPersistente?: boolean
|
||||
|
||||
/** Densidade do campo (Vuetify). */
|
||||
densidade?: import("../../tipos").CampoDensidade
|
||||
|
||||
/** Variante do v-text-field (Vuetify). */
|
||||
variante?: import("../../tipos").CampoVariante
|
||||
}
|
||||
>
|
||||
/** Seleção múltipla — ver {@link OpcoesSelecaoBase} para opções disponíveis. */
|
||||
selecaoMultipla: tipoPadraoEntrada<string[] | null | undefined, OpcoesSelecaoBase>
|
||||
|
||||
confirmacao: tipoPadraoEntrada<
|
||||
boolean,
|
||||
|
|
|
|||
48
src/componentes/EliEntrada/tiposSelecao.ts
Normal file
48
src/componentes/EliEntrada/tiposSelecao.ts
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
* Tipos específicos dos componentes de seleção (simples e múltipla).
|
||||
* Extraído de tiposEntradas.ts para respeitar o limite de 250 linhas.
|
||||
*/
|
||||
|
||||
import type { CampoDensidade, CampoVariante } from "../../tipos"
|
||||
|
||||
/** Item padrão dos componentes de seleção. */
|
||||
export type ItemSelecaoOpcoes = { chave: string; rotulo: string }
|
||||
|
||||
/** Carregador de itens (síncrono ou async). */
|
||||
export type CarregadorItens = () => ItemSelecaoOpcoes[] | Promise<ItemSelecaoOpcoes[]>
|
||||
|
||||
/** Opções compartilhadas entre seleção simples e múltipla. */
|
||||
export type OpcoesSelecaoBase = {
|
||||
/**
|
||||
* Carrega os itens da seleção (sincrono ou async).
|
||||
* - Cada item precisa ter uma chave estável (value) e um rótulo (title).
|
||||
*/
|
||||
itens: CarregadorItens
|
||||
|
||||
/**
|
||||
* Lista de chaves (valores de `chave`) que devem aparecer desativadas.
|
||||
* Os itens aparecerão visíveis no menu, mas não poderão ser selecionados.
|
||||
*/
|
||||
desativado?: string[]
|
||||
|
||||
/** Se true, mostra ícone para limpar o valor (Vuetify clearable). */
|
||||
limpavel?: boolean
|
||||
|
||||
/** Estado de erro (visual). */
|
||||
erro?: boolean
|
||||
|
||||
/** Mensagens de erro. */
|
||||
mensagensErro?: string | string[]
|
||||
|
||||
/** Texto de apoio. */
|
||||
dica?: string
|
||||
|
||||
/** Mantém a dica sempre visível. */
|
||||
dicaPersistente?: boolean
|
||||
|
||||
/** Densidade do campo (Vuetify). */
|
||||
densidade?: CampoDensidade
|
||||
|
||||
/** Variante do v-text-field (Vuetify). */
|
||||
variante?: CampoVariante
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue