vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
63 lines (56 loc) • 1.61 kB
JavaScript
const getAllColumns = (columns, parentColumn) => {
const result = []
columns.forEach((column) => {
column.parentId = parentColumn ? parentColumn.id : null
if (column.visible) {
if (column.children && column.children.length && column.children.some(column => column.visible)) {
result.push(column)
result.push(...getAllColumns(column.children, column))
} else {
result.push(column)
}
}
})
return result
}
export const convertToRows = (originColumns) => {
let maxLevel = 1
const traverse = (column, parent) => {
if (parent) {
column.level = parent.level + 1
if (maxLevel < column.level) {
maxLevel = column.level
}
}
if (column.children && column.children.length && column.children.some(column => column.visible)) {
let colSpan = 0
column.children.forEach((subColumn) => {
if (subColumn.visible) {
traverse(subColumn, column)
colSpan += subColumn.colSpan
}
})
column.colSpan = colSpan
} else {
column.colSpan = 1
}
}
originColumns.forEach((column) => {
column.level = 1
traverse(column)
})
const rows = []
for (let i = 0; i < maxLevel; i++) {
rows.push([])
}
const allColumns = getAllColumns(originColumns)
allColumns.forEach((column) => {
if (column.children && column.children.length && column.children.some(column => column.visible)) {
column.rowSpan = 1
} else {
column.rowSpan = maxLevel - column.level + 1
}
rows[column.level - 1].push(column)
})
return rows
}