Skip to content

高级表格


image

介绍

表格组件是中后台系统中最为常用的数据组件,高级表格组件内包含了数据的表格展示、表格的操作按钮以及表格的查询搜索等功能,我们提供了丰富的功能和样式选择以满足不同场景下对表格展示的需要。为了保证交互配置的便捷性,我们不再对表格组件进行更多的组件拆分,全部通过配置项的形式提供给用户进行低代码配置。

API

Props 属性-基础配置

参数名描述类型默认值
status高级表格的显示隐藏状态'default' |'hide''default'
title表格上方显示的标题string''
loading表格的加载状态booleanfalse
showTitle控制标题的显示隐藏状态booleanfalse
rowOrder控制序号列的显示隐藏状态booleanfalse

Props 属性-数据列

参数描述类型默认值
title标题string'default'
name数据字段string''
colType数据展示类型string'text'
renderFunc自定义展示配置,当字段展示类型为'自定义'时,可配置自定义渲染函数。渲染函数同时支持配置 '鼠标点击' 等事件,详情参考帮助文档function渲染函数默认见下面自定义展示配置
hide隐藏列,是否在表格中隐藏该列展示booleanfalse
groupTitle分组标题,用于复合表头类型表格,当多个连续列的分组标题设置为相同内容时,这多个列会展示为复合表头形式,复合表头标题为填写内容string''
width列宽number-
tip列头提示文字,若进行设置,会在表头标题旁显示提示图标,鼠标移入展示提示内容string''
titleOperate列头操作'none'|'sorter''none'
sortord排序方式'internal'|'event''internal'
titleAlign列头对齐,表格列标题单元格的对齐方式'left'|'center'|'right''left'
dataAlign数据对齐,表格内容单元格的对齐方式'left'|'center'|'right''left'
ellipsis表格单元格内容超出时是否显示...booleanfalse

自定义展示配置

javascript
/**
 *  自定义渲染函数 
 *  data: { record: TableData; column: TableColumnData; rowIndex: number; }
 *  ctx: PangeaContext
 **/
function render(data, ctx) {
  // 支持返回jsx渲染内容
  // 例如 return <span style="color: orange">{record[column.dataIndex]}</span>;
  const record = data.record;
  const column = data.column;
  return record[column.dataIndex]
}

Props 属性-数据列-数据编辑格式

参数描述类型默认值
editType
数据编辑格式
'input'|'inputNumber'|'textarea'| 'select'|'treeSelect'|'date'|'time'
'input'
placeholder占位提示string-
validate数据校验方式,可选无校验或预设的优先校验或自定义校验'none'|'email'|'custom''none'
regex正则表达式string-
showColumnBtn按钮,是否显示控件后的按钮booleanfalse
columnBtnIcon图标选择string-
precision数字精度number-
max数字的最大值number-
min数字的最小值number-
max最大长度number-
autoSize自适应内容高度booleanfalse
showWordLimit字数统计booleanfalse
allowClear允许清除booleanfalse
mode数据编辑格式-单选/复选'single'|'multiple''single'
optionType选项类型,下拉选择的选项来源类型'custom'|'api'|'cascade''custom'
fieldNames指定字段配置项、指定字段名,选项数据中 key 和 title 对应的取值字段FieldNames
options数据配置、选项数据,数据编辑格式为树选择时生效Object[]-
search搜索'off'|'on'|'remote'false
api查询API,选项的来源类型为接口获取时,配置接口api,可选项来源于页面API管理面板维护列表API-
cascadeCol关联数据,选项的来源类型为数据联动时,关联数据的字段名string-
cascadeApi联动查询API,选项的来源类型为数据联动时,关联数据变化时调用的查询API,可选项来源于页面API管理面板维护列表API-
multiple多选booleanfalse
isVirtualList是否开启虚拟列表booleanfalse
virtualListHeight虚拟列表可视区域高度number200
switch可搜索booleanfalse
filterOption是否过滤选项booleanfalse
searchDelay搜索事件延迟时间string'500'
loading是否为加载状态booleanfalse
isLoadMore开启异步加载booleanfalse
loadMore异步加载函数Function-
selectable可选节点Function-
dataType日期类型'date'|'month'|'week'|'quarter'|'year''date'
isRangeSelect范围选择,数据编辑格式为日期选择时,是否开启日期范围选择booleanfalse
format日期格式,数据编辑格式为日期选择时,日期格式的配置,可选'YYYY-MM-DD'|'MM-DD'|'YYYY-MM-DD HH:mm'|'YYYY-MM-DD HH:mm:ss'-
format时间格式,数据编辑格式为时间选择时,时间格式的配置,可选'HH:mm:ss'|'HH:mm'|'HH''HH:mm:ss'

