123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /**
- *
- * @param {Array} mergeKeys 要合并的keys数组
- * @param {Array} tableData 渲染table组件的原始数据
- */
- export function handleTableSpan(mergeKeys, tableData) {
- const spanObj = {}
- if (mergeKeys instanceof Array && tableData instanceof Array && mergeKeys.length && tableData.length) {
- mergeKeys.forEach(key => {
- spanObj[key] = []
- let position = 0
- tableData.forEach((item, index) => {
- if (index === 0) {
- spanObj[key].push(1)
- position = 0
- } else {
- // 如果要合并的key 值是引用数据类型,我们要先把 数组或者 对象转成json 格式然后对比
- if (tableData[index][key] instanceof Array || tableData[index][key] instanceof Object) {
- if (JSON.stringify(tableData[index][key]) === JSON.stringify(tableData[index - 1][key])) {
- spanObj[key][position] += 1
- spanObj[key].push(0)
- } else {
- spanObj[key].push(1)
- position = index
- }
- } else {
- if (tableData[index][key] === tableData[index - 1][key]) {
- spanObj[key][position] += 1
- spanObj[key].push(0)
- } else {
- spanObj[key].push(1)
- position = index
- }
- }
- }
- })
- })
- return spanObj
- }
- }
- /**
- *
- * @param {Object} tableObj table组件 span-method 方法四个参数{ row, column, rowIndex, columnIndex } 的对象
- * @param {Array} mergeKeys 要合并的keys数组
- * @param {Object} rowspanObj 经过 handleTableSpan 方法处理tableData 数据,得到的单元格的合并行数对象
- * @param {Boolean} notEmpty 是否要合并有 ’/‘ 单元格,此参数非必传。默认不合并, notEmpty = true 则合并
- */
- export function handleObjectSpanMethod(tableObj, mergeKeys, rowspanObj, notEmpty) {
- if (mergeKeys instanceof Array && rowspanObj instanceof Object) {
- const { row, column, rowIndex, columnIndex } = tableObj
- for (let i = 0; i < mergeKeys.length; i++) {
- let term
- if (notEmpty) {
- term = column.property === mergeKeys[i] && row[mergeKeys[i]] !== '/'
- } else {
- term = column.property === mergeKeys[i]
- }
- if (term) {
- const _row = rowspanObj[mergeKeys[i]][rowIndex]
- const _col = _row > 0 ? 1 : 0
- return {
- rowspan: _row,
- colspan: _col
- }
- }
- }
- }
- }
|