Table 表格界面

Table Widget 用于列表界面制作。 Table DSL 文件放在 tables 目录中, 文件扩展名为 .tab.yao。

约定

  1. 示例中约定应用根目录为 /data/app, 实际编写时需替换为应用根目录。
  2. 使用 <> 标识自行替换的内容。 例如: icon-<图标名称>, 实际编写时应替换为: icon-foo, icon-bar ...

命名

DSL 文件命名:

  1. 小写字母, 下划线 “_, 横杠 "-" 组成,
  2. 必须由 小写字母 开头,
  3. Widget ID 为文件名称(不含扩展名), 如包含多级目录用 "." 替代 "\/"
DSL 文件Widget ID
/data/app/tables/user.tab.yaouser
/data/app/tables/user/tasks.tab.yaouser.tasks
/data/app/tables/user/stat/list.tab.yaouser.stat.list

路由

默认:

http://<IP|域名>:<YAO_PORT>/<管理后台路由前缀>/x/Table/<Widget ID>

Query 参数:

http://<IP|域名>:<YAO_PORT>/<管理后台路由前缀>/x/Table/<Widget ID>?<URLQuery Params>

查看表格示例 /data/app/tables/pet.tab.yao

Table DSL

字段类型必填项默认值示例说明
nameStringPet Admin表格名称, 支持多语言
actionObject查看详情表格数据交互。用于指定列表检索、保存等操作的处理器,设置数据 Hook,绑定模型等
layoutObject查看详情表格界面布局。显示字段、筛选器、批量编辑等
fieldsObject查看详情表格字段定义。指定表格列字段, 表格筛选器字段定义
configObject查看详情表格界面配置项。表格满屏显示等配置

action Object

表格数据交互。用于指定列表检索、保存等操作的处理器,设置数据 Hook,绑定模型等

字段类型必填项默认值示例说明
bindObject查看详情绑定 model 或 table。 根据关联 Widget ID 设定表格关联处理器和界面呈现默认值
settingObject查看详情关联处理器。返回表格页面配置
searchObject查看详情关联处理器。指定列表数据搜索处理器和默认参数, 返回带有分页信息和数据记录数组
getObject查看详情关联处理器。指定列表数据搜索处理器和默认参数, 返回数据记录数组
findObject查看详情关联处理器。指定按主键查询单条数据处理器和默认参数, 返回单条数据记录
saveObject查看详情关联处理器。指定保存单条数据处理器
createObject查看详情关联处理器。指定新建单条数据处理器
updateObject查看详情关联处理器。指定按主键更新单条数据处理器
deleteObject查看详情关联处理器。指定按主键删除单条数据处理器
insertObject查看详情关联处理器。指定插入多条数据处理器
update-inObject查看详情关联处理器。指定按一组主键,更新多条数据处理器
update-whereObject查看详情关联处理器。指定按查询条件,更新多条数据处理器
delete-inObject查看详情关联处理器。指定按一组主键,删除多条数据处理器
delete-whereObject查看详情关联处理器。指定按查询条件,删除多条数据处理器
before:searchString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:getString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:findString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:saveString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:createString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:updateString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:deleteString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:insertString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:update-inString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:update-whereString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:delete-inString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:delete-whereString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
after:searchString查看详情After Hook。在关联处理器之后运行,输入关联处理器返回结果,返回处理后的结果
after:getString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:findString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:saveString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:createString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:updateString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:deleteString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:insertString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:update-inString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:update-whereString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:delete-inString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:delete-whereString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果

action.bind Object

绑定 model 或 table。 根据关联 Widget ID 设定表格关联处理器和界面呈现默认值

字段类型必填项默认值示例说明
modelStringpet绑定数据模型。 Model Widget ID
tableStringdoctor绑定表格。 Table Widget ID
optionObject{"form":"pet"}指定 Form Widget ID 关联表单, bind.model 不为空时有效
绑定模型
{
"name": "::Bind Model",
"action": {
"bind": {
"model": "pet",
"option": { "form": "pet" } //
},
// 自定义关联处理器
"search": {
"guard": "-", // 鉴权方式
"process": "scripts.pet.Search", // 调用处理器
"default": [null, 1, 5] // 默认参数表
}
}
}

关联处理器默认值:

关联处理器guardprocessdefault
searchbearer-jwtmodels.<Widget ID>.Paginate[null, null, null]
getbearer-jwtmodels.<Widget ID>.Get[null]
findbearer-jwtmodels.<Widget ID>.Find[null, null]
savebearer-jwtmodels.<Widget ID>.Save[null]
createbearer-jwtmodels.<Widget ID>.Create[null]
updatebearer-jwtmodels.<Widget ID>.Update[null, null]
deletebearer-jwtmodels.<Widget ID>.Delete[null]
insertbearer-jwtmodels.<Widget ID>.Insert[null, null]
update-inbearer-jwtmodels.<Widget ID>.UpdateWhere[null, null]
update-wherebearer-jwtmodels.<Widget ID>.UpdateWhere[null, null]
delete-inbearer-jwtmodels.<Widget ID>.DeleteWhere[null]
delete-wherebearer-jwtmodels.<Widget ID>.DeleteWhere[null]

数据表字段类型与表格字段定义 fields 映射表:

https://github.com/YaoApp/yao/blob/main/yao/fields/model.trans.json

同时绑定表单:

如果将 bind.option.form 指定为 Form Widget ID, 表格将增加新增、查看、编辑功能。

绑定表格
{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "table": "bind.pet" },
"search": {
"guard": "-",
"process": "scripts.pet.Search",
"default": [null, 1, 2]
}
}
}

