| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- div(class="data-table")
- div(class="data-table__toolbar")
- div(class="data-table__search")
- input(
- type="text"
- v-model="searchQuery"
- placeholder="Поиск..."
- class="data-table__search-input"
- )
-
- div(class="data-table__actions")
- slot(name="toolbar")
-
- div(v-if="loading" class="data-table__loading")
- div(class="data-table__spinner")
- span Загрузка данных...
-
- div(v-else class="data-table__container")
- table(class="data-table__table")
- thead
- tr
- th(v-if="selectable" class="data-table__checkbox-column")
- input(
- type="checkbox"
- :checked="selectedItems.length === paginatedData.length && paginatedData.length > 0"
- @change="selectAll($event.target.checked)"
- )
-
- th(
- v-for="column in columns"
- :key="column.key"
- @click="sort(column.key)"
- :class="{ 'data-table__sortable': column.sortable !== false }"
- class="data-table__header"
- )
- span {{ column.title }}
- span(
- v-if="sortField === column.key"
- class="data-table__sort-indicator"
- ) {{ sortDirection === 'asc' ? '↑' : '↓' }}
-
- tbody
- tr(
- v-for="item in paginatedData"
- :key="item._id"
- class="data-table__row"
- )
- td(v-if="selectable" class="data-table__checkbox-column")
- input(
- type="checkbox"
- :checked="isSelected(item)"
- @change="selectItem(item, $event.target.checked)"
- )
-
- td(
- v-for="column in columns"
- :key="column.key"
- class="data-table__cell"
- )
- template(v-if="column.slot")
- slot(:name="column.slot" :item="item")
- template(v-else)
- span {{ item[column.key] }}
-
- td(v-if="$slots.actions" class="data-table__actions-cell")
- slot(name="actions" :item="item")
-
- div(v-if="!loading && paginatedData.length === 0" class="data-table__empty")
- span Нет данных для отображения
-
- div(v-if="!loading && totalPages > 1" class="data-table__pagination")
- button(
- @click="currentPage = currentPage - 1"
- :disabled="currentPage === 1"
- class="data-table__pagination-btn"
- ) ←
-
- span(class="data-table__pagination-info")
- | Страница {{ currentPage }} из {{ totalPages }}
-
- button(
- @click="currentPage = currentPage + 1"
- :disabled="currentPage === totalPages"
- class="data-table__pagination-btn"
- ) →
|