Создание плагина управления данными с интеграцией фронтенда и бэкенда
Предыдущие примеры были либо чисто клиентские (блок, поле, действие), либо клиентские + простой API (страница настроек). Этот пример показывает более полноценный сценарий — сервер определяет таблицу данных, клиент наследует TableBlockModel, чтобы получить полные возможности таблицы, плюс пользовательский компонент поля и пользовательскую кнопку действия — образуя плагин управления данными с CRUD-операциями.
Этот пример объединяет изученные ранее блок, поле и действие, демонстрируя процесс разработки полноценного плагина.
Рекомендуется сначала ознакомиться со следующим — это упростит разработку:
- Написание первого плагина — создание плагина и структура каталогов
- Plugin (Плагин) — точка входа плагина и жизненный цикл
load() - FlowEngine → Расширение блоков — BlockModel, CollectionBlockModel, TableBlockModel
- FlowEngine → Расширение полей — ClickableFieldModel, bindModelToInterface
- FlowEngine → Расширение действий — ActionModel, ActionSceneEnum
- i18n Интернационализация — формат файлов перевода и использование
tExpr() - Обзор серверной разработки — основы серверных плагинов
Конечный результат
Мы делаем плагин управления данными «Список дел» со следующими возможностями:
- Сервер определяет таблицу
todoItems, при установке плагина автоматически записываются данные-примеры - Клиент наследует
TableBlockModel, готовый к использованию блок таблицы (столбцы полей, пагинация, панель действий и т.д.) - Пользовательский компонент поля — рендерит поле priority цветным Tag
- Пользовательская кнопка действия — кнопка «Создать задачу», по клику открывает модальное окно с формой для создания записи
Полный исходный код см. в @nocobase-example/plugin-custom-table-block-resource. Если хотите запустить и посмотреть локально:
Ниже шаг за шагом построим этот плагин с нуля.
Шаг 1: создать каркас плагина
Выполните в корне репозитория:
Подробное описание см. в Написание первого плагина.
Затем запустите режим разработки, чтобы изменения кода подхватывались горячей перезагрузкой: для проекта, созданного командой nb init, выполните nb source dev в корне проекта (<app-path>); для самостоятельно склонированного репозитория с исходным кодом NocoBase выполните yarn dev в корне исходников.
Шаг 2: определить таблицу данных (сервер)
Создайте src/server/collections/todoItems.ts. NocoBase автоматически загружает определения collection из этого каталога:
В отличие от примера со страницей настроек, здесь не нужно вручную регистрировать ресурс — NocoBase автоматически генерирует стандартные CRUD-интерфейсы (list, get, create, update, destroy) для каждой collection.
Шаг 3: настроить права доступа и данные-примеры (сервер)
Отредактируйте src/server/plugin.ts: в load() настройте права ACL, в install() вставьте данные-примеры:

