Construir uma página de configurações de plugin
Muitos plugins precisam de uma página de configurações para o usuário definir parâmetros — por exemplo, API Keys de serviços terceiros, endereços de Webhook etc. Este exemplo mostra como criar uma página de configurações de plugin completa com pluginSettingsManager + componente React + ctx.api.
Este exemplo não envolve FlowEngine; é puramente uma combinação de Plugin + Router + Component + Context.
É recomendável conhecer os seguintes tópicos antes:
- Escreva seu primeiro plugin — criação do plugin e estrutura de diretórios
- Plugin — entrada do plugin e ciclo de vida
load() - Router de rotas — registro de página de configurações com
pluginSettingsManager - Desenvolvimento de Component — escrita de componentes React e useFlowContext
- i18n internacionalização — escrita de arquivos de tradução e uso de
useT()
Resultado final
Vamos criar uma página de configurações "Configurações do serviço externo":
- Aparece no menu "Configurações do plugin"
- Usa Antd Form para a UI do formulário
- Usa
ctx.apipara chamar a API do backend e ler/salvar a configuração - Mostra notificação ao salvar com sucesso

O código-fonte completo está em @nocobase-example/plugin-settings-page. Se quiser executar localmente para ver o resultado:
A seguir, montamos esse plugin do zero, passo a passo.
Passo 1: criar o esqueleto do plugin
Na raiz do repositório, execute:
Isso gera a estrutura básica de arquivos em packages/plugins/@my-project/plugin-settings-page, incluindo os diretórios src/client-v2/, src/server/, src/locale/ etc. Para mais detalhes, veja Escreva seu primeiro plugin.
Passo 2: registrar a página de configurações
Edite src/client-v2/plugin.tsx e, em load(), use this.pluginSettingsManager para registrar a página de configurações. Em duas etapas — primeiro registre a entrada do menu com addMenuItem() e depois registre a página em si com addPageTabItem():
Após o registro, no menu "Configurações do plugin" aparecerá a entrada "Configurações do serviço externo", e no topo haverá duas tabs — "Configuração da API" e "Sobre". Quando há apenas uma página no menu, a barra de tabs é ocultada automaticamente; aqui registramos duas, então será exibida. this.t() usa automaticamente o nome do pacote do plugin atual como namespace de i18n; veja Context → Capacidades comuns para detalhes.

Passo 3: escrever o componente da página de configurações
Crie src/client-v2/pages/ExternalApiSettingsPage.tsx. A página de configurações é um componente React comum; aqui usamos Form e Card do Antd para montar a UI, useFlowContext() para obter ctx.api e interagir com o backend, e useT() para a função de tradução.
Pontos-chave:
useFlowContext()— importado de@nocobase/flow-engine, fornecectx.apie outras capacidades do contextouseT()— hook de tradução importado delocale.ts, já vinculado ao namespace do plugin; veja i18n internacionalizaçãouseRequest()— vem de ahooks, gerencia os estados de loading/error da requisição.manual: trueindica que a requisição não é disparada automaticamente, sendo necessário chamarrun()manualmentectx.api.request()— uso idêntico ao Axios; o NocoBase anexa automaticamente as informações de autenticação
Passo 4: adicionar arquivos multilíngues
Edite os arquivos de tradução em src/locale/ do plugin:
Adicionar um novo arquivo de idioma pela primeira vez requer reiniciar a aplicação para ter efeito.
Para mais informações sobre escrita de arquivos de tradução, hook useT(), tExpr() e outros usos, veja i18n internacionalização.
Passo 5: APIs do servidor
O formulário do cliente precisa que o backend forneça as APIs externalApi:get e externalApi:set. A parte do servidor não é complexa — defina uma data table para armazenar a configuração e registre as duas APIs.
Definir a data table
Crie src/server/collections/externalApiSettings.ts. O NocoBase carrega automaticamente as definições de collection desse diretório:
Registrar resource e APIs
Edite src/server/plugin.ts. Use resourceManager.define() para registrar o resource e configure as permissões ACL:
Pontos-chave:
ctx.db.getRepository()— obtém o objeto de operação de dados pelo nome da collectionctx.action.params.values— dados do body de uma requisição POSTacl.allow()—'loggedIn'indica que usuários logados podem acessar. A APIsetnão tem allow explícito; por padrão, somente administradores podem chamá-laawait next()— cada action precisa chamá-lo no final; é a convenção do middleware Koa
Passo 6: escrever a página "Sobre"
No passo 2, registramos duas tabs. O componente da página "Configuração da API" foi escrito no passo 3; agora vamos escrever a página da tab "Sobre".
Crie src/client-v2/pages/AboutPage.tsx:
Esta página é simples — usa Descriptions do Antd para mostrar informações do plugin. Em projetos reais, a tab "Sobre" pode ser usada para versão, changelog, links de ajuda etc.
Passo 7: ativar o plugin
Após ativar, atualize a página, e no menu "Configurações do plugin" aparecerá a entrada "Configurações do serviço externo".

Código-fonte completo
- @nocobase-example/plugin-settings-page — exemplo completo de página de configurações de plugin
Resumo
Capacidades usadas neste exemplo:
Links relacionados
- Escreva seu primeiro plugin — criar o esqueleto do plugin do zero
- Plugin — entrada do plugin e ciclo de vida
- Router de rotas — rotas de página e registro de página de configurações de plugin
- Context → Capacidades comuns — ctx.api, ctx.t etc.
- Desenvolvimento de Component — escrita de componentes React
- Visão geral do desenvolvimento server-side — definir APIs do backend
- i18n internacionalização — escrita de arquivos de tradução
- i18n internacionalização (server) — tradução no servidor

