UNPKG

ci-plus

Version:

ci组件库

66 lines (65 loc) 1.8 kB
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 }