Skip to content

CTable — toolbar

Dải nút bên phải tiêu đề bảng. Mỗi nút bật bằng một prop show-* và phát một sự kiện; CTable không tự làm gì với dữ liệu — trang quyết định hành vi.

Các nút

PropHiển thịSự kiệnGhi chú
show-createNút primary "Thêm mới"@createĐổi nhãn bằng create-text
show-searchÔ tìm kiếm có nút xoá@search(value) + v-model:search-valuePhát khi nhấn Enter hoặc bấm nút xoá — không tự debounce
show-filterNút "Lọc"@filterfilter-fields thì mở drawer dựng sẵn thay vì chỉ phát sự kiện
show-exportNút tròn tải xuống@export
show-reloadNút tròn tải lại@reloadIcon tự xoay khi bảng đang loading
show-column-settingNút tròn ⚙Mở drawer Thiết lập
vue
<CTable
  v-model:search-value="keyword"
  :show-create="can('/orders/create')"
  create-text="Tạo đơn"
  show-search
  show-export
  show-reload
  @create="navigateTo('/orders/new')"
  @search="onSearch"
  @export="exportExcel"
  @reload="reload"
/>

Chặn quyền bằng cách bind thẳng vào prop (:show-create="can(...)") — nút không có quyền thì không tồn tại, thay vì hiện rồi báo lỗi khi bấm.

Ô tìm kiếm

ts
const keyword = ref('')

function onSearch(value: string) {
  // Gộp vào bộ lọc rồi để useTable tải lại từ trang 1.
  onFilter({ ...filterValues.value, keyword: value || undefined })
}
  • v-model:search-value giữ chữ đang gõ; @search phát khi người dùng xác nhận (Enter) hoặc xoá trắng ô.
  • Không có debounce sẵn: gõ tới đâu gọi API tới đó là quyết định của trang. Cần thì tự debounce, và nhớ huỷ lời gọi cũ — xem useApi và fetcher.
  • Khoá gửi lên backend (keyword, q, search…) do trang đặt, CTable không quy định.

Nút riêng của trang

vue
<template #toolbar>
  <CButton variant="outline" size="sm" @click="importExcel">Nhập từ Excel</CButton>
</template>

Slot #toolbar chèn vào đầu dải nút, trước "Thêm mới". Giữ tối đa một hai nút — toolbar dài làm mất nút chính trên màn hình hẹp; hành động ít dùng nên nằm trong menu ⋮ của từng dòng hoặc trong CPageHeader.

Tiêu đề bảng

vue
<CTable title="Đơn hàng" />

hoặc tuỳ biến hoàn toàn:

vue
<template #title>
  <span style="display: inline-flex; gap: 8px; align-items: center">
    Đơn hàng
    <CTag color="info">{{ total }} bản ghi</CTag>
  </span>
</template>

Trang danh sách thường đã có CPageHeader ở đầu trang; khi đó bảng có thể bỏ title cho đỡ lặp, hoặc dùng title để nói rõ phạm vi đang xem ("Đơn hàng chờ duyệt").

Bảng thu gọn được

vue
<CTable title="Mặt hàng" collapsible :default-open="false" />

Toolbar nằm trong header của khối thu gọn; CTable đã chặn sự kiện của nút để bấm nút không làm thu gọn bảng.

Liên quan