1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
export const mergeDeptList = ( tree: DepartmentItem[], path: DepartmentItem[], children: DepartmentItem[] ) => { return tree.map((item) => { if (item.code === path[0].code) { return { ...item, children: path.length === 1 ? children : mergeDeptList(item.children || [], path.slice(1), children), }; } return item; }); };
export const insertToDeptTree = ( tree: DepartmentItem[], code: string, children: DepartmentItem[] ) => { let inserted = false; for (let item of tree) { if (item.code === code) { item.children = children; inserted = true; } else if (item.children && item.children.length > 0) { inserted = insertToDeptTree(item.children, code, children); } if (inserted) { break; } } return inserted; };
export async function loadDeptTree(deptList, selectedValue) { const deptMap: { [key: string]: DepartmentItem[] } = {};
let codeArray: string[] = []; if (Array.isArray(selectedValue)) { codeArray = [ ...new Set( valueArray .sort((a, b) => a.length - b.length) .map((item) => item.slice(0, item.length - 1)) .filter((item) => item.length > 0) .reduce((prev, curr) => prev.concat(curr), []) ), ]; }
if (codeArray.length > 0) { await Promise.all( codeArray.map((code) => api.deptList({ code }).catch((e) => { console.error(e); return []; }) ) ).then((resultArray) => { codeArray.forEach((code, index) => { deptMap[code] = resultArray[index]; }); }); }
Object.keys(deptMap).forEach((key) => { insertToDeptTree(deptList, key, deptMap[key]); });
return deptList; }
|