ReasonsPreview

src/components/reasons/ReasonsPreview.vue
Display Medium 5 usos

Preview em tempo real dos campos de um formulário de motivo de encerramento. Renderiza dinamicamente os campos configurados em uma visualização "Exemplo de Visualização". Suporta 8 tipos de campo (text, int, currency, decimal, select, radio, checkbox, boolean). O container tem borda pontilhada intencional — indica visualmente que é um preview. Atualização automática a cada 1500ms via setInterval.

Em Sidebar Sticky (com observação)

Padrão em formulários de criação/edição de motivos. Posicionado numa coluna lateral sticky — o preview acompanha o scroll. :reason_options.sync sincroniza mudanças de volta ao pai.

Formulário (scroll)
position: sticky; top: 0
Exemplo de Visualização
Real src/views/reasons/New.vue:87

Em Sidebar Sticky (sem .sync)

Uso em knowledge — sem .sync modifier em reason_options. Quando o pai não precisa receber mudanças do preview de volta.

Exemplo de Visualização
Opção A
Opção B
Real src/views/knowledge/New.vue:93

Dentro de Popup

Preview dentro de vs-popup. max-height + overflow-y:auto evita que o preview transborde. Botão "Visualizar" na lista abre o popup.

Visualização Métrica Inteligente
Exemplo de Visualização
Satisfeito
Insatisfeito
Não
Real src/views/reasons/List.vue:102

API

Exemplo de uso
<!-- reason_options: array de opções com id, reason_option_kind.tag e reason_option_items_attributes. -->
<!-- use_observation: boolean — exibe vs-textarea 'Observações' acima dos campos. -->
<!-- .sync em reason_options: permite comunicação bidirecional pai ↔ filho. -->
<reasons-preview
  :use_observation="useObservation"
  :reason_options.sync="reasonOptionsAttributes"
></reasons-preview>

Tipos de campo suportados

TagComponenteDescrição
textTextFieldInput de texto livre
intIntFieldInput numérico inteiro (default: '0')
currencyCurrencyFieldInput monetário (default: '0')
decimalDecimalFieldInput decimal (default: '0')
selectSelectFieldDropdown de seleção
radioRadioFieldOpções radio (default: 'false')
checkboxCheckboxFieldCaixas de seleção (default: 'false')
booleanBooleanFieldToggle true/false (default: 'false')

Props

NomeTipoDefaultObrig.Descrição
reason_options Array Sim Array de opções de motivo. Cada opção tem: id, reason_option_kind.tag (tipo do campo), reason_option_items_attributes (itens para select/radio/checkbox). Suporta .sync para comunicação bidirecional.
use_observation Boolean false Não Quando true, exibe vs-textarea "Observações" acima dos campos dinâmicos.

Dependências

  • vs-textarea (Vuesax) — campo de observações
  • views/reason-response-fields/ — Text, Int, Currency, Decimal, Select, Radio, Checkbox, Boolean

Onde é usado

  • src/views/reasons/New.vue
  • src/views/reasons/Edit.vue
  • src/views/knowledge/New.vue
  • src/views/knowledge/Edit.vue
Detalhe técnico: O componente usa setInterval(resetOptions, 1500) em mounted() para garantir sincronização mesmo sem watch trigger. Limpo em beforeDestroy(). A atualização de respostas usa splice imutável para Vue 2 reatividade: responses[fieldIndex][itemIndex] = {...}.