vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
63 lines (56 loc) • 1.67 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
}