Giao diện
Kiến trúc
Tổng quan
plugin-client quản lý ba hệ thống con: DesktopRoutes tree (menu desktop/mobile), App resource (thông tin ứng dụng), và menu-role binding (ACL cho menu). Cả ba phối hợp tạo nên hệ thống điều hướng hoàn chỉnh cho giao diện người dùng.
DesktopRoutes Tree
Mô hình dữ liệu
Menu desktop được lưu dạng adjacency list — mỗi record có parentId trỏ về node cha. Cấu trúc này cho phép xây dựng cây menu đa cấp.
| Đặc điểm | Chi tiết |
|---|---|
| PK | Snowflake ID (bigInt) |
| Tham chiếu schema | schemaUid → uiSchemas, menuSchemaUid → uiSchemas |
| Widget | tabSchemaName → uiWidgets |
| Phân cấp | parentId + sort (scoped theo parentId) |
| Flags | hideInMenu, enableTabs, enableHeader, displayTitle, hidden |
| Loại | type — phân biệt page, group, link, divider |
Luồng xây dựng cây
createV2 / destroyV2 — cascade operations
Phiên bản v2 của create/destroy tích hợp sâu với UiWidgetRepository.ensureModel:
- createV2: tạo desktopRoute, đồng thời tạo uiSchema và uiWidget tương ứng qua
ensureModel. Gán menu cho tất cả role cóallowNewMenu: true. - destroyV2: xóa desktopRoute kèm cascade xóa uiSchemas (qua
schemaUid) và uiWidgets (quatabSchemaName).
App Resource
App resource cung cấp thông tin hệ thống và điều khiển lifecycle:
| Action | Mô tả | Quyền |
|---|---|---|
getInfo | Version, locale, danh sách plugin đã cài, theme | Public |
getLang | Ngôn ngữ hiện tại + toàn bộ bản dịch | Public |
clearCache | Xóa toàn bộ cache server (schema, ACL, i18n) | Admin |
restart | Restart ứng dụng | Admin |
refresh | Refresh app state mà không restart | Admin |
Menu-Role Binding
ACL Snippets
Plugin đăng ký hai nhóm snippet:
| Snippet | Cho phép |
|---|---|
ui.desktopRoutes | Truy cập menu desktop trên giao diện |
pm.desktopRoutes | Quản lý menu desktop trong Settings |
Hooks
| Hook | Thời điểm | Hành vi |
|---|---|---|
roles.beforeCreate | Trước khi tạo role mới | Chuẩn bị danh sách menu mặc định |
desktopRoutes.afterCreate | Sau khi tạo menu | Gán menu cho role có allowNewMenu: true |
desktopRoutes.afterDestroy | Sau khi xóa menu | Xóa liên kết role-menu tương ứng |