由于项目比较复杂,经常需要用到列头进行分组和和单元格合并,在 vxe-table 中使用分组和合并都非常简单,都是配置化的。
表头分组
要实现列的分组,非常简单,按照官网的用法,跟树结构是一样,只要配置好树结构就能自动渲染分组表头。 通过 children 属性配置子列。
<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,需要合并几列
通过设置属性 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:指定合并规则(规则和单元格配置一样)
<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