树形select选择框

文章详细描述了如何在Vue应用中使用`input-treeplaceholder`组件创建可选择总任务节点的树形下拉菜单,包括懒加载策略和节点点击事件的处理。
摘要由CSDN通过智能技术生成

 下拉样式

选中样式

 

组件使用

<input-tree placeholder="请选择总任务节点" :showName="dataPO.generalPlanName" 
    @node-click="handleChangeGeneralPlan"  style="width: 95%" :width="'330px'">
</input-tree>

组件方法

handleChangeGeneralPlan(data) {
    this.dataPO.generalPlanId = data.id;
    this.dataPO.generalPlanName = data.name;
},

树形select具体代码

<template>
  <div class="org-tree-power">
    <el-dropdown trigger="click" ref="inputTreeDropdown" style="width: 100%"                      
        placement="bottom-start">
      <el-input size="mini" readonly v-model="currentVal" :placeholder="placeholder" />
      <el-dropdown-menu slot="dropdown">
        <div class="org-tree-content"
          :style="{width: width,'min-height': '100px','max-height': '360px',  
                    'overflow': 'auto'}">
          <el-tree ref="treeForm" node-key="id" lazy accordion :data="treeData" 
            v-loading="treeLoading" :props="props" :load="loadNode" 
            @node-click="handleNodeClick" :expand-on-click-node="false"/>
         </div>
      </el-dropdown-menu>
    </el-dropdown>
  </div>
</template>

<script>
  import {
    pageMasterPlanAsync
  } from '@/api/schedule/masterPlan'

  export default {
    components: {},
    name: "inputTree",
    props: {
      showName: { //展示名称
        type: String,
      },
      placeholder: { //展示名称
        type: String,
        default: '请选择组织'
      },
      width: {
        type: String,
        default: '384px'
      }
    },
    created() {
      this.currentVal = this.showName;
    },
    watch: {
      showName: function (val) {
        this.currentVal = val;
      }
    },
    data() {
      return {
        currentVal: "",
        height: '360px',
        props: {
          label: 'name',
          children: 'zones',
          isLeaf: 'isLeaf'
        },
        treeData: [],
        treeLoading: true,
      }
    },
    methods: {
      handleNodeClick(data) {
        //点击节点后的回传点击的数据给上级组件
        this.currentVal = data.name;
        this.$emit('node-click', data)
        this.$refs.inputTreeDropdown.hide();
      },

      /* 加载树的子节点 */
      loadNode(node, resolve) {
        this.treeLoading = true;
        pageMasterPlanAsync({
          parentId: node.data.id
        }).then(response => {
          let data = response.data;
          for (let i = 0; i < data.length; i++) {
            data[i].isLeaf = !data[i].hasChildren;
          };
          this.treeLoading = false;
          return resolve(data);
        })
      },
    }
  }

</script>

采用lazy懒加载,数据回显由后台回传name,不显示具体层级 

欢迎讨论分享,知无不言,言无不尽

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

口天三告然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值