import { DataNode } from 'antd/es/tree'; import { parse } from 'querystring'; /** * 构造树型结构数据 * @param {*} data 数据源 * @param {*} id id字段 默认 'id' * @param {*} parentId 父节点字段 默认 'parentId' * @param {*} children 孩子节点字段 默认 'children' */ export function buildTreeData( data: any[], id: string, name: string, parentId: string, parentName: string, children: string, ) { const config = { id: id || 'id', name: name || 'name', parentId: parentId || 'parentId', parentName: parentName || 'parentName', childrenList: children || 'children', }; const childrenListMap: any[] = []; const nodeIds: any[] = []; const tree: any[] = []; data.forEach((item) => { const d = item; const pId = d[config.parentId]; if (!childrenListMap[pId]) { childrenListMap[pId] = []; } d.key = d[config.id]; d.title = d[config.name]; d.value = d[config.id]; d[config.childrenList] = null; nodeIds[d[config.id]] = d; childrenListMap[pId].push(d); }); data.forEach((item: any) => { const d = item; const pId = d[config.parentId]; if (!nodeIds[pId]) { d[config.parentName] = ''; tree.push(d); } }); function adaptToChildrenList(item: any) { const o = item; if (childrenListMap[o[config.id]]) { if (!o[config.childrenList]) { o[config.childrenList] = []; } o[config.childrenList] = childrenListMap[o[config.id]]; } if (o[config.childrenList]) { o[config.childrenList].forEach((child: any) => { const c = child; c[config.parentName] = o[config.name]; adaptToChildrenList(c); }); } } tree.forEach((t: any) => { adaptToChildrenList(t); }); return tree; } export const getPageQuery = () => parse(window.location.href.split('?')[1]); export function formatTreeData(arrayList: any): DataNode[] { const treeSelectData: DataNode[] = arrayList.map((item: any) => { const node: DataNode = { id: item.id, title: item.label, key: `${item.id}`, value: item.id, } as DataNode; if (item.children) { node.children = formatTreeData(item.children); } return node; }); return treeSelectData; }