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

区块

概述

数据区块

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

筛选区块

表单

其他区块

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

区块设置项

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

字段

概述

通用配置项

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

特有配置项

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

字段配置项

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

操作

概述

操作配置项

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

操作类型

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

进阶

联动规则
事件流
变量
RunJS
Previous Page批量更新
Next Page操作权限

#JS Action

#介绍

JS Action 用于按钮点击时执行 JavaScript,自定义任意业务行为。可用于表单工具栏、表格工具栏(集合级)、表格行(记录级)等位置,实现校验、提示、接口调用、打开弹窗/抽屉、刷新数据等操作。

jsaction-add-20251029

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

  • ctx.api.request(options):发起 HTTP 请求;

  • ctx.openView(viewUid, options):打开已配置的视图(抽屉/对话框/页面);

  • ctx.message / ctx.notification:全局提示与通知;

  • ctx.t() / ctx.i18n.t():国际化;

  • ctx.resource:集合级上下文的数据资源(如表格工具栏,含 getSelectedRows()、refresh() 等);

  • ctx.record:记录级上下文的当前行记录(如表格行按钮);

  • ctx.form:表单级上下文的 AntD Form 实例(如表单工具栏按钮);

  • ctx.collection:当前集合元信息;

  • 代码编辑器支持 Snippets 片段与 Run 预运行(见下)。

  • ctx.requireAsync(url):按 URL 异步加载 AMD/UMD 库;

  • ctx.importAsync(url):按 URL 动态导入 ESM 模块;

实际可用变量会随按钮所在位置不同而有所差异,以上为常见能力概览。

#编辑器与片段

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

jsaction-toolbars-20251029

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

#常见用法(精简示例)

#1) 接口请求与提示

const resp = await ctx.api.request({ url: 'users:list', method: 'get', params: { pageSize: 10 } });
ctx.message.success(ctx.t('Request finished'));
console.log(ctx.t('Response data:'), resp?.data);

#2) 集合按钮:校验选择并处理

const rows = ctx.resource?.getSelectedRows?.() || [];
if (!rows.length) {
  ctx.message.warning(ctx.t('Please select records'));
  return;
}
// TODO: 执行业务逻辑…
ctx.message.success(ctx.t('Selected {n} items', { n: rows.length }));

#3) 记录按钮:读取当前行记录

if (!ctx.record) {
  ctx.message.error(ctx.t('No record'));
} else {
  ctx.message.success(ctx.t('Record ID: {id}', { id: ctx.record.id }))
}

#4) 打开视图(抽屉/对话框)

const popupUid = ctx.model.uid + '-open'; // 绑定到当前按钮,保持稳定
await ctx.openView(popupUid, { mode: 'drawer', title: ctx.t('Details'), size: 'large' });

#5) 提交后刷新数据

// 通用刷新:优先表格/列表资源,其次表单所在区块资源
if (ctx.resource?.refresh) await ctx.resource.refresh();
else if (ctx.blockModel?.resource?.refresh) await ctx.blockModel.resource.refresh();

#注意事项

  • 行为幂等:避免重复点击导致的多次提交,可在逻辑中加状态开关或禁用按钮。
  • 错误处理:为接口调用添加 try/catch 并给出用户提示。
  • 视图联动:通过 ctx.openView 打开弹窗/抽屉时,建议显式传参,必要时在提交成功后主动刷新父级资源。

#相关文档

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