复制指定 Table Widget ID 的表格, 在次表格基础上微调,创建一张新的表格。

action.关联处理器 Object

使用关联处理器指定表格数据读取、写入逻辑。

字段类型必填项默认值示例说明
guardStringbearer-jwtscripts.guard.Pet数据接口鉴权方式
processStringflows.pet.search关联处理器名称
defaultArray[null, 1, 2]关联处理器默认值,null 表示不设定默认值

Before Hook

在关联处理器之前运行,一般用于处理参数表数据。

{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "model": "pet" },
"before:search": "scripts.pet.BeforeSearch" // 设定 Hook 处理器
}
}

/data/app/scripts/pet.js Hook 脚本

/**
* 在关联处理器 search 之前运行
* @param query 查询参数
* @param page 当前页面
* @param pagesize 每页显示记录数
*/
function BeforeSearch(query, page, pagesize) {
return [query, page, pagesize];
}
/**
* 在关联处理器 get 之前运行
* @param query 查询参数
*/
function BeforeGet(query) {
return [query];
}
/**
* 在关联处理器 find 之前运行
* @param id 数据记录主键数值
* @param query 查询参数
*/
function BeforeFind(id, query) {
return [id, query];
}
/**
* 在关联处理器 save 之前运行
* @param payload 用户提交数据记录
*/
function BeforeSave(payload) {
return [payload];
}
/**
* 在关联处理器 create 之前运行
* @param payload 用户提交数据记录
*/
function BeforeCreate(payload) {
return [payload];
}
/**
* 在关联处理器 update 之前运行
* @param id 数据记录主键数值
* @param payload 用户提交数据记录
*/
function BeforeUpdate(id, payload) {
return [payload];
}
/**
* 在关联处理器 delete 之前运行
* @param id 数据记录主键数值
* @param query 查询参数
*/
function BeforeDelete(id) {
return [id];
}
/**
* 在关联处理器 insert 之前运行
* @param columns 字段清单 ["id", "name", "status"...]
* @param values 与字段对应的数值列表 [[1, "foo", "enabled"], [2, "bar", "disabled"]]
*/
function BeforeInsert(columns, values) {
return [columns, values];
}
/**
* 在关联处理器 update-in 之前运行
* @param ids 主键列表
* @param payload 更新字段
*/
function BeforeUpdateIn(ids, payload) {
return [ids, payload];
}
/**
* 在关联处理器 update-where 之前运行
* @param query 查询条件
* @param payload 更新字段
*/
function BeforeUpdateWhere(query, payload) {
return [query, payload];
}
/**
* 在关联处理器 delete-in 之前运行
* @param ids 主键列表
*/
function BeforeDeleteIn(ids) {
return [ids];
}
/**
* 在关联处理器 delete-where 之前运行
* @param query 查询条件
*/
function BeforeDeleteWhere(query) {
return [query];
}

After Hook

在关联处理器之后运行,一般用于处理结果集数据。

{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "model": "pet" },
"after:search": "scripts.pet.AfterSearch" // 设定 Hook 处理器
}
}

/data/app/scripts/pet.js Hook 脚本

/**
* 在关联处理器 search 之后运行
* @param result 处理器运行结果
*/
function AfterSearch(result) {
return result;
}
/**
* 在关联处理器 get 之后运行
* @param result 处理器运行结果
*/
function AfterGet(result) {
return result;
}
/**
* 在关联处理器 find 之后运行
* @param result 处理器运行结果
*/
function AfterFind(result) {
return result;
}
/**
* 在关联处理器 save 之后运行
* @param result 处理器运行结果
*/
function AfterSave(result) {
return result;
}
/**
* 在关联处理器 create 之后运行
* @param result 处理器运行结果
*/
function AfterCreate(result) {
return result;
}
/**
* 在关联处理器 update 之后运行
* @param result 处理器运行结果
*/
function AfterUpdate(result) {
return result;
}
/**
* 在关联处理器 delete 之后运行
* @param result 处理器运行结果
*/
function AfterDelete(result) {
return result;
}
/**
* 在关联处理器 insert 之后运行
* @param result 处理器运行结果
*/
function AfterInsert(result) {
return result;
}
/**
* 在关联处理器 update-in 之后运行
* @param result 处理器运行结果
*/
function AfterUpdateIn(result) {
return result;
}
/**
* 在关联处理器 update-where 之后运行
* @param result 处理器运行结果
*/
function AfterUpdateWhere(result) {
return result;
}
/**
* 在关联处理器 delete-in 之后运行
* @param result 处理器运行结果
*/
function AfterDeleteIn(result) {
return result;
}
/**
* 在关联处理器 delete-where 之后运行
* @param result 处理器运行结果
*/
function AfterDeleteWhere(result) {
return result;
}

layout Object

表格界面布局。显示字段、筛选器、批量编辑等

字段类型必填项默认值示例说明
primaryStringuser_id数据主键
headerObject查看详情表格界面头部布局。设置批量操作、导入配置等
filterObject查看详情表格筛选器。设置筛选条件和右上角操作按钮等
tableObject查看详情表格布局。设置显示列,行操作按钮等

layout.header Object

表格界面头部布局。设置批量操作、导入配置等

