Utilisez NocoBase pour créer un tableau de bord opérationnel pouvant être lié
Cet article prend le tableau de bord d'exploitation du « système de bons de travail » comme exemple pour présenter comment utiliser le bloc de graphique, le bloc de filtre et le bloc JS de NocoBase en combinaison pour créer un tableau de bord de données qui prend en charge la liaison de filtres, l'exploration des graphiques et les styles personnalisés.
Bien que les exemples proviennent de scénarios d'ordres de travail, ces méthodes sont également applicables aux systèmes d'entreprise tels que le CRM, les opérations d'équipement, la gestion de projet, le flux d'approbation, la réussite des clients, etc.
Ce que cet article veut présenter n'est pas « comment utiliser les blocs JS pour écrire un grand écran », mais comment combiner les capacités de blocs natifs de NocoBase et les blocs JS : laissez les blocs natifs être responsables des capacités standard et laissez les blocs JS compléter l'expérience personnalisée.

cible de la scène
Nous espérons créer un tableau de bord des opérations pour aider l'équipe d'exploitation ou de service à déterminer rapidement la charge de travail actuelle :
- Combien de bons de travail ouverts y a-t-il actuellement ?
- Quels ordres de travail présentent un risque SLA ?
- Quelle est la tendance des nouveaux bons de travail ?
- Quel est le statut et la répartition des priorités des bons de travail ?
- Après avoir cliqué sur un graphique, vous pouvez visualiser les détails correspondants
La page peut être grossièrement divisée en quatre couches :
- Zone de filtre supérieure : heure, groupe de services, type de demande, priorité, statut SLA
- Zone de statistiques KPI : Backlog ouvert, Non attribué, avertissement SLA, etc.
- Zone d'analyse du graphique : tendance, statut, SLA, répartition des priorités
- Zone de détail détaillée : cliquez sur le graphique pour afficher les enregistrements correspondants.
Tout d’abord, clarifiez une idée de construction
Lorsque de nombreuses personnes créent des tableaux de bord de données, elles ont tendance à considérer le problème comme l'une des deux options suivantes :
Soit vous utilisez tous les blocs natifs de NocoBase, simples à configurer, mais craignez que le style et l'interaction ne soient pas assez flexibles ; ou écrivez simplement un gros bloc JS et contrôlez vous-même la requête, le graphique, le filtrage et l'exploration, mais cela perdra la commodité apportée par la configuration low-code.
En fait, la méthode la plus recommandée consiste à combiner les deux.
Dans ce tableau de bord Opérations, nous n'avons pas écrit la page entière sous la forme d'un grand écran JS, mais l'avons divisée selon les responsabilités :
- Le filtrage supérieur utilise le bloc de filtrage fourni avec le système NocoBase ;
- Les graphiques de tendances, la distribution des statuts et la distribution SLA utilisent des blocs de graphiques natifs ;
- Les cartes KPI et les détails détaillés utilisent des blocs JS ;
- Les blocs de filtre affectent à la fois les blocs de graphiques et les blocs JS ;
- Après avoir cliqué sur le graphique, les conditions d'exploration sont transmises au bloc de détails JS ci-dessous.
L'avantage est que les statistiques et le filtrage standards conservent toujours les capacités de configuration de NocoBase, tandis que l'affichage personnalisé et les interactions complexes sont complétés par des blocs JS. La page n'est ni "configurable uniquement" ni "tout le code", mais la configuration et le code remplissent chacun leurs propres tâches.
1. Comment personnaliser le style du bloc graphique

Le bloc graphique de NocoBase peut d'abord utiliser le générateur de requêtes pour définir le calibre statistique, puis utiliser l'option ECharts personnalisée pour ajuster le style.
En prenant comme exemple les « statistiques sur l'état des bons de travail », le générateur de requêtes peut être configuré comme :
- Fiche technique : billets
- Métriques : nombre d'identifiants, alias ticketCount
- Dimensions : statut
La clé est que lors de la personnalisation du style, vous n'avez pas besoin de réécrire la requête, il vous suffit de traiter l'affichage du graphique en fonction de ctx.data.objects.
Cette ligne de code lit les résultats de la requête de graphique. Définissez ensuite les étiquettes d'état et les couleurs :
Il est recommandé que toutes les rédactions visibles utilisent ctx.t() pour faciliter la prise en charge multilingue ultérieure.
Lors de la génération de données de graphique, vous pouvez joindre des informations détaillées à chaque point de données du graphique :
La chose la plus critique ici est ticketingDrilldown. Il ne s'agit pas d'un champ standard d'ECharts, mais d'un contexte métier que nous mettons nous-mêmes, qui sera utilisé ultérieurement en cliquant sur le graphique.
Revenez enfin à l’option ECharts :
L'idée centrale de cette partie est :
- Le générateur de requêtes est responsable des statistiques ;
- L'option personnalisée est responsable de l'expression visuelle ;
- Les champs personnalisés sont chargés de transmettre le contexte d'exploration.
2. Laissez le bloc de filtre système devenir la portée d'observation de la page entière

