分类树:编辑分类时分类的父级不能选该分类所有子节点

70 阅读1分钟

方案一

当前分类以及子级禁用

   setChildrenDisable(root, targetId) {
      function findAndSet(node) {
        if (node.id === targetId) {
          setDisable(node);
          return true; // 表示找到了目标节点
        }

        if (node.children && node.children.length > 0) {
          for (let child of node.children) {
            if (findAndSet(child)) {
              return true; // 一旦找到目标节点,立即返回
            }
          }
        }

        return false; // 没有找到目标节点
      }
      function setDisable(node) {
        node.disabled = true;
        node.title = '不支持移动节点到自己下方';
        if (node.children && node.children.length > 0) {
          node.children.forEach((child) => setDisable(child));
        }
      }
      // 遍历整个树结构
      for (let rootNode of root) {
        if (findAndSet(rootNode)) {
          break; // 一旦找到目标节点,立即退出循环
        }
      }
    },
    
    this.setChildrenDisable(res, '1378862681146011648'); 
// '1378862681146011648'为该分类id,非父级id(父级可以为兄弟节点)

方案二

删除该分类数据(子级也不存在了)

 const loop = (nodes) => {
    const filterRes = nodes.filter((node) => {
      if (node.children) {
        node.children = loop(node.children);
      }
      return node.fenLeiID !== data?.fenLeiID;
    });
    return filterRes;
  };