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.
80 lines
2.7 KiB
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
|
|
}
|
|
|