La zone de filtre dans le tableau de bord opérationnel ne doit pas être simplement un formulaire isolé. Il représente le diamètre d'observation actuel de la page entière.
Par exemple, si l'utilisateur sélectionne un groupe de services, un type de demande et une heure de création, les KPI, les graphiques de tendance, la distribution des statuts et les détails détaillés doivent tous être affichés en fonction du même ensemble de conditions. Sinon, les nombres dans les différents blocs de la page se combattront et il sera difficile pour les utilisateurs de juger quelles données constituent le résultat dans la plage actuelle.
Ici, nous utilisons directement le bloc de filtrage fourni avec le système NocoBase au lieu d'écrire nous-mêmes un composant de filtrage. Les blocs de filtre natifs peuvent être naturellement liés aux blocs de graphique, permettant au bloc de graphique de continuer à utiliser le générateur de requêtes, les autorisations, les mécanismes d'actualisation et de filtrage.
Top Dashboard scope peut configurer ces éléments de filtre :
- Created at
- Service group
- Request type
- Priority
- SLA status
Pour les blocs JS, il vous suffit de lire le même ensemble de conditions de filtre dans le code, puis de les convertir en filtres de requête. De cette manière, les KPI et les détails détaillés peuvent également être cohérents avec le graphique natif.
La combinaison des conditions de filtre peut être encapsulée dans une petite fonction :
Compter par filtre :
Les points clés ici sont :
Le bloc JS interroge les données commerciales via des ressources au lieu d'écrire directement du SQL. Cela facilite le maintien de la cohérence avec les autorisations, les sources de données et les durées d'exécution des pages de NocoBase.
3. Utilisez des blocs JS pour afficher les cartes KPI

Les KPI sont mieux adaptés à l’utilisation des blocs JS. Parce que les KPI ne sont généralement pas une requête unique, mais une combinaison de plusieurs calibres commerciaux : inachevé, non attribué, avertissement SLA, violation du SLA, nouveau, résolu, etc.
Le bloc JS peut réinterroger les données en fonction de la plage de filtrage actuelle et les restituer dans une carte statistique.
Les points clés des blocs JS sont :
- Utilisez
ctx.makeResource()pour interroger les données ; - Utilisez
ctx.libs.antdpour restituer l'interface ; - Utilisez
ctx.render()pour générer du contenu ; - Rendre les morceaux JS après avoir filtré les modifications.
Dans une page réelle, le bouton de filtre et le bouton de réinitialisation peuvent configurer le flux d'événements afin qu'ils actualisent le bloc KPI JS et le bloc JS approfondi en même temps après avoir terminé l'action de filtre native. De cette façon, l'utilisateur clique une fois pour filtrer, et les graphiques et le contenu personnalisé seront mis à jour sur la même plage.
4. Bloc JS de liaison graphique pour l'exploration

Cliquer sur le graphique pour explorer est une interaction très pratique dans le tableau de bord.
Dans le scénario d'ordre de travail, l'utilisateur clique sur la colonne « Statut : Ouvert » et tous les ordres de travail ouverts sont affichés dans la zone de détail ci-dessous ; lorsque l'utilisateur clique sur « SLA rompu », tous les ordres de travail d'heures supplémentaires sont affichés ci-dessous.
L'idée de mise en œuvre est la suivante :
- Les points de données du graphique portent
ticketingDrilldown; - L'événement graphique lit ces informations détaillées ;
- Écrivez les informations détaillées dans le contexte du bloc JS cible ;
- Déclenchez le bloc JS cible pour effectuer un nouveau rendu.
Le code clé dans l'événement graphique est le suivant. Recherchez d’abord le bloc JS détaillé :
Écrivez ensuite les conditions de forage obtenues en cliquant sur le graphique dans le bloc cible :
Les plus critiques sont ces deux lignes :
La première ligne transmet la condition d'exploration au bloc JS et la deuxième ligne déclenche l'actualisation du bloc JS.
Enfin, liez l'événement de clic sur le graphique :
Il est recommandé ici de renvoyer le nettoyage :
De cette manière, lorsque le graphique est reconfiguré ou restitué, les anciens événements peuvent être nettoyés pour éviter des liaisons répétées.
Le code lié à l'événement de clic ci-dessus s'applique aux versions v2.2.0-beta.10 et supérieures. Référence au code de l'ancienne version :
5. Comment afficher les détails dans les blocs JS détaillés