字段类型必填项默认值示例说明
presetObject批量操作、导入配置等
actionsArray自定义操作按钮
{
"preset": {
// 批量操作设定
"batch": {
// 可批量操作的字段
"columns": [
{ "name": "名称", "width": 12 }, // name: fields.table 中定义的字段名称; width: 字段宽度, 24 栅格
{ "name": "消费金额", "width": 12 },
{ "name": "入院状态", "width": 12 }
],
"deletable": true // 批量删除按钮
},
// 关联数据导入项
"import": {
"name": "pet", // Import Widget ID
"actions": [
{
"title": "跳转",
"icon": "icon-airplay", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"History.push": { "payload": "/404" }
}
}
] // 数据导入界面操作按钮链接
}
},
// 自定义操作按钮
"actions": [
{
"title": "页面跳转", // 按钮名称
"icon": "icon-airplay", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"History.push": { "payload": "/404" }
}
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法
"Service.foo": { "method": "Bar", "args": ["foo", "bar"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["hello", "world"] }
}
}
]
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
History.push{ "payload": "<路由地址>"}跳转到指定路由地址
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

layout.filter Object

表格筛选器。设置筛选条件和右上角操作按钮等

字段类型必填项默认值示例说明
columnsArray筛选条件, 在 fields.filter 中定义的筛选条件字段
actionsArray自定义操作按钮(界面右上方)
{
// 支持筛选的字段清单
"columns": [
{ "name": "名称", "width": 4 }, // name: fields.filter 中定义的字段名称; width: 字段宽度, 24 栅格
{ "name": "状态", "width": 4 }
],
// 自定义操作按钮
"actions": [
{
"title": "添加宠物", // 按钮名称
"icon": "icon-plus", // 按钮图标, 可用图标 https://feathericons.com/
"width": 3, // 操作按钮宽度, 24 栅格
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"Common.openModal": {
"width": 640,
"Form": { "type": "edit", "model": "pet" }
}
}
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法
"Service.foo": { "method": "Bar", "args": ["foo", "bar"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["hello", "world"] }
}
}
]
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
Common.openModal{"width":<窗体宽度>, "Form": { "type":"<表单呈现方式 edit \| view>", "model":"<Form Widget ID>"} }打开表单模态窗
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

layout.table Object

表格布局。设置显示列,行操作按钮等

字段类型必填项默认值示例说明
columnsArray表格列定义
operationObject表格行操作区定义

operation Object

字段类型必填项默认值示例说明
foldboolfalse是否隐藏行操作区
widthInteger200行操作区宽度(单位 px)
actionsArray自定义行操作按钮
{
"columns": [
{ "name": "名称", "width": 200 }, // name: fields.table 中定义的字段名称; width: 字段宽度, 单位 px
{ "name": "消费金额" },
{ "name": "入院状态" }
],
"operation": {
"fold": false,
"width": 255,
// 行操作按钮
"actions": [
{
"title": "查看", // 按钮名称
"icon": "icon-eye", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"Common.openModal": {
"width": 640,
"Form": { "type": "view", "model": "pet" }
}
}
},
{
"title": "治愈 {{name}}", // 使用 {{<字段名称>}} 引用表单数据
"icon": "icon-check",
"action": {
"Table.save": { "id": ":id", "status": "cured" }
},
"style": "success",
"confirm": { "title": "提示", "desc": "确认变更为治愈状态?{{name}}" }
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法, 使用 {{<字段名称>}} 引用表单数据
"Service.foo": { "method": "Bar", "args": ["{{id}}", "{{name}}"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法, 使用 {{<字段名称>}} 引用表单数据
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["{{id}}", "{{name}}"] }
}
}
]
}
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
Common.openModal{"width":<窗体宽度>, "Form": { "type":"<表单呈现方式 edit \| view>", "model":"<Form Widget ID>"} }打开表单模态窗
Table.Save{ "id": ":id", "status": "cured" }保存当前行数据
Table.Delete{ "id": ":id"}删除当前行数据
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

fields Object

表格字段定义。指定表格列字段, 表格筛选器字段定义

字段类型必填项默认值示例说明
filterObject查看详情表格筛选器字段定义
tableObject查看详情表格列字段定义

fields.filter Object

表格筛选器字段定义

KEY: 筛选器字段名称, VALUE: 字段定义

{
"医生": {
"bind": "where.doctor_id.eq", // query 名称, 例: /api/__yao/table/pet/search?where.doctor_id.eq=xxx
// 用户输入组件
"edit": {
"type": "Select", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 组件参数表
"props": {
"placeholder": "请选择医生",
"xProps": {
// 在字段名称前加 $ 前缀, 并指定处理器,将自动将处理器解析为 API
"$remote": {
"process": "scripts.doctor.SelectOption",
"query": { "limit": 200 }
}
}
}
}
}
}

fields.table Object

表格列字段定义

KEY: 表格列字段名称, VALUE: 字段定义

{
"名称": {
"bind": "name", // 默认绑定API接口返回字段名称
// 字段数据呈现组件
"view": {
"bind": "name_view", // 绑定字段名称,如不指定使用默认值
"type": "Text", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 数据数值计算
// 参数表:
// $C(row) 当前行数据,
// $C(value) 当前行当前字段数值,
// $C(props) 当前组件 props,
// $C(type) 当前组件 type,
// $C(id) 当前 Widget ID
// 'hello' 字符串常量
// 1024 整形常量
// 0.618 浮点型常量
"compute": {
"process": "Concat", // 处理器名称
"args": ["$C(row.name)", "-", "$C(row.status)"]
},
"props": {}
},
// 字段数据编辑组件 (点击字段后弹出的编辑器)
"edit": {
"bind": "name", // 绑定字段名称,如不指定使用默认值
"type": "Input", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 数据数值计算 (简写)
// 默认参数表: ["$C(value)", "$C(props)", "$C(type)", "$C(id)"]
"compute": "scripts.pet.FormatName",
"props": { "placeholder": "请输入宠物名称" }
}
},
"医生": {
"bind": "doctor_id",
"view": { "type": "Text" },
"edit": {
"type": "Select",
"props": {
"placeholder": "请选择医生",
"xProps": {
// 在字段名称前加 $ 前缀, 指定处理器名称和参数,自动将处理器解析为 API
"$remote": {
"process": "scripts.doctor.SelectOption",
"query": { "pet_type": "{{ type }}" }
}
}
}
}
}
}

