Skip to content

Rỗng, đang tải, lỗi, không có quyền

Mỗi vùng dữ liệu có ít nhất bốn trạng thái ngoài trạng thái "có dữ liệu". Thiết kế một màn hình là vẽ đủ các trạng thái đó — bỏ sót một cái là người dùng gặp màn hình trắng không lời giải thích.

Tóm tắt

Trạng tháiNgười dùng cần biếtHiển thị bằng
Đang tảiHệ thống đang làm việcThanh tải đầu trang, loading của bảng và nút, khung xương CSkeleton
RỗngKhông có gì — và làm gì tiếpCEmpty kèm câu giải thích, có hoặc không có nút
LỗiHỏng ở đâu, dữ liệu đã nhập có mất không, làm gì tiếpThông báo nổi cho thao tác; khối lỗi kèm "Thử lại" cho màn hình; lỗi dưới ô nhập cho form
Không có quyềnKhông phải lỗi hệ thống, tìm ai để xin quyềnẨn hoặc khoá phần tử; trang 403; khối giải thích không có nút

Đang tải

Tình huốngCách hiển thị
Chuyển trangThanh tải màu cam ở mép trên cửa sổ — layer có sẵn
Bảng tải hoặc tải lạiCTable :loading — lớp mờ phủ bảng, icon Tải lại tự xoay
Khối nội dung tải lần đầuCSkeleton cùng hình dạng nội dung sắp hiện (số dòng, có ảnh hay không)
Gửi form, xoá, duyệtloading trên chính nút vừa bấm — nút tự khoá, chống bấm hai lần
Tác vụ lâu (xuất file lớn)Thông báo "Đang xuất file…" rồi thông báo kết quả khi xong
  • Chỉ báo tải đặt đúng chỗ đang chờ: không khoá cả màn hình khi chỉ một khối đang tải.
  • Lần tải đầu hiện khung trống kèm chỉ báo, không hiện dữ liệu cũ của màn hình trước.
  • Phản hồi thường về dưới 300ms thì chỉ báo nháy lên rồi tắt, gây rối mắt: CSpinloading của bảng nhận delay để chỉ hiện khi chờ lâu hơn ngưỡng đó.

Rỗng

Rỗng không phải lỗi, nhưng mỗi lý do rỗng cần một câu và một lời mời khác nhau:

Lý doCâu mô tảHành động
Chưa có bản ghi nào"Chưa có đơn hàng nào. Tạo đơn đầu tiên để bắt đầu theo dõi."Tạo mới (nếu có quyền tạo)
Bộ lọc hoặc tìm kiếm không ra kết quả"Không có đơn hàng nào khớp điều kiện lọc."Xoá bộ lọc
Chưa đến lúc có dữ liệu"Báo cáo tháng 9 có sau ngày 01/10."Không có
Không có quyền xem"Bạn không có quyền xem dữ liệu này."Không có

Mời "Tạo mới" trong khi người dùng chỉ lọc nhầm là lỗi thường gặp nhất. Chi tiết và demo: CEmpty, Trạng thái bảng.

Lỗi

Chọn cách hiển thị theo phạm vi của lỗi:

Phạm viVí dụHiển thị
Một thao tácLưu, xoá, duyệt không thành côngThông báo nổi ngắn (message); giữ nguyên màn hình và dữ liệu đã nhập
Lỗi hệ thống, mất mạng5xx, không kết nối được máy chủThông báo ở góc màn hình, tiêu đề "Lỗi hệ thống"
Dữ liệu nhập saiBackend trả 422Chữ đỏ ngay dưới từng ô nhập sai, không thêm thông báo nổi
Tải dữ liệu của một khốiKhông lấy được công nợKhối đó hiện câu lỗi và nút "Thử lại"; khối khác vẫn hiện bình thường
Cả màn hìnhĐường dẫn không tồn tại, lỗi không bắt đượcTrang lỗi toàn màn hình với mã lỗi và nút "Về trang chủ"
Hết phiên đăng nhập401Tự chuyển về trang đăng nhập, đăng nhập xong quay lại đúng trang cũ

Phần lớn các cách trên đã chạy tự động qua bộ xử lý lỗi chung của layer — xem Hiển thị lỗi. Thiết kế chỉ cần vẽ phần do trang tự dựng: khối lỗi kèm "Thử lại" và lỗi dưới ô nhập.

Câu lỗi nói chuyện gì xảy ralàm gì tiếp, không đổ lỗi cho người dùng, không hiện mã kỹ thuật trần — xem Câu chữ.

Một khối không có dữ liệu vì lỗi thì không hiện số 0 hay bảng rỗng: số 0 là một giá trị, người dùng sẽ tin là thật.

Không có quyền

Phạm viCách hiển thị
Mục menuẨn hẳn
Cả trangTrang lỗi 403 "Bạn không có quyền truy cập trang này." kèm nút về trang chủ
Nút hành động không bao giờ được dùngẨn (v-can)
Nút có thể được cấp quyền sauHiện nhưng khoá (v-can:disable)
Một khối trong trangCâu giải thích thay cho nội dung, không có nút (<Can> với #fallback)
  • Không để người dùng bấm nút rồi mới báo "không có quyền".
  • Không có quyền không phải lỗi hệ thống: dùng màu trung tính, không dùng màu đỏ hay biểu tượng cảnh báo.
  • Nếu tổ chức có quy trình xin quyền, câu giải thích nói rõ cần liên hệ ai.

Trang lỗi toàn màn hình của layer hiện dùng chung hình minh hoạ lỗi cho mọi mã khác 404, kể cả 403. Sản phẩm cần trang 403 riêng thì ghi đè app/error.vue — xem API của layer.

Cách khai báo quyền: Chặn theo quyền.

Checklist khi thiết kế

  • [ ] Vẽ khung trống lúc đang tải, không để trắng.
  • [ ] Hai loại rỗng (chưa có dữ liệu, lọc không ra) có câu và hành động khác nhau.
  • [ ] Khối tải lỗi có câu lỗi và nút thử lại; các khối khác không bị kéo theo.
  • [ ] Mỗi nút hành động đã quyết định: ẩn hay khoá khi thiếu quyền.
  • [ ] Form hiện lỗi dưới từng ô, không mất dữ liệu đã nhập khi lưu lỗi.

Liên quan