莳松-行政管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
ss-oa-manage-web/src/utils/tableObjectSpanMethod.js

80 lines
2.7 KiB

/**
* @Author: River_qiu
* @Date: 2021/11/18
*/
// 表格单元格合并多列
let [spanObj, pos] = [{}, {}]
//spanObj 存储每个key 对应的合并值
//pos 存储的是 key合并值得索引 大概吧
export const dataMethod = (data, isH, allColumns = []) => {
//循环数据(行)
for (let i in data) {
let dataI = data[i]
//循环数据内对象,查看有多少key
if (allColumns.length > 0) {
let preProp = undefined
// dataI.historyValue =
// 循环列数据
for (let index = 0; index < allColumns.length; index++) {
let j = allColumns[index]
if (i == 0) {
// 第一行,每列至少展示1行
spanObj[j] = [1]
pos[j] = 0
} else {
if (index == 0) {
data[i].historyValue = ''
data[i - 1].historyValue = ''
} else {
data[i].historyValue += data[i][preProp]
data[i - 1].historyValue += data[i - 1][preProp]
}
// e: 当前行数据,k:上一行数据
let [e, k] = [dataI, data[i - 1]]
// 判断上一行数据是否存在
// 空数据不合并
// 前一列值相同并且不为空或者为第一列
// 存在当前的列的值与上一行是否一样
// 判断是否有数组规定只允许那几列需要合并单元格的
if (
k &&
e[j] &&
(!preProp || (e.historyValue && e.historyValue == k.historyValue)) &&
e[j] == k[j] &&
(!isH || isH.length == 0 || isH.includes(j))
) {
//如果上一级和当前一级相当,数组就加1 数组后面就添加一个0
spanObj[j][pos[j]] += 1
spanObj[j].push(0)
} else {
spanObj[j].push(1)
pos[j] = i
}
preProp = j
}
}
} else {
for (let j in dataI) {
//如果只有一条数据时默认为1即可,无需合并
if (i == 0) {
spanObj[j] = [1]
pos[j] = 0
} else {
let [e, k] = [dataI, data[i - 1]]
//判断上一级别是否存在 ,
//存在当前的key是否和上级别的key是否一样
//判断是否有数组规定只允许那几列需要合并单元格的
if (k && e[j] && k[j] && e[j] == k[j] && (!isH || isH.length == 0 || isH.includes(j))) {
//如果上一级和当前一级相当,数组就加1 数组后面就添加一个0
spanObj[j][pos[j]] += 1
spanObj[j].push(0)
} else {
spanObj[j].push(1)
pos[j] = i
}
}
}
}
}
return spanObj
}