在 edit.props 和 view.props 中使用动态数据

...

内建 Compute 处理器

config Object

表格界面配置项。表格满屏显示等配置

字段类型必填项默认值示例说明
fullBooleantruefalse是否满屏显示表格

API

Table Widget API

请求方式路由鉴权querypayload说明
GET/api/__yao/table/:id/setting关联处理器中指定获取表格配置信息
GET/api/__yao/table/:id/component/:xpath/:methodJWT返回 fields.table\|filter.<key>.props.$xxx 绑定处理器运行结果
GET/api/__yao/table/:id/search关联处理器中指定URL Query Params按条件查询,返回带有分页信息和记录数组
GET/api/__yao/table/:id/get关联处理器中指定URL Query Params按条件查询,返回记录数组
GET/api/__yao/table/:id/find/:primary关联处理器中指定URL Query Params按主键查询单条记录,返回单条记录
GET/api/__yao/table/:id/download/:fieldJWT{"name":"<file name>", "token":"JWT"}文件下载 返回 {"content":"<文件内容>", "type":"<文件 Mime Type>"}
POST/api/__yao/table/:id/upload/:xpath/:methodJWT{"file":"<file content>"}文件上传 fields.table.<key>.props.$api
POST/api/__yao/table/:id/save关联处理器中指定{"<field>":"<value>"}保存单条记录,如 payload 中包含主键则更新,否则创建
POST/api/__yao/table/:id/create关联处理器中指定{"<field>":"<value>"}创建一条记录
POST/api/__yao/table/:id/insert关联处理器中指定{"columns":["f1", "f2">", "values":[["<f1_v1>", "<f2_v1>"],["<f1_v2>", "<f2_v2>"]]]}创建多条一条记录
POST/api/__yao/table/:id/update/:primary关联处理器中指定{"<field>":"<value>"}更新指定主键的记录
POST/api/__yao/table/:id/update/where关联处理器中指定URL Query Params{"<field>":"<value>"}更新符合查询条件记录
POST/api/__yao/table/:id/update/in关联处理器中指定ids=1,2,3,4{"<field>":"<value>"}按主键批量更新记录
POST/api/__yao/table/:id/delete/:primary关联处理器中指定{"<field>":"<value>"}删除指定主键的记录
POST/api/__yao/table/:id/delete/where关联处理器中指定URL Query Params查询符合查询条件记录
POST/api/__yao/table/:id/delete/in关联处理器中指定ids=1,2,3,4按主键批量删除记录

处理器

Table Widget 处理器

处理器参数表返回值说明
yao.table.Setting[<Widget ID>]返回表格配置返回表格 DSL 信息
yao.table.Xgen[<Widget ID>]返回表格配置返回表格配置信息, 用于 XGEN 界面引擎页面渲染
yao.table.Search[<Widget ID>, <查询参数>, <当前页码>, <每页显示记录>]返回带有分页信息和记录数组调用关联处理器,查询表格数据列表
yao.table.Get[<Widget ID>, <查询参数>]返回记录数组调用关联处理器,查询表格数据列表
yao.table.Find[<Widget ID>, <主键>,<查询参数>]返回记录调用关联处理器,按主键查询表格数据详情
yao.table.Save[<Widget ID>, <记录>]主键调用关联处理器,保存一条数据记录,参数包含主键则更新,否则创建
yao.table.Create[<Widget ID>, <记录>]主键调用关联处理器,创建数据记录
yao.table.Delete[<Widget ID>, <主键>]返回记录调用关联处理器,按主键删除记录
yao.table.Insert[<Widget ID>, <字段名称数组>, <二维记录值数组>]主键调用关联处理器,插入多条记录
yao.table.Update[<Widget ID>, <主键>,<记录>]返回更新行调用关联处理器,更新单条记录
yao.table.UpdateWhere[<Widget ID>, <查询参数>,<记录>]返回更新行调用关联处理器,更新符合查询条件记录
yao.table.UpdateIn[<Widget ID>, <主键数组>,<记录>]返回更新行调用关联处理器,更新指定主键的数据记录
yao.table.DeleteWhere[<Widget ID>, <查询参数>]返回更新行调用关联处理器,删除符合查询条件记录
yao.table.DeleteIn[<Widget ID>, <主键数组>]返回更新行调用关联处理器,删除指定主键的数据记录
yao.table.Export[<Widget ID>, <查询参数>, <每批次处理数量>]返回 Excel 文件名称调用关联处理器,导出 Excel 文件, 保存到 /data/app/data 目录

Table 表格界面

Table Widget 用于列表界面制作。 Table DSL 文件放在 tables 目录中, 文件扩展名为 .tab.yao。

约定

  1. 示例中约定应用根目录为 /data/app, 实际编写时需替换为应用根目录。
  2. 使用 <> 标识自行替换的内容。 例如: icon-<图标名称>, 实际编写时应替换为: icon-foo, icon-bar ...

命名

DSL 文件命名:

  1. 小写字母, 下划线 “_, 横杠 "-" 组成,
  2. 必须由 小写字母 开头,
  3. Widget ID 为文件名称(不含扩展名), 如包含多级目录用 "." 替代 "\/"
DSL 文件Widget ID
/data/app/tables/user.tab.yaouser
/data/app/tables/user/tasks.tab.yaouser.tasks
/data/app/tables/user/stat/list.tab.yaouser.stat.list

路由

默认:

http://<IP|域名>:<YAO_PORT>/<管理后台路由前缀>/x/Table/<Widget ID>

Query 参数:

http://<IP|域名>:<YAO_PORT>/<管理后台路由前缀>/x/Table/<Widget ID>?<URLQuery Params>

查看表格示例 /data/app/tables/pet.tab.yao

Table DSL

字段类型必填项默认值示例说明
nameStringPet Admin表格名称, 支持多语言
actionObject查看详情表格数据交互。用于指定列表检索、保存等操作的处理器,设置数据 Hook,绑定模型等
layoutObject查看详情表格界面布局。显示字段、筛选器、批量编辑等
fieldsObject查看详情表格字段定义。指定表格列字段, 表格筛选器字段定义
configObject查看详情表格界面配置项。表格满屏显示等配置

action Object

表格数据交互。用于指定列表检索、保存等操作的处理器,设置数据 Hook,绑定模型等

字段类型必填项默认值示例说明
bindObject查看详情绑定 model 或 table。 根据关联 Widget ID 设定表格关联处理器和界面呈现默认值
settingObject查看详情关联处理器。返回表格页面配置
searchObject查看详情关联处理器。指定列表数据搜索处理器和默认参数, 返回带有分页信息和数据记录数组
getObject查看详情关联处理器。指定列表数据搜索处理器和默认参数, 返回数据记录数组
findObject查看详情关联处理器。指定按主键查询单条数据处理器和默认参数, 返回单条数据记录
saveObject查看详情关联处理器。指定保存单条数据处理器
createObject查看详情关联处理器。指定新建单条数据处理器
updateObject查看详情关联处理器。指定按主键更新单条数据处理器
deleteObject查看详情关联处理器。指定按主键删除单条数据处理器
insertObject查看详情关联处理器。指定插入多条数据处理器
update-inObject查看详情关联处理器。指定按一组主键,更新多条数据处理器
update-whereObject查看详情关联处理器。指定按查询条件,更新多条数据处理器
delete-inObject查看详情关联处理器。指定按一组主键,删除多条数据处理器
delete-whereObject查看详情关联处理器。指定按查询条件,删除多条数据处理器
before:searchString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:getString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:findString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:saveString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:createString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:updateString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:deleteString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:insertString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:update-inString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:update-whereString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:delete-inString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
before:delete-whereString查看详情Before Hook。在关联处理器之前运行,输入用户输入的参数表,返回处理后的参数表
after:searchString查看详情After Hook。在关联处理器之后运行,输入关联处理器返回结果,返回处理后的结果
after:getString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:findString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:saveString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:createString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:updateString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:deleteString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:insertString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:update-inString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:update-whereString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:delete-inString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果
after:delete-whereString查看详情After Hook。在关联处理器之前运行,输入关联处理器返回结果,返回处理后的结果

action.bind Object

绑定 model 或 table。 根据关联 Widget ID 设定表格关联处理器和界面呈现默认值

字段类型必填项默认值示例说明
modelStringpet绑定数据模型。 Model Widget ID
tableStringdoctor绑定表格。 Table Widget ID
optionObject{"form":"pet"}指定 Form Widget ID 关联表单, bind.model 不为空时有效
绑定模型
{
"name": "::Bind Model",
"action": {
"bind": {
"model": "pet",
"option": { "form": "pet" } //
},
// 自定义关联处理器
"search": {
"guard": "-", // 鉴权方式
"process": "scripts.pet.Search", // 调用处理器
"default": [null, 1, 5] // 默认参数表
}
}
}

关联处理器默认值:

关联处理器guardprocessdefault
searchbearer-jwtmodels.<Widget ID>.Paginate[null, null, null]
getbearer-jwtmodels.<Widget ID>.Get[null]
findbearer-jwtmodels.<Widget ID>.Find[null, null]
savebearer-jwtmodels.<Widget ID>.Save[null]
createbearer-jwtmodels.<Widget ID>.Create[null]
updatebearer-jwtmodels.<Widget ID>.Update[null, null]
deletebearer-jwtmodels.<Widget ID>.Delete[null]
insertbearer-jwtmodels.<Widget ID>.Insert[null, null]
update-inbearer-jwtmodels.<Widget ID>.UpdateWhere[null, null]
update-wherebearer-jwtmodels.<Widget ID>.UpdateWhere[null, null]
delete-inbearer-jwtmodels.<Widget ID>.DeleteWhere[null]
delete-wherebearer-jwtmodels.<Widget ID>.DeleteWhere[null]

数据表字段类型与表格字段定义 fields 映射表:

https://github.com/YaoApp/yao/blob/main/yao/fields/model.trans.json

同时绑定表单:

如果将 bind.option.form 指定为 Form Widget ID, 表格将增加新增、查看、编辑功能。

绑定表格
{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "table": "bind.pet" },
"search": {
"guard": "-",
"process": "scripts.pet.Search",
"default": [null, 1, 2]
}
}
}

