Aktions-Erweiterung

In NocoBase ist eine Aktion (Action) ein Button innerhalb eines Blocks, der eine Geschäftslogik auslöst — z. B. „Neu", „Bearbeiten", „Löschen" usw. Durch Erweitern der ActionModel-Basisklasse können Sie benutzerdefinierte Aktionsbuttons hinzufügen.

Aktionsszenarien

Jede Aktion muss das Szenario deklarieren, in dem sie erscheint, indem sie über die Eigenschaft static scene angegeben wird:

SzenarioWertHinweis
collectionActionSceneEnum.collectionWirkt auf die Datentabelle, z. B. „Neu"-Button
recordActionSceneEnum.recordWirkt auf einen einzelnen Datensatz, z. B. „Bearbeiten"-, „Löschen"-Button
bothActionSceneEnum.bothIn beiden Szenarien verwendbar
allActionSceneEnum.allIn allen Szenarien verwendbar (auch in speziellen Kontexten wie Modals)

Beispiele

Aktion auf Datentabellen-Ebene

Wirkt auf die gesamte Datentabelle und erscheint in der Aktionsleiste oben im Block:

// models/SimpleCollectionActionModel.tsx
import { ActionModel, ActionSceneEnum } from '@nocobase/client-v2';
import { ButtonProps } from 'antd';
import { tExpr } from '@nocobase/flow-engine';

export class SimpleCollectionActionModel extends ActionModel {
  static scene = ActionSceneEnum.collection;

  defaultProps: ButtonProps = {
    children: tExpr('Simple collection action'),
  };
}

SimpleCollectionActionModel.define({
  label: tExpr('Simple collection action'),
});

Aktion auf Datensatz-Ebene

Wirkt auf einen einzelnen Datensatz und erscheint in der Aktionsspalte jeder Tabellenzeile:

// models/SimpleRecordActionModel.tsx
import { ActionModel, ActionSceneEnum } from '@nocobase/client-v2';
import { ButtonProps } from 'antd';
import { tExpr } from '@nocobase/flow-engine';

export class SimpleRecordActionModel extends ActionModel {
  static scene = ActionSceneEnum.record;

  defaultProps: ButtonProps = {
    children: tExpr('Simple record action'),
  };
}

SimpleRecordActionModel.define({
  label: tExpr('Simple record action'),
});

Beide Szenarien anwendbar

Wenn die Aktion nicht zwischen Szenarien unterscheidet, verwenden Sie ActionSceneEnum.both:

// models/SimpleBothActionModel.tsx
import { ActionModel, ActionSceneEnum } from '@nocobase/client-v2';
import { ButtonProps } from 'antd';
import { tExpr } from '@nocobase/flow-engine';

export class SimpleBothActionModel extends ActionModel {
  static scene = ActionSceneEnum.both;

  defaultProps: ButtonProps = {
    children: tExpr('Simple both action'),
  };
}

SimpleBothActionModel.define({
  label: tExpr('Simple both action'),
});

Die Struktur der drei Schreibweisen ist identisch — der Unterschied liegt nur im Wert von static scene und im Button-Text in defaultProps.

Aktion registrieren

Im load() des Plugins über registerModelLoaders per Lazy Loading registrieren:

// plugin.tsx
import { Plugin } from '@nocobase/client-v2';

export class PluginSimpleActionClient extends Plugin {
  async load() {
    this.flowEngine.registerModelLoaders({
      SimpleCollectionActionModel: {
        loader: () => import('./models/SimpleCollectionActionModel'),
      },
      SimpleRecordActionModel: {
        loader: () => import('./models/SimpleRecordActionModel'),
      },
      SimpleBothActionModel: {
        loader: () => import('./models/SimpleBothActionModel'),
      },
    });
  }
}

Nach der Registrierung können Sie unter „Aktion konfigurieren" des Blocks Ihre benutzerdefinierten Aktionsbuttons hinzufügen.

Vollständiger Quellcode