BotSchedule

src/components/chat-flow/BotSchedule.vue
Form Medium 1 uso

Editor de agenda semanal para bots de atendimento. Lista os 7 dias da semana com checkbox para ativar cada dia. Quando ativado, exibe time pickers (flatPickr, formato 24h) para Abertura, Início/Final da Pausa (opcional) e Fechamento. Emite @updatedWeekDays e @updatedMessages com debounce de 100ms.

Simples (sem pausa)

useSchedulingPause=false, useMessageShield=false. Dias ativos exibem apenas Abertura e Fechamento. Dias inativos mostram apenas o checkbox.

Abertura
Fechamento
Abertura
Fechamento
Real src/views/chat-flows/ChatFlowsList.vue:115

Com Pausa

useSchedulingPause=true. Dias ativos exibem Abertura, Início da Pausa, Final da Pausa e Fechamento. Botão + adiciona pausa; ícone × remove. Final da Pausa fica desabilitado até Início da Pausa ser definido.

Abertura
Início Pausa
Pausa
Final da Pausa
Fechamento
Abertura
Fechamento
Sintético synthetic

Por Departamento (com mensagem fora do horário)

useMessageShield=true. Exibe textarea para mensagem fora do horário de atendimento. userDepartmentId é passado como 2º argumento nos eventos — permite distinguir qual departamento foi atualizado. Padrão usado quando useSchedulingInDepartament=true.

Abertura
Fechamento
Mensagem fora do horário de atendimento
Real src/views/chat-flows/ChatFlowsList.vue:100

Completo (pausa + mensagem)

useSchedulingPause=true + useMessageShield=true. Todos os campos visíveis: 4 time pickers por dia ativo, mensagem fora do horário e mensagem de pausa.

Abertura
Início Pausa
Pausa
Final da Pausa
Fechamento
Mensagem fora do horário de atendimento
Mensagem durante a pausa
Sintético synthetic

API

Exemplo completo

<!-- weekDays: array de 7 objetos {value, label, start_at, finish_at, selected, start_pause, finish_pause} -->
<!-- @updatedWeekDays: payload [weekDays, userDepartmentId] — debounce 100ms -->
<!-- @updatedMessages: payload [messages, userDepartmentId] — debounce 100ms -->
<bot-schedule
  :week-days="weekDays"
  :use-scheduling-pause="useSchedulingPause"
  :use-message-shield="true"
  :messages="messages"
  :user-department-id="departmentId"
  @updatedWeekDays="onWeekDaysUpdated"
  @updatedMessages="onMessagesUpdated"
/>

Props

NomeTipoDefaultObrig.Descrição
useSchedulingPause Boolean false Sim Ativa/desativa campos de pausa (Início/Final da Pausa) para cada dia. Ao mudar para false, reseta todos os start_pause/finish_pause para 00:00.
useMessageShield Boolean false Não Exibe textarea para mensagem fora do horário (+ mensagem de pausa se useSchedulingPause=true).
userDepartmentId any null Não ID do departamento — passado como 2º argumento nos eventos emitidos para identificar qual instância foi atualizada.
messages Array/Object [] Não Objeto com messages['message'] (fora do horário) e messages['message_pause'] (pausa). Vinculado ao vs-textarea.
weekDays Array 7 dias default (todos desmarcados, 00:00) Não Array de 7 objetos com {value, label, start_at, finish_at, selected, start_pause, finish_pause}. value: 0=Domingo, 1=Segunda... 6=Sábado.

Eventos

EventoPayloadDescrição
@updatedWeekDays [weekDays, userDepartmentId] Emitido com debounce 100ms sempre que weekDays muda (watch deep + immediate). Disparado na montagem — pai recebe valores iniciais imediatamente.
@updatedMessages [messages, userDepartmentId] Emitido com debounce 100ms sempre que messages muda (watch deep + immediate).

Estrutura padrão de weekDays[i]

// value: 0=Domingo, 1=Segunda, ..., 6=Sábado
{
  value: "1",
  label: "Segunda-feira",
  start_at: "00:00",
  finish_at: "00:00",
  selected: false,
  start_pause: "00:00",
  finish_pause: "00:00"
}

Dependências

  • vue-flatpickr-component + flatpickr/dist/flatpickr.css — time pickers (noCalendar, enableTime, formato H:i)
  • vs-checkbox, vs-button, vs-textarea (Vuesax 3)
  • feather-icon (XIcon para remover pausa)

Onde é usado

  • src/views/chat-flows/ChatFlowsList.vue — 2 instâncias (bot global + por departamento)
Nota sobre watch immediate: @updatedWeekDays usa immediate: true no watch — o evento é emitido na montagem do componente com os valores iniciais. O pai deve estar preparado para receber o evento durante o created/mounted cycle.