Skip to content

table 数据表格

table 数据表格的配置是一个对象。以下是其配置示例:

js
{
  table: {
    select: true,
    api: 'https://page-element2.glh.red/mook/table.json',
    col: [
      { field: "name", name: "姓名" },
      {
        name: '联系方式', children: [
          { field: "email", name: "电子邮件" },
          { field: "phone", name: "电话号码" },
        ]
      },
      { field: "city", name: "城市" },
      { field: "hobbies", name: "爱好", fmt: (value) => value.join(',') },
      {
        name: '操作', type: "button", button: [
          { name: '详情' },
          { name: '编辑', click: ({ row }) => this.edit([row]) },
          { name: '删除', confirmClick: ({ row }) => this.del([row]) },
        ]
      }
    ]
  }
}

配置属性

属性名说明类型默认值可选值
select是否开启复选框booleantrue-
rowClickSelect行点击选中booleanfalse-
data静态数据array--
api动态数据 api 请求接口 uri 地址。当 api 变更时, 会重新获取数据。string--
param请求固定参数。见 param 说明object--
paramFilter请求参数过滤函数。见 paramFilter 说明function--
size表格尺寸string'small''medium' / 'small' / 'mini'
border是否显示边框。
col 包含多级表头时, 会强制显示边框
booleantrue-
stripe斑马纹booleanfalse-
rowKeyTable Attributesrow-keyfunction(row) / String--
defaultExpandAll是否默认展开所有行, 见 Table Attributesdefault-expand-allboolean--
col列配置, 见 col 列配置array--
pagination是否开启分页booleantrue-
pageSizes页码选项array[20, 50, 100, 200]-
pageNumber请求参数, 页码字段名string'pageNo'-
pageSize请求参数, 页大小字段名string'pageSize'-
response响应处理函数。见 response 说明function--
dataField响应, 数据行的字段名string'rows'-
totalField响应, 数据数量的字段名string'total'-
orderField当某一列排序 sortable 设置为 'custom' 后, 请求参数, 排序字段名string'orderBy'-
orderBy排序顺序方式数组, 第一位为正序, 第二位为倒序array['asc', 'desc']-

param 请求固定参数

表格请求参数目前有三个来源/处理方式,按照顺序分别是:

  1. param 固定参数

    配置、预先定义的、写死的参数。

  2. search 查询条件组件

    查询条件表单的参数,其中同名参数会覆盖掉固定参数中的值。

  3. paramFilter 参数过滤函数

    当 固定参数和查询条件表单无法满足需求时,对请求参数进行最终的过滤处理。

正常情况下,paramFilter 参数过滤函数很少被使用。

paramFilter 请求参数过滤函数

paramFilter 有一个参数,它是对 search 查询条件表单的值和固定参数合并后的对象。该函数不需要返回值。

response 响应处理函数

与全局配置中的 response 函数一致,对响应进行处理,返回数据表格所需的数据格式。

函数参数为 response 请求响应,需返回一个对象,包含以下两个属性:

  • rows:数据行数组,类型:array
  • total:数据总条数,类型:number

NOTE

rowstotal 属性名可通过 dataFieldtotalField 配置

col 列配置

属性名说明类型默认值可选值
field表格每行数据对象中值对应的键名, 对应列内容的属性名string--
name表头列名string--
children多级表头中,下级表头的配置集合。配置此项后,field 属性将不再需要。array--
fmt列内容格式化, 见 fmt 说明function--
type列类型string'text'
'text' 文本
'switch' 开关
'tag' 标签
'button' 按钮
'link' 链接
show列是否显示booleantrue-
width宽度string--
minWidth对应列的最小宽度string--
sortable是否开启排序, 见 sortable 说明boolean, 'custom'false-
fixed列是否固定在左侧或者右侧,true 表示固定在左侧string, booleanfalsetrue / 'left' / 'right'
align对齐方式string'left''left' / 'center' / 'right'
class列的 classNamestring--

fmt 列内容格式化

fmt 是一个函数,接受四个参数,分别是:

  • value:根据行数据中 field 字段对应的值
  • row:当前行的数据
  • index:当前行的序号
  • col:列的配置
  • scope:Element UI 中 Table-column Scoped

该函数需要返回一个值,作为单元格显示的内容。

sortable 是否开启排序

当该配置项为布尔类型时,true 表示使用内部排序,false 表示不进行排序。若配置为 'custom',表示外部排序,请求中会携带排序参数。

请求中携带的排序参数名由 table.orderField 控制。

