欢迎光临散文网 会员登陆 & 注册

el-select结合el-tree 并能够搜索

2022-05-08 22:51 作者:lanksi  | 我要投稿

别人的东西确实香

先贴代码

这个是页面的相关代码

<el-select
                   ref="select"
                   v-model="selectVal"
                   placeholder="请选择..."
                   size="mini"
                   clearable
                   style="width: 130px"
                 >
                   <!-- // 设置一个input框用作模糊搜索选项功能 -->
                   <el-input
                     v-model="treeFilter"
                     class="input"
                     placeholder="此处键入'关键词'搜索查询"
                     prefix-icon="el-icon-search"
                     size="mini"
                     style="padding: 5px"
                     clearable
                   />
                   <!-- // 设置一个隐藏的下拉选项,选项显示的是汉字label,值是value
       // 如果不设置一个下拉选项,下面的树形组件将无法正常使用 -->
                   <el-option key="id" hidden :value="selectVal" :label="selectName" />
                   <!-- // 设置树形控件 -->
                   <el-tree
                     ref="tree"
                     style="padding: 0px 10px 10px 0px"
                     :data="optionsMetaAll"
                     :props="defaultProps"
                     :expand-on-click-node="false"
                     :check-on-click-node="true"
                     node-key="id"
                     :default-expand-all="true"
                     :filter-node-method="filterNode"
                     @node-click="handleNodeClick"
                   >
                     <!-- // @node-click:树形控件选项点击事件
     // :expand-on-click-node:使树形控件只有点箭头图标的时候才会展开或者收缩节点,为false则点文字直接选中该项
     // :check-on-click-node:是否在点击节点的时候选中节点,当选项为复选框时有用,这个属性可以删除
     // :default-expand-all:默认展开所有节点
     // :filter-node-method:实现搜索功能的筛选方法 -->

                     <span slot-scope="{ data }">
                       <!-- //选项用插槽来显示,匹配搜索功能,并方便增加tag标签需求 -->
                       <span>{{ data.label }}</span>
                       <!-- <el-tag
                         v-show="filterorgType(data.tag)"
                         size="mini"
                         style="margin: 0 10px"
                       >{{ filterorgType(data.tag) }}</el-tag> -->
                     </span>
                   </el-tree>
                 </el-select>

这个是js中的代码

data() {
   return {
     temp: {},
     selectVal: '', // select框的绑定值
     selectName: '', // select框显示的name
     treeFilter: '', // 搜索框绑定值,用作过滤
     // 树形控件数据
     optionsMetaAll: [
       {
         id: '华成工控平台',
         label: '华成工控平台',
         value1: 1,
         value2: 2,
         children: [
           {
             id: '深圳市华成工业控制股份有限公司',
             value1: 1,
             value2: 2,
             label: '深圳市华成工业控制股份有限公司',
             isNew: true,
             children: [
               {
                 id: '研发部门',
                 value1: 3,
                 value2: 4,
                 label: '研发部门'
               },
               {
                 id: '市场部门',
                 value1: 6,
                 value2: 7,
                 label: '市场部门'
               },
               {
                 id: '测试部门',
                 value1: 8,
                 value2: 9,
                 label: '测试部门'
               },
               {
                 id: '财务部门',
                 value1: 10,
                 value2: 15,
                 label: '财务部门'
               },
               {
                 id: '运维部门',
                 value1: 0,
                 value2: 0,
                 label: '运维部门'
               }
             ]
           },
           {
             id: '郑州分公司',
             value1: 1,
             value2: 2,
             label: '郑州分公司',
             isNew: true,
             children: [
               {
                 id: '市场部门',
                 value1: 2,
                 value2: 2,
                 label: '市场部门'
               },
               {
                 id: '财务部门',
                 value1: 3,
                 value2: 4,
                 label: '财务部门'
               }
             ]
           }
         ]
       }
     ],
     defaultProps: {
       children: 'children',
       label: 'name'
     }
     // tagList: [
     //   { value: 'equipment', label: '设备' },
     //   { value: 'company', label: '公司' },
     //   { value: 'department', label: '部门' }
     // ]
   }
 },
 watch: {
   // 搜索过滤,监听input搜索框绑定的treeFilter
   treeFilter(val) {
     this.$refs.tree.filter(val)
     // 当搜索框键入值改变时,将该值作为入参执行树形控件的过滤事件filterNode
   }
 },
 methods: {
   // 结构树点击事件
   handleNodeClick(data) {
     this.temp = data
     console.log(data)
     this.selectVal = data.value // select绑定值为点击的选项的value
     this.selectName = data.label // input中显示值为label
     this.treeFilter = '' // 点击后搜索框清空
     this.$refs.select.blur() // 点击后关闭下拉框,因为点击树形控件后select不会自动折叠
   },
   // 模糊查询(搜索过滤),实质为筛选出树形控件中符合输入条件的选项,过滤掉其他选项
   filterNode(value, data) {
     if (!value) return true
     const filterRes = data.label.indexOf(value) !== -1
     return filterRes
   },
   changeTelescopic(data) {
     this.temp = data
     console.log(this.temp)
   }
   // 选项卡标签(可忽略,增值迭代需求)
   // filterorgType(val) {
   //   const arr = this.tagList.filter((item) => {
   //     return item.value === val
   //   })
   //   return arr.length ? arr[0].label : ''
   // }
 }

很好的解决了一些自适应的相关问题,确实比treeselect好用的多,确实要吸收一下里面的函数运用


el-select结合el-tree 并能够搜索的评论 (共 条)

分享到微博请遵守国家法律