Phân cấp QRT
Menu: Nhãn & QR → Nhãn định danh → Phân cấp QRT
Route:/qrt-codes/hierarchy
Quyền yêu cầu:qr.view,qr.edit
Phiên bản: v1.0 — 2026-05-08
1. Giới thiệu
Trang Phân cấp QRT là giao diện trực quan để xây dựng và quản lý cấu trúc cây phân cấp của mã QR Tổng. Hỗ trợ kéo-thả (Kéo & Drop) để di chuyển QRT giữa các nhánh, niêm phong để khóa cấu trúc, và audit log để theo dõi mọi thay đổi.
Ví dụ cấu trúc thực tế:
📦 Pallet A (Cấp 1 — Quản lý QRT)
├── 📦 Thùng 1 (Cấp 2 — Quản lý QR1)
│ ├── 📱 Sản phẩm 001
│ ├── 📱 Sản phẩm 002
│ └── 📱 Sản phẩm 003
├── 📦 Thùng 2 (Cấp 2 — Quản lý QR1)
│ └── 📱 Sản phẩm 004
└── 📦 Thùng 3 (Cấp 2 — Quản lý QR1)
2. Điều kiện truy cập
| Điều kiện | Chi tiết |
|---|---|
| Quyền xem | qr.view |
| Quyền chỉnh sửa | qr.edit (tạo, liên kết, niêm phong, xóa) |
| Trạng thái tổ chức | Đã duyệt |
3. Giao diện
3.1 Layout 2 cột
| Vùng | Mô tả |
|---|---|
| Cột trái (8/12) | Cây phân cấp với kéo & drop |
| Cột phải (4/12) | Panel chi tiết node đang chọn + Toolbar hành động |
3.2 Toolbar trên cùng
| Nút | Mô tả |
|---|---|
| Tạo QRT mới | Mở hộp thoại tạo QRT |
| Cấu hình cấp | Đặt tên, icon, màu cho từng cấp |
| Lọc trạng thái | danh sách thả xuống chọn nhiều: Nháp / Sẵn sàng / Đang dùng / Hoàn thành / Lưu trữ / Đã xóa |
| Làm mới | Reload cây |
3.3 Dạng cây — Mỗi node hiển thị
| Thành phần | Mô tả |
|---|---|
| ⠿ Kéo handle | Kéo để di chuyển (chỉ hiện khi chưa niêm phong/xóa) |
| ▶ công tắc | Mở rộng/thu gọn nhánh con |
| Icon loại | 📁 Quản lý QRT / 📱 Quản lý QR1 |
| Alias + rawData | Tên gợi nhớ + mã QR |
| huy hiệu cấp | VD: "Pallet", "Thùng" |
| huy hiệu trạng thái | Nháp / Sẵn sàng / Đang dùng... |
| huy hiệu niêm phong | 🔒 Niêm phong (nếu bị seal) |
| Counter | Số con / Số kỳ vọng |
4. Hướng dẫn thao tác
4.1 Tạo QRT mới
- Nhấn "Tạo QRT mới" → hộp thoại:
| Trường | Mô tả |
|---|---|
| Loại QRT | Quản lý QRT (chứa QRT con) / Quản lý QR1 (chứa QR1) |
| QRT cha | danh sách thả xuống — chọn QRT làm cha (bỏ trống = root) |
| Lô sản xuất | danh sách thả xuống — liên kết lô (tùy chọn) |
| Alias | Tên gợi nhớ (VD: "Pallet A - Kho HCM") |
| Nhãn cấp | Tên tùy chỉnh (VD: "Container") |
| SL kỳ vọng | Số con dự kiến (tùy chọn) |
- Nhấn "Tạo" → QRT xuất hiện trong cây
4.2 Chỉnh sửa QRT
- Chọn node trong cây → Panel phải hiển thị chi tiết
- Nhấn "Chỉnh sửa" → hộp thoại:
- Sửa Alias, nhãn cấp, SL kỳ vọng
- Nhập lý do thay đổi (ghi vào audit log)
- Nhấn "Cập nhật"
4.3 Liên kết QRT con (Link Children)
- Chọn QRT cha trong cây
- Nhấn "Liên kết con" → hộp thoại hiển thị QRT chưa có cha
- ô tích chọn 1 hoặc nhiều QRT → Nhấn "Liên kết"
[!WARNING]
Số lượng con liên kết không được vượt quá SL kỳ vọng (nếu đã khai báo).
4.4 Kéo thả (Kéo & Drop) — Di chuyển QRT
- Nhấn giữ ⠿ Kéo handle trên node nguồn
- Kéo đến node đích → Highlight xanh khi hợp lệ
- Thả → hộp thoại xác nhận "Chuyển QRT":
- Hiển thị: Từ QRT nào → Đến QRT nào
- Nhập lý do (tùy chọn)
- Nhấn "Xác nhận" → Di chuyển thành công
Quy tắc kéo thả:
- ❌ Không kéo node đã niêm phong
- ❌ Không kéo node đã xóa
- ❌ Không kéo node vào chính nó hoặc con cháu của nó
- ❌ Không thả vào node đã niêm phong
4.5 Niêm phong / Mở niêm phong (Seal / Unseal)
Niêm phong:
- Chọn node → Nhấn "🔒 Niêm phong"
- Nhập lý do (tùy chọn) → Nhấn xác nhận
- Node bị khóa: không thể thêm/xóa/di chuyển con
Mở niêm phong:
- Chọn node đã niêm phong → Nhấn "🔓 Mở niêm phong"
- Nhập lý do (bắt buộc) → Nhấn xác nhận
[!CAUTION]
Niêm phong thường dùng khi hàng đã xuất kho. Mở niêm phong cần ghi rõ lý do để audit.
4.6 Đổi trạng thái
- Chọn node → Nhấn "Đổi trạng thái"
- Chọn trạng thái mới: Nháp → Sẵn sàng → Đang dùng → Hoàn thành → Lưu trữ
- Nhập lý do (tùy chọn) → Nhấn xác nhận
[!NOTE]
Đổi trạng thái áp dụng cascade cho tất cả QRT con.
4.7 Xem Audit Log
- Chọn node → Nhấn "📋 Audit Log"
- hộp thoại hiển thị timeline: mọi hành động (tạo, liên kết, niêm phong, di chuyển, đổi trạng thái) kèm thời gian + người thực hiện + lý do
4.8 Xóa vĩnh viễn
- Chọn node → Nhấn "🗑 Xóa vĩnh viễn" (chỉ hiện khi đủ điều kiện)
- Xác nhận → QRT bị xóa hoàn toàn
Điều kiện xóa:
- Node không có con
- Node không bị niêm phong
- Node ở trạng thái Nháp hoặc Đã xóa mềm
4.9 Cấu hình tên cấp
- Nhấn "⚙ Cấu hình cấp" → hộp thoại
- Đặt cho mỗi cấp (Level 1, 2, 3...):
| Trường | Mô tả |
|---|---|
| Tên cấp | VD: "Pallet", "Thùng", "Hộp" |
| Icon | Class icon (VD: ri-inbox-line) |
| Màu | Hex color |
| Sức chứa mặc định | Số con mặc định |
5. Các quy tắc nghiệp vụ quan trọng
5.1 Tự động điều chỉnh cấp (Auto-Level)
Khi bạn liên kết hoặc di chuyển QRT bằng kéo thả, hệ thống sẽ tự động thực hiện:
- Điều chỉnh cấp (Level) của QRT con = Cấp QRT cha + 1.
- Thực hiện đệ quy cho toàn bộ các node con cháu cấp dưới mà không cần can thiệp thủ công. Ví dụ: QRT A (Cấp 1) ← liên kết QRT B (Cấp 3) → QRT B tự động thành Cấp 2, các con của B cũng tự lùi cấp tương ứng.
5.2 Tự động đồng bộ lô (Auto-Lot)
Khi gắn hoặc di chuyển QRT:
- Cha có lô, Con chưa có → Con tự động nhận lô của cha.
- Con có lô, Cha chưa có → Cha tự động nhận lô của con.
- Cả hai đều đã có lô khác nhau → ❌ Chặn liên kết, hiển thị lỗi để tránh vi phạm tính nhất quán của chuỗi truy xuất nguồn gốc.
5.3 Niêm phong lan truyền
- Khi một QRT bị Niêm phong, trạng thái khóa sẽ lan truyền xuống các node con cháu.
- Bạn không thể thêm/bớt con, kéo thả hoặc di chuyển bất kỳ node nào thuộc nhánh đã niêm phong cho đến khi mở khóa và nhập lý do bắt buộc.
5.4 Hướng dẫn ngữ cảnh
- Giao diện có các biểu tượng dấu "?" nhỏ bên cạnh các tùy chọn cấu hình. Di chuột (rê chuột) vào để xem giải thích nhanh.
- Có thể bật/tắt hiển thị dấu "?" này bằng cách vào Hồ sơ (
/profile) → Cài đặt → bật/tắt "Hướng dẫn sử dụng".
6. FAQ
| Câu hỏi | Trả lời |
|---|---|
| QRT có bao nhiêu cấp? | Không giới hạn. Thực tế thường 2-4 cấp (VD: Pallet → Thùng → Hộp → SP). |
| Di chuyển QRT ảnh hưởng tem? | Không. Chỉ thay đổi cấu trúc quản lý, tem QR1 vẫn giữ nguyên thông tin. |
| Tại sao không kéo được? | Kiểm tra: node đã niêm phong? đã xóa? đang kéo vào chính nó? Hai bên có trùng lô không? |
| Audit log lưu bao lâu? | Vĩnh viễn. Mọi hành động đều được ghi lại. |
Cập nhật lần cuối: 2026-05-08