Componenti Board

KanbanBoard

Componente board generico con drag-and-drop, indipendente dal dominio.

Panoramica

KanbanBoard è il componente di basso livello: riceve colonne e items come props generici e non sa nulla di fasi, schede o PostgREST. Tutta la logica di dominio è delegata al consumer tramite emits e slot.

Anteprima live

Props

PropTipoDefaultDescrizione
columnsRecord<string, unknown>[][]Array di oggetti colonna
columnKeyFieldstringNome del campo chiave nelle colonne
columnTitleFieldstringNome del campo titolo nelle colonne
itemsRecord<string, unknown>[][]Array di oggetti elemento
itemKeyFieldstringNome del campo chiave negli elementi
itemTitleFieldstringNome del campo titolo negli elementi
itemColumnFieldstringCampo che collega l'elemento alla colonna
searchQuerystring''Query di ricerca per filtrare elementi
searchFieldsstring[]Campi in cui cercare (supporta dot notation)
addItemLabelstring'Nuova'Prefisso etichetta pulsante aggiungi
showToolbarbooleantrueMostra toolbar superiore
columnWidthnumber340Larghezza colonne in pixel
enableColumnDragbooleanfalseAbilita drag delle colonne per riordino

Emits

EventoPayloadDescrizione
moveItem(itemId, sourceId, targetId, newIndex)Elemento spostato
addItemcolumnIdClic "aggiungi" in una colonna
editItemitemClic "modifica" su un elemento
deleteItemitemIdClic "elimina" su un elemento
reorderColumnscolumn[]Colonne riordinate tramite drag
updateItemsitem[]Lista elementi aggiornata

Slot

SlotPropsDescrizione
header-startSinistra della toolbar
header-centerCentro della toolbar
header-endDestra della toolbar
column-header{ column }Intestazione colonna custom
item{ item }Rendering card custom

Colonne compresse

Una colonna viene resa compressa (52px di larghezza) se il suo oggetto ha la proprietà _compressa: true. KanbanFasiBoard gestisce questo stato internamente tramite faseCompresse.

Esempio con dati arbitrari

<template>
  <KanbanBoard
    :columns="[
      { id: 'todo', label: 'Da fare' },
      { id: 'doing', label: 'In corso' },
      { id: 'done', label: 'Fatto' },
    ]"
    column-key-field="id"
    column-title-field="label"
    :items="tasks"
    item-key-field="id"
    item-title-field="title"
    item-column-field="status"
    :enable-column-drag="true"
    @move-item="handleMove"
    @reorder-columns="handleReorder"
  >
    <template #item="{ item }">
      <div class="p-3 bg-white rounded shadow text-sm">{{ item.title }}</div>
    </template>
  </KanbanBoard>
</template>