Giao diện
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ống | Dùng |
|---|---|
| Xác nhận hành động phá huỷ | useConfirm |
| Xác nhận nhanh ngay tại nút | CPopconfirm |
| 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ác | CAlert |
| Toast thông báo ngắn | message — xem Gọi theo kiểu lệnh |
| Đang tải một khối | CSpin, CSkeleton |
| Trang kết quả (404, 403, thành công) | CResult |
| Tiến độ công việc dài | CProgress |
CModal và CDrawer
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-ifbên trong), tránh tải dữ liệu cho drawer chưa ai mở.
CAlert và CResult
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.