logologo
开始
手册
开发
插件
API
English
简体中文
开始
手册
开发
插件
API
English
简体中文
logologo
概述

区块

概述

数据区块

表格
表单
详情
列表
网格卡片
图表

筛选区块

表单

其他区块

操作面板
Iframe
引用区块
Markdown
JS Block

区块设置项

数据范围
布局
区块联动规则
字段联动规则
排序规则
区块删除
区块标题

字段

概述

通用配置项

表格字段
详情字段
筛选表单字段
表单字段

特有配置项

日期
文件管理器
子表单
下拉选择器
数据选择器
子表格
子详情
标题
JS Field
JS Item
JS Column

字段配置项

默认值
字段标签
显示标签
字段提示信息
数据范围
字段组件
数值格式化
模式
必填
标题字段
验证规则
关系字段组件

操作

概述

操作配置项

编辑按钮
二次确认
字段赋值
绑定工作流
编辑弹窗
操作联动规则

操作类型

新增
查看
删除
编辑
导入
导入Pro
导出
导出pro
导出附件
筛选
链接
打开弹窗
刷新
提交数据
触发工作流
更新记录
批量更新
JS Action
操作权限

进阶

联动规则
事件流
变量
RunJS
Previous PageJS Field
Next PageJS Column

#JS Item

#介绍

JS Item 用于表单中的“自定义项”(非字段绑定)。你可以用 JavaScript/JSX 渲染任意内容(提示、统计、预览、按钮等),并与表单、记录上下文交互,适合实时预览、说明提示、小型交互组件等场景。

jsitem-add-20251929

#运行时上下文 API(常用)

  • ctx.element:当前项的 DOM 容器(ElementProxy),支持 innerHTML、querySelector、addEventListener 等;
  • ctx.form:AntD Form 实例,可 getFieldValue / getFieldsValue / setFieldsValue / validateFields 等;
  • ctx.blockModel:所在表单块模型,可监听 formValuesChange 实现联动;
  • ctx.record / ctx.collection:当前记录与集合元信息(部分场景可用);
  • ctx.requireAsync(url):按 URL 异步加载 AMD/UMD 库;
  • ctx.importAsync(url):按 URL 动态导入 ESM 模块;
  • ctx.openView(viewUid, options):打开已配置的视图(抽屉/对话框/页面);
  • ctx.message / ctx.notification:全局提示与通知;
  • ctx.t() / ctx.i18n.t():国际化;
  • ctx.onRefReady(ctx.ref, cb):容器就绪后再渲染;
  • ctx.React / ctx.ReactDOM / ctx.antd:支持 JSX,直接由 ctx.ReactDOM 渲染。
  • ctx.render(vnode):渲染 React 元素/HTML/DOM 到默认容器 ctx.element;多次渲染会复用 Root,并覆盖容器现有内容。

#编辑器与片段

  • Snippets:打开内置代码片段列表,可搜索并一键插入到当前光标位置。
  • Run:直接运行当前代码,并将运行日志输出到底部 Logs 面板;支持 console.log/info/warn/error 与错误高亮定位。

jsitem-toolbars-20251029

  • 可结合 AI 员工生成/修改脚本:AI 员工 · Nathan:前端工程师

#常见用法(精简示例)

#1) 实时预览(读取表单值)

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) 打开视图(抽屉)

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) 加载外部库并渲染

// 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>);

#注意事项

  • 外部库加载建议使用可信 CDN,失败场景需做好兜底(如 if (!lib) return;)。
  • 选择器建议优先使用 class 或 [name=...],避免使用固定 id,防止多个区块/弹窗中重复 id。
  • 事件清理:表单值频繁变化会触发多次渲染,绑定事件前应清理或去重(如先 remove 再 add,或 { once: true },或 dataset 标记防重复)。

#相关文档

  • 变量与上下文
  • 联动规则
  • 视图与弹窗