excel导出简化多级表头代码

master
toesbieya 6 years ago
parent fbd8ffa2d6
commit 8354d3061b
  1. 47
      vue/src/utils/excel/common.js

@ -124,47 +124,36 @@ export function mergeExcel(props, data, primaryKey, orderKey, ignoreRows = 1) {
* 参考element的table-header * 参考element的table-header
* *
* @param columns 列配置 * @param columns 列配置
* @param separator 分隔符
*/ */
export function generateHeaders(columns) { export function generateHeaders(columns, separator = '-') {
const tree = [] const tree = []
let maxDepth = 1 let maxDepth = 1
for (let col of columns) { for (const col of columns) {
const header = col.header, node = {depth: 1} let header = col.header
if (Array.isArray(header)) { if (typeof header === 'string') {
const depth = header.length header = header.split(separator)
if (depth > maxDepth) maxDepth = depth }
let arr = tree let arr = tree, depth = header.length
for (let i = 0, temp = node; i < depth; i++) { if (depth > maxDepth) maxDepth = depth
const value = header[i]
temp.depth = i + 1 for (let i = 0; i < depth; i++) {
temp.value = value const value = header[i]
if (arr) { let obj = arr.find(item => item.value === value)
const already = arr.find(i => i.value === value)
if (!already) {
arr.push(temp)
arr = null
}
else {
if (!already.children) already.children = []
arr = already.children
}
}
if (i === depth - 1) break if (!obj) {
obj = {value, depth: i + 1}
if (i !== depth - 1) obj.children = []
temp.children = [{}] arr.push(obj)
temp = temp.children[0]
} }
}
else { arr = obj.children
node.value = header || ''
tree.push(node)
} }
} }

Loading…
Cancel
Save