Skip to content

DataTable

DataTable 是最常用的 Type,用于展示和操作表格数据。

完整 props 结构

json
{
  "type": "DataTable",
  "props": {
    "columns": [ ... ],
    "pagination": { ... },
    "selection": { ... },
    "toolbarActions": [ ... ],
    "rowActions": [ ... ],
    "rowActionStyle": { ... },
    "createForm": { ... },
    "updateForm": { ... }
  }
}

columns

每一项为 Cell 声明 + 可选的 column 配置:

json
{
  "columns": [
    {
      "key": "orderNo",
      "label": "订单号",
      "cell": "text",
      "displayAs": "copy",
      "column": { "width": 180, "fixed": "left" }
    },
    {
      "key": "amount",
      "label": "金额",
      "cell": "currency",
      "column": { "sortable": true, "align": "right" },
      "permission": { "view": true, "edit": "order:amount:edit" }
    },
    {
      "key": "status",
      "label": "状态",
      "cell": "enum",
      "cellProps": { "options": "dict:orderStatus" },
      "displayAs": "tag"
    }
  ]
}

column 配置字段

column 字段类型默认值说明
widthnumber固定列宽(px)
minWidthnumber最小列宽(px)
fixed"left" / "right"固定列
align"left" / "center" / "right""left"对齐方式
sortablebooleanfalse是否支持列头排序
resizablebooleantrue是否可拖拽调整列宽
showOverflowTooltipbooleantrue溢出时 tooltip

不声明 column 时使用全部默认值。排序不在 Schema 中处理逻辑,用户点击排序时触发 @sort-change 事件,业务代码重新请求数据。

pagination

json
{
  "pagination": {
    "enabled": true,
    "pageSize": 20,
    "pageSizes": [10, 20, 50, 100],
    "layout": "total, sizes, prev, pager, next, jumper"
  }
}
字段类型默认值说明
enabledbooleantrue是否启用分页
pageSizenumber20默认每页条数
pageSizesnumber[][10, 20, 50, 100]可选每页条数
layoutstring"total, sizes, prev, pager, next, jumper"分页组件布局

简写

"pagination": true 等价于 { "enabled": true } 使用全部默认值;"pagination": false 或不声明则不显示分页。

selection(多选与批量操作)

json
{
  "selection": {
    "enabled": true,
    "rowKey": "id",
    "selectable": true
  }
}
字段类型默认值说明
enabledbooleanfalse是否显示 checkbox 列
rowKeystring"id"行数据唯一标识字段
selectableboolean / stringtruetrue = 所有行可选,string = 权限码

行级可选控制通过 actionControl_selection key:

javascript
actionControl: (row) => ({
  _selection: row.status !== 'locked'
})

toolbarActions

json
{
  "toolbarActions": [
    { "key": "create", "label": "新增", "permission": "order:create", "trigger": "createForm" },
    { "key": "batchDelete", "label": "批量删除", "permission": "order:delete", "batch": true, "confirm": "确认删除选中的订单?" },
    { "key": "export", "label": "导出", "permission": "order:export" }
  ]
}
字段类型说明
keystring操作标识
labelstring按钮文字
permissionstring权限标识(可选)
triggerstring指向内部功能 createForm / updateForm(可选)
batchboolean是否为批量操作,true 时无选中行自动禁用(默认 false
confirmstring二次确认文案(可选)
iconstring按钮图标(可选)

rowActions

json
{
  "rowActions": [
    { "key": "view", "label": "查看", "permission": "order:view" },
    { "key": "edit", "label": "编辑", "permission": "order:edit", "trigger": "updateForm" },
    { "key": "delete", "label": "删除", "permission": "order:delete", "danger": true, "confirm": "确认删除?" }
  ]
}
字段类型说明
keystring操作标识
labelstring按钮文字
permissionstring权限标识(可选)
triggerstring指向内部功能(可选)
confirmstring二次确认文案(可选)
dangerboolean危险操作标红(默认 false
iconstring按钮图标(可选)

rowActionStyle

json
{
  "rowActionStyle": {
    "type": "link",
    "maxVisible": 3,
    "moreText": "更多"
  }
}
字段类型默认值说明
type"link" / "button""link"操作按钮样式
maxVisiblenumber3最多显示几个,超出折叠为下拉菜单
moreTextstring"更多"折叠按钮文字

行级操作动态控制(actionControl)

通过 providers.actionControl 注入,根据行数据动态控制按钮显隐:

javascript
providers = {
  actionControl: (row) => ({
    edit: row.status !== 'done',
    delete: row.createdBy === currentUser.id ? true : 'disabled',
    _selection: row.status !== 'locked'
  })
}
返回值行为
true正常显示
false隐藏
"disabled"显示但禁用
未返回某个 key不受影响,正常显示

判定流程:permission(全局门槛)→ actionControl(行级门槛),两道都通过才显示。

toolbarActions 的动态控制通过 providers.toolbarControl(可选):

javascript
providers = {
  toolbarControl: () => ({
    batchDelete: selectedRows.length > 0
  })
}

createForm

json
{
  "createForm": {
    "title": "新增订单",
    "width": "600px",
    "closeConfirm": true,
    "keepAfterSubmit": false,
    "layout": {
      "columns": 2,
      "labelWidth": "100px",
      "labelPosition": "right"
    },
    "fields": ["customer", "amount", "status", "remark"],
    "overrides": {
      "amount": { "permission": { "edit": true } },
      "remark": { "span": 2 }
    },
    "rules": {
      "customer": [{ "required": true, "message": "请选择客户" }],
      "amount": [{ "required": true, "message": "请输入金额" }]
    }
  }
}
字段类型默认值说明
titlestring弹窗标题
widthstring"600px"弹窗宽度
closeConfirmbooleantrue有修改时关闭是否弹确认
keepAfterSubmitbooleanfalse提交成功后保持弹窗(适合连续新增)
layoutobject表单布局(见下)
fieldsstring[]引用 columns 中的 key
overridesobject按 key 覆盖 Cell 属性
rulesobject表单校验规则

layout 字段

字段类型默认值说明
columnsnumber1每行几列
labelWidthstring"auto"label 宽度
labelPosition"left" / "right" / "top""right"label 位置

overrides 可覆盖字段

字段说明
disabled强制禁用
visiblefalse 时不出现在表单中
cell覆盖数据类型
cellProps合并覆盖(浅合并)
editAs覆盖编辑渲染器
permission覆盖权限声明
defaultValue默认值
span占据列数(配合 layout.columns

updateForm

结构与 createForm 一致,区别:

  • Runtime 用当前行数据回填表单
  • 提交时触发 @updateSubmit,payload 含 { values, row }
  • keepAfterSubmit 在 updateForm 中无效

rules 校验

json
{
  "rules": {
    "phone": [
      { "required": true, "message": "请输入手机号" },
      { "pattern": "^1[3-9]\\d{9}$", "message": "手机号格式不正确" }
    ],
    "name": [
      { "required": true, "message": "请输入姓名" },
      { "min": 2, "max": 20, "message": "长度 2-20 个字符" }
    ],
    "email": [
      { "type": "email", "message": "邮箱格式不正确" }
    ],
    "amount": [
      { "validator": "validateAmount", "message": "金额不合法" }
    ]
  }
}
rule 字段类型说明
requiredboolean必填
patternstring正则表达式(字符串形式)
minnumber最小长度(字符串)或最小值(数字)
maxnumber最大长度或最大值
typestring内置类型校验:email / url / number
validatorstring自定义校验函数 key,从 providers.functions 中查找
messagestring校验失败提示
triggerstring触发时机:blur / change(默认 blur

Released under the MIT License.