|  |  |  | 
|---|
|  |  |  | 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, id, name, parentId, parentName, children) { | 
|---|
|  |  |  | const config = { | 
|---|
|  |  |  | id: id || 'id', | 
|---|
|  |  |  | name: name || 'name', | 
|---|
|  |  |  | parentId: parentId || 'parentId', | 
|---|
|  |  |  | parentName: parentName || 'parentName', | 
|---|
|  |  |  | childrenList: children || 'children', | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const childrenListMap = []; | 
|---|
|  |  |  | const nodeIds = []; | 
|---|
|  |  |  | const tree = []; | 
|---|
|  |  |  | 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) => { | 
|---|
|  |  |  | const d = item; | 
|---|
|  |  |  | const pId = d[config.parentId]; | 
|---|
|  |  |  | if (!nodeIds[pId]) { | 
|---|
|  |  |  | d[config.parentName] = ''; | 
|---|
|  |  |  | tree.push(d); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function adaptToChildrenList(item) { | 
|---|
|  |  |  | 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) => { | 
|---|
|  |  |  | const c = child; | 
|---|
|  |  |  | c[config.parentName] = o[config.name]; | 
|---|
|  |  |  | adaptToChildrenList(c); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | tree.forEach((t) => { | 
|---|
|  |  |  | adaptToChildrenList(t); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return tree; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const getPageQuery = () => parse(window.location.href.split('?')[1]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export function formatTreeData(arrayList) { | 
|---|
|  |  |  | const treeSelectData = arrayList.map((item) => { | 
|---|
|  |  |  | const node = { | 
|---|
|  |  |  | id: item.id, | 
|---|
|  |  |  | title: item.label, | 
|---|
|  |  |  | key: `${item.id}`, | 
|---|
|  |  |  | value: item.id, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (item.children) { | 
|---|
|  |  |  | node.children = formatTreeData(item.children); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return node; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return treeSelectData; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export function transformTreeData(originalData) { | 
|---|
|  |  |  | return originalData.map(item => { | 
|---|
|  |  |  | let newItem = { | 
|---|
|  |  |  | key: item.id, | 
|---|
|  |  |  | title: item.name, | 
|---|
|  |  |  | value: item.id, | 
|---|
|  |  |  | // 其它需要的属性... | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (item.children && item.children.length > 0) { | 
|---|
|  |  |  | newItem.children = transformTreeData(item.children); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return newItem; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export function getTreeAllKeys(data) { | 
|---|
|  |  |  | let keys = []; | 
|---|
|  |  |  | for (let item of data) { | 
|---|
|  |  |  | keys.push(item.key); | 
|---|
|  |  |  | if (item.children) { | 
|---|
|  |  |  | keys = keys.concat(getTreeAllKeys(item.children)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return keys; | 
|---|
|  |  |  | } | 
|---|