Vue+Elementui el-tree树只能选择子节点并且支持检索功能

 更新时间:2024年12月03日 10:50:03   作者:沉默是金~  
这篇文章给大家介绍了Vue+Element UI el-tree树只能选择子节点并且支持检索的文章,通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

效果:

 只能选择子节点 添加配置

添加检索代码

源码:

<template>
  <div>
      <el-button  size="small" type="primary" clearable :disabled="disabled" @click="showSign">
        危险点评估
      </el-button>
    <!-- 规则绑定流程节点-->
    <el-dialog title="危险点评估" :visible.sync="show" v-if="show" width="700px" append-to-body>
      <el-form ref="formEvaluate" :model="formEvaluate"  label-width="80px">
        <el-form-item label="危险点">
          <el-input
            placeholder="输入关键字进行检索"
            clearable
            v-model="filterText">
          </el-input>
          <el-tree
            ref="Tree"
            :data="treeData"
            :show-checkbox="true"
            :check-strictly="true"
            node-key="id"
            default-expand-all
            :highlight-current="true"
            :expand-on-click-node="false"
            @node-click="nodeClick"
            :props="defaultProps"
            :check-on-click-node="true"
            @check="handleCheck"
            :filter-node-method="filterNode"
          >
              <span class="custom-tree-node" slot-scope="{ node, data }">
                <span>
                  <span class="custom-expand-icon" v-if="!data.children || data.children.length === 0">
                    <img src="@/assets/images/fl.png" class="icon" />
                  </span>
                  <span class="custom-expand-icon" v-else>
                    <img src="@/assets/images/home.png" class="icon" />
                  </span>
                  {{ data.treeName }}
                </span>
              </span>
          </el-tree>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="show = false">取 消</el-button>
        <el-button type="primary" @click="saveGz">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import Treeselect from '@riophae/vue-treeselect';
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
import { deptTreeSelect } from "@/api/system/user";
import { selectPcModelByTableZb } from '@/api/index-analysis/indicator-maintenance'
import { doubleTicketAppraise } from '@/api/flowable/definition'
export default {
  name: 'tsSelectTree',
  components: { Treeselect },
  props: {
    value: {
      default:''
    },
    conf: {
      type: Object
    },
    disabled: {}
  },
  data() {
    return {
      currentValue: undefined,
      filterText: '',
      options: [],
      list: [],
      loading: false,
      show:false,
      cache: [],
      input_val: this.value,
      object:this.conf,
      formEvaluate:{
        formName:null,
        formId:null,
        nodeId:null,
        nodeName:null,
        lcName:null,
        lcId:null,
        tableZbbmId:null,
        tableZbbmIds:[],
      },
      //规则数据
      treeData:[],
      //选中的数据json数组
      jsonData:[],
      evaluateArr:[],
      defaultProps: {
        children: "children",
        label: "label",
        disabled: function (data, node) {//带子级的节点不能选中
          if (data.children && data.children.length > 0) {
            return true
          } else {
            return false
          }
        }
      },
    }
  },
  watch: {
    value: {
      handler(val) {
        if (val !== this.currentValue) {
          if (this.multiple) {
            if (Object.prototype.toString.call(val) === '[object String]') {
              try {
                this.currentValue = JSON.parse(val)
              } catch (e) {
                this.currentValue = val.split(',')
              }
            }
            if (Object.prototype.toString.call(val) === '[object Array]') {
              this.currentValue = val
            }
          } else {
            this.currentValue = val || undefined
          }
        }
      },
      immediate: true,
      deep: true
    },
    currentValue() {
      this.$emit('input', this.currentValue)
      this.$emit('change', this.currentValue)
    },
    filterText(val) {
      this.$refs.Tree.filter(val);
    }
  },
  created() {
    this.getDate()
    const object = this.object
    this.getTreeList()
  },
  methods: {
    filterNode(value, data) {
      if (!value) return true;
      return data.treeName.indexOf(value) !== -1;
    },
    handleCheck(data,node){
      this.evaluateArr = node.checkedNodes
    },
    // 点击树节点 多选逻辑todo
    nodeClick(data,node, indeterminate) {
      if(node.childNodes.length > 0){
        return
      }
    },
    cancel(){
      this.show = false
    },
    showSign() {
      this.show = true;
    },
    // 节点单击事件
    handleNodeClick(data) {
      this.currentValue = data.label;
      sessionStorage.setItem('deptId',data.id)
      this.show = false
    },
    remoteMethod(query) {
      if (query !== '') {
        this.loading = true
        setTimeout(() => {
          this.getDate(query)
        }, 500)
      } else {
        this.options = this.cache
      }
    },
    getDate(query) {
      deptTreeSelect().then((response) => {
        // 获取树形的部门数据
        this.options = response.data;
        sessionStorage.setItem('deptInfo',this.options && JSON.stringify(this.options))
      });
    },
    getTreeList() {
      const params = {
        tableZb:'WXDPG'
      };
      selectPcModelByTableZb(params).then((response) => {
        this.treeData = response.data;
      });
    },
    saveGz(){
      this.formEvaluate.tableZbbmId = ''
      this.formEvaluate.tableZbbmIds = []
      const arr = this.evaluateArr
      if(this.evaluateArr.length ==0){
        this.$message.warning('请选择一条危险点')
        return
      }
    },
  }
}
</script>

