logologo
Começar
Manual
Desenvolvimento
Plugins
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Começar
Manual
Desenvolvimento
Plugins
API
logologo
Visão Geral

Blocos

Visão Geral

Blocos de Dados

Tabela
Formulário
Detalhes
Lista
Cartões em Grade
Gráfico

Bloco de Filtro

Formulário

Outros Blocos

Painel de controle
Iframe
Bloco de citação
Markdown
Bloco JS

Configurações do bloco

Escopo de dados
Layout
Regras de interação de blocos
Regras de interação de campos
Regras de ordenação
Excluir bloco
Título do bloco

Campo

Visão Geral

Configurações gerais

Campos da tabela
Campos de detalhe
Campos do formulário de filtro
Campos do formulário

Configurações específicas

Data
Gerenciador de Arquivos
Subformulário
Seletor suspenso
Seletor de dados
Seletor em cascata
Subtabela
Subdetalhe
Título
Campo JS
Item JS
Coluna JS

Configurações do campo

Valor padrão
Rótulo do campo
Exibir rótulo
Dica do campo
Escopo de dados
Componente do campo
Formatação de número
Modo
Obrigatório
Campo de título
Regras de validação
Componente de campo relacional

Ação

Visão Geral

Configurações da ação

Botão de editar
Confirmação dupla
Atribuição de campo
Vincular workflow
Popup de edição
Regras de interação de ações

Tipo de ação

Adicionar
Visualizar
Excluir
Editar
Importar
Importar Pro
Exportar
Exportar Pro
Exportar anexo
Filtrar
Link
Abrir popup
Atualizar
Enviar dados
Acionar workflow
Atualizar registro
Atualização em lote
Adicionar sub-registro
Ação JS
Permissões de ação

Avançado

Regras de interação
Fluxo de eventos
Variáveis
RunJS
Previous PageCampo JS
Next PageColuna JS
Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

#Item JS

#Introdução

O Item JS é usado para "itens personalizados" (não vinculados a um campo) em um formulário. Você pode usar JavaScript/JSX para renderizar qualquer conteúdo (como dicas, estatísticas, pré-visualizações, botões, etc.) e interagir com o formulário e o contexto do registro. É ideal para cenários como pré-visualizações em tempo real, dicas instrutivas e pequenos componentes interativos.

jsitem-add-20251929

#API de Contexto em Tempo de Execução (Uso Comum)

  • ctx.element: O contêiner DOM (ElementProxy) do item atual, que suporta innerHTML, querySelector, addEventListener, etc.
  • ctx.form: A instância do formulário AntD, permitindo operações como getFieldValue / getFieldsValue / setFieldsValue / validateFields, etc.
  • ctx.blockModel: O modelo do bloco de formulário ao qual pertence, que pode escutar formValuesChange para implementar a vinculação.
  • ctx.record / ctx.collection: O registro atual e os metadados da coleção (disponíveis em alguns cenários).
  • ctx.requireAsync(url): Carrega assincronamente uma biblioteca AMD/UMD por URL.
  • ctx.importAsync(url): Importa dinamicamente um módulo ESM por URL.
  • ctx.openView(viewUid, options): Abre uma visualização configurada (gaveta/diálogo/página).
  • ctx.message / ctx.notification: Mensagem e notificação global.
  • ctx.t() / ctx.i18n.t(): Internacionalização.
  • ctx.onRefReady(ctx.ref, cb): Renderiza depois que o contêiner estiver pronto.
  • ctx.libs.React / ctx.libs.ReactDOM / ctx.libs.antd / ctx.libs.antdIcons / ctx.libs.dayjs: Bibliotecas integradas como React, ReactDOM, Ant Design, ícones do Ant Design e dayjs, usadas para renderização JSX e utilitários de data/hora. (ctx.React / ctx.ReactDOM / ctx.antd são mantidos para compatibilidade.)
  • ctx.render(vnode): Renderiza um elemento React/HTML/DOM para o contêiner padrão ctx.element. Múltiplas renderizações reutilizarão o Root e sobrescreverão o conteúdo existente do contêiner.

#Editor e Snippets

  • Snippets: Abre uma lista de snippets de código integrados, permitindo que você pesquise e os insira na posição atual do cursor com um clique.
  • Run: Executa o código atual diretamente e exibe os logs de execução no painel Logs na parte inferior. Suporta console.log/info/warn/error e destaque de erros.

jsitem-toolbars-20251029

  • Pode ser usado com o Funcionário AI para gerar/modificar scripts: Funcionário AI · Nathan: Engenheiro Frontend

#Uso Comum (Exemplos Simplificados)

#1) Pré-visualização em Tempo Real (Lendo Valores do Formulário)

const render = () => {
  const { price = 0, quantity = 1, discount = 0 } = ctx.form.getFieldsValue();
  const total = Number(price) * Number(quantity);
  const final = total * (1 - Number(discount || 0));
  ctx.render(
    <div style={{ padding: 8, background: '#f6ffed', border: '1px solid #b7eb8f', borderRadius: 6 }}>
      <div style={{ fontWeight: 600, color: '#389e0d' }}>{ctx.t('Payable:')} ¥{(final || 0).toFixed(2)}</div>
    </div>
  );
};
render();
ctx.blockModel?.on?.('formValuesChange', () => render());

#2) Abrir uma Visualização (Gaveta)

ctx.render(
  <a onClick={async () => {
    const popupUid = ctx.model.uid + '-preview';
    await ctx.openView(popupUid, { mode: 'drawer', title: ctx.t('Preview'), size: 'large' });
  }}>
    {ctx.t('Open preview')}
  </a>
);

#3) Carregar e Renderizar Bibliotecas Externas

// AMD/UMD
const dayjs = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js');
ctx.render(<span>{dayjs().format('YYYY-MM-DD HH:mm')}</span>);

// ESM
const { default: he } = await ctx.importAsync('https://cdn.jsdelivr.net/npm/he/+esm');
ctx.render(<span>{he.encode(String(ctx.form.getFieldValue('title') ?? ''))}</span>);

#Observações

  • É recomendado usar uma CDN confiável para carregar bibliotecas externas e ter um plano de contingência para cenários de falha (por exemplo, if (!lib) return;).
  • É recomendado priorizar o uso de class ou [name=...] para seletores e evitar o uso de ids fixos para prevenir ids duplicados em múltiplos blocos/pop-ups.
  • Limpeza de eventos: Mudanças frequentes nos valores do formulário podem disparar múltiplas renderizações. Antes de vincular um evento, ele deve ser limpo ou deduplicado (por exemplo, remove antes de add, usar { once: true }, ou um atributo dataset para evitar duplicatas).

#Documentação Relacionada

  • Variáveis e Contexto
  • Regras de Vinculação
  • Visualizações e Pop-ups