Sử dụng NocoBase để xây dựng bảng điều khiển hoạt động có thể liên kết
Bài viết này lấy bảng điều khiển hoạt động của "hệ thống lệnh sản xuất" làm ví dụ để giới thiệu cách sử dụng kết hợp khối biểu đồ, khối bộ lọc và khối JS của NocoBase để xây dựng bảng điều khiển dữ liệu hỗ trợ liên kết bộ lọc, xem chi tiết biểu đồ và kiểu tùy chỉnh.
Mặc dù các ví dụ là từ các kịch bản lệnh sản xuất, nhưng các phương pháp này cũng có thể áp dụng cho các hệ thống kinh doanh như CRM, vận hành thiết bị, quản lý dự án, quy trình phê duyệt, thành công của khách hàng, v.v.
Điều bài viết này muốn giới thiệu không phải là "cách sử dụng các khối JS để viết màn hình lớn", mà là cách kết hợp các khả năng khối gốc của NocoBase và các khối JS: Hãy để các khối gốc chịu trách nhiệm về các khả năng tiêu chuẩn và để các khối JS bổ sung cho trải nghiệm được cá nhân hóa.

mục tiêu bối cảnh
Chúng tôi hy vọng xây dựng được bảng điều khiển Hoạt động để giúp nhóm vận hành hoặc dịch vụ nhanh chóng xác định khối lượng công việc hiện tại:
- Hiện tại có bao nhiêu lệnh làm việc đang mở?
- Lệnh sản xuất nào có nguy cơ SLA?
- Xu hướng trong đơn đặt hàng công việc mới là gì?
- Trạng thái và sự phân bổ ưu tiên của lệnh sản xuất là gì?
- Sau khi nhấp vào biểu đồ, bạn có thể xem chi tiết tương ứng
Trang này có thể được chia thành bốn lớp:
- Vùng lọc hàng đầu: thời gian, nhóm dịch vụ, loại yêu cầu, mức độ ưu tiên, trạng thái SLA
- Khu vực thống kê KPI: Tồn đọng mở, Chưa được chỉ định, cảnh báo SLA, v.v.
- Khu vực phân tích biểu đồ: xu hướng, trạng thái, SLA, phân phối ưu tiên
- Vùng chi tiết chi tiết: Nhấp vào biểu đồ để hiển thị các bản ghi khớp
Đầu tiên, làm rõ ý tưởng xây dựng
Khi nhiều người tạo bảng thông tin dữ liệu, họ có xu hướng nghĩ vấn đề là một trong hai lựa chọn:
Hoặc sử dụng tất cả các khối gốc của NocoBase, cấu hình đơn giản nhưng lo lắng rằng kiểu dáng và tương tác không đủ linh hoạt; hoặc đơn giản là tự mình viết một khối JS lớn và tự mình kiểm soát truy vấn, biểu đồ, lọc và truy sâu, nhưng điều này sẽ làm mất đi sự tiện lợi do cấu hình low-code mang lại.
Trên thực tế, cách được khuyên dùng hơn là kết hợp cả hai.
Trong bảng điều khiển Hoạt động này, chúng tôi không viết toàn bộ trang dưới dạng màn hình JS lớn mà chia nó theo trách nhiệm:
- Bộ lọc hàng đầu sử dụng khối lọc đi kèm với hệ thống NocoBase;
- Biểu đồ xu hướng, phân phối trạng thái và phân phối SLA sử dụng các khối biểu đồ gốc;
- Thẻ KPI và chi tiết chi tiết sử dụng các khối JS;
- Các khối bộ lọc ảnh hưởng đến cả khối biểu đồ và khối JS;
- Sau khi nhấp vào biểu đồ, các điều kiện chi tiết sẽ được chuyển đến khối chi tiết JS bên dưới.
Ưu điểm của việc này là các thống kê và lọc tiêu chuẩn vẫn giữ được khả năng cấu hình của NocoBase, trong khi việc hiển thị được cá nhân hóa và các tương tác phức tạp được hoàn thành bởi các khối JS. Trang này không phải là "chỉ có thể định cấu hình" hay "tất cả mã", mà cấu hình và mã đều thực hiện nhiệm vụ riêng của chúng.
1. Cách tùy chỉnh kiểu khối biểu đồ

