element-ui懒加载树组件自定义叶子节点选中状态实现

element树组件

 <el-tree
                  ref="tree"
                  :props="props"
                  show-checkbox
                  lazy
                  :data="treeData"
                  :load="loadNode"
                  node-key="id"
                  :default-expanded-keys="expendsKeys"
                  :default-checked-keys="frids"
                ></el-tree>           

实现数据逻辑

 data() {
    return {
      open: "Panel1",
      treeData: [],
      index: 1,
      size: 50,
      props: {
        isLeaf: "leaf"
      },
      frids: [],
      expendsKeys: [],
      otherData: []
    };
  },
  watch: {
    bindgingshow: function(newV, oldV) {
      if (newV == true) {
        this.getServiceInit();
        this.getInit();
      }
    }
  },
  mounted() {
    this.getServiceInit();
  },
  methods: {
    async getInit() {
      const res = await selectConnectEntity({
        tenant_id: this.bindInfo.postalCode
      });
      if (res) {
        let arr = [];
        let arr2 = [];
        res.data.privateData.map(item => {
          arr.push(item.frid);
          arr2.push(item.data.erid, item.data.parent.said);
        });
        this.frids = arr;
        this.expendsKeys = arr2;
        this.otherData = res.data.otherData;
      }
    },
    async getServiceInit() {
      let initdata = {
        index: this.index,
        size: this.size,
        key: "said",
        condition: "jfyw_fwq",
        bk_obj_id: "jfyw_fwq"
      };
      const res = await getBeanData(initdata);
      if (res) {
        let data = res.data.info;
        let arr = [];
        let arr2 = [];
        data.map(item => {
          let obj = {
            label: item.sname,
            sname: item.sname,
            said: item.said,
            id: item.said,
            leaf: false,
            children: []
          };
          arr2.push({ said: item.said });
          arr.push(obj);
        });
        this.treeData = arr;
      }
    },
    async getFrameInit(said) {
      let initdata = {
        index: this.index,
        size: this.size,
        upObkId: "jfyw_fwq",
        key: "erid",
        foreignKey: "said",
        condition: "jfyw_jf",
        conditions: [
          {
            field: "said",
            operator: "$regex",
            value: said
          }
        ],
        bk_obj_id: "jfyw_jf"
      };
      const res = await getBeanData(initdata);
      return res;
    },
    async getEridInit(erid) {
      let initdata = {
        index: this.index,
        size: this.size,
        upObkId: "jfyw_jf",
        key: "frid",
        foreignKey: "erid",
        condition: "jfyw_jj",
        conditions: [
          {
            field: "erid",
            operator: "$regex",
            value: erid
          }
        ],
        bk_obj_id: "jfyw_jj"
      };
      const res = await getBeanData(initdata);
      return res;
    },
    loadNode(item, resolve) {
      if (Object.keys(item.data).includes("erid")) {
        //机架
        let info = item.data.erid;
        const { erid, name, parent } = item.data;
        this.getEridInit(erid).then(res => {
          if (res) {
            let data = res.data.info;
            //过滤其他租户已绑定数据
            this.otherData.map(item => {
              data = data.filter(option => option.frid != item.frid);
            });
            let arr = [];
            if (data.length > 0) {
              data.map(item => {
                let obj = {
                  label: item.fname,
                  fname: item.fname,
                  leaf: true,
                  frid: item.frid,
                  id: item.frid,
                  parents: {
                    erid,
                    name,
                    ...parent,
                    fname: item.fname,
                    frid: item.frid,
                    ou: this.bindInfo.ou
                  }
                };
                arr.push(obj);
              });
              resolve(arr);
            } else {
              let obj = {
                label: "暂无数据",
                leaf: true,
                disabled: true
              };
              resolve([obj]);
            }
          }
        });
      } else {
        //机房
        const { said, sname } = item.data;
        if (said) {
          this.getFrameInit(said).then(res => {
            if (res) {
              let data = res.data.info;
              let arr = [];
              data.map(item => {
                let obj = {
                  label: item.name,
                  erid: item.erid,
                  name: item.name,
                  leaf: false,
                  id: item.erid,
                  children: [],
                  parent: {
                    sname,
                    said
                  }
                };
                arr.push(obj);
              });
              resolve(arr);
            }
          });
        }
      }
    },
    closebinddrawer() {
      this.$emit("closebinddrawer", false);
    },
    async addFrame(arr) {
      let data = {
        tenant_id: this.bindInfo.postalCode,
        connectEntityList: arr
      };
      const res = await InsertTenantJJ(data);
      if (res.code == 0) {
        this.$Message.success("绑定成功");
      }
    },
    saveBind() {
      let nodes = this.$refs.tree.getCheckedNodes();
      let arr = [];
      nodes.map((item, index) => {
        if (item.parents) {
          arr.push(item.parents);
        }
      });
      this.addFrame(arr);
      this.$emit("saveBind", false);
    },
    cancelBind() {
      this.$emit("cancelBind", false);
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值