WARNING

若已配置 children 进行多级表头设置,则该字段无效。

type = 'switch' 开关

属性名说明类型默认值可选值
activeValue打开时的值boolean / string / numbertrue-
inactiveValue关闭时的值boolean / string / numberfalse-
valueType快捷设定打开/关闭状态的值类型,设定后 activeValueinactiveValue 将失效。string-
'bit' 1 0
'boolean' true false
change开关切换事件, 见 change 说明function--
api请求的 API 地址, 见 api 说明string--
idKey行数据中取值的字段名string'id'-
valueKey请求的 value 的参数名stringfield-
hidden是否隐藏开关, 传入参数为 scope, col, 返回 true 时隐藏开关boolean / function--

change 开关切换事件

当开关的值切换时,调用 change 属性所配置的函数。

函数参数:

  • newValue:开关改变后的新值;

  • col:当前列配置;

  • scope:Element UI 列的 scope 对象。

api 请求的 API 地址

当配置 api 属性后,change 事件触发时,会向后端发起 POST 请求,请求地址为 col.api 的值。

POST 请求体如下:

js
{
  [idKey]: idValue,
  [valueKey]: newVal
}

请求中会用到 idKeyvalueKey 两个属性:

  • idKey:用于标识数据行的唯一标识符(通常是主键字段)。如果列配置中未指定 idKey,则默认使用 "id" 作为字段名。例如:idKey: "userId",则 idValue 为当前行中 "userId" 字段的值。
  • valueKey:指定要更新的字段名称。可以通过列配置中的 valueKey 来设置,如果未指定,则使用 field 配置的值作为字段名称。
查看示例
场景

假设我们有一个用户管理页面,其中显示了用户的列表,用户数据包括 userId(用户的唯一标识符)和 disabled(用户状态)。现在我们希望在开关切换时,自动发起 POST 请求更新用户的状态。

数据结构

假设表格数据行的结构如下:

js
[
  {
    userId: 101,     // 用户id
    disabled: false, // 用户状态是否禁用
    // ... 其他字段
  },
  // ... 其他行
]
列配置
js
{
  type: 'switch',          // 使用开关类型
  api: '/api/user/update', // post 请求地址
  idKey: 'userId',         // 主键字段名
  field: 'disabled',       // 值绑定的字段
  valueKey: 'disabled',    // 要更新的字段名, 不配置则取 field 的值
}
切换后发起请求的请求体

当用户在界面上切换状态时,发起的请求体如下:

js
{
  userId: 101,   // 主键,当前行的 userId
  disabled: true // 更新后的状态值
}

这里的 userId 表示为 idKey 配置的值,disabled 是为 valueKey 配置的值。

type = 'tag' 标签

属性名说明类型默认值可选值
tag标签的颜色, el-tag 的 type 属性array / object / function-
'success' 绿
'info'
'warning'
'danger'
content标签显示内容array / object / function--

标签 tag 和 content 配置类型

tagcontent 的值支持 数组对象函数,可根据不同需求选择合适的方式配置。

配置为数组

tag 配置为数组时,数组的索引对应数据表格列的值,索引处的值表示标签颜色

示例:配置值类型为数组
js
// 假设此为表格数据
// status 代表用户状态:0-正常,1-删除,2-离职,3-冻结。
// name   代表用户姓名。
[
  { status: 0, name: '张三' },
  { status: 1, name: '李四' },
  { status: 2, name: '王五' },
  // ... 其他数据
]

// 表格列配置
{
  col: [
    // 状态列
    { 
      field: 'status', 
      name: '状态', 
      type: 'tag', 
      // 状态值对应的标签颜色:
      // 0-正常(success,绿色)
      // 1-删除(danger,红色) 
      // 2-离职(info,灰色)
      // 3-冻结(warning,黄色)
      tag: ['success', 'danger', 'info', 'warning'],
      content: ['正常', '删除', '离职', '冻结']
    },
    { field: 'name', name: '姓名' },
  ]
}
配置为对象

tag 配置为对象时,对象的属性名对应数据表格列的值,属性值表示标签颜色

示例:配置值类型为对象
js
// 假设此为表格数据
// status 代表用户状态:'active'-正常,'deleted'-删除,'resigned'-离职,'frozen'-冻结。
// name   代表用户姓名。
[
  { status: 'active', name: '张三' },
  { status: 'deleted', name: '李四' },
  { status: 'resigned', name: '王五' },
  // ... 其他数据
]