复制指定 Table Widget ID 的表格, 在次表格基础上微调,创建一张新的表格。

action.关联处理器 Object

使用关联处理器指定表格数据读取、写入逻辑。

字段类型必填项默认值示例说明
guardStringbearer-jwtscripts.guard.Pet数据接口鉴权方式
processStringflows.pet.search关联处理器名称
defaultArray[null, 1, 2]关联处理器默认值,null 表示不设定默认值

Before Hook

在关联处理器之前运行,一般用于处理参数表数据。

{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "model": "pet" },
"before:search": "scripts.pet.BeforeSearch" // 设定 Hook 处理器
}
}

/data/app/scripts/pet.js Hook 脚本

/**
* 在关联处理器 search 之前运行
* @param query 查询参数
* @param page 当前页面
* @param pagesize 每页显示记录数
*/
function BeforeSearch(query, page, pagesize) {
return [query, page, pagesize];
}
/**
* 在关联处理器 get 之前运行
* @param query 查询参数
*/
function BeforeGet(query) {
return [query];
}
/**
* 在关联处理器 find 之前运行
* @param id 数据记录主键数值
* @param query 查询参数
*/
function BeforeFind(id, query) {
return [id, query];
}
/**
* 在关联处理器 save 之前运行
* @param payload 用户提交数据记录
*/
function BeforeSave(payload) {
return [payload];
}
/**
* 在关联处理器 create 之前运行
* @param payload 用户提交数据记录
*/
function BeforeCreate(payload) {
return [payload];
}
/**
* 在关联处理器 update 之前运行
* @param id 数据记录主键数值
* @param payload 用户提交数据记录
*/
function BeforeUpdate(id, payload) {
return [payload];
}
/**
* 在关联处理器 delete 之前运行
* @param id 数据记录主键数值
* @param query 查询参数
*/
function BeforeDelete(id) {
return [id];
}
/**
* 在关联处理器 insert 之前运行
* @param columns 字段清单 ["id", "name", "status"...]
* @param values 与字段对应的数值列表 [[1, "foo", "enabled"], [2, "bar", "disabled"]]
*/
function BeforeInsert(columns, values) {
return [columns, values];
}
/**
* 在关联处理器 update-in 之前运行
* @param ids 主键列表
* @param payload 更新字段
*/
function BeforeUpdateIn(ids, payload) {
return [ids, payload];
}
/**
* 在关联处理器 update-where 之前运行
* @param query 查询条件
* @param payload 更新字段
*/
function BeforeUpdateWhere(query, payload) {
return [query, payload];
}
/**
* 在关联处理器 delete-in 之前运行
* @param ids 主键列表
*/
function BeforeDeleteIn(ids) {
return [ids];
}
/**
* 在关联处理器 delete-where 之前运行
* @param query 查询条件
*/
function BeforeDeleteWhere(query) {
return [query];
}

