zoukankan      html  css  js  c++  java
  • element tree 菜单权限勾选问题 半选问题

    hello  这几天做了一个关于菜单权限的问题

    刚开始涉及到半选的问题,后来由于功能性要求,网页中显示没有半选状态,全部都是全选

    并且勾选父级,子级被全部勾选,取消父级,子级全部取消

    下一级取消 上一级不取消

    代码如下:

    <el-tree
        class="filter-tree"
        :expand-on-click-node="false"
        check-strictly
        show-checkbox
        @check="authorityCheck"
        :default-checked-keys="defaultCheck"
        node-key="id"
        empty-text="暂无数据"
        :data="authorityData"
        :props="defaultProps"
        default-expand-all
        :filter-node-method="filterNode"
        ref="tree">
    </el-tree>
     
    script:
     
    authorityCheck(currentNode, treeStatus) {
           const setChildStatus = (node, status) => {
           /* 这里的 id children 也可以是其它字段,根据实际的业务更改 */
           this.$refs.tree.setChecked(node.id, status);
           if (node.children) {
           /* 循环递归处理子节点 */
              for (let i = 0; i < node.children.length; i++) {
                setChildStatus(node.children[i], status);
              }
            }
          };
         /* 设置父节点为选中状态 */
          const setParentStatus = (nodeObj) => {
          /* 拿到tree组件中的node,使用该方法的原因是第一次传入的 node 没有 parent */
              const node = this.$refs.tree.getNode(nodeObj);
              if (node.parent.key) {
                  this.$refs.tree.setChecked(node.parent, true);
                  setParentStatus(node.parent);
              }
          };
      /* 判断当前点击是选中还是取消选中操作 */
      if (treeStatus.checkedKeys.includes(currentNode.id)) {
        setParentStatus(currentNode);
        setChildStatus(currentNode, true);
      } else {
       /* 取消选中 */
        if (currentNode.children) {
          setChildStatus(currentNode, false);
        }
      }
      this.roles = [...this.$refs.tree.getCheckedKeys()];
      },
      authorityCheckSearch(currentNode, treeStatus) {
        // this.rolesSearch = [];
        const setChildStatus = (node, status) => {
        /* 这里的 id children 也可以是其它字段,根据实际的业务更改 */
        this.$refs.treeS.setChecked(node.id, status);
        if (node.children) {
        /* 循环递归处理子节点 */
          for (let i = 0; i < node.children.length; i++) {
            setChildStatus(node.children[i], status);
          }
        }
      };
      /* 设置父节点为选中状态 */
      const setParentStatus = (nodeObj) => {
        /* 拿到tree组件中的node,使用该方法的原因是第一次传入的 node 没有 parent */
        const node = this.$refs.treeS.getNode(nodeObj);
        if (node.parent.key) {
          this.$refs.treeS.setChecked(node.parent, true);
          setParentStatus(node.parent);
        }
      };
      /* 判断当前点击是选中还是取消选中操作 */
      if (treeStatus.checkedKeys.includes(currentNode.id)) {
        setParentStatus(currentNode);
        setChildStatus(currentNode, true);
      } else {
        /* 取消选中 */
        if (currentNode.children) {
          setChildStatus(currentNode, false);
        }
      }
      this.rolesSearch = [...this.$refs.treeS.getCheckedKeys()];
    },
     
    自己实操试试咯,有问题,联系我哦
  • 相关阅读:
    反射
    Ajax
    JSP(二)
    JSP
    Servlet(三)
    Servlet(二)
    Servlet
    idea的Tomcat的配置
    使用Idea创建Maven构造的Web工程
    Maven的下载、安装与环境配置
  • 原文地址:https://www.cnblogs.com/WoAiZmm/p/14202391.html
Copyright © 2011-2022 走看看