element自定义下拉框组件,使用el-input和el-tree封装下拉树

封装SelectTree下拉选择树

有时候我们需要再select中嵌套一个Tree组件,如下这样:
在这里插入图片描述
代码如下

<template>
    <div>
        <el-popover
            placement="bottom-start"
            v-model="popover"
            trigger="click"
            >
                <el-input style="width:220px" v-model="treeValue" @input="search" :debounce="debounce" slot="reference"></el-input>
                <el-scrollbar wrap-style="max-height: 300px;">
                      <el-tree 
                        accordion
                        v-model="treeValue"  
                        highlight-current
                        lazy
                        :load="loadNode"
                        :props="defaultProps"
                        :expand-on-click-node='false'
                        @node-click="handleNodeClick"></el-tree>
                  </el-scrollbar>
          </el-popover>
    </div>
</template>
<script>
export default {
   props:{
   },
    data(){
        return {
        popover:false,
        debounce:1000,
        treeValue:"",
        defaultProps: {
           children: 'children',
           label: 'managementGroupName', //元素显示的标签名
           isLeaf: 'leaf'  //判断是否有子节点的标准
           },
        firstValue:"",
        firstName:""
        }
    },
    methods:{
     //选择其中的元素按钮
      handleNodeClick(e) {  
      },
      search(){  //搜索
      },
      reset(){
      },
      handlerInput(e){
          this.hander=e?true:false;
      },
      loadNode(node, resolve) {
        //初始化
        if (node.level === 0) {//初始化默认数据第一层  此处做了动态加载
           return this.$axios.post(this.$url3.queryPartOrgTree).then(res=>{
            if(res.code=="success"){
                const selectData=[{  
                  managementGroupName:res.data.managementGroupName,
                  code:res.data.managementGroupCode
                }]
                this.firstName=this.treeValue=res.data.managementGroupName;
                this.firstValue=res.data.managementGroupCode;
                this.$emit("selectTree",res.data.managementGroupCode);
               resolve(selectData);//返回元素
            }
          })
        }
        //最多层级的限制
        if (node.level > 2) return resolve([]);
        //点击的层级进行判断
        if(node.data.managementGroupName=="总裁"){
           this.$axios.post(this.$url3.queryPartOrgTreeTwo+`?parentCode=${node.data.managementGroupCode}&&hierarchy=2`).then(res=>{
            if(res.code=='success'){
              resolve(res.data)
            }
         })
        }else if(node.data.managementGroupName.slice(-2)=="大区"||node.data.managementGroupName.slice(-3)=="管理组"){
         this.$axios.post(this.$url3.queryPartOrgTreeTwo+`?parentCode=${node.data.managementGroupCode}&&hierarchy=3`).then(res=>{
            if(res.code=='success'){
              const newData=[];
              res.data.map(item=>{
                 newData.push({managementGroupName:item.deptName,code:item.deptCode,leaf:true})
              })
              resolve(newData)
            }
         })
        }
      }
    }
}
</script>

以上是封装select的一种思想,代码不可以直接复制粘贴,需要把里面的接口返回的数据改成自己的,建议结合element中的el-Tree,和el-popover提示框的属性和方法,根据自己的需求进行封装

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 `el-checkbox-group` 组件来实现多选下拉框,具体步骤如下: 1. 在 `input` 元素中添加一个 `v-model` 绑定,用来绑定选中的值; 2. 在 `el-checkbox-group` 组件中,使用 `v-model` 绑定选中的值; 3. 在 `el-dropdown-menu` 中,使用 `el-checkbox-group` 组件来展示下拉选项。 下面是一个简单的示例代码: ```html <template> <div> <el-input v-model="selectedValues" placeholder="请选择" @click="showDropdown"></el-input> <el-dropdown :visible-arrow="false" ref="dropdown" @command="handleCommand"> <el-dropdown-menu slot="dropdown"> <el-checkbox-group v-model="selectedValues"> <el-checkbox label="选项一"></el-checkbox> <el-checkbox label="选项二"></el-checkbox> <el-checkbox label="选项三"></el-checkbox> </el-checkbox-group> </el-dropdown-menu> </el-dropdown> </div> </template> <script> export default { data() { return { selectedValues: [] }; }, methods: { showDropdown() { this.$refs.dropdown.show(); }, handleCommand() { // 处理选中的值 console.log(this.selectedValues); } } }; </script> ``` 在上面的示例中,我们使用了 `el-input` 组件来展示下拉框的选中值,`el-dropdown` 组件来展示下拉选项,`el-checkbox-group` 组件来实现多选功能。当点击 `el-input` 元素时,通过调用 `showDropdown` 方法来打开下拉选项,当选中一个或多个选项后,会自动更新 `selectedValues` 的值,我们可以在 `handleCommand` 方法中处理选中的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值