elementui Select选择器嵌套tree实现TreeSelect方式

 更新时间:2023年10月08日 14:46:09   作者:向钱看`向厚赚  
这篇文章主要介绍了elementui Select选择器嵌套tree实现TreeSelect方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

个人实现记录

  • 效果 可以设置默认要展开和勾选的状态
  • 点击select里的标签 关闭树形图对应的取消勾选效果

html

<el-select v-model="value1" multiple placeholder="请选择" @change="changeData">
      <el-option style="height:auto" :value="SelectedArray">
        <el-tree
          :data="dataList"
          show-checkbox
          node-key="id"
          ref="tree"
          :check-strictly="true"
          highlight-current
          :props="defaultProps"
          @check="checkClick"
          :default-expanded-keys="setkey"
          :default-expand-all="false"
        >
        </el-tree>
      </el-option>
    </el-select>
  • default-expand-all 是否默认展开所有节点
  • default-expanded-keys 默认展开的节点的 key 的数组
  • check 当复选框被点击的时候触发
  • -check-strictly 父子节点不相互关联
  • highlight-current 是否高亮当前选中节点,默认值是 false。

代码部分

 data () {
    return {
      setkey: [1], // 默认展开节点
      dateList: [], // 遍历用
      SelectedArray: [12, 13], // 选中的数组
      dataList: [
        {
          id: 1,
          name: '总公司',
          parent_id: null,
          parent_name: null,
          has_children: true,
          children: [
            {
              id: 2,
              name: '1xxxx部门',
              parent_id: 1,
              parent_name: '总公司',
              has_children: true,
              children: [
                {
                  id: 12,
                  name: 'x1x项目',
                  parent_id: 1,
                  parent_name: '1xxxx部门',
                  has_children: false,
                  children: []
                },
                {
                  id: 13,
                  name: 'x22222x项目',
                  parent_id: 2,
                  parent_name: '1xxxx部门',
                  has_children: true,
                  children: [
                    {
                      id: 19,
                      name: 'xxx',
                      parent_id: 13,
                      parent_name: 'x22222x项目',
                      has_children: false,
                      children: []
                    }
                  ]
                }
              ]
            },
            {
              id: 15,
              name: '管理办公室',
              parent_id: 1,
              parent_name: '总公司',
              has_children: false,
              children: []
            },
            {
              id: 16,
              name: '技术中心',
              parent_id: 1,
              parent_name: '总公司',
              has_children: false,
              children: []
            }
          ]
        }
      ], // tree数据
      value1: [], // select绑定的值
      // 对应的字段
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  },
<script>
// highlight-current是否高亮当前选中节点,默认值是 false。
  methods: {
    async getTreeData () {
      try {
        const {
          data: { data }
        } = await this.$http.get('http://localhost:8848/treeData')
        console.log(data)
        this.dataList = data.data_list
        console.log(this.dataList)
      } catch (error) {
        console.log(error)
      }
    },
    changeData (e) {
      console.log('选中改变的值', e, this.dateList)
      const setkey = []
      for (let index = 0; index < this.dateList.length; index++) {
        for (let index1 = 0; index1 < e.length; index1++) {
          if (this.dateList[index].name === e[index1]) {
            setkey.push(this.dateList[index].id)
          }
        }
      }
      console.log(setkey)
      this.setkey = setkey
      // 重新 设置tree
      this.$refs.tree.setCheckedKeys(this.setkey)
    },
    // 点击树形图复选框触发 
    checkClick (checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys) {
      //   console.log(checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys)
      //   点击了复选框 使用this.$refs.tree.getCheckedNodes获取当前选中的节点
      const res = this.$refs.tree.getCheckedNodes(false, true) // 这里两个true,1. 是否只是叶子节点 2. 是否包含半选节点(就是使得选择的时候不包含父节点)
      console.log('点击树形图获取当前选中的节点', res)
      this.dateList = res
      const labelArr = []
      const valueArr = []
      res.forEach((element, index) => {
        labelArr.push(element.name)
        valueArr.push(element.id)
      })
      this.value1 = labelArr // select显示的数据
      this.SelectedArray = valueArr // 我要发送给后端的数据
      console.log(this.value1, this.SelectedArray)
    }
  },
  created () {
  //获取tree数据  data里面写了
    // this.getTreeData() 
  },
  // 默认选中树形图的复选框  回显的操作
  mounted () {
    this.$refs.tree.setCheckedKeys(this.setkey)
  }
}
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vite基本常见的配置讲解

    vite基本常见的配置讲解

    这篇文章主要给大家介绍了关于vite基本常见配置讲解的相关资料,最近做项目要求将webpack打包方式换成vite,下面将详细讲解一下配置vite需要改动的东西,需要的朋友可以参考下
    2023-11-11
  • Vue使用font-face自定义字体的案例详解

    Vue使用font-face自定义字体的案例详解

    @font-face 是 CSS 中的一个规则,它允许你加载服务器上的字体文件(远程或者本地),并在网页中使用这些字体,本文给大家介绍了Vue使用font-face自定义字体的案例,并通过代码讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • vue3+vite多项目多模块打包(基于vite-plugin-html插件)

    vue3+vite多项目多模块打包(基于vite-plugin-html插件)

    这篇文章主要给大家介绍了关于vue3+vite基于vite-plugin-html插件实现多项目多模块打包的相关资料,现在很多小伙伴都已经使用Vite+Vue3开发项目了,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • vue父子组件之间的传参的几种方式小结

    vue父子组件之间的传参的几种方式小结

    本文主要介绍了vue父子组件之间的传参的几种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • vue使用docx-preview实现docx文件在线预览功能全过程

    vue使用docx-preview实现docx文件在线预览功能全过程

    文件在线预览是目前移动化办公的一种新趋势,下面这篇文章主要给大家介绍了关于vue docx-preview实现docx文件在线预览功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • vue.js购物车添加商品组件的方法

    vue.js购物车添加商品组件的方法

    这篇文章主要介绍了vue.js购物车添加商品组件的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • vite配置@别名以及让vscode智能提示路经的步骤

    vite配置@别名以及让vscode智能提示路经的步骤

    这篇文章主要给大家介绍了关于vite配置@别名以及让vscode智能提示路经的步骤,文中通过代码示例以及图文介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下
    2023-08-08
  • 在vue中获取dom元素内容的方法

    在vue中获取dom元素内容的方法

    本篇文章主要介绍了在vue中获取dom元素内容的方法,可以通过给标签加ref属性,这里整理了详细的代码,有兴趣的可以了解一下
    2017-07-07
  • 简单的Vue SSR的示例代码

    简单的Vue SSR的示例代码

    本篇文章主要介绍了简单的 Vue SSR的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 在Vue3中生成动态的word文档的示例代码

    在Vue3中生成动态的word文档的示例代码

    这篇文章主要介绍了如何在 Vue 3 中生成动态的 Word 文档,在开发过程中遇到一个需求,动态生成一个word报表,当时考虑了是前端做还是后端做的问题,最后发现两个解决需求的方法都大差不差,但考虑到前端少发一个请求,就此使用的前端来解决,需要的朋友可以参考下
    2024-09-09

最新评论