blob: d75395eb1eb3b9aac799e5969632b92a4200279d [file] [log] [blame]
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;
}