ImportExcel

src/components/excel/ImportExcel.vue
Form Medium 5 usos

Zona de upload de arquivos Excel (.xlsx) e CSV com drag-and-drop e click para selecionar. Faz upload HTTP e lê o conteúdo localmente com a lib XLSX em paralelo. Suporta limite de linhas (maxRowsToImport) e dialog de confirmação (confirmMessage) antes de abrir o file picker.

Básico (sem limite de linhas)

Clique abre o file picker diretamente. Parse local com XLSX e upload HTTP em paralelo. onSuccess (callback) recebe dados parseados; @on-success (evento) recebe a resposta HTTP.

Arraste um Arquivo Excel ou Procure Aqui

Real src/views/customer-groups/CustomerCategoryForm.vue:156

Com Confirmação e Limite de Linhas

confirmMessage exibe dialog de confirmação antes de abrir o file picker. maxRowsToImport rejeita arquivos que excedam o limite com $vs.notify warning. Em todos os usos reais, ambos aparecem juntos.

Arraste um Arquivo Excel ou Procure Aqui

Atenção
Para que seu uso não seja prejudicado, limitamos o máximo de contatos para 1.000.
Real src/views/campaigns/ViewCampaign.vue:622

Apenas Limite de Linhas

maxRowsToImport sem confirmMessage. Arquivo acima do limite é rejeitado com $vs.notify warning após o upload. Sem uso real nessa combinação — todos os usos reais com limite também usam confirmação.

maxRowsToImport: 500

Arraste um Arquivo Excel ou Procure Aqui

Sintético synthetic

API

Exemplo completo

<!-- onSuccess: callback local com {header, results, meta} dos dados parseados -->
<!-- @on-success: evento após upload HTTP bem-sucedido (AxiosResponse) -->
<!-- Diferença crucial: onSuccess=prop (dados locais XLSX), @on-success=evento (resposta do servidor) -->
<import-excel
  :action="uploadApiUrl"
  fileName="file"
  :headers="{ Authorization: 'Bearer ' + bearer }"
  :onSuccess="loadDataInTable"
  @on-success="successUploadSheet"
  @on-error="errorUploadSheet"
  :maxRowsToImport="1000"
  confirmMessage="Ao importar, os dados existentes serão substituídos. Deseja continuar?"
/>

Props

NomeTipoDefaultObrig.Descrição
onSuccess Function Sim Callback chamado quando o arquivo é lido localmente com sucesso. Recebe { header, results, meta } com os dados do Excel parseados pelo XLSX.
fileName String Sim Nome do campo no FormData para o upload HTTP (ex: 'file', 'excel').
action String null Não URL para upload do arquivo via axios POST. Obrigatório quando se quer persistir o arquivo no servidor.
headers Object null Não Headers HTTP extras para o request de upload (ex: { Authorization: 'Bearer ...' }).
maxRowsToImport Number undefined Não Limite máximo de linhas. Se exceder: remove o arquivo do bucket e exibe $vs.notify warning. Quando undefined: sem limite.
confirmMessage String undefined Não Texto do vs-dialog de confirmação exibido antes de abrir o file picker. Quando undefined, abre o picker diretamente.

Eventos

EventoPayloadDescrição
@on-success AxiosResponse Emitido após upload HTTP bem-sucedido. Payload: response completo do axios.
@on-error AxiosResponse (error.response) Emitido em caso de erro no upload HTTP.

Formato de dados locais (onSuccess)

CampoTipoDescrição
headerString[]Nomes das colunas (primeira linha do Excel)
resultsObject[]Uma entrada por linha. Chaves = headers. Datas convertidas para toLocaleDateString(). Campo extra __rowNum__ adicionado.
metaObject{ sheetName: String } — nome da primeira aba do workbook

Dependências

  • xlsx — parse de planilhas (XLSX.read, sheet_to_json)
  • axios — upload HTTP
  • $vs.loading, $vs.notify, $vs.dialog (Vuesax 3)
  • feather-icon (UploadCloudIcon)
  • removeFileFromBucket (util interna) — remove arquivo do bucket quando limite excedido

Onde é usado

  • src/views/campaigns/ViewCampaign.vue
  • src/views/customer-groups/CustomerCategoryForm.vue
  • src/views/orders/products/ImportProductModal.vue
  • src/views/customer-bases/CustomerBasesForm.vue
  • src/views/configs/DynamicSettings.vue
onSuccess vs @on-success: onSuccess é uma prop-callback que recebe os dados locais parseados pelo XLSX (para preview na tela). @on-success é um evento Vue emitido após o upload HTTP ter sido confirmado pelo servidor. O pai precisa de ambos para exibir preview local e confirmar a persistência no servidor.