Files
sys-analysis-design/.claude/skills/ba-3-specification/templates/ui-convention.md
Leonard-ThindPad-P50 2c7bcde741 improve BA skill
2026-09-09 06:34:57 +07:00

11 KiB
Raw Blame History

UICONV — Quy ước giao diện —

Version 1.0
Date YYYY-MM-DD
Author (skill ba-3-specification, activity uiconv)
Status 🟡 Draft
Approved by Designer: — · PO: —
Source <prototype / design system / SAD §7 / GLOBAL_UI_CONVENTION của dự án / DEC-nn>
Scope Toàn project — mọi SRS và WF có PRODUCT = screen
Profile screen · … · …

Change Log

Version Date Người sửa Thay đổi CR
1.0 Bản đầu —

Vai trò của tài liệu này. Một project có nhiều SRS, mỗi lần chạy tối đa 3 US. Không có tài liệu này thì mỗi SRS tự đặt một kiểu phân trang, một vị trí toast, một định dạng ngày. SRS và WF tham chiếu mục ở đây thay vì định nghĩa lại; muốn lệch phải ghi vào §12.

Thứ tự ưu tiên khi lệch: Design system của dự án (nếu có) > Prototype đã duyệt > UICONV

SRS từng US. SRS chỉ được ghi khác UICONV khi có dòng ở §12.


0. Nguồn

Design system (tên + version + link, hoặc "Chưa có — dev chọn theo NFR, quy ước ở đây là ràng buộc tối thiểu")
Prototype tham chiếu (đường dẫn / URL / mục SAD, phiên bản, ngày)
Guideline sẵn có của dự án (vd: GLOBAL_UI_CONVENTION.md — nếu có thì file này chỉ bổ khuyết, không chép lại)
Ai sở hữu quy ước BA đề xuất · Designer duyệt · PO duyệt phần text/giọng văn
Nền tảng Web desktop / web responsive / app di động — (theo BRIEF)

1. Khung layout

Grid (số cột · gutter px · max-width px)
Header cố định Có / Không — chứa: (logo, tìm kiếm toàn cục, ngôn ngữ, tài khoản…)
Sidebar / menu Trái cố định / thu gọn được / không có
Footer Có / Không — chứa:
Breakpoint Khoảng (px) Sidebar Bảng dữ liệu Form
Desktop ≥ 1024 Hiện Bảng 2 cột
Tablet 768–1023 Thu gọn icon Bảng cuộn ngang 1 cột
Mobile < 768 Ẩn sau nút menu Card 1 cột

2. Điều hướng

Câu hỏi Quy ước
Quay lại từ màn hình chi tiết/form Nút Back và breadcrumb — cả hai
Quay lại có giữ trạng thái danh sách (trang, bộ lọc, sắp xếp)? ✅ Giữ, qua query string
Vào bằng URL trực tiếp với id không tồn tại Trang trạng thái "Không tìm thấy" + nút về danh sách
Vào bằng URL trực tiếp không có quyền Trang "Không có quyền" + nút về trang chủ; không lộ tên bản ghi
Rời màn hình khi form đang dở Modal xác nhận "Rời trang? Thay đổi chưa lưu sẽ mất."
Menu với chức năng không có quyền ❌ Ẩn (W7)
Mở chi tiết Cùng tab, đổi URL

3. Danh sách

Kiểu phân trang Offset (page, size) / Cursor / Cuộn vô hạn
Số dòng mỗi trang Mặc định … · tuỳ chọn …
Sắp xếp mặc định (vd: ngày tạo giảm dần)
Bấm vào dòng Mở chi tiết / Chỉ nút "Chi tiết" mới mở
Cột hành động Cột cuối, icon + tooltip / Menu ⋯
Chọn nhiều dòng Checkbox cột đầu, thanh hành động hàng loạt xuất hiện phía trên
Tìm kiếm Gõ rồi Enter / Gợi ý sau khi ngừng gõ … ms
Bộ lọc Thanh ngang trên bảng (desktop) · nút "Lọc" mở bottom-sheet (mobile)
Cột trên mobile Bảng → card; card hiện tối đa … trường: (liệt kê thứ tự ưu tiên chung)

4. Form

Vị trí nút Lưu (nút chính) bên phải, Huỷ (nút phụ) bên trái nút Lưu
Đánh dấu bắt buộc Dấu * màu cảnh báo sau nhãn
Thời điểm validate Khi rời field (blur) và khi bấm Lưu
Vị trí message lỗi Ngay dưới field, thay chỗ hint; field viền cảnh báo
Lỗi nhiều field Focus vào field lỗi đầu tiên, cuộn tới nó
Lỗi từ server không gắn field Banner đầu form
Sau lỗi mạng/5xx 🔴 Giữ nguyên dữ liệu đã nhập, mở lại nút Lưu
Đang gửi Khoá toàn form, spinner trong nút Lưu, nhãn đổi "Đang lưu…"
Huỷ khi có thay đổi Modal xác nhận
Nhãn field Trên field (không đặt cạnh trái)
Nút Lưu khi form chưa hợp lệ Bấm được, hiện lỗi / 🔒 disable — (chọn một)

5. Phản hồi hệ thống

Loại Dùng khi Vị trí Thời lượng Có nút đóng
Toast thành công Lưu/xoá thành công Góc trên phải (desktop) · trên cùng (mobile) 3 s tự đóng ✅
Toast lỗi Lỗi không gắn field, có thể thử lại Như trên Không tự đóng ✅
Modal xác nhận Hành động không hoàn tác được (xoá, gửi duyệt) Giữa màn — Nút chính bên phải; hành động nguy hiểm dùng nút nguy hiểm
Inline dưới field Lỗi validation Dưới field Tới khi sửa —
Banner trong vùng Lỗi tải một vùng dữ liệu Trong vùng đó Tới khi thử lại Nút Thử lại
Trang trạng thái 404 / 403 / lỗi toàn trang Toàn trang — Nút về danh sách/trang chủ

