import { filterTree } from '../utils'; export function* traverseNodes(nodes) { const stack = [...nodes]; // 使用展开运算符复制数组 while (stack.length > 0) { const node = stack.pop(); yield node.id; // 将子节点逆序压入栈中,保持深度优先顺序 if (node.children && node.children.length > 0) { for (let i = node.children.length - 1; i >= 0; i--) { stack.push(node.children[i]); } } } } export const emptyRowSelected = (keys: any) => { return Object.values(keys ?? {}).flat(Infinity).length ? false : true; }; export const nameFilterHandler = ( item: any, search: string, expired: number, useBind: boolean = false, nameKey: string = 'name', ) => { const isNameSame = !!item?.[nameKey]?.match(search || ''); const isExpired = expired ? item.expiredAt <= expired + 86399 && item.expiredAt > 0 : true; if (useBind) { return isNameSame && isExpired && item.isBind; } return isNameSame && isExpired; }; export const filterFeature = (data: any, params: any) => { return filterTree(data?.featureTree, (item: any) => { return nameFilterHandler(item, params?.featureTree, params?.expired); }); }; export const filterOption = (data: any, params: any) => { return filterTree(data?.optionList, (item: any) => { return nameFilterHandler(item, params?.optionList, params?.expired); }); }; export const filterPolicy = (data: any, params: any) => { return filterTree(data?.policyList, (item: any) => { return nameFilterHandler(item, params?.policyList, params?.expired, true); }); }; export const filterRole = (data: any, params: any) => { return filterTree(data?.roleList, (item: any) => { return nameFilterHandler(item, params?.roleList, params?.expired, true); }); }; export const filterCity = (data: any, params: any) => { return filterTree(data?.userCityList, (item: any) => { return nameFilterHandler(item, params?.userCityList, params?.expired, true, 'cityName'); }); }; export const emptyMarginTop = (isOptShow: boolean) => { return (document.body.clientHeight - 130) / 2 - 48 - 39 - 24 - (isOptShow ? 33.91 + 43.91 : 0); };