Props 属性-数据源

参数描述类型默认值
fetchByApi通过API获取,表格数据是否通过API获取booleanfalse
data表格数据,配置表格数据属性,需包含rows和total属性。表格数据支持数据绑定。{ rows: Record<string,any>[], total: number }{ "rows": [],"total": 0}
api表格数据(API获取),绑定API,可先在API管理面板维护表格的查询API信息,再在表格数据源配置处打开通过API获取开关,表格数据(API获取)选择创建好的API。API-
autoLoad自动加载booleanfalse
rowKey数据主键string-

注意

请不要忘记数据主键属性的配置,该属性用于标注表格数据的唯一值字段,通常为id字段。该字段会用于删除操作传参。

Props 属性-顶部操作

参数描述类型默认值
showTableOperate显示操作栏,顶部操作区域的显隐状态booleantrue
buttons操作按钮,支持内置新增、删除、导入按钮及自定义按钮。内置导入按钮的配置方式见底部内置导入功能配置示例TopButton[]-
addValue表单值,在新增按钮配置面板中的内置表单中配置,支持绑定变量Record<string,any>{}
refresh刷新,刷新快捷操作按钮显隐状态booleanfalse
filter筛选,筛选快捷操作按钮显隐状态,筛选操作用于用户自定义查询条件及查询操作符booleanfalse
setting设置,设置快捷操作按钮显隐状态,设置操作用于用户自定义表格行密度(仅支持本地存储)、自定义列显隐状态及展示顺序(可配置本地存储或API存储)。booleanfalse
storagePolicy存储策略,配置自定义列显隐状态及展示顺序的存储策略,可选。'local'|'api''local'
saveSettingsApi保存表格设置的API,配置API存储策略时保存的api。如果不做配置,将使用盘古提供的默认接口string-
querySettingsApi查询表格设置的API,配置API存储策略时查询的api。如果不做配置,将使用盘古提供的默认接口string-

Props 属性-顶部操作-操作按钮

参数描述类型默认值
defaultStatus默认状态'default''hide',
title标题string-
btnType样式'primary'|'default'|'dashed'|'outline'|'text''primary'
status按钮状态'default'|'normal'|'success'|'warning'|'error''normal'
authControl按钮权限booleanfalse
authDesc权限项描述string-
icon图标string-
api新增APIstring-
loading加载状态booleanfalse
mode按钮类型'default'|'upload''default'
uploadAction导入actionstring-
uploadName上传文件名string-
uploadAccept接受文件类型,具体参考 HTML标准string-
uploadMultiple支持多文件上传booleanfalse
uploadHeaderData上传请求header附加的数据Object<string,any>-
uploadData上传请求附加的数据string-
ableCondition可用条件'none'|'one'|'moreThanOne'|'moreThanTwo''none'
select显示条件'none'|'one'|'moreThanOne'|'moreThanTwo''none'
groupTitle分组标题string-
uploadModalWidth浮层宽度{value: string; unit: 'px'|'%';}-

Props 属性-行操作

