ci-plus
Version:
ci组件库
66 lines (65 loc) • 1.8 kB
text/typescript
import { SortColumn, SortColumnSend } from './interface'
export const setId = (data: SortColumn[]) => {
let i = 1
const idSet = new Set()
const _set = (id: number): number => {
if (idSet.has(id)) {
return _set(id + 1)
}
return id
}
const f = (data: SortColumn[]) => {
data.forEach((v) => {
if (v.id !== undefined && v.id !== null) return idSet.add(v.id)
v.id = _set(i)
i = v.id + 1
if (v.children && v.children.length) f(v.children)
})
return data
}
return f(data)
}
export const getSend = (data: SortColumn[]): SortColumnSend[] => {
return data.map((v) => {
const tem = {
hide: Boolean(v.hide),
id: v.id,
prop: v.col.prop,
title: v.col.label,
fixed: v.col.fixed,
ban: Boolean(v.ban),
} as SortColumnSend
if (v.children && v.children.length) tem.children = getSend(v.children)
return tem
})
}
export const sort = (
data: SortColumn[],
send?: SortColumnSend[],
): SortColumn[] => {
if (!send || !send.length) return data
const tem = [] as SortColumn[]
const ids: Record<number, number> = {}
data.forEach((v, i) => {
if (v.id) ids[v.id] = i
})
send.forEach((v) => {
const item = data.find((vv) => vv.id === v.id)
if (!item || !item.id) return
delete ids[item.id]
if (v.ban) return
item.hide = v.hide
item.col.fixed = v.fixed
if (v.children && item.children)
item.children = sort(item.children, v.children)
tem.push(item)
})
Object.keys(ids).forEach((k) => {
const i = ids[k]
const item = data.find((v) => v.id === Number(k))
if (!item) return
if (tem.length <= i) tem.push(item)
else tem.splice(i, 0, item)
})
return tem
}