实现效果
列表数据
export const columns: BasicColumn[] = [
{
title: '阶段',
align: 'center',
dataIndex: 'projectStage',
},
{
title: '类别',
align: 'center',
dataIndex: 'emissionsType',
},
....
]
js文件定义表格单元格合并公共方法
export const getSpanArr = (tableData, itemProperty) => {
if (tableData.length === 0) {
return false;
}
const spanArr = [];
let pos;
for (let i = 0; i < tableData.length; i++) {
if (i === 0) {
spanArr.push(1);
pos = 0;
} else {
if (tableData[i][itemProperty] && tableData[i][itemProperty] === tableData[i - 1][itemProperty]) {
spanArr[pos] += 1;
spanArr.push(0);
} else {
spanArr.push(1);
pos = i;
}
}
}
return spanArr;
};
组件界面引入
import { ref, computed } from 'vue';
import { getSpanArr } from './jsfile.fun.js';
import { columns } from './jsfile.data.js';
const newColumns = computed(() => {
const tableDataSource = getDataSource();
const needTomergeColumnsIndex = ['projectStage', 'emissionsType'];
let newColumnsData = columns.map((item) => {
if (needTomergeColumnsIndex.includes(item.dataIndex)) {
const spanArr = getSpanArr(tableDataSource, item.dataIndex);
item.customCell = (record, rowIndex, column) => {
return { rowSpan: spanArr[rowIndex] };
};
}
return item;
});
return newColumnsData;
});