参数描述类型默认值
rowSelectType行选择器,表格勾选操作行的状态(关none、单选single、复选multiple'none'|'single'|'multiple''none'
checkType行勾选方式(勾选框、点击行)'checkbox'|'row''checkbox'
maxCount最大条数,填写空或者0不限制选择数量,设置最大可选数量后不可全选number-
selectedRows已选中的行,勾选的行数据,可绑定变量,当用户进行勾选行操作时,绑定的变量会同步进行改变Record<string,any>[][]
rowSelectFunc勾选行数据改变时,用户勾选行回调事件配置,事件函数params参数对象包含selectedRowKeys(勾选行的数据主键数组)和selectedRows(勾选行数据数组)两个属性Function-
onSelect点击行选择器时触发,用户勾选行回调事件配置,事件函数params参数对象包含rowKeys(勾选行的数据主键数组)、rowKey(勾选行主键)、record(当前行数据)三个属性Function-
onSelectAll点击全选选择器时触发,用户勾选行回调事件配置,事件函数params参数对象包含checked(勾选状态)和rows(当前表格数据)两个属性Function-
rowClass表格行元素的类名string''
rowDraggable行拖拽,是否开启表格行拖动排序(关、锚点)string'none'|'draggable'
showTableOperate显示操作栏,操作列显隐状态booleantrue
tableOperateWidth宽度number200
buttonType操作按钮类型'text'|'icon''text'
tableButtons操作配置,操作栏中操作的配置OButton[]-
tableMaxButtons最大展示数量,操作列按钮的最大展示数量,超过数量会将超出按钮显示到更多按钮中number3
record当前操作行,可绑定变量,当用户进行操作列按钮点击操作时,绑定的变量会同步进行改变Record<string,any>-

Props 属性-搜索

参数描述类型默认值
searchType类型,索区域的类型(完整、简约、关)'default'|'simple'|'none''default'
defaultUnfold默认展开,搜索区域默认是否展开(类型===完整)booleanfalse
expandNewline展开收起通栏展示,展开收起操作是否单独一行展示,关闭后展开收起放在按钮操作上(类型===完整)booleantrue
searchColumns查询条件EditColumn[][]
searchValue查询默认值Record<string,any>{}
labelWidth标题宽度,查询区域表单项标题宽度number100
spanXs布局,屏幕 < 576pxstring'24'
spanSm布局,屏幕 ≥ 576pxstring'12'
spanMd布局,屏幕 ≥ 768pxstring'12'
spanLg布局,屏幕 ≥ 992pxstring'12'
spanXl布局,屏幕 ≥ 1200pxstring'8'
spanXxl布局,屏幕 ≥ 1600pxstring'6'

Props 样式

参数描述类型默认值
baseStyle自定义样式string-
customClass类名绑定string-
自定义样式表格整体自定义样式string-
size尺寸,表格整体尺寸大小,可选('大' | '中' | '小' | '迷你')'large'|'medium'|'small'|'mini''medium'
width表格宽度,可选单位为像素或百分比number-
scrollWidth滚动容器宽度,表格实际宽度超出时出现滚动条,可选单位为像素或百分比number-
scrollHeight滚动容器高度,表格实际高度超出时出现滚动条,可选单位为像素或百分比number-
bordered显示边框,控制表格是否显示边框booleanfalse
stripe显示斑马纹,控制表格是否显示斑马纹booleanfalse
showHeader显示表头,控制表格是否显示表头booleantrue

Props 高级-基础配置

参数描述类型默认值
uniqueKey唯一标识string-
emptyText空数据文案,表格数据为空时显示的文案内容string'暂无数据'
highLightKeys行高亮显示,决定高亮显示的数据,值为「数据主键」数组Array<string | number>-
spanMethod合并单元格,通过调用函数返回合并的行数和合并的列数,函数示例见下方代码function-
columnResizable是否允许调整列宽,控制是否允许用户调整列宽booleantrue

单元格合并示例

js
/**
 *  单元格合并函数 
 *  params: { rowIndex: number; columnIndex: number; column: TableColumnData; record: object; }
 **/
function spanMethod(params, ctx) {
  if (params.rowIndex === 1 && params.columnIndex === 1) {
    return {
      rowspan: 2,
      colspan: 3
    }
  }
}

Props 高级-分页

参数描述类型默认值
pagination使用分页,控制是否开启分页booleantrue
paginationType类型,分页器的样式风格类型,可选('默认' | '简约')'default'|'simple''default'
pageNum当前页数,分页器的当前页数,支持绑定变量number-
pageSize每页展示数量,表格每页最多展示数据的条数number-
singlePageHidePagination单页时隐藏分页,是否在只有一页时隐藏分页器booleanfalse
showTotal显示数据总数booleantrue
customTotalRender自定义总条数内容function-
showPageSizeOptions显示数据条数选择器booleantrue
pageSizeOptions条数选项列表string10,20,30,40,50
showJumper显示跳转booleantrue

Props 高级-树形表格

参数描述类型默认值
treeData启用树形,控制是否开启树形表格booleanfalse
expandedRowKeys展开渲染的行,决定展开的行数据Record<string,any>[]-
onExpand展开收起触发的事件function-

Props 高级-固定列

参数描述类型默认值
fixed固定列booleanfalse
fixedLeft左侧固定列数number-
fixedRight右侧固定列数number-

Events


Events 属性-基础配置

事件名描述回调参数
onSearch分页、搜索、排序时触发ctx
params: SearchParams
onDragEnd表格拖拽排序时触发ctx
params: Array<Record<string,any>>
onRowClick点击行数据时触发ctx
params: Array<Record<string,any>>

Events 属性-数据列

事件名描述回调参数
onClick点击时触发,在数据编辑格式配置面板内配置,适用于文本、数字、文本域类型的字段,在新增弹窗、编辑弹窗、搜索面板的表单内的相应字段点击时触发ctx
onClickBtn点击按钮时触发,在数据编辑格式配置面板内配置,适用于文本、数字、文本域类型的字段ctx
onChange用户搜索时事件触发,适用于下拉选择、树选择类型的字段ctx
params:{ value:string }
onSearch用户搜索时事件触发,适用于树选择类型的字段
ctx
params:{ value:string }

Events 属性-顶部操作-操作按钮

事件名描述回调参数
onClick用户点击时触发,按钮类型为自定义时生效ctx
onBeforeUpload上传前触发,按钮类型为上传时生效ctx
params:BeforeUploadFileItem
onChange上传文件改变后触发,按钮类型为上传时生效ctx
params:{fileItem: FileItem, fileList: FileItem[]}
onSuccess上传成功时触发 ,按钮类型为上传时生效ctx
params:{fileItem: FileItem, fileList: FileItem[]}

Type

javascript

// 行操作按钮配置
type OButton = {
  idnumber, // 按钮id
  title: string, // 标题
  type: 'custom'|'upload'|'delete'|'add', // 类型,custom:自定义,upload:上传,delete:删除,add:新增
  defaultStatus: "default"|"hide", // 默认状态
  status: "default"|"normal"|"success"|"warning"|"danger", // 按钮状态
  authControl: boolean, // 权限控制
  authDescstring, // 权限项描述
  icon: string, // 图标
  loading: boolean, // 加载状态
  mode: 'default'|'upload', // 按钮类型
  enableConditions: string, // 按条件显示
  disableConditions: string, // 按条件禁用
  columns: EditColumn[], // 表单项
  deleteText: string, // 删除确认文案
}

// 顶部按钮上传文件前配置
type BeforeUploadFileItem = {
  lastModified: number,
  lastModifiedDate: string,
  name: string,
  size: number,
  type: string,
  webkitRelativePath: string
}

// 上传文件改变后触发配置
type FileItem = {
  "file":File,
  "name":string,
  "percent":number,
  "response":{
    "alert":string,
    "code":string
    "data":any,
    "msg":string
    "ts":number,
  }
  "status":string,
  "uid":string,
  "url":string,
}

// 查询条件配置
type EditColumn = {
  name: string,
  title: string,
  spanNum: number,
  required: boolean,
  selected: boolean,
  default: string,
  allowClear: boolean
}

// 分页、搜索、排序时参数配置
type SearchParams = {
  pageNum: number,
  pageSize: number,
  searchInfo: Record<string, any>, 
  from: "search"\|"reset"\|"pagination"\|"order"\|"filter" 
}

// 指定字段配置
type FieldNames = {
  key: string,
  title: string,
  // 指定其他字段名
  [name: string]: string,
}

// 上传接口返回数据结构
type UploadResponse = {
  code: number|string,
  // 导入接口返回数据中涉及数据字段名的地方,请对应当前高级表格组件中配置的字段信息中的数据字段名,否则会出现数据展示异常。
  data: UploadResponseData,
}
type UploadResponseData = {
  header: Record<string, string>, 
  data: Array<Record<string,any>>
}

// OnAfterUpload事件脚本执行返回数据结构
type AfterUploadData = {
  // 预览表格的列展示配置 
  tableColumns: Array<{ title: string, dataIndex: string, width: number }>,
  // 预览表格的列表数据
  tableData: Array<Record<string, any>>,
  // 最终调用保存接口时提交的数据
  submitData: Array<Record<string, any>>,
  // 预览表格顶部提示的不匹配字段
  errorColumns: Array<string>
}

常见场景配置

内置导入功能配置示例

1、配置导入action,为默认的POST类型接口,上传文件数据的字段名为file,该导入接口需要返回所导入文件内的文件数据,返回数据结构定义见UploadResponse。数据示例如下:

json
{
  code: 0,
  data: {
    header: {
      "name": "姓名",
      "employDate": "入职日期",
      "contractDate": "合同日期",
      "salary": "月薪",
    },
    data: [
      {
        "name": "小王",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      },
      {
        "name": "小明",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      }
    ]
  }
}

2、如果导入接口返回数据结构不符合UploadResponse定义的标准,可以在前端处理,为导入按钮配置OnAfterUpload事件处理函数,在函数中把接口返回的导入数据解析转换为导入功能可接受的数据结构(AfterUploadData),将其在该函数中返回。例如:

javascript
/**
 * 上传后
 * 
 */
function action(ctx, params) {
  // 上传接口返回的数据
  const { response } = params;
  
  // 进行一系列解析转换的处理
  // ...
  
  // 返回处理后的数据(示例数据)
  return {
    // 预览表格的列配置数据
    tableColumns: [
      {
        title: "姓名",
        dataIndex: "name"
      },
      {
        title: "入职日期",
        dataIndex: "employDate"
      },
      {
        title: "合同日期",
        dataIndex: "contractDate"
      },
      {
        title: "月薪",
        dataIndex: "salary"
      },
    ],
    // 预览表格的列表数据
    tableData: [
      {
        "name": "小王",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      },
      {
        "name": "小明",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      }
    ],
    // 最终调用保存导入数据接口时提交的数据
    submitData: [
      {
        "name": "小王",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      },
      {
        "name": "小明",
        "employDate": "2018-08-22",
        "contractDate": "2018-08-22 ~ 2018-08-22",
        "salary": "35,000.00"
      }
    ],
    // 预览表格顶部会提示哪些字段与高级表格字段配置不匹配
    errorColumns: []
  }
}

设置表格高度撑满页面剩余高度

1、表格自定义样式设置

less
:rootNode {
  height: calc(100vh - 200px); // 整个表格高度,根据页面剩余高度自行调整
  display: flex;
  flex-direction: column;
  .arco-table {
    flex: 1;
  }
}

2、设置表格容器滚动高度为任意固定值

image

跨页选择数据处理 (示例如下)

1、定义三个变量

  • allSelectedRows 表格所有的勾选行数据
  • selectedRows 表格当前分页勾选行数据
  • tableData 表格数据

表格设置的数据主键为:loginName

2、切换分页,表格接口数据获取后对selectedRows进行赋值,可直接将allSelectedRows的值赋给selectedRows,注意:赋值时数据深拷贝一下。

3、行操作设置-点击行选择器时触发

javascript
  const {rowKeys, rowKey, record} = params;
  // 判断当前点击行选择器是勾选还是取消勾选
  if (rowKeys.includes(rowKey)) {
    // 为勾选数据
    if (!ctx.state.allSelectedRows.some(i => i.loginName === rowKey)) {
      ctx.state.allSelectedRows.push(record)
    }
  } else {
    // 为取消勾选数据
    const index = ctx.state.allSelectedRows.findIndex(i => i.loginName === rowKey)
    if (index >= 0) {
      ctx.state.allSelectedRows.splice(index, 1)
    }
  }

4、行操作设置-点击全选选择器时触发

javascript
const {
    checked,
    rows
  } = params
  if (checked) {
    // 全勾选
    rows.forEach(item => {
      if (!ctx.state.allSelectedRows.some(i => i.loginName === item.loginName)) {
        ctx.state.allSelectedRows.push(item)
      }
    })
  } else {
    // 取消全勾选
    rows.forEach(item => {
      const index = ctx.state.allSelectedRows.findIndex(i => i.loginName === item.loginName)
      if (index >= 0) {
        ctx.state.allSelectedRows.splice(index, 1)
      }
    })
  }