Khối biểu đồ của NocoBase trước tiên có thể sử dụng Trình tạo truy vấn để xác định cỡ thống kê, sau đó sử dụng tùy chọn ECharts tùy chỉnh để điều chỉnh kiểu.
Lấy "thống kê trạng thái lệnh sản xuất" làm ví dụ, Trình tạo truy vấn có thể được định cấu hình là:
- Bảng dữ liệu: vé
- Số liệu: số id, bí danh ticketCount
- Kích thước: trạng thái
Điều quan trọng là khi tùy chỉnh kiểu, bạn không cần phải viết lại truy vấn, bạn chỉ cần xử lý hiển thị biểu đồ dựa trên ctx.data.objects.
Dòng mã này đọc kết quả truy vấn biểu đồ. Sau đó xác định nhãn trạng thái và màu sắc:
Chúng tôi khuyên bạn nên sử dụng tất cả các bản sao chép có thể nhìn thấy bằng ctx.t() để tạo điều kiện hỗ trợ đa ngôn ngữ tiếp theo.
Khi tạo dữ liệu biểu đồ, bạn có thể đính kèm thông tin chi tiết vào từng điểm dữ liệu biểu đồ:
Điều quan trọng nhất ở đây là ticketingDrilldown. Đây không phải là trường tiêu chuẩn của ECharts mà là bối cảnh kinh doanh mà chúng tôi tự đặt vào, sẽ được sử dụng khi nhấp vào biểu đồ sau này.
Cuối cùng quay lại tùy chọn ECharts:
Ý tưởng cốt lõi của phần này là:
- Người xây dựng truy vấn chịu trách nhiệm thống kê;
- Tùy chọn tùy chỉnh chịu trách nhiệm thể hiện trực quan;
- Các trường tùy chỉnh chịu trách nhiệm mang ngữ cảnh chi tiết.
2. Để khối lọc hệ thống trở thành phạm vi quan sát của toàn bộ trang

Vùng lọc trong bảng thông tin vận hành không nên chỉ là một dạng riêng biệt. Nó đại diện cho đường kính quan sát hiện tại của toàn bộ trang.
Ví dụ: nếu người dùng chọn nhóm dịch vụ, loại yêu cầu và thời gian tạo thì KPI, biểu đồ xu hướng, phân bổ trạng thái và chi tiết chi tiết sẽ được hiển thị dựa trên cùng một bộ điều kiện. Nếu không, các số ở các khối khác nhau trên trang sẽ xung đột với nhau và người dùng sẽ khó đánh giá dữ liệu nào là kết quả trong phạm vi hiện tại.
Ở đây chúng tôi trực tiếp sử dụng khối lọc đi kèm với hệ thống NocoBase thay vì tự viết thành phần lọc. Các khối bộ lọc gốc có thể được liên kết một cách tự nhiên với các khối biểu đồ, cho phép khối biểu đồ tiếp tục sử dụng các cơ chế tạo truy vấn, quyền, làm mới và lọc.
Dashboard scope hàng đầu có thể định cấu hình các mục bộ lọc này:
- Created at
- Service group
- Request type
- Priority
- SLA status
Đối với các khối JS, bạn chỉ cần đọc cùng một bộ điều kiện lọc trong mã và sau đó chuyển đổi chúng thành các bộ lọc truy vấn. Bằng cách này, KPI và chi tiết chi tiết cũng có thể nhất quán với biểu đồ gốc.
Sự kết hợp của các điều kiện lọc có thể được gói gọn thành một hàm nhỏ:
Đếm theo bộ lọc:
Những điểm chính ở đây là:
Khối JS truy vấn dữ liệu nghiệp vụ thông qua các tài nguyên thay vì viết SQL trực tiếp. Điều này giúp dễ dàng duy trì sự nhất quán với các quyền, nguồn dữ liệu và thời gian chạy trang của NocoBase.
3. Sử dụng các khối JS để hiển thị thẻ KPI

KPI phù hợp hơn để sử dụng các khối JS. Bởi vì KPI thường không phải là một truy vấn đơn lẻ mà là sự kết hợp của nhiều cấp độ kinh doanh: chưa hoàn thành, chưa được chỉ định, cảnh báo SLA, vi phạm SLA, mới, đã giải quyết, v.v.
Khối JS có thể truy vấn lại dữ liệu dựa trên phạm vi lọc hiện tại và hiển thị dữ liệu đó vào thẻ thống kê.
Các điểm chính của khối JS là:
- Sử dụng
ctx.makeResource()để truy vấn dữ liệu; - Sử dụng
ctx.libs.antdđể hiển thị giao diện; - Sử dụng
ctx.render()để xuất nội dung; - Kết xuất lại các đoạn JS sau khi lọc các thay đổi.
Trong một trang thực, nút bộ lọc và nút đặt lại có thể định cấu hình luồng sự kiện để chúng làm mới khối JS KPI và khối JS chi tiết cùng lúc sau khi hoàn thành hành động lọc gốc. Bằng cách này, người dùng nhấp một lần để lọc và cả biểu đồ cũng như nội dung tùy chỉnh sẽ được cập nhật dựa trên cùng một phạm vi.
4. Khối JS liên kết biểu đồ để xem chi tiết