6. Trạng thái chuẩn

Trạng thái Hiển thị Text mặc định (VI) Text (EN) Nút
Đang tải danh sách Skeleton … dòng — — —
Đang tải chi tiết/form Skeleton theo bố cục — — —
Đang tải cục bộ (dropdown, tính lại) Spinner nhỏ tại chỗ — — —
Rỗng — chưa có dữ liệu nào Minh hoạ + câu dẫn + nút chính "Chưa có <đối tượng> nào." Tạo mới
Rỗng — bộ lọc không khớp Câu dẫn + nút phụ (không minh hoạ, để khác loại trên) "Không tìm thấy kết quả phù hợp với bộ lọc." Xoá lọc
Lỗi tải Banner trong vùng "Không tải được dữ liệu." Thử lại
Không có quyền Trang trạng thái "Bạn không có quyền truy cập nội dung này." Về trang chủ
Không tìm thấy Trang trạng thái "Không tìm thấy nội dung yêu cầu." Về danh sách

SRS §2.3.6 chỉ ghi phần khác với bảng này (vd: câu dẫn riêng cho đối tượng), còn lại tham chiếu.

7. Ẩn · khoá · read-only (quy tắc W7)

Trạng thái Trình bày Bắt buộc kèm
❌ ẩn Không render —
🔒 disable Mờ 45%, con trỏ mặc định Tooltip nêu lý do khi hover/focus
👁 read-only Giá trị dạng text, không viền ô nhập, nhãn giữ nguyên —

8. Định dạng hiển thị

SRS §4.3 tham chiếu bảng này; chỉ ghi khác khi có dòng ở §12.

Loại Định dạng Ví dụ Ghi chú
Ngày dd/MM/yyyy 30/08/2026
Ngày giờ dd/MM/yyyy HH:mm 30/08/2026 14:05 Múi giờ hiển thị: … (theo người dùng / cố định UTC+7)
Lưu trữ thời gian ISO-8601 UTC Khớp API §1
Số #,##0 1.234.567 Dấu phân cách: …
Tiền #,##0 ₫ 1.234.567 ₫ Làm tròn: … · đa tiền tệ: …
Phần trăm 0,0 % 12,5 %
Rỗng / null — Thống nhất toàn hệ thống
Số lớn (id) Hiển thị nguyên văn chuỗi Không format

9. Ngôn ngữ và giọng văn

Ngôn ngữ hỗ trợ VI (mặc định) · EN · … — thiếu bản dịch ⇒ hiện khoá hay VI? (chọn một)
Xưng hô "bạn" / không xưng hô
Thông điệp lỗi Nói vì sao và làm gì tiếp; không mã kỹ thuật; kết thúc bằng dấu chấm
Nhãn nút Động từ, viết hoa chữ đầu: "Tạo mới", "Lưu", "Huỷ"
Tiêu đề màn hình Danh từ: "Danh sách cửa hàng"
Độ dài nhãn tối đa … ký tự — để không vỡ ở ngôn ngữ dài (KO/DE)
Khoá i18n <scr>.<thành phần>.<thuộc tính> — vd scr01.search.ph

10. Dãy mã lỗi

Dãy Module / phạm vi Số kế tiếp chưa dùng Ai cấp
E-<DOMAIN>- 0001 BA

11. Từ vựng thành phần

WF §3.x.2 cột "Kiểu trình bày" chỉ dùng từ ở cột đầu. Cột thứ hai map sang design system khi có.

Kiểu trình bày Component trong design system Dùng khi
Nút chính Một hành động chính mỗi màn hình
Nút phụ Huỷ, hành động thứ cấp
Nút nguy hiểm Xoá, huỷ đơn — luôn kèm modal xác nhận
Liên kết Điều hướng trong text
Ô nhập
Ô nhập số
Chọn 1 ≤ 7 lựa chọn: radio · > 7: dropdown có tìm
Chọn nhiều
Chọn ngày / khoảng ngày
Công tắc Bật/tắt có hiệu lực ngay
Bảng Desktop
Card Mobile, hoặc dữ liệu ít cột
Badge trạng thái Trạng thái vòng đời (BR §3)
Tab Nhóm nội dung cùng cấp trong một màn hình
Modal Form ngắn ≤ 6 field, xác nhận
Drawer Form dài, chi tiết nhanh
Bottom-sheet Bộ lọc trên mobile
Toast §5
Skeleton §6

12. Ngoại lệ đã duyệt

SRS/WF lệch quy ước ⇒ phải có dòng ở đây. Không có dòng ⇒ lệch là lỗi, không phải quyết định.

# Tài liệu Mục lệch Quy ước Thực tế Vì sao Ai duyệt Ngày

13. Open Questions

ID Câu hỏi Hỏi ai Từ ngày Chặn gì

Tự chấm

# Tiêu chí ☐/✅
1 Mọi ô "chọn một" đã chọn, không còn dấu / giữa các phương án
2 §6 có hai trạng thái rỗng trông khác nhau
3 §8 có múi giờ hiển thị và quy tắc làm tròn tiền
4 §11 mọi kiểu trình bày dùng trong WF hiện có đều có dòng
5 Có chữ ký Designer (hoặc ghi rõ dự án không có Designer ⇒ PO ký thay, DEC-nn)