After Hook

在关联处理器之后运行,一般用于处理结果集数据。

{
"name": "::Pet Admin Bind Table",
"action": {
"bind": { "model": "pet" },
"after:search": "scripts.pet.AfterSearch" // 设定 Hook 处理器
}
}

/data/app/scripts/pet.js Hook 脚本

/**
* 在关联处理器 search 之后运行
* @param result 处理器运行结果
*/
function AfterSearch(result) {
return result;
}
/**
* 在关联处理器 get 之后运行
* @param result 处理器运行结果
*/
function AfterGet(result) {
return result;
}
/**
* 在关联处理器 find 之后运行
* @param result 处理器运行结果
*/
function AfterFind(result) {
return result;
}
/**
* 在关联处理器 save 之后运行
* @param result 处理器运行结果
*/
function AfterSave(result) {
return result;
}
/**
* 在关联处理器 create 之后运行
* @param result 处理器运行结果
*/
function AfterCreate(result) {
return result;
}
/**
* 在关联处理器 update 之后运行
* @param result 处理器运行结果
*/
function AfterUpdate(result) {
return result;
}
/**
* 在关联处理器 delete 之后运行
* @param result 处理器运行结果
*/
function AfterDelete(result) {
return result;
}
/**
* 在关联处理器 insert 之后运行
* @param result 处理器运行结果
*/
function AfterInsert(result) {
return result;
}
/**
* 在关联处理器 update-in 之后运行
* @param result 处理器运行结果
*/
function AfterUpdateIn(result) {
return result;
}
/**
* 在关联处理器 update-where 之后运行
* @param result 处理器运行结果
*/
function AfterUpdateWhere(result) {
return result;
}
/**
* 在关联处理器 delete-in 之后运行
* @param result 处理器运行结果
*/
function AfterDeleteIn(result) {
return result;
}
/**
* 在关联处理器 delete-where 之后运行
* @param result 处理器运行结果
*/
function AfterDeleteWhere(result) {
return result;
}

layout Object

表格界面布局。显示字段、筛选器、批量编辑等

字段类型必填项默认值示例说明
primaryStringuser_id数据主键
headerObject查看详情表格界面头部布局。设置批量操作、导入配置等
filterObject查看详情表格筛选器。设置筛选条件和右上角操作按钮等
tableObject查看详情表格布局。设置显示列,行操作按钮等

layout.header Object

表格界面头部布局。设置批量操作、导入配置等

字段类型必填项默认值示例说明
presetObject批量操作、导入配置等
actionsArray自定义操作按钮
{
"preset": {
// 批量操作设定
"batch": {
// 可批量操作的字段
"columns": [
{ "name": "名称", "width": 12 }, // name: fields.table 中定义的字段名称; width: 字段宽度, 24 栅格
{ "name": "消费金额", "width": 12 },
{ "name": "入院状态", "width": 12 }
],
"deletable": true // 批量删除按钮
},
// 关联数据导入项
"import": {
"name": "pet", // Import Widget ID
"actions": [
{
"title": "跳转",
"icon": "icon-airplay", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"History.push": { "payload": "/404" }
}
}
] // 数据导入界面操作按钮链接
}
},
// 自定义操作按钮
"actions": [
{
"title": "页面跳转", // 按钮名称
"icon": "icon-airplay", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"History.push": { "payload": "/404" }
}
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法
"Service.foo": { "method": "Bar", "args": ["foo", "bar"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["hello", "world"] }
}
}
]
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
History.push{ "payload": "<路由地址>"}跳转到指定路由地址
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

