vxe-table 单元格合并详解,表头分组,表尾单元格合并的详细用法

1,457 阅读3分钟

官网文档:vxetable.cn

由于项目比较复杂,经常需要用到列头进行分组和和单元格合并,在 vxe-table 中使用分组和合并都非常简单,都是配置化的。

表头分组

要实现列的分组,非常简单,按照官网的用法,跟树结构是一样,只要配置好树结构就能自动渲染分组表头。 通过 children 属性配置子列。

{1D2DD134-F3E5-44FB-8113-725BA83D7D18}.png

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  height: 400,
  columns: [
    {
      title: '基本信息',
      children: [
        { type: 'seq', width: 70 },
        { field: 'name', title: 'Name' }
      ]
    },
    {
      title: '更多信息',
      children: [
        { field: 'role', title: 'Role' },
        {
          title: '详细信息',
          children: [
            { field: 'sex', title: 'Sex' },
            { field: 'age', title: 'Age' }
          ]
        }
      ]
    },
    {
      title: '分类信息',
      children: [
        { field: 'date3', title: 'Date' }
      ]
    },
    { field: 'address', title: 'Address' }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
    { id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
    { id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
    { id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
    { id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
  ]
})
</script>

单元格合并

单元格合并由这 4 个属性决定,指定好这4个属性后就可以合并指定范围的区域:
row: 0 第几行,从 0 开始 col: 3 第几列,从 0 开始 rowspan: 2,需要合并几行 colspan: 2,需要合并几列

{A9FD7763-41EA-41EE-B40E-544AD0BAA2A7}.png

通过设置属性 mergeCells 指定合并规则

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  mergeCells: [
    { row: 0, col: 3, rowspan: 2, colspan: 2 },
    { row: 1, col: 1, rowspan: 3, colspan: 2 }
  ],
  columns: [
    { type: 'seq', width: 70 },
    { field: 'name', title: 'Name' },
    { field: 'sex', title: 'Sex' },
    { field: 'age', title: 'Age' },
    { field: 'address', title: 'Address', showOverflow: true }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }
  ]
})
</script>

表尾单元格合并

表尾合并的规则和单元格是一直的,都是指定一个范围区域,相关属性说明: showFooter: 是否开启表尾数据 footerData:表尾数据 mergeFooterItems:指定合并规则(规则和单元格配置一样)

{BFB4D138-C83D-4AC0-BA52-02B07E1B89A5}.png

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  showFooter: true,
  height: 400,
  mergeFooterItems: [
    { row: 0, col: 1, rowspan: 2, colspan: 1 },
    { row: 1, col: 3, rowspan: 2, colspan: 2 }
  ],
  columns: [
    { field: 'seq', type: 'seq', width: 70 },
    { field: 'name', title: 'Name' },
    { field: 'role', title: 'Role' },
    { field: 'rate', title: 'Rate', footerAlign: 'center' },
    { field: 'age', title: 'Age', footerAlign: 'center' }
  ],
  data: [
    { id: 10001, name: 'Test1', nickname: 'T1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', nickname: 'T2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', nickname: 'T3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', nickname: 'T4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
    { id: 10005, name: 'Test5', nickname: 'T5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
    { id: 10006, name: 'Test6', nickname: 'T6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
    { id: 10007, name: 'Test7', nickname: 'T7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
    { id: 10008, name: 'Test8', nickname: 'T8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
  ],
  footerData: [
    { seq: '平均', name: '合并了', role: '33', rate: '56' },
    { seq: '和值', name: 'aa', role: 'bb', rate: '合并了' },
    { seq: '其他', name: 'aa', role: 'bb', rate: '1235' }
  ]
})
</script>

以上就是合并的基础用法,官网功能太多,具体更复杂的就需要去看官网 API

github
gitee