Nhấp vào biểu đồ để xem chi tiết là một tương tác rất thiết thực trong bảng điều khiển.
Trong kịch bản lệnh sản xuất, người dùng nhấp vào cột "Trạng thái: Mở" và tất cả các lệnh sản xuất đang mở sẽ được hiển thị trong khu vực chi tiết bên dưới; khi người dùng nhấp vào "vi phạm SLA", tất cả các lệnh làm thêm giờ sẽ được hiển thị bên dưới.
Ý tưởng thực hiện là:
- Điểm dữ liệu biểu đồ mang
ticketingDrilldown; - Sự kiện biểu đồ đọc thông tin chi tiết này;
- Viết thông tin chi tiết vào ngữ cảnh khối JS đích;
- Kích hoạt khối JS mục tiêu để kết xuất lại.
Mã khóa trong sự kiện biểu đồ như sau. Trước tiên hãy tìm khối JS chi tiết:
Sau đó viết các điều kiện chi tiết thu được bằng cách nhấp vào biểu đồ vào khối mục tiêu:
Quan trọng nhất là hai dòng này:
Dòng đầu tiên chuyển điều kiện chi tiết tới khối JS và dòng thứ hai kích hoạt làm mới khối JS.
Cuối cùng liên kết sự kiện nhấp vào biểu đồ:
Ở đây bạn nên trả lại việc dọn dẹp:
Bằng cách này, khi biểu đồ được cấu hình lại hoặc hiển thị lại, các sự kiện cũ có thể được xóa sạch để tránh bị ràng buộc lặp lại.
Mã liên quan đến sự kiện nhấp chuột ở trên có thể áp dụng cho v2.2.0-beta.10 trở lên. Tham khảo mã phiên bản cũ:
5. Cách hiển thị chi tiết trong các khối JS chi tiết

Đi sâu vào khối JS để đọc ticketingDashboardDrilldown vừa viết, sau đó truy vấn dữ liệu theo bộ lọc trong đó.
Nếu người dùng chưa nhấp vào biểu đồ, sẽ hiển thị lời nhắc. Sau khi click truy vấn thứ tự công việc dựa trên drilldown.filter:
Sau đó kết xuất bảng:
Nếu bạn cần xóa các điều kiện truy sâu, bạn có thể tham khảo
Những điểm chính trong phần này là:
- Biểu đồ chỉ chịu trách nhiệm vượt qua bộ lọc;
- Khối JS chịu trách nhiệm truy vấn và hiển thị chi tiết;
- Nhấp vào các biểu đồ khác nhau để chia sẻ cùng một khối chi tiết.
Những gợi ý thiết thực
1. Đừng vội viết mã toàn bộ trang phức tạp
Bài học quan trọng nhất từ trang này là: đừng so sánh các khả năng gốc với các khả năng JS.
Nếu một khả năng đã là khả năng gốc của NocoBase, chẳng hạn như lọc, truy vấn biểu đồ, hiển thị bảng và kiểm soát quyền, thì khối gốc sẽ được sử dụng trước tiên. Bằng cách này, khi các trường, điều kiện bộ lọc và cỡ biểu đồ được điều chỉnh sau đó, chúng vẫn có thể được định cấu hình trên giao diện.
Các khối JS phù hợp hơn để xử lý các phần mà khối gốc không giỏi, chẳng hạn như kết hợp nhiều chỉ báo thành một bộ KPI, kiểu thẻ đặc biệt, hiển thị một bộ chi tiết tùy chỉnh sau khi nhấp vào biểu đồ hoặc chuyển ngữ cảnh kinh doanh giữa các khối khác nhau.
Nói cách khác, khối gốc chịu trách nhiệm về "khả năng tiêu chuẩn có thể định cấu hình" và khối JS chịu trách nhiệm về "trải nghiệm cá nhân hóa theo định hướng kinh doanh". Đây cũng là ý tưởng xây dựng có thể tái sử dụng nhiều nhất cho bảng thông tin này.