layout.filter Object

表格筛选器。设置筛选条件和右上角操作按钮等

字段类型必填项默认值示例说明
columnsArray筛选条件, 在 fields.filter 中定义的筛选条件字段
actionsArray自定义操作按钮(界面右上方)
{
// 支持筛选的字段清单
"columns": [
{ "name": "名称", "width": 4 }, // name: fields.filter 中定义的字段名称; width: 字段宽度, 24 栅格
{ "name": "状态", "width": 4 }
],
// 自定义操作按钮
"actions": [
{
"title": "添加宠物", // 按钮名称
"icon": "icon-plus", // 按钮图标, 可用图标 https://feathericons.com/
"width": 3, // 操作按钮宽度, 24 栅格
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"Common.openModal": {
"width": 640,
"Form": { "type": "edit", "model": "pet" }
}
}
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法
"Service.foo": { "method": "Bar", "args": ["foo", "bar"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["hello", "world"] }
}
}
]
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
Common.openModal{"width":<窗体宽度>, "Form": { "type":"<表单呈现方式 edit \| view>", "model":"<Form Widget ID>"} }打开表单模态窗
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

layout.table Object

表格布局。设置显示列,行操作按钮等

字段类型必填项默认值示例说明
columnsArray表格列定义
operationObject表格行操作区定义

operation Object

字段类型必填项默认值示例说明
foldboolfalse是否隐藏行操作区
widthInteger200行操作区宽度(单位 px)
actionsArray自定义行操作按钮
{
"columns": [
{ "name": "名称", "width": 200 }, // name: fields.table 中定义的字段名称; width: 字段宽度, 单位 px
{ "name": "消费金额" },
{ "name": "入院状态" }
],
"operation": {
"fold": false,
"width": 255,
// 行操作按钮
"actions": [
{
"title": "查看", // 按钮名称
"icon": "icon-eye", // 按钮图标, 可用图标 https://feathericons.com/
// 按钮响应操作 KEY: 执行动作, VALUE: 参数表
"action": {
"Common.openModal": {
"width": 640,
"Form": { "type": "view", "model": "pet" }
}
}
},
{
"title": "治愈 {{name}}", // 使用 {{<字段名称>}} 引用表单数据
"icon": "icon-check",
"action": {
"Table.save": { "id": ":id", "status": "cured" }
},
"style": "success",
"confirm": { "title": "提示", "desc": "确认变更为治愈状态?{{name}}" }
},
{
"title": "云函数",
"icon": "icon-cloud",
"action": {
// 调用 /data/app/services/foo.js 中定义的 function Bar(...args){} 方法, 使用 {{<字段名称>}} 引用表单数据
"Service.foo": { "method": "Bar", "args": ["{{id}}", "{{name}}"] }
}
},
{
"title": "Studio 方法",
"icon": "icon-layers",
"action": {
// 调用 /data/app/studio/hello.js 中定义的 function World(...args){} 方法, 使用 {{<字段名称>}} 引用表单数据
// **仅开发模式下有效**
"Studio.hello": { "method": "World", "args": ["{{id}}", "{{name}}"] }
}
}
]
}
}

可用自定义操作 actions[*].action

KEY 执行动作VALUE 参数说明
Common.openModal{"width":<窗体宽度>, "Form": { "type":"<表单呈现方式 edit \| view>", "model":"<Form Widget ID>"} }打开表单模态窗
Table.Save{ "id": ":id", "status": "cured" }保存当前行数据
Table.Delete{ "id": ":id"}删除当前行数据
Service.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用云函数
Studio.<名称>{ "method": "<函数名>", "args": [<参数表>] }调用 Studio 云函数 仅开发模式下有效
..........

fields Object

表格字段定义。指定表格列字段, 表格筛选器字段定义

字段类型必填项默认值示例说明
filterObject查看详情表格筛选器字段定义
tableObject查看详情表格列字段定义

fields.filter Object

表格筛选器字段定义

KEY: 筛选器字段名称, VALUE: 字段定义

{
"医生": {
"bind": "where.doctor_id.eq", // query 名称, 例: /api/__yao/table/pet/search?where.doctor_id.eq=xxx
// 用户输入组件
"edit": {
"type": "Select", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 组件参数表
"props": {
"placeholder": "请选择医生",
"xProps": {
// 在字段名称前加 $ 前缀, 并指定处理器,将自动将处理器解析为 API
"$remote": {
"process": "scripts.doctor.SelectOption",
"query": { "limit": 200 }
}
}
}
}
}
}

fields.table Object

表格列字段定义

KEY: 表格列字段名称, VALUE: 字段定义