Explorez le bloc JS pour lire le ticketingDashboardDrilldown qui vient d'être écrit, puis interrogez les données en fonction du filtre qu'il contient.
Si l'utilisateur n'a pas cliqué sur le graphique, affichez une invite. Après avoir cliqué, interrogez le bon de travail basé sur drilldown.filter :
Ensuite, restituez le tableau :
Si vous devez effacer les conditions d'exploration, vous pouvez vous référer à
Les points clés de cette partie sont :
- Le graphique est uniquement responsable du passage du filtre ;
- Le bloc JS est responsable de l'interrogation et de l'affichage des détails ;
- Cliquez sur différents graphiques pour partager le même bloc d'exploration.
Suggestions pratiques
1. Ne vous précipitez pas pour coder la page complexe dans son ensemble
La leçon la plus importante de cette page est la suivante : n’opposez pas les capacités natives aux capacités JS.
Si une fonctionnalité est déjà une fonctionnalité native de NocoBase, telle que le filtrage, la requête de graphique, l'affichage de tableaux et le contrôle des autorisations, le bloc natif sera utilisé en premier. De cette manière, lorsque les champs, les conditions de filtrage et le calibre du graphique sont ensuite ajustés, ils peuvent toujours être configurés sur l'interface.
Les blocs JS sont plus adaptés au traitement de parties pour lesquelles les blocs natifs ne sont pas bons, comme la combinaison de plusieurs indicateurs dans un ensemble de KPI, des styles de cartes spéciaux, l'affichage d'un ensemble de détails personnalisés après avoir cliqué sur le graphique ou la transmission du contexte commercial entre différents blocs.
En d'autres termes, le bloc natif est responsable des « capacités standard configurables » et le bloc JS est responsable de « l'expérience personnalisée orientée métier ». C'est aussi l'idée de construction la plus réutilisable pour ce tableau de bord.
2. Pour des statistiques simples, utilisez d'abord le générateur de requêtes de bloc graphique.
Cela préserve les capacités de requête, d'autorisations, de filtrage et d'actualisation standard de NocoBase. Uniquement lorsque le style de graphique par défaut ne peut pas exprimer l'orientation commerciale, utilisez l'option ECharts personnalisée pour l'optimisation visuelle.
3. Les cartes KPI donnent la priorité à l'utilisation des blocs JS
Les KPI nécessitent souvent plusieurs requêtes, combinaisons de conditions et mises en page personnalisées, et les blocs JS sont plus flexibles. Surtout lorsque les KPI doivent répondre au même ensemble de conditions de filtrage du système, il sera plus clair d'utiliser des blocs JS pour les gérer de manière uniforme.
4. Les événements graphiques devraient renvoyer un nettoyage
Méthode d'écriture recommandée :
N'utilisez pas directement chart.off('click') pour effacer tous les événements de clic, car cela pourrait accidentellement supprimer le bloc graphique ou configurer la propre surveillance du panneau.
Laissez l'IA vous aider à le construire
Ce type de tableau de bord est très adapté à la génération assistée par l'IA car il implique à la fois des modèles de données, des calibres statistiques, des styles de graphiques et des interactions de pages. Vous pouvez lui remettre le contenu de cet article et poser des questions en utilisant les mots-clés ci-dessous.
Vous pouvez poser des questions comme celle-ci :
Si vous possédez déjà une page, vous pouvez également laisser l’IA vous aider à l’optimiser :
De cette manière, le contenu généré par l’IA sera plus proche de l’activité réelle, plutôt que de simplement fournir du code isolé.
Si vous choisissez de laisser l'IA vous aider à le construire, veuillez utiliser le gestionnaire de sauvegarde pour sauvegarder le projet avant de commencer.

