Skip to content

Primitive — phản hồi

Hộp thoại, drawer, cảnh báo, khung chờ.

ts
import { CModal, CDrawer, CPopconfirm, CResult, CSpin, CSkeleton, CAlert, CProgress } from '@tasco/ui'

Chọn đúng component

Tình huốngDùng
Xác nhận hành động phá huỷuseConfirm
Xác nhận nhanh ngay tại nútCPopconfirm
Nhập thêm dữ liệu trong một bước phụCModal
Biểu mẫu phụ dài (bộ lọc, chi tiết)CDrawer
Cảnh báo nằm trong trang, không chặn thao tácCAlert
Toast thông báo ngắnmessage — xem Gọi theo kiểu lệnh
Đang tải một khốiCSpin, CSkeleton
Trang kết quả (404, 403, thành công)CResult
Tiến độ công việc dàiCProgress

CModalCDrawer

vue
<CModal v-model:open="open" title="Chi tiết đơn" :footer="null">…</CModal>
<CDrawer v-model:open="open" title="Bộ lọc" placement="right" width="420">…</CDrawer>
  • Cả hai dùng Teleport → là điểm gãy khi bật SSR; bọc <ClientOnly> cho route có SSR.
  • Drawer đóng thì trả focus về nút đã mở nó. CTable đã làm sẵn cho drawer lọc và thiết lập; drawer tự viết thì tự lo.
  • Nội dung nặng chỉ nên dựng khi mở (v-if bên trong), tránh tải dữ liệu cho drawer chưa ai mở.

CAlertCResult

CAlert cho cảnh báo trong ngữ cảnh: "Đơn đang bị khoá công nợ". Đặt ngay cạnh phần nó nói tới, đừng dồn hết lên đầu trang.

CResult cho cả màn hình: trang 403, 404, hoặc trang "Đã gửi duyệt thành công". Trang lỗi fatal của app đã dùng nó sẵn — xem Hiển thị lỗi.

Khung chờ

vue
<CSkeleton :loading="loading" active>
  <ThongTinDonHang :order="order" />
</CSkeleton>

CSkeleton giữ nguyên hình dáng bố cục nên trang không nhảy khi dữ liệu về — tốt hơn CSpin cho khối nội dung. CSpin hợp với vùng nhỏ hoặc thao tác ngắn.

Bảng thì dùng loading của CTable, không bọc thêm.

Lưu ý

  • Đừng chồng hộp thoại: mở modal từ trong modal là dấu hiệu luồng cần tách thành trang riêng.
  • Modal không phải chỗ đặt form dài — từ năm trường trở lên nên là trang hoặc drawer.
  • Thông báo lỗi dùng handler chung, không tự dựng modal báo lỗi riêng — xem Hiển thị lỗi.

Liên quan