到此这篇关于Vue+Elementui el-tree树只能选择子节点并且支持检索的文章就介绍到这了,更多相关Vue Elementui el-tree树选择子节点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中对象数组去重的实现

    vue中对象数组去重的实现

    这篇文章主要介绍了vue中对象数组去重的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • vue 循环动态设置ref并获取$refs方式

    vue 循环动态设置ref并获取$refs方式

    这篇文章主要介绍了vue 循环动态设置ref并获取$refs方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 详解vue3中虚拟列表组件的实现

    详解vue3中虚拟列表组件的实现

    这篇文章主要为大家详细介绍了vue3中实现虚拟列表组件的相关知识,包含加载更多以及loading状态,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-10-10
  • vue实现点击展开点击收起效果

    vue实现点击展开点击收起效果

    这篇文章主要介绍了vue实现点击展开,点击收起效果,首先我们需要定义data里面的数据,使用computed对data进行处理,需要的朋友可以参考下
    2018-04-04
  • Vue实现监听dom节点宽高变化方式

    Vue实现监听dom节点宽高变化方式

    这篇文章主要介绍了Vue实现监听dom节点宽高变化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue图片拖拉转放大缩小组件使用详解

    vue图片拖拉转放大缩小组件使用详解

    这篇文章主要为大家详细介绍了vue图片拖拉转放大缩小组件的使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Vue中渲染系统模块的实现详解

    Vue中渲染系统模块的实现详解

    想要实现一个简洁版的Mini-Vue框架,应该包含三个模块:分别是:渲染系统模块、可响应式系统模块、应用程序入库模块,本文主要介绍的是渲染系统模块的实现,需要的可以参考一下
    2023-07-07
  • vue控制滚动条滑到某个位置的方法实例

    vue控制滚动条滑到某个位置的方法实例

    当容器有滚动条时,有时需要将滚动条滑到某个位置,下面这篇文章主要给大家介绍了关于vue控制滚动条滑到某个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue中electron框架自定义外部配置文件的配置与读取办法

    vue中electron框架自定义外部配置文件的配置与读取办法

    使用Electron开发本地跨平台的本地程序时,有时需要添加一些程序的配置文件,下面这篇文章主要给大家介绍了关于vue中electron框架自定义外部配置文件的配置与读取的相关资料,需要的朋友可以参考下
    2023-12-12
  • vuex模块获取数据及方法的简单示例

    vuex模块获取数据及方法的简单示例

    Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,下面这篇文章主要给大家介绍了关于vuex模块获取数据及方法的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论