{
"名称": {
"bind": "name", // 默认绑定API接口返回字段名称
// 字段数据呈现组件
"view": {
"bind": "name_view", // 绑定字段名称,如不指定使用默认值
"type": "Text", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 数据数值计算
// 参数表:
// $C(row) 当前行数据,
// $C(value) 当前行当前字段数值,
// $C(props) 当前组件 props,
// $C(type) 当前组件 type,
// $C(id) 当前 Widget ID
// 'hello' 字符串常量
// 1024 整形常量
// 0.618 浮点型常量
"compute": {
"process": "Concat", // 处理器名称
"args": ["$C(row.name)", "-", "$C(row.status)"]
},
"props": {}
},
// 字段数据编辑组件 (点击字段后弹出的编辑器)
"edit": {
"bind": "name", // 绑定字段名称,如不指定使用默认值
"type": "Input", // 组件名称, 可用组件参考文档 https://yaoapps.com/components
// 数据数值计算 (简写)
// 默认参数表: ["$C(value)", "$C(props)", "$C(type)", "$C(id)"]
"compute": "scripts.pet.FormatName",
"props": { "placeholder": "请输入宠物名称" }
}
},
"医生": {
"bind": "doctor_id",
"view": { "type": "Text" },
"edit": {
"type": "Select",
"props": {
"placeholder": "请选择医生",
"xProps": {
// 在字段名称前加 $ 前缀, 指定处理器名称和参数,自动将处理器解析为 API
"$remote": {
"process": "scripts.doctor.SelectOption",
"query": { "pet_type": "{{ type }}" }
}
}
}
}
}
}

在 edit.props 和 view.props 中使用动态数据

...

内建 Compute 处理器

config Object

表格界面配置项。表格满屏显示等配置

字段类型必填项默认值示例说明
fullBooleantruefalse是否满屏显示表格

API

Table Widget API

请求方式路由鉴权querypayload说明
GET/api/__yao/table/:id/setting关联处理器中指定获取表格配置信息
GET/api/__yao/table/:id/component/:xpath/:methodJWT返回 fields.table\|filter.<key>.props.$xxx 绑定处理器运行结果
GET/api/__yao/table/:id/search关联处理器中指定URL Query Params按条件查询,返回带有分页信息和记录数组
GET/api/__yao/table/:id/get关联处理器中指定URL Query Params按条件查询,返回记录数组
GET/api/__yao/table/:id/find/:primary关联处理器中指定URL Query Params按主键查询单条记录,返回单条记录
GET/api/__yao/table/:id/download/:fieldJWT{"name":"<file name>", "token":"JWT"}文件下载 返回 {"content":"<文件内容>", "type":"<文件 Mime Type>"}
POST/api/__yao/table/:id/upload/:xpath/:methodJWT{"file":"<file content>"}文件上传 fields.table.<key>.props.$api
POST/api/__yao/table/:id/save关联处理器中指定{"<field>":"<value>"}保存单条记录,如 payload 中包含主键则更新,否则创建
POST/api/__yao/table/:id/create关联处理器中指定{"<field>":"<value>"}创建一条记录
POST/api/__yao/table/:id/insert关联处理器中指定{"columns":["f1", "f2">", "values":[["<f1_v1>", "<f2_v1>"],["<f1_v2>", "<f2_v2>"]]]}创建多条一条记录
POST/api/__yao/table/:id/update/:primary关联处理器中指定{"<field>":"<value>"}更新指定主键的记录
POST/api/__yao/table/:id/update/where关联处理器中指定URL Query Params{"<field>":"<value>"}更新符合查询条件记录
POST/api/__yao/table/:id/update/in关联处理器中指定ids=1,2,3,4{"<field>":"<value>"}按主键批量更新记录
POST/api/__yao/table/:id/delete/:primary关联处理器中指定{"<field>":"<value>"}删除指定主键的记录
POST/api/__yao/table/:id/delete/where关联处理器中指定URL Query Params查询符合查询条件记录
POST/api/__yao/table/:id/delete/in关联处理器中指定ids=1,2,3,4按主键批量删除记录

处理器

Table Widget 处理器

处理器参数表返回值说明
yao.table.Setting[<Widget ID>]返回表格配置返回表格 DSL 信息
yao.table.Xgen[<Widget ID>]返回表格配置返回表格配置信息, 用于 XGEN 界面引擎页面渲染
yao.table.Search[<Widget ID>, <查询参数>, <当前页码>, <每页显示记录>]返回带有分页信息和记录数组调用关联处理器,查询表格数据列表
yao.table.Get[<Widget ID>, <查询参数>]返回记录数组调用关联处理器,查询表格数据列表
yao.table.Find[<Widget ID>, <主键>,<查询参数>]返回记录调用关联处理器,按主键查询表格数据详情
yao.table.Save[<Widget ID>, <记录>]主键调用关联处理器,保存一条数据记录,参数包含主键则更新,否则创建
yao.table.Create[<Widget ID>, <记录>]主键调用关联处理器,创建数据记录
yao.table.Delete[<Widget ID>, <主键>]返回记录调用关联处理器,按主键删除记录
yao.table.Insert[<Widget ID>, <字段名称数组>, <二维记录值数组>]主键调用关联处理器,插入多条记录
yao.table.Update[<Widget ID>, <主键>,<记录>]返回更新行调用关联处理器,更新单条记录
yao.table.UpdateWhere[<Widget ID>, <查询参数>,<记录>]返回更新行调用关联处理器,更新符合查询条件记录
yao.table.UpdateIn[<Widget ID>, <主键数组>,<记录>]返回更新行调用关联处理器,更新指定主键的数据记录
yao.table.DeleteWhere[<Widget ID>, <查询参数>]返回更新行调用关联处理器,删除符合查询条件记录
yao.table.DeleteIn[<Widget ID>, <主键数组>]返回更新行调用关联处理器,删除指定主键的数据记录
yao.table.Export[<Widget ID>, <查询参数>, <每批次处理数量>]返回 Excel 文件名称调用关联处理器,导出 Excel 文件, 保存到 /data/app/data 目录