element plus el-table表格合并
el-table表格合并实现都是使用表格的span-method属性绑定操作函数
<el-table :data="table.data" :span-method="objectSpanMethod" > </el-table>
操作函数格式
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
}
相同值行合并
对于相同的值进行行合并是最常见的合并需求,实现思路就是先统计相同的值,然后进行合并。以下提供一种封装思路
import dayjs from 'dayjs'
/**
* 范围日期禁用方法
* @param {String} disanledDay //before after 今天之前还是今天之后
* @param {Boolean} includingToday=false // 是否包含今天
* @returns {any}
*/
export const useDateRangeRule = (disanledDay = '', includingToday = false) => {
let datePockStar = ''
/**
* 限制时间区间选择范围,起始点不限,结束点限制
* @param {Date} time
* @param {String} timeType='year' //year month week day 类型参考 dayjs
* @param {Number} timeNum=1 // 默认1
* @returns {any}
*/
const disabledDate = (time, timeType = 'year', timeNum = 1) => {
// 限制选择今天之前还是之后
if (disanledDay) {
const before = dayjs().isBefore(includingToday ? dayjs(time) : dayjs(time).add(1, 'day'))
if (disanledDay === 'before' && before) {
return before
}
const after = dayjs().isAfter(includingToday ? dayjs(time).add(1, 'day') : dayjs(time))
if (disanledDay === 'after' && after) {
return after
}
}
if (datePockStar) {
const diff = Math.abs(dayjs(datePockStar).diff(time, timeType, true))
if (diff > timeNum) {
return true
}
}
}
/**
* 记录日期范围选择第一个日期
* @param {Date} val
* @returns {any}
*/
const calendarChange = val => {
if (val && val.length > 0 && !val[1]) {
datePockStar = val[0]
} else {
datePockStar = ''
}
}
return {
disabledDate,
calendarChange
}
}
使用也比较简单
import 引入 useDateRangeRule
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
return useDateRangeRule(table.data,['name','area'])({ row, column, rowIndex, columnIndex })
}
指定列的合并
首先需要对数据进行处理,思路也是让要合并的数据知道自己占多少格。被合并的单元格所占格数为0。
数据处理的格式可随意,只要能判断出当前单元格占几格即可。最后进行合并函数处理。
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 要合并的列
const spanColumns = ['area', 'elePrice', 'lineLoseRate']
if (spanColumns.includes(column.property)) {
return {
rowspan: row.rowspan,
colspan: 1
}
}
}