Tab theo Kind
All / Person / Organization — đếm số lượng ngay trên tab (từ endpoint
counts, không phụ thuộc trang đang xem).

Tab theo Kind
All / Person / Organization — đếm số lượng ngay trên tab (từ endpoint
counts, không phụ thuộc trang đang xem).
Lọc theo Type
Lọc theo quan hệ (customer/lead/vendor…) qua query ?rel= — có thể
deep-link từ nơi khác (vd sidebar) vào một type cụ thể.
Tìm kiếm
Debounce 300ms, khớp display_name, primary_email, primary_phone.
Nhấn / để focus nhanh vào ô tìm kiếm.
Cột tuỳ biến
Ẩn/hiện, kéo resize, double-click để auto-fit độ rộng cột — cấu hình ở Thiết lập › Listing.
Phân trang server-side (25/50/100 dòng/trang), tổng số lấy từ meta.filter_count của backend — không đếm ở client.
Chọn checkbox một hoặc nhiều dòng để hiện thanh hành động nổi ở đáy màn hình:
Đổi Status
Áp status mới cho tất cả contact đã chọn.
Gắn Tag / Type
Thêm (không thay thế) tag hoặc type cho các contact đã chọn — mở modal chọn nhiều giá trị.
Xoá
Xoá vĩnh viễn — có hộp thoại xác nhận. Xoá contact sẽ xoá luôn mọi bản ghi con (email/phone/address/profile/notes/social links/employment) — xem Data model.
Nút đổi status/gắn tag/gắn type chỉ hiện nếu bạn có quyền contacts:update; nút xoá chỉ hiện nếu có contacts:delete.
Nhấn Add (hoặc phím tắt N) — mở drawer bước 1: chọn kind (Person / Organization), hiển thị dạng thẻ lớn kèm icon.
Sau khi chọn kind, drawer chuyển sang form theo tab:
Khi tạo mới, field Organization ở tab Details là một dropdown chọn được (không giống lúc sửa) — chọn một organization ở đây sẽ tự tạo một bản ghi Employment hiện tại (is_current: true) ngay khi lưu.
Gõ email trùng với contact đã có → cảnh báo trùng lặp hiện ngay trong drawer (debounce 400ms), kèm link nhảy thẳng tới contact trùng để bạn quyết định có tiếp tục tạo mới hay không.
Lưu — contact mới xuất hiện đầu danh sách (mặc định sort theo date_created giảm dần).
Sửa từ trang chi tiết (nút bút chì trên từng section) hoặc mở lại drawer edit — form giống lúc tạo nhưng có thêm tab Profile (hồ sơ CRM: phong cách giao tiếp, mức ưu tiên quan hệ, sở thích, điều cần tránh…).
| Phím | Hành động |
|---|---|
N |
Mở drawer tạo contact mới |
/ |
Focus vào ô tìm kiếm |
? |
Mở bảng phím tắt |
Esc |
Đóng bảng phím tắt đang mở |
Phím tắt tự vô hiệu khi con trỏ đang ở trong input/textarea/select để không can thiệp lúc gõ chữ.
/contacts/:id