// 表格列配置
{
  col: [
    // 状态列
    { 
      field: 'status', 
      name: '状态', 
      type: 'tag', 
      // 状态值对应的标签颜色:
      tag: {
        'active': 'success', // 'active'-正常(info,灰色)
        'deleted': 'danger', // 'deleted'-删除(success,绿色)
        'resigned': 'info',  // 'resigned'-离职(warning,黄色)
        'frozen': 'warning', // 'frozen'-冻结(danger,红色)
      },
      // 列的值对应的状态名
      content: {
        'active': '正常',
        'deleted': '删除',
        'resigned': '离职',
        'frozen': '冻结',
      }
    },
    { field: 'name', name: '姓名' },
  ]
}
配置为函数

tag 配置为函数时,该函数接收两个参数:一个是表格列配置(col),另一个是 Element UI 中的 Table-column Scoped

该函数需要返回对应的标签颜色:'success'(绿色)、'info'(灰色)、'warning'(黄色)、'danger'(红色)。


type = 'button' 按钮

属性名说明类型默认值可选值
button按钮配置集合, 见 按钮项配置属性array--

按钮项配置属性

属性名说明类型默认值可选值
name按钮显示文字string--
color颜色
颜色取自 Element UI Button 组件的 type 属性
string'primary''primary' 蓝色
'success' 绿色
'info' 灰色
'warning' 黄色
'danger' 红色
'text'文字按钮
icon图标string-图标集合
click点击事件。函数的参数依次为 Table-column Scopedcol 列配置以及 button 按钮配置。function--
hidden是否隐藏按钮。函数的参数与 click 属性保持一致,需要返回一个布尔值,以控制按钮的显示与隐藏。boolean / functionfalsetrue 隐藏按钮
false 显示按钮
confirmClick确认点击事件。点击按钮后会弹出二次确认框,用户确认后才会调用函数。函数的参数与 click 属性保持一致。function--
属性名说明类型默认值可选值
color颜色
颜色取自 Element UI Link 组件的 type 属性
string'primary''primary' 蓝色
'success' 绿色
'info' 灰色
'warning' 黄色
'danger' 红色
'text'文字按钮
click点击事件。函数参数依次为 Table-column Scopedcol 列配置。function--

方法

通过 this.$refs.page.$table.xxx 调用,page<VPage ref="page" /> 的 ref 的值。

方法名说明参数
clear清理数据表格选中的数据-
reloadData重加载数据search 查询条件
setTableData设置数据表格数据数据行、数据总数

插槽

插槽名说明参数
table-col-*表格列内容插槽, * 为 field 属性配置的值插槽参数
table-page-start分页之前-
table-page-end分页之后-

插槽参数

js
slotParam: {
  value, // 列的值
  row,   // 行数据
  index, // 行序号
  col,   // 列配置
  scope, // element-ui 表格列插槽原始参数
}

element-ui 表格列插槽原始参数

自定义列类型

当表格的默认列类型无法满足需求时,可以通过自定义列来增强表格功能,以实现更灵活的展示效果。

第一步:编写自定义列组件

table 组件提供了 col(当前列的配置项)和 scopeTable-column Scoped)这两个 props 绑定,可以根据需要使用。

vue
<template>
  <div>
    <!-- 你的模板内容 -->
  </div>
</template>

<script>
export default {
  props: {
    col: Object,   // 当前列的配置项
    scope: Object, // Element UI Table column scoped
  }
}
</script>

或者 引入 TableColMixin 使用 混入 (mixin),快速定义这两个 props

vue
<template>
  <div>
    <!-- 你的模板内容 -->
  </div>
</template>

<script>
import { TableColMixin } from 'page-element2';
export default {
  mixins: [TableColMixin]
}
</script>

TableColMixin 还提供了一个 content 计算属性,该属性表示调用 fmt 函数(如果已配置)后的表格内容。

第二步:在全局配置中引入自定义列组件

table 配置项下新增 colType 对象,colType 的属性名为列类型,值为动态引入的组件方法:

js
// VPageConfig.js
{
  table: {
    colType: {
      // 导入你的组件, 使用时, type 为 'customType'
      customType: () => import('./你的目录/组件名.vue')
    }
  }
}

第三步:在配置中使用自定义列类型

js
// vpage 配置
{
  table: {
    col: [
      // 使用自定义的列类型
      { type: 'customType', name: '自定义列' },
      // ...
    ]
  }
}

这样,你可以在表格中使用自定义列组件,增强表格的功能和可扩展性。

这里有个一个示例: 自定义表格列类型