DataTable
Базовое использование
Фильтрация и экспорт CSV
Поиск: — · фильтры: {}
CSV собирается из отфильтрованных строк и видимых колонок, с экранированием запятых и кавычек и BOM для Excel.
Фильтры ничего не нашли
Сортировка, выбор, загрузка
Переключатель колонок и закрепление строк
Выбор ячеек и колонки-группы
Выбрано ячеек: 0
Виртуализация
Без закругления
Ограничение высоты тела
Без бордюра
Входные параметры
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
columns | DataTableColumn[] | [] | Список колонок. Поля колонки: key, label?, width?, minWidth?, maxWidth?, align?, sortable?, resizable?, frozen?, group?, visible?, value?, formatter?, filterable? (разрешает фильтрацию), filter? (собственный предикат (value, row) => boolean). |
rows | Record<string, unknown>[] | [] | Строки данных. |
rowKey | string | 'id' | Поле строки с уникальным значением (используется для выбора). |
loading | boolean | false | Показывает скелетон вместо строк. |
skeletonRows | number | 5 | Количество скелетон-строк при загрузке. |
noResultsText | string | 'Ничего не найдено' | Текст состояния «фильтры ничего не нашли». Показывается вместо emptyText, когда данные есть, но отфильтрованы полностью. |
searchable | boolean | false | Показывать поле глобального поиска в панели инструментов. |
searchPlaceholder | string | 'Поиск' | Подпись поля глобального поиска (и его aria-label). |
globalFilter | string | '' | Глобальный поиск по всем видимым колонкам (внешнее состояние, через v-model:global-filter). |
filters | Record<string, string> | {} | Значения фильтров по колонкам: ключ колонки → подстрока (внешнее состояние, через v-model:filters). Пустая строка означает отсутствие фильтра. |
exportable | boolean | false | Показывать кнопку экспорта отфильтрованных строк в CSV. |
exportFilename | string | 'export' | Имя файла при экспорте в CSV. Расширение .csv добавляется автоматически. |
emptyText | string | 'Нет данных' | Текст пустого состояния. |
selectable | boolean | false | Включает выбор строк. |
multiple | boolean | false | Множественный выбор строк. |
modelValue | string | number | Array<string | number> | undefined | Выбранные значения строк (через v-model). |
cellSelectable | boolean | false | Включает выбор отдельных ячеек. |
selectedCells | string[] | [] | Выбранные ячейки в формате «rowIndex:key» (через v-model:selected-cells). |
size | 'sm' | 'md' | 'lg' | 'md' | Размер строк таблицы. |
striped | boolean | false | Полосатые строки. |
gridLines | boolean | false | Сетка между ячейками. |
rounded | boolean | true | Закруглённые углы рамки таблицы. При false углы становятся прямыми. |
maxHeight | number | string | undefined | Максимальная высота тела таблицы (число — px, строка — любое CSS-значение). По умолчанию ограничения нет; при заданном значении тело прокручивается по вертикали, а шапка остаётся закреплённой. |
bordered | boolean | true | Бордюр вокруг таблицы. При false внешняя рамка убирается, разделители строк и ячеек сохраняются. |
columnToggle | boolean | false | Показывать переключатель видимости колонок. |
pagination | DataTablePagination? | undefined | Внешняя пагинация: page, pageSize, total. |
sortBy | string | null | null | Отсортированное поле (управляется снаружи). |
sortOrder | 'asc' | 'desc' | null | null | Направление сортировки (управляется снаружи). |
frozenRows | boolean | false | Показывает кнопку закрепления первых строк. |
virtual | boolean | false | Включает виртуализацию (фиксированная высота строки). |
rowHeight | number | 40 | Высота строки для виртуализации (px). |
virtualHeight | number | 400 | Высота видимой области при виртуализации (px). |
События
| Имя | Аргументы | Когда срабатывает |
|---|---|---|
update:modelValue | value: string | number | Array<string | number> | При изменении выбора строк. |
select | row: Record<string, unknown> | При выборе строки. |
select-all | checked: boolean | При выборе/снятии выбора всех видимых строк. |
update:selectedCells | cells: string[] | При изменении выбора ячеек. |
sort | key: string, order: DataTableSortOrder | При клике по сортируемой колонке. |
page-change | page: number | При смене страницы внешней пагинации. |
reorder | columns: DataTableColumn[] | После перетаскивания колонок. |
resize | key: string, width: number | После изменения ширины колонки. |
toggle-column | column: DataTableColumn, visible: boolean | При переключении видимости колонки. |
toggle-frozen-rows | — | При нажатии кнопки закрепления строк. |
update:globalFilter | value: string | При вводе в поле глобального поиска. |
update:filters | filters: Record<string, string> | При вводе в поле фильтра колонки. Содержит все фильтры, а не только изменённый. |
export-csv | filename: string | После скачивания CSV-файла. |
Описание
DataTable — расширенная таблица данных для больших и сложных наборов строк: сортировка (внешняя), выбор строк и ячеек, закрепление колонок и строк, изменение ширины и перетаскивание колонок, многоуровневые заголовки, виртуализация, состояние загрузки и пустое состояние.
Сортировка управляется снаружи: клик по заголовку эмитит sort, а поле и направление задаются пропсами sortBy/sortOrder. Для больших списков включите virtual — рендерятся только видимые строки.
Дополнительная информация
- Слот
cell— scoped-slot{ column, row, value }для кастомного содержимого ячейки; по умолчанию используетformatterили аксессорvalue. - Слот
empty— содержимое пустого состояния (по умолчаниюemptyText). - Слот
footer— подвал таблицы (рендерится при его наличии). - Колонки описываются через
DataTableColumn(см. таблицу props).groupсоздаёт многоуровневые заголовки,frozenзакрепляет колонку по краю. - Клавиатурная навигация: стрелки перемещают активную ячейку,
Enter/Spaceпереключают выбранную ячейку/строку,Shift+стрелки расширяют выбор строк. - Заголовки имеют
role="columnheader"иaria-sort; тело сcellSelectableполучаетrole="grid", ячейки —role="gridcell"иtabindexактивной ячейки. - Перетаскивание колонок (drag-and-drop) и изменение ширины доступны при соответствующих флагах колонок.
- Фильтрация внешняя: поля фильтров только эмитят
update:filtersиupdate:globalFilter, а саму фильтрацию компонент применяет к присланным значениям. Это позволяет считать фильтрацию на бэкенде — компонент умеет и локально, по данным вrows. - По умолчанию фильтр колонки ищет подстроку без учёта регистра; если в ячейке массив, проверяется вхождение в любой элемент. Проп
filterу колонки заменяет сравнение собственным предикатом(value, row) => boolean. - Фильтрация применяется до виртуализации, поэтому
data-cellи высота полосы прокрутки считаются по отфильтрованному набору. - Скрытые колонки не участвуют ни в фильтрации, ни в экспорте.
- Экспорт CSV: разделитель-запятая, перевод строки CRLF, значения с запятой/кавычкой/переводом строки оборачиваются в кавычки, массивы склеиваются точкой с запятой, в начало добавляется BOM — чтобы файл корректно открывался в Excel. Скачиваются именно отфильтрованные строки.
- Закругление рамки включается пропом
rounded(по умолчаниюtrue); приfalseдобавляется классc3-data-table--squareсborder-radius: 0. - Проп
maxHeightограничивает высоту прокручиваемой области тела: шапка остаётся закреплённой (position: sticky). Можно сочетать сvirtual— тогдаvirtualHeightзадаёт фиксированную высоту, аmaxHeightдополнительно ограничивает её. - Проп
bordered(по умолчаниюtrue) управляет внешним бордюром; приfalseдобавляется классc3-data-table--borderlessсborder: none, при этом линии между строками и ячейками (